emscripten-core / emscripten

Emscripten: An LLVM-to-WebAssembly Compiler
Other
25.37k stars 3.25k forks source link

-s SINGLE_FILE=1 with -sWASM_WORKERS=1 results in `KeyError: 'libwasm_workers'` #22175

Open patrick99e99 opened 2 days ago

patrick99e99 commented 2 days ago

Please include the following in your bug report:

Version of emscripten/emsdk:

emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 3.1.61 (67fa4c16496b157a7fc3377afd69ee0445e8a6e3)

Failing command line in full:

emcc *.cpp -o emulator/emulator.js -sAUDIO_WORKLET=1 -sWASM_WORKERS=1 -sSINGLE_FILE=1 -sEXPORTED_FUNCTIONS=_speakLPC,_stopSpeaking,_main,_malloc,_free -sEXPORTED_RUNTIME_METHODS=ccall,cwrap,callMain,addFunction,removeFunction -sEXPORT_ES6=1 -sMODULARIZE=1 -sALLOW_MEMORY_GROWTH=1 -sALLOW_TABLE_GROWTH=1

Full link command and output with -v appended:

emcc -v *.cpp -o emulator/emulator.js -sAUDIO_WORKLET=1 -sWASM_WORKERS=1 -sSINGLE_FILE=1 -sEXPORTED_FUNCTIONS=_speakLPC,_stopSpeaking,_main,_malloc,_free -sEXPORTED_RUNTIME_METHODS=ccall,cwrap,callMain,addFunction,removeFunction -sEXPORT_ES6=1 -sMODULARIZE=1 -sALLOW_MEMORY_GROWTH=1 -sALLOW_TABLE_GROWTH=1
 /Users/patrick/coding/webassembly/emsdk/upstream/bin/clang -target wasm32-unknown-emscripten -fignore-exceptions -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr --sysroot=/Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot -D__EMSCRIPTEN_SHARED_MEMORY__=1 -D__EMSCRIPTEN_WASM_WORKERS__=1 -DEMSCRIPTEN -Werror=implicit-function-declaration -Xclang -iwithsysroot/include/fakesdl -Xclang -iwithsysroot/include/compat -v -matomics -mbulk-memory emulator.cpp -c -o /var/folders/sv/1ks0jbd12nz_z0g9qwy6t2w00000gn/T/emscripten_temp_2xy0ibm_/emulator_0.o
clang version 19.0.0git (https:/github.com/llvm/llvm-project 7cfffe74eeb68fbb3fb9706ac7071f8caeeb6520)
Target: wasm32-unknown-emscripten
Thread model: posix
InstalledDir: /Users/patrick/coding/webassembly/emsdk/upstream/bin
 (in-process)
 "/Users/patrick/coding/webassembly/emsdk/upstream/bin/clang-19" -cc1 -triple wasm32-unknown-emscripten -emit-obj -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name emulator.cpp -mrelocation-model static -mframe-pointer=none -ffp-contract=on -fno-rounding-math -mconstructor-aliases -target-cpu generic -target-feature +atomics -target-feature +bulk-memory -fvisibility=hidden -debugger-tuning=gdb -fdebug-compilation-dir=/Users/patrick/coding/webassembly/tms5220 -v -fcoverage-compilation-dir=/Users/patrick/coding/webassembly/tms5220 -resource-dir /Users/patrick/coding/webassembly/emsdk/upstream/lib/clang/19 -D __EMSCRIPTEN_SHARED_MEMORY__=1 -D __EMSCRIPTEN_WASM_WORKERS__=1 -D EMSCRIPTEN -isysroot /Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot -internal-isystem /Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten/c++/v1 -internal-isystem /Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1 -internal-isystem /Users/patrick/coding/webassembly/emsdk/upstream/lib/clang/19/include -internal-isystem /Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten -internal-isystem /Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot/include -Werror=implicit-function-declaration -fdeprecated-macro -ferror-limit 19 -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fcxx-exceptions -fignore-exceptions -fexceptions -fcolor-diagnostics -iwithsysroot/include/fakesdl -iwithsysroot/include/compat -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr -o /var/folders/sv/1ks0jbd12nz_z0g9qwy6t2w00000gn/T/emscripten_temp_2xy0ibm_/emulator_0.o -x c++ emulator.cpp
clang -cc1 version 19.0.0git based upon LLVM 19.0.0git default target x86_64-apple-darwin21.5.0
ignoring nonexistent directory "/Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten/c++/v1"
ignoring nonexistent directory "/Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten"
#include "..." search starts here:
#include <...> search starts here:
 /Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot/include/fakesdl
 /Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot/include/compat
 /Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1
 /Users/patrick/coding/webassembly/emsdk/upstream/lib/clang/19/include
 /Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot/include
End of search list.
 /Users/patrick/coding/webassembly/emsdk/upstream/bin/clang -target wasm32-unknown-emscripten -fignore-exceptions -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr --sysroot=/Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot -D__EMSCRIPTEN_SHARED_MEMORY__=1 -D__EMSCRIPTEN_WASM_WORKERS__=1 -DEMSCRIPTEN -Werror=implicit-function-declaration -Xclang -iwithsysroot/include/fakesdl -Xclang -iwithsysroot/include/compat -v -matomics -mbulk-memory speech_synthesizer.cpp -c -o /var/folders/sv/1ks0jbd12nz_z0g9qwy6t2w00000gn/T/emscripten_temp_2xy0ibm_/speech_synthesizer_1.o
clang version 19.0.0git (https:/github.com/llvm/llvm-project 7cfffe74eeb68fbb3fb9706ac7071f8caeeb6520)
Target: wasm32-unknown-emscripten
Thread model: posix
InstalledDir: /Users/patrick/coding/webassembly/emsdk/upstream/bin
 (in-process)
 "/Users/patrick/coding/webassembly/emsdk/upstream/bin/clang-19" -cc1 -triple wasm32-unknown-emscripten -emit-obj -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name speech_synthesizer.cpp -mrelocation-model static -mframe-pointer=none -ffp-contract=on -fno-rounding-math -mconstructor-aliases -target-cpu generic -target-feature +atomics -target-feature +bulk-memory -fvisibility=hidden -debugger-tuning=gdb -fdebug-compilation-dir=/Users/patrick/coding/webassembly/tms5220 -v -fcoverage-compilation-dir=/Users/patrick/coding/webassembly/tms5220 -resource-dir /Users/patrick/coding/webassembly/emsdk/upstream/lib/clang/19 -D __EMSCRIPTEN_SHARED_MEMORY__=1 -D __EMSCRIPTEN_WASM_WORKERS__=1 -D EMSCRIPTEN -isysroot /Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot -internal-isystem /Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten/c++/v1 -internal-isystem /Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1 -internal-isystem /Users/patrick/coding/webassembly/emsdk/upstream/lib/clang/19/include -internal-isystem /Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten -internal-isystem /Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot/include -Werror=implicit-function-declaration -fdeprecated-macro -ferror-limit 19 -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fcxx-exceptions -fignore-exceptions -fexceptions -fcolor-diagnostics -iwithsysroot/include/fakesdl -iwithsysroot/include/compat -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr -o /var/folders/sv/1ks0jbd12nz_z0g9qwy6t2w00000gn/T/emscripten_temp_2xy0ibm_/speech_synthesizer_1.o -x c++ speech_synthesizer.cpp
clang -cc1 version 19.0.0git based upon LLVM 19.0.0git default target x86_64-apple-darwin21.5.0
ignoring nonexistent directory "/Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten/c++/v1"
ignoring nonexistent directory "/Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten"
#include "..." search starts here:
#include <...> search starts here:
 /Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot/include/fakesdl
 /Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot/include/compat
 /Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1
 /Users/patrick/coding/webassembly/emsdk/upstream/lib/clang/19/include
 /Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot/include
End of search list.
 /Users/patrick/coding/webassembly/emsdk/upstream/bin/clang -target wasm32-unknown-emscripten -fignore-exceptions -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr --sysroot=/Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot -D__EMSCRIPTEN_SHARED_MEMORY__=1 -D__EMSCRIPTEN_WASM_WORKERS__=1 -DEMSCRIPTEN -Werror=implicit-function-declaration -Xclang -iwithsysroot/include/fakesdl -Xclang -iwithsysroot/include/compat -v -matomics -mbulk-memory tms5220.cpp -c -o /var/folders/sv/1ks0jbd12nz_z0g9qwy6t2w00000gn/T/emscripten_temp_2xy0ibm_/tms5220_2.o
clang version 19.0.0git (https:/github.com/llvm/llvm-project 7cfffe74eeb68fbb3fb9706ac7071f8caeeb6520)
Target: wasm32-unknown-emscripten
Thread model: posix
InstalledDir: /Users/patrick/coding/webassembly/emsdk/upstream/bin
 (in-process)
 "/Users/patrick/coding/webassembly/emsdk/upstream/bin/clang-19" -cc1 -triple wasm32-unknown-emscripten -emit-obj -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name tms5220.cpp -mrelocation-model static -mframe-pointer=none -ffp-contract=on -fno-rounding-math -mconstructor-aliases -target-cpu generic -target-feature +atomics -target-feature +bulk-memory -fvisibility=hidden -debugger-tuning=gdb -fdebug-compilation-dir=/Users/patrick/coding/webassembly/tms5220 -v -fcoverage-compilation-dir=/Users/patrick/coding/webassembly/tms5220 -resource-dir /Users/patrick/coding/webassembly/emsdk/upstream/lib/clang/19 -D __EMSCRIPTEN_SHARED_MEMORY__=1 -D __EMSCRIPTEN_WASM_WORKERS__=1 -D EMSCRIPTEN -isysroot /Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot -internal-isystem /Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten/c++/v1 -internal-isystem /Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1 -internal-isystem /Users/patrick/coding/webassembly/emsdk/upstream/lib/clang/19/include -internal-isystem /Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten -internal-isystem /Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot/include -Werror=implicit-function-declaration -fdeprecated-macro -ferror-limit 19 -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fcxx-exceptions -fignore-exceptions -fexceptions -fcolor-diagnostics -iwithsysroot/include/fakesdl -iwithsysroot/include/compat -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr -o /var/folders/sv/1ks0jbd12nz_z0g9qwy6t2w00000gn/T/emscripten_temp_2xy0ibm_/tms5220_2.o -x c++ tms5220.cpp
clang -cc1 version 19.0.0git based upon LLVM 19.0.0git default target x86_64-apple-darwin21.5.0
ignoring nonexistent directory "/Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten/c++/v1"
ignoring nonexistent directory "/Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten"
#include "..." search starts here:
#include <...> search starts here:
 /Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot/include/fakesdl
 /Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot/include/compat
 /Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1
 /Users/patrick/coding/webassembly/emsdk/upstream/lib/clang/19/include
 /Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot/include
End of search list.
 /Users/patrick/coding/webassembly/emsdk/upstream/bin/clang -target wasm32-unknown-emscripten -fignore-exceptions -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr --sysroot=/Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot -D__EMSCRIPTEN_SHARED_MEMORY__=1 -D__EMSCRIPTEN_WASM_WORKERS__=1 -DEMSCRIPTEN -Werror=implicit-function-declaration -Xclang -iwithsysroot/include/fakesdl -Xclang -iwithsysroot/include/compat -v -matomics -mbulk-memory web_audio_worklet.cpp -c -o /var/folders/sv/1ks0jbd12nz_z0g9qwy6t2w00000gn/T/emscripten_temp_2xy0ibm_/web_audio_worklet_3.o
clang version 19.0.0git (https:/github.com/llvm/llvm-project 7cfffe74eeb68fbb3fb9706ac7071f8caeeb6520)
Target: wasm32-unknown-emscripten
Thread model: posix
InstalledDir: /Users/patrick/coding/webassembly/emsdk/upstream/bin
 (in-process)
 "/Users/patrick/coding/webassembly/emsdk/upstream/bin/clang-19" -cc1 -triple wasm32-unknown-emscripten -emit-obj -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name web_audio_worklet.cpp -mrelocation-model static -mframe-pointer=none -ffp-contract=on -fno-rounding-math -mconstructor-aliases -target-cpu generic -target-feature +atomics -target-feature +bulk-memory -fvisibility=hidden -debugger-tuning=gdb -fdebug-compilation-dir=/Users/patrick/coding/webassembly/tms5220 -v -fcoverage-compilation-dir=/Users/patrick/coding/webassembly/tms5220 -resource-dir /Users/patrick/coding/webassembly/emsdk/upstream/lib/clang/19 -D __EMSCRIPTEN_SHARED_MEMORY__=1 -D __EMSCRIPTEN_WASM_WORKERS__=1 -D EMSCRIPTEN -isysroot /Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot -internal-isystem /Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten/c++/v1 -internal-isystem /Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1 -internal-isystem /Users/patrick/coding/webassembly/emsdk/upstream/lib/clang/19/include -internal-isystem /Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten -internal-isystem /Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot/include -Werror=implicit-function-declaration -fdeprecated-macro -ferror-limit 19 -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fcxx-exceptions -fignore-exceptions -fexceptions -fcolor-diagnostics -iwithsysroot/include/fakesdl -iwithsysroot/include/compat -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr -o /var/folders/sv/1ks0jbd12nz_z0g9qwy6t2w00000gn/T/emscripten_temp_2xy0ibm_/web_audio_worklet_3.o -x c++ web_audio_worklet.cpp
clang -cc1 version 19.0.0git based upon LLVM 19.0.0git default target x86_64-apple-darwin21.5.0
ignoring nonexistent directory "/Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten/c++/v1"
ignoring nonexistent directory "/Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten"
#include "..." search starts here:
#include <...> search starts here:
 /Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot/include/fakesdl
 /Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot/include/compat
 /Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1
 /Users/patrick/coding/webassembly/emsdk/upstream/lib/clang/19/include
 /Users/patrick/coding/webassembly/emsdk/upstream/emscripten/cache/sysroot/include
End of search list.
 /Users/patrick/coding/webassembly/emsdk/upstream/bin/clang --version
Traceback (most recent call last):
  File "/Users/patrick/coding/webassembly/emsdk/upstream/emscripten/emcc.py", line 1602, in <module>
    sys.exit(main(sys.argv))
             ^^^^^^^^^^^^^^
  File "/opt/homebrew/Cellar/python@3.12/3.12.2_1/Frameworks/Python.framework/Versions/3.12/lib/python3.12/contextlib.py", line 81, in inner
    return func(*args, **kwds)
           ^^^^^^^^^^^^^^^^^^^
  File "/Users/patrick/coding/webassembly/emsdk/upstream/emscripten/emcc.py", line 1595, in main
    ret = run(args)
          ^^^^^^^^^
  File "/Users/patrick/coding/webassembly/emsdk/upstream/emscripten/emcc.py", line 660, in run
    return link.run(linker_inputs, options, state, newargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/patrick/coding/webassembly/emsdk/upstream/emscripten/tools/link.py", line 3065, in run
    phase_calculate_system_libraries(linker_arguments, newargs)
  File "/opt/homebrew/Cellar/python@3.12/3.12.2_1/Frameworks/Python.framework/Versions/3.12/lib/python3.12/contextlib.py", line 81, in inner
    return func(*args, **kwds)
           ^^^^^^^^^^^^^^^^^^^
  File "/Users/patrick/coding/webassembly/emsdk/upstream/emscripten/tools/link.py", line 1828, in phase_calculate_system_libraries
    extra_files_to_link += system_libs.calculate(newargs)
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/patrick/coding/webassembly/emsdk/upstream/emscripten/tools/system_libs.py", line 2398, in calculate
    libs_to_link = get_libs_to_link(args)
                   ^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/patrick/coding/webassembly/emsdk/upstream/emscripten/tools/system_libs.py", line 2380, in get_libs_to_link
    add_library('libwasm_workers')
  File "/Users/patrick/coding/webassembly/emsdk/upstream/emscripten/tools/system_libs.py", line 2269, in add_library
    lib = system_libs_map[libname]
          ~~~~~~~~~~~~~~~^^^^^^^^^
KeyError: 'libwasm_workers'
make: *** [build] Error 1
Note:  Where possible, please avoid attaching screen shots of code or console
logs.  Instead, please include them as text so that they may be copied /
searched.  To make code blocks more readable and syntax highlighted, please
escape them with three backticks before and after, like this:
sbc100 commented 2 days ago

It looks like that combination of flags is not allowed: https://github.com/emscripten-core/emscripten/blob/74ada8315172abe32db7b475f52e5e2612dfbc9b/src/library_wasm_worker.js#L22-L24

However, the compiler should not crash so we should fix that.