koute / cargo-web

A Cargo subcommand for the client-side Web

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Cargo Web Emscripten build broken at emsdk latest (1.39.0)

bsurmanski opened this issue · comments

How to Reproduce:

  1. run emsdk install sdk-1.39.0-64bit && emsdk activate sdk-1.39.0-64bit && source emsdk_env.sh
  2. create a new rust binary with cargo new --bin simple && cd simple
  3. Add a Web.toml with emscripten target:
    default-target = "wasm32-unknown-emscripten"
  4. run cargo web build

Expected:
binary builds successfully.

Actual:
shared:ERROR: BINARYEN_TRAP_MODE is not supported by the LLVM wasm backend

Tested on OSX and Windows. Here's the full error on OSX
Here's the full error:


error: linking with `emcc` failed: exit code: 1
  |
  = note: "emcc" "-s" "DISABLE_EXCEPTION_CATCHING=0" "-L" "/Users/bsurmanski/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib" "/Users/bsurmanski/Projects/test/trivial/target/wasm32-unknown-emscripten/debug/deps/trivial.1vqt6uwforoetbuc.rcgu.o" "/Users/bsurmanski/Projects/test/trivial/target/wasm32-unknown-emscripten/debug/deps/trivial.2sp676utmh3oo7q1.rcgu.o" "/Users/bsurmanski/Projects/test/trivial/target/wasm32-unknown-emscripten/debug/deps/trivial.4f1fd368xhzfa8k6.rcgu.o" "/Users/bsurmanski/Projects/test/trivial/target/wasm32-unknown-emscripten/debug/deps/trivial.4sw0ac3bp1qhign3.rcgu.o" "/Users/bsurmanski/Projects/test/trivial/target/wasm32-unknown-emscripten/debug/deps/trivial.5a2z7woaydstya31.rcgu.o" "/Users/bsurmanski/Projects/test/trivial/target/wasm32-unknown-emscripten/debug/deps/trivial.juv0cq89rk7cc2l.rcgu.o" "-o" "/Users/bsurmanski/Projects/test/trivial/target/wasm32-unknown-emscripten/debug/deps/trivial.js" "-s" "EXPORTED_FUNCTIONS=[\"_main\",\"_rust_eh_personality\"]" "/Users/bsurmanski/Projects/test/trivial/target/wasm32-unknown-emscripten/debug/deps/trivial.4ye0t21hews176cc.rcgu.o" "-O0" "--memory-init-file" "0" "-g4" "-s" "DEFAULT_LIBRARY_FUNCS_TO_INCLUDE=[]" "-L" "/Users/bsurmanski/Projects/test/trivial/target/wasm32-unknown-emscripten/debug/deps" "-L" "/Users/bsurmanski/Projects/test/trivial/target/debug/deps" "-L" "/Users/bsurmanski/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib" "/Users/bsurmanski/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/libstd-f8f7eae2054e2da5.rlib" "/Users/bsurmanski/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/libpanic_unwind-5d3cd1b3ddab72e4.rlib" "/Users/bsurmanski/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/libbacktrace-f8222943dfd167e2.rlib" "/Users/bsurmanski/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/librustc_demangle-485c05ba6ce1b438.rlib" "/Users/bsurmanski/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/libhashbrown-63e6b1072426ba59.rlib" "/Users/bsurmanski/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/librustc_std_workspace_alloc-a421aff1d43911ee.rlib" "/Users/bsurmanski/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/libunwind-3deef8ef4fe80dff.rlib" "/Users/bsurmanski/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/libcfg_if-f65a176f0586269e.rlib" "/Users/bsurmanski/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/liblibc-ad46d4080f4d7e57.rlib" "/Users/bsurmanski/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/liballoc-da6c590582bf0885.rlib" "/Users/bsurmanski/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/librustc_std_workspace_core-837ca740df32db0a.rlib" "/Users/bsurmanski/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/libcore-db27c965e824589f.rlib" "/Users/bsurmanski/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/wasm32-unknown-emscripten/lib/libcompiler_builtins-68a4f8466685ed76.rlib" "-l" "c" "-s" "NO_EXIT_RUNTIME=1" "-s" "ALLOW_MEMORY_GROWTH=1" "-s" "BINARYEN=1" "-s" "ERROR_ON_UNDEFINED_SYMBOLS=1" "-s" "BINARYEN_TRAP_MODE=\'clamp\'"
  = note: cache:INFO: generating system asset: is_vanilla.txt... (this will be cached in "/Users/bsurmanski/.emscripten_cache/is_vanilla.txt" for subsequent builds)
          cache:INFO:  - ok
          shared:ERROR: BINARYEN_TRAP_MODE is not supported by the LLVM wasm backend

Note the "-s" "BINARYEN_TRAP_MODE=\'clamp\'" added to the very end of the command. This should probably be "-s" "BINARYEN_TRAP_MODE=\'allow\'".

Also note I tried setting "-s" "BINARYEN_TRAP_MODE=\'allow\'" via the Web.toml link flags, but it just passed both and failed as above.

Workaround: If you use the fastcomp SDK it appears to build successfully.
run emsdk install sdk-1.39.0-fastcomp-64bit && emsdk activate sdk-1.39.0-fastcomp-64bit && source emsdk_env.sh

Fixed in this commit: rust-lang/rust@2bf59be

It hasn't made it to stable or beta yet, but it's fixed on nightly.

Awesome, thanks!