Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 29 additions & 4 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@ option(BYN_ENABLE_ASSERTIONS "Enable assertions" ON)
# Turn this off to avoid the dependency on gtest.
option(BUILD_TESTS "Build GTest-based tests" ON)

# Turn this on to build binaryen.js as ES5, with additional compatibility configuration for js_of_ocaml.
option(JS_OF_OCAML "Build binaryen.js for js_of_ocaml" OFF)

# For git users, attempt to generate a more useful version string
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/.git)
find_package(Git QUIET REQUIRED)
Expand Down Expand Up @@ -403,14 +406,36 @@ if(EMSCRIPTEN)
# only valid with fastcomp and WASM=0
target_link_libraries(binaryen_js "-s ELIMINATE_DUPLICATE_FUNCTIONS=1")
endif()
target_link_libraries(binaryen_js "-s NO_FILESYSTEM=0")
# Disabling filesystem and setting web environment for js_of_ocaml
# so it doesn't try to detect the "node" environment
if(JS_OF_OCAML)
target_link_libraries(binaryen_js "-s NO_FILESYSTEM=1")
target_link_libraries(binaryen_js "-s ENVIRONMENT=web,worker")
else()
target_link_libraries(binaryen_js "-s NO_FILESYSTEM=0")
endif()
target_link_libraries(binaryen_js "-s NODERAWFS=0")
target_link_libraries(binaryen_js "-s EXPORT_NAME=Binaryen")
target_link_libraries(binaryen_js "-s EXPORT_ES6=1")
# Currently, js_of_ocaml can only process ES5 code
if(JS_OF_OCAML)
target_link_libraries(binaryen_js "-s EXPORT_ES6=0")
else()
target_link_libraries(binaryen_js "-s EXPORT_ES6=1")
endif()
target_link_libraries(binaryen_js "--post-js ${CMAKE_CURRENT_SOURCE_DIR}/src/js/binaryen.js-post.js")
target_link_libraries(binaryen_js "--extern-pre-js ${CMAKE_CURRENT_SOURCE_DIR}/src/js/binaryen.js-extern-pre.js")
# js_of_ocaml needs a specified variable with special comment to provide the library to consumers
if(JS_OF_OCAML)
target_link_libraries(binaryen_js "--extern-pre-js ${CMAKE_CURRENT_SOURCE_DIR}/src/js/binaryen.jsoo-extern-pre.js")
else()
target_link_libraries(binaryen_js "--extern-pre-js ${CMAKE_CURRENT_SOURCE_DIR}/src/js/binaryen.js-extern-pre.js")
endif()
target_link_libraries(binaryen_js optimized "--closure 1")
target_link_libraries(binaryen_js optimized "--closure-args \"--language_in=ECMASCRIPT6 --language_out=ECMASCRIPT6\"")
# Currently, js_of_ocaml can only process ES5 code
if(JS_OF_OCAML)
target_link_libraries(binaryen_js optimized "--closure-args \"--language_in=ECMASCRIPT6 --language_out=ECMASCRIPT5\"")
else()
target_link_libraries(binaryen_js optimized "--closure-args \"--language_in=ECMASCRIPT6 --language_out=ECMASCRIPT6\"")
endif()
target_link_libraries(binaryen_js optimized "-flto")
target_link_libraries(binaryen_js debug "--profiling")
target_link_libraries(binaryen_js debug "-s ASSERTIONS")
Expand Down
6 changes: 6 additions & 0 deletions src/js/binaryen.jsoo-extern-pre.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
// js_of_ocaml needs a special syntax for exposing variables to the compiler
// and it is not built for nodejs so we don't need the __dirname hack

//Provides: Binaryen
var Binaryen = {};