-
Notifications
You must be signed in to change notification settings - Fork 3.5k
Open
Description
We just upgraded from version 1.39.18 to 3.1.18 of emscripten and now the wasm cannot be loaded anymore node 14 as well as node 12. It works in node 16 and up. I'm totally clueless why emscripten suddenly produces wasm that cannot be used in node 14 or earlier.
Is there a way to disable atomics in emscripten?
I see that the atomics in my error are coming from the library re2, but this was exactly the same with emscripten@1.39.18 and this older version did not produce a wasm file with atomics in it. And obviously I cannot change external libraries.
Version of emscripten/emsdk:
emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 3.1.18 (d5ca9bba6513763d5bdddbd0efff759332bd85d7)
clang version 16.0.0 (https://github.com/llvm/llvm-project 48129cf0ed5053ed3fdf4f928180635e84892614)
Target: wasm32-unknown-emscripten
Thread model: posix
InstalledDir: /emsdk/upstream/bin
The error I'm getting is this when compiling with -g -sASSERTIONS:
RuntimeError: Aborted(CompileError: WebAssembly.instantiate(): Compiling function #1216:"re2::DFA::RunStateOnByte(re2::DFA::State*, int)" failed: Invalid opcode (enable with --experimental-wasm-threads) @+386207)
The cli calls:
export EMCC_CFLAGS="-O2 -s DEMANGLE_SUPPORT=1 -s ALLOW_MEMORY_GROWTH=1 -s WASM=1"
echo "Compiling wasm wrapper"
emcc -c -std=c++14 -g -sASSERTIONS\
-I include \
src/redirects.cc \
-o build/lib/redirects.bc
echo "Generating Javascript bindings"
emcc --bind -g -sASSERTIONS\
build/lib/redirects.bc \
lib/libnetlify-redirects.a \
lib/libcrypto.a \
lib/libre2.a \
lib/libssl.a \
-o build/lib/redirects.jsThis is how we build re2 (which uses atomics):
export EMCC_CFLAGS="-O2"
export CMAKE_CXX_FLAGS="-O2"
export CMAKE_C_FLAGS="-O2"
echo "Configuring RE2"
emcmake cmake -S /src/re2/ -B /tmp/build -DRE2_BUILD_TESTING=OFF
echo "Compiling RE2"
cmake --build /tmp/build -j $(nproc)Complete output with -v flag:
+ export 'EMCC_CFLAGS=-O2 -s DEMANGLE_SUPPORT=1 -s ALLOW_MEMORY_GROWTH=1 -s WASM=1'
+ EMCC_CFLAGS='-O2 -s DEMANGLE_SUPPORT=1 -s ALLOW_MEMORY_GROWTH=1 -s WASM=1'
+ echo 'Compiling wasm wrapper'
Compiling wasm wrapper
+ emcc -c -std=c++14 -g -v -sASSERTIONS -I include src/redirects.cc -o build/lib/redirects.bc
emcc: warning: linker setting ignored during compilation: 'ASSERTIONS' [-Wunused-command-line-argument]
emcc: warning: linker setting ignored during compilation: 'DEMANGLE_SUPPORT' [-Wunused-command-line-argument]
emcc: warning: linker setting ignored during compilation: 'ALLOW_MEMORY_GROWTH' [-Wunused-command-line-argument]
emcc: warning: linker setting ignored during compilation: 'WASM' [-Wunused-command-line-argument]
"/emsdk/upstream/bin/clang++" -target wasm32-unknown-emscripten -fignore-exceptions -fvisibility=default -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr -DEMSCRIPTEN -D__EMSCRIPTEN_major__=3 -D__EMSCRIPTEN_minor__=1 -D__EMSCRIPTEN_tiny__=18 -Werror=implicit-function-declaration -I/emsdk/upstream/emscripten/cache/sysroot/include/SDL --sysroot=/emsdk/upstream/emscripten/cache/sysroot -Xclang -iwithsysroot/include/compat -c -std=c++14 -g3 -v -Iinclude -O2 src/redirects.cc -o build/lib/redirects.bc
clang version 16.0.0 (https://github.com/llvm/llvm-project 48129cf0ed5053ed3fdf4f928180635e84892614)
Target: wasm32-unknown-emscripten
Thread model: posix
InstalledDir: /emsdk/upstream/bin
(in-process)
"/emsdk/upstream/bin/clang-16" -cc1 -triple wasm32-unknown-emscripten -emit-obj --mrelax-relocations -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name redirects.cc -mrelocation-model static -mframe-pointer=none -ffp-contract=on -fno-rounding-math -mconstructor-aliases -target-cpu generic -mllvm -treat-scalable-fixed-error-as-warning -debug-info-kind=constructor -dwarf-version=4 -debugger-tuning=gdb -v -fcoverage-compilation-dir=/src/node -resource-dir /emsdk/upstream/lib/clang/16.0.0 -D EMSCRIPTEN -D __EMSCRIPTEN_major__=3 -D __EMSCRIPTEN_minor__=1 -D __EMSCRIPTEN_tiny__=18 -I /emsdk/upstream/emscripten/cache/sysroot/include/SDL -I include -isysroot /emsdk/upstream/emscripten/cache/sysroot -internal-isystem /emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten/c++/v1 -internal-isystem /emsdk/upstream/emscripten/cache/sysroot/include/c++/v1 -internal-isystem /emsdk/upstream/lib/clang/16.0.0/include -internal-isystem /emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten -internal-isystem /emsdk/upstream/emscripten/cache/sysroot/include -O2 -Werror=implicit-function-declaration -std=c++14 -fdeprecated-macro -fdebug-compilation-dir=/src/node -ferror-limit 19 -fvisibility default -fgnuc-version=4.2.1 -fcxx-exceptions -fignore-exceptions -fexceptions -fcolor-diagnostics -vectorize-loops -vectorize-slp -iwithsysroot/include/compat -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr -o build/lib/redirects.bc -x c++ src/redirects.cc
clang -cc1 version 16.0.0 based upon LLVM 16.0.0git default target x86_64-unknown-linux-gnu
ignoring nonexistent directory "/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten/c++/v1"
ignoring nonexistent directory "/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten"
#include "..." search starts here:
#include <...> search starts here:
/emsdk/upstream/emscripten/cache/sysroot/include/SDL
include
/emsdk/upstream/emscripten/cache/sysroot/include/compat
/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1
/emsdk/upstream/lib/clang/16.0.0/include
/emsdk/upstream/emscripten/cache/sysroot/include
End of search list.
+ echo 'Generating Javascript bindings'
Generating Javascript bindings
+ emcc --bind -g -v -sASSERTIONS build/lib/redirects.bc lib/libnetlify-redirects.a lib/libcrypto.a lib/libre2.a lib/libssl.a -o build/lib/redirects.js
"/emsdk/upstream/bin/wasm-ld" -o build/lib/redirects.wasm build/lib/redirects.bc lib/libnetlify-redirects.a lib/libcrypto.a lib/libre2.a lib/libssl.a -L/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten --whole-archive -lembind-rtti --no-whole-archive -lGL -lal -lhtml5 -lstubs-debug -lnoexit -lc-debug -ldlmalloc -lcompiler_rt -lc++-noexcept -lc++abi-noexcept -lsockets -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr --import-undefined --export-if-defined=main --export-if-defined=__start_em_asm --export-if-defined=__stop_em_asm --export-if-defined=__main_argc_argv --export-if-defined=fflush --export=emscripten_stack_get_end --export=emscripten_stack_get_free --export=emscripten_stack_get_base --export=emscripten_stack_init --export=__cxa_demangle --export=stackSave --export=stackRestore --export=stackAlloc --export=__wasm_call_ctors --export=__errno_location --export=malloc --export=free --export=__cxa_is_pointer_type --export=ntohs --export=htons --export=emscripten_builtin_memalign --export-table -z stack-size=5242880 --initial-memory=16777216 --no-entry --max-memory=2147483648 --global-base=1024
"/emsdk/upstream/bin/wasm-emscripten-finalize" -g --dyncalls-i64 --dwarf build/lib/redirects.wasm -o build/lib/redirects.wasm --detect-features
"/emsdk/node/14.18.2_64bit/bin/node" /emsdk/upstream/emscripten/src/compiler.js /tmp/tmp2igkkjf6.json
emcc: warning: running limited binaryen optimizations because DWARF info requested (or indirectly required) [-Wlimited-postlink-optimizations]
"/emsdk/upstream/bin/wasm-opt" --post-emscripten -O2 --low-memory-unused --zero-filled-memory --strip-producers build/lib/redirects.wasm -o build/lib/redirects.wasm -g --mvp-features --enable-threads --enable-bulk-memory --enable-mutable-globals --enable-sign-ext
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels