Skip to content

Commit 2f0bf1a

Browse files
committed
Add JSOO cmake patch
1 parent 3f5540c commit 2f0bf1a

File tree

2 files changed

+32
-4
lines changed

2 files changed

+32
-4
lines changed

CMakeLists.txt

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -403,14 +403,36 @@ if(EMSCRIPTEN)
403403
# only valid with fastcomp and WASM=0
404404
target_link_libraries(binaryen_js "-s ELIMINATE_DUPLICATE_FUNCTIONS=1")
405405
endif()
406-
target_link_libraries(binaryen_js "-s NO_FILESYSTEM=0")
406+
# Disabling filesystem and setting web environment for js_of_ocaml
407+
# so it doesn't try to detect the "node" environment
408+
if(JS_OF_OCAML)
409+
target_link_libraries(binaryen_js "-s NO_FILESYSTEM=1")
410+
target_link_libraries(binaryen_js "-s ENVIRONMENT=web,worker")
411+
else()
412+
target_link_libraries(binaryen_js "-s NO_FILESYSTEM=0")
413+
endif()
407414
target_link_libraries(binaryen_js "-s NODERAWFS=0")
408415
target_link_libraries(binaryen_js "-s EXPORT_NAME=Binaryen")
409-
target_link_libraries(binaryen_js "-s EXPORT_ES6=1")
416+
# Currently, js_of_ocaml can only process ES5 code
417+
if(JS_OF_OCAML)
418+
target_link_libraries(binaryen_js "-s EXPORT_ES6=0")
419+
else()
420+
target_link_libraries(binaryen_js "-s EXPORT_ES6=1")
421+
endif()
410422
target_link_libraries(binaryen_js "--post-js ${CMAKE_CURRENT_SOURCE_DIR}/src/js/binaryen.js-post.js")
411-
target_link_libraries(binaryen_js "--extern-pre-js ${CMAKE_CURRENT_SOURCE_DIR}/src/js/binaryen.js-extern-pre.js")
423+
# js_of_ocaml needs a specified variable with special comment to provide the library to consumers
424+
if(JS_OF_OCAML)
425+
target_link_libraries(binaryen_js "--extern-pre-js ${CMAKE_CURRENT_SOURCE_DIR}/src/js/binaryen.jsoo-extern-pre.js")
426+
else()
427+
target_link_libraries(binaryen_js "--extern-pre-js ${CMAKE_CURRENT_SOURCE_DIR}/src/js/binaryen.js-extern-pre.js")
428+
endif()
412429
target_link_libraries(binaryen_js optimized "--closure 1")
413-
target_link_libraries(binaryen_js optimized "--closure-args \"--language_in=ECMASCRIPT6 --language_out=ECMASCRIPT6\"")
430+
# Currently, js_of_ocaml can only process ES5 code
431+
if(JS_OF_OCAML)
432+
target_link_libraries(binaryen_js optimized "--closure-args \"--language_in=ECMASCRIPT6 --language_out=ECMASCRIPT5\"")
433+
else()
434+
target_link_libraries(binaryen_js optimized "--closure-args \"--language_in=ECMASCRIPT6 --language_out=ECMASCRIPT6\"")
435+
endif()
414436
target_link_libraries(binaryen_js optimized "-flto")
415437
target_link_libraries(binaryen_js debug "--profiling")
416438
target_link_libraries(binaryen_js debug "-s ASSERTIONS")

src/js/binaryen.jsoo-extern-pre.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
// js_of_ocaml needs a special syntax for exposing variables to the compiler
2+
// and it is not built for nodejs so we don't need the __dirname hack
3+
4+
//Provides: Binaryen
5+
var Binaryen = {};
6+

0 commit comments

Comments
 (0)