emscripten-core / emscripten

Emscripten: An LLVM-to-WebAssembly Compiler
Other
25.76k stars 3.3k forks source link

ERROR - [JSC_UNDEFINED_VARIABLE] variable runtimeKeepaliveCounter is undeclared #22783

Open eyebrowsoffire opened 1 day ago

eyebrowsoffire commented 1 day ago

I am building with TOT and I believe https://github.com/emscripten-core/emscripten/pull/22542 is causing a build failure for me:

building:ERROR: /var/folders/s1/hhcrhp756rdbjbgf81qqgd2000xtkc/T/emscripten_temp/skwasm_st.js.pgrow.jso4.js:768:2: ERROR - [JSC_UNDEFINED_VARIABLE] variable runtimeKeepaliveCounter is undeclared

I think the issue is that _emscripten_runtime_keepalive_clear in library.js is still attempting to use runtimeKeepaliveCounter but with the logic introduced in the linked PR, that variable is not part of the deps anymore in my build. We probably either need an explicit chain of deps for that function, or maybe an alternative version of this function that is just a no-op that doesn't use runtimeKeepaliveCounter at all.

I was able to workaround this issue by adding noExitRuntime to INCOMING_MODULE_JS_API

Version of emscripten/emsdk: emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 3.1.70-git (b53978ee3f540dc74761eba127aa7f1b8761a125) clang version 20.0.0git (https:/github.com/llvm/llvm-project 37832d5de2abb425c460375a4054478ce9f948fe) Target: wasm32-unknown-emscripten Thread model: posix InstalledDir: /Users/jacksongardner/Source/flutter/engine/src/flutter/prebuilts/emsdk/upstream/bin Build config: +assertions

Failing link command:

/Users/jacksongardner/Source/flutter/engine/src/flutter/prebuilts/emsdk/upstream/emscripten/em++.py -s EXPORT_NAME=skwasm -std=c++20 -lGL -sUSE_WEBGL2=1 -sMAX_WEBGL_VERSION=2 -sOFFSCREENCANVAS_SUPPORT -sALLOW_MEMORY_GROWTH -sALLOW_TABLE_GROWTH -lexports.js -sEXPORTED_FUNCTIONS=[stackAlloc] -sEXPORTED_RUNTIME_METHODS=[addFunction,wasmExports,wasmMemory,stackAlloc] -sSHARED_MEMORY=1 -sINCOMING_MODULE_JS_API=[instantiateWasm] --js-library /Users/jacksongardner/Source/flutter/engine/src/flutter/lib/web_ui/skwasm/library_skwasm_support.js -sPTHREAD_POOL_SIZE=1 -Wno-pthreads-mem-growth --js-library /Users/jacksongardner/Source/flutter/engine/src/flutter/lib/web_ui/skwasm/library_skwasm_multi_threaded.js --closure=1 -Wl,--fatal-warnings -pthread -s WASM=1 -s FORCE_FILESYSTEM=0 -s FILESYSTEM=0 -s NO_EXIT_RUNTIME=1 -s STRICT=1 -s MODULARIZE=1 -s EXPORT_ES6 --emit-symbol-map -Oz -Wl,--gc-sections -flto -o skwasm/skwasm.js -Wl,--start-group @skwasm/skwasm.js.rsp -Wl,--end-group -ldl

Failing closure command:

building:ERROR: /var/folders/s1/hhcrhp756rdbjbgf81qqgd2000xtkc/T/emscripten_temp/skwasm_st.js.pgrow.jso4.js:768:2: ERROR - [JSC_UNDEFINED_VARIABLE] variable runtimeKeepaliveCounter is undeclared
  768|   runtimeKeepaliveCounter = 0;
         ^^^^^^^^^^^^^^^^^^^^^^^

1 error(s), 0 warning(s)

em++: error: closure compiler failed (rc: 1): /Users/jacksongardner/Source/flutter/engine/src/flutter/prebuilts/emsdk/node/18.20.3_64bit/bin/node --max_old_space_size=8192 /Users/jacksongardner/Source/flutter/engine/src/flutter/prebuilts/emsdk/upstream/emscripten/node_modules/.bin/google-closure-compiler --compilation_level ADVANCED_OPTIMIZATIONS --language_in ECMASCRIPT_2021 --language_out NO_TRANSPILE --emit_use_strict=false --externs /Users/jacksongardner/Source/flutter/engine/src/flutter/prebuilts/emsdk/upstream/emscripten/src/closure-externs/closure-externs.js --externs /Users/jacksongardner/Source/flutter/engine/src/flutter/prebuilts/emsdk/upstream/emscripten/src/closure-externs/modularize-externs.js --externs /Users/jacksongardner/Source/flutter/engine/src/flutter/prebuilts/emsdk/upstream/emscripten/src/closure-externs/node-externs.js --externs /Users/jacksongardner/Source/flutter/engine/src/flutter/prebuilts/emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/net.js --externs /Users/jacksongardner/Source/flutter/engine/src/flutter/prebuilts/emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/events.js --externs /Users/jacksongardner/Source/flutter/engine/src/flutter/prebuilts/emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/repl.js --externs /Users/jacksongardner/Source/flutter/engine/src/flutter/prebuilts/emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/util.js --externs /Users/jacksongardner/Source/flutter/engine/src/flutter/prebuilts/emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/dgram.js --externs /Users/jacksongardner/Source/flutter/engine/src/flutter/prebuilts/emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/vm.js --externs /Users/jacksongardner/Source/flutter/engine/src/flutter/prebuilts/emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/stream.js --externs /Users/jacksongardner/Source/flutter/engine/src/flutter/prebuilts/emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/child_process.js --externs /Users/jacksongardner/Source/flutter/engine/src/flutter/prebuilts/emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/core.js --externs /Users/jacksongardner/Source/flutter/engine/src/flutter/prebuilts/emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/os.js --externs /Users/jacksongardner/Source/flutter/engine/src/flutter/prebuilts/emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/readline.js --externs /Users/jacksongardner/Source/flutter/engine/src/flutter/prebuilts/emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/punycode.js --externs /Users/jacksongardner/Source/flutter/engine/src/flutter/prebuilts/emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/https.js --externs /Users/jacksongardner/Source/flutter/engine/src/flutter/prebuilts/emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/domain.js --externs /Users/jacksongardner/Source/flutter/engine/src/flutter/prebuilts/emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/dns.js --externs /Users/jacksongardner/Source/flutter/engine/src/flutter/prebuilts/emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/tty.js --externs /Users/jacksongardner/Source/flutter/engine/src/flutter/prebuilts/emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/querystring.js --externs /Users/jacksongardner/Source/flutter/engine/src/flutter/prebuilts/emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/path.js --externs /Users/jacksongardner/Source/flutter/engine/src/flutter/prebuilts/emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/string_decoder.js --externs /Users/jacksongardner/Source/flutter/engine/src/flutter/prebuilts/emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/cluster.js --externs /Users/jacksongardner/Source/flutter/engine/src/flutter/prebuilts/emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/zlib.js --externs /Users/jacksongardner/Source/flutter/engine/src/flutter/prebuilts/emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/url.js --externs /Users/jacksongardner/Source/flutter/engine/src/flutter/prebuilts/emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/tls.js --externs /Users/jacksongardner/Source/flutter/engine/src/flutter/prebuilts/emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/process.js --externs /Users/jacksongardner/Source/flutter/engine/src/flutter/prebuilts/emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/http.js --externs /Users/jacksongardner/Source/flutter/engine/src/flutter/prebuilts/emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/buffer.js --externs /Users/jacksongardner/Source/flutter/engine/src/flutter/prebuilts/emsdk/upstream/emscripten/third_party/closure-compiler/node-externs/fs.js --js /var/folders/s1/hhcrhp756rdbjbgf81qqgd2000xtkc/T/emscripten_temp/skwasm_st.js.pgrow.jso4.js --js_output_file tmph4r95wxb.cc.js the error message may be clearer with -g1 and EMCC_DEBUG=2 set
sbc100 commented 1 day ago

Looks like we didn't catch this because it only occurs with --closure=1 + -O0, which I guess is a config without much test coverage.