Skip to content

Commit 1ed75b5

Browse files
authored
Revert use of LINK_LIBRARY:WHOLE_ARCHIVE (#8000)
This was recently added in #7994 but it turns out this is feature only available in 3.24 or above. Instead, we can fall back to explicit reference to one of the symbols we want to export.
1 parent 3286b6e commit 1ed75b5

1 file changed

Lines changed: 10 additions & 4 deletions

File tree

CMakeLists.txt

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)