@@ -536,7 +536,7 @@ if(EMSCRIPTEN)
536536 # For the emscripten build we link against libbinaryen wih `--whole-archive`.
537537 # Without this, the EMSCRIPTEN_KEEPALIVE symbols within the library would
538538 # be ignored.
539- target_link_libraries (binaryen_wasm PRIVATE "$< LINK_LIBRARY : WHOLE_ARCHIVE , binaryen >" )
539+ target_link_libraries (binaryen_wasm PRIVATE binaryen )
540540 target_link_libraries (binaryen_wasm PRIVATE "-sFILESYSTEM" )
541541 target_link_libraries (binaryen_wasm PRIVATE "-sEXPORT_NAME=Binaryen" )
542542 target_link_libraries (binaryen_wasm PRIVATE "-sNODERAWFS=0" )
@@ -549,7 +549,13 @@ if(EMSCRIPTEN)
549549 endif ()
550550 target_link_libraries (binaryen_wasm PRIVATE "-sEXPORT_ES6" )
551551 target_link_libraries (binaryen_wasm PRIVATE "-sEXPORTED_RUNTIME_METHODS=stringToUTF8OnStack,stringToAscii" )
552- target_link_libraries (binaryen_wasm PRIVATE "-sEXPORTED_FUNCTIONS=_malloc,_free" )
552+ # Explictly export _i32_load to ensure the binaryen-c.cpp is linked in.
553+ # This is the file that contains all the EMSCRIPTEN_KEEPALIVE symbols which
554+ # we want to exports, but enless we explictly reference a symbol from it
555+ # the linker will ignore the whole library.
556+ # TODO(sbc): Replace with `LINK_LIBRARY:WHOLE_ARCHIVE` once we bump the min
557+ # cmake version 3.24.
558+ target_link_libraries (binaryen_wasm PRIVATE "-sEXPORTED_FUNCTIONS=_malloc,_free,__i32_load" )
553559 target_link_libraries (binaryen_wasm PRIVATE "--post-js=${CMAKE_CURRENT_SOURCE_DIR} /src/js/binaryen.js-post.js" )
554560 target_link_libraries (binaryen_wasm PRIVATE "-msign-ext" )
555561 target_link_libraries (binaryen_wasm PRIVATE "-mbulk-memory" )
@@ -567,7 +573,7 @@ if(EMSCRIPTEN)
567573
568574 # binaryen.js JavaScript variant
569575 add_executable (binaryen_js ${binaryen_HEADERS} )
570- target_link_libraries (binaryen_js PRIVATE "$< LINK_LIBRARY : WHOLE_ARCHIVE , binaryen >" )
576+ target_link_libraries (binaryen_js PRIVATE binaryen )
571577 target_link_libraries (binaryen_js PRIVATE "-sWASM=0" )
572578 target_link_libraries (binaryen_js PRIVATE "-sWASM_ASYNC_COMPILATION=0" )
573579
@@ -597,7 +603,7 @@ if(EMSCRIPTEN)
597603 target_link_libraries (binaryen_js PRIVATE "-sEXPORT_ES6=1" )
598604 endif ()
599605 target_link_libraries (binaryen_js PRIVATE "-sEXPORTED_RUNTIME_METHODS=stringToUTF8OnStack,stringToAscii" )
600- target_link_libraries (binaryen_js PRIVATE "-sEXPORTED_FUNCTIONS=_malloc,_free" )
606+ target_link_libraries (binaryen_js PRIVATE "-sEXPORTED_FUNCTIONS=_malloc,_free,__i32_load " )
601607 target_link_libraries (binaryen_js PRIVATE "--post-js=${CMAKE_CURRENT_SOURCE_DIR} /src/js/binaryen.js-post.js" )
602608 # js_of_ocaml needs a specified variable with special comment to provide the library to consumers
603609 if (JS_OF_OCAML)
0 commit comments