-
Notifications
You must be signed in to change notification settings - Fork 3.5k
Description
This is a feature request and might be far more difficult than I image - but I wanted to share my use case with you.
It would be great if I could enable native WASM exception support at compile time, but then decide at link time that I don't actually need it and have Emscripten eliminate the unneeded code during link time.
Why?
I'm porting the OpenCascade CAD library to JS + Wasm. Since the finished build of the library is very large (>40 MB) and building it takes many hours, I am shipping a Docker Image that contains all pre-compiled object files. That Image can be used by developers to create "custom builds" via docker run, so that they can cherry-pick which object files to link together to create the final build output (i.e. a sort of manual tree-shaking).
It would be nice if I could allow developers to enable or disable exception support at link time, depending on if they need it in their project or not.
Currently, if I enable it at compile time and disable it at link time, I get the following errors:
2022-04-01T09:49:13.1955631Z wasm-ld: error: /opencascade.js/build/bindings/IMeshTools/IMeshTools_ModelAlgo.hxx/IMeshTools_ModelAlgo.cpp.o: undefined symbol: __wasm_lpad_context
2022-04-01T09:49:13.1956217Z wasm-ld: error: /opencascade.js/build/bindings/IMeshTools/IMeshTools_ModelAlgo.hxx/IMeshTools_ModelAlgo.cpp.o: undefined symbol: __wasm_lpad_context
2022-04-01T09:49:13.1957518Z wasm-ld: error: /opencascade.js/build/bindings/IMeshTools/IMeshTools_ModelAlgo.hxx/IMeshTools_ModelAlgo.cpp.o: undefined symbol: _Unwind_CallPersonality
2022-04-01T09:49:13.1958100Z wasm-ld: error: /opencascade.js/build/bindings/IMeshTools/IMeshTools_ModelAlgo.hxx/IMeshTools_ModelAlgo.cpp.o: undefined symbol: __wasm_lpad_context
2022-04-01T09:49:13.1958617Z wasm-ld: error: /opencascade.js/build/bindings/IMeshTools/IMeshTools_ModelAlgo.hxx/IMeshTools_ModelAlgo.cpp.o: undefined symbol: __wasm_lpad_context
2022-04-01T09:49:13.1959126Z wasm-ld: error: /opencascade.js/build/bindings/IMeshTools/IMeshTools_ModelAlgo.hxx/IMeshTools_ModelAlgo.cpp.o: undefined symbol: __wasm_lpad_context
2022-04-01T09:49:13.1959811Z wasm-ld: error: /opencascade.js/build/bindings/IMeshTools/IMeshTools_ModelAlgo.hxx/IMeshTools_ModelAlgo.cpp.o: undefined symbol: _Unwind_CallPersonality
2022-04-01T09:49:13.1962703Z wasm-ld: error: /opencascade.js/build/bindings/IMeshTools/IMeshTools_ModelAlgo.hxx/IMeshTools_ModelAlgo.cpp.o: undefined symbol: __wasm_lpad_context
2022-04-01T09:49:13.2390683Z wasm-ld: error: /opencascade.js/build/bindings/IMeshTools/IMeshTools_ModelAlgo.hxx/IMeshTools_ModelAlgo.cpp.o: undefined symbol: __wasm_lpad_context
2022-04-01T09:49:13.2391496Z wasm-ld: error: /opencascade.js/build/bindings/IMeshTools/IMeshTools_ModelAlgo.hxx/IMeshTools_ModelAlgo.cpp.o: undefined symbol: __wasm_lpad_context
2022-04-01T09:49:13.2392560Z wasm-ld: error: /opencascade.js/build/bindings/IMeshTools/IMeshTools_ModelAlgo.hxx/IMeshTools_ModelAlgo.cpp.o: undefined symbol: _Unwind_CallPersonality
2022-04-01T09:49:13.2393353Z wasm-ld: error: /opencascade.js/build/bindings/IMeshTools/IMeshTools_ModelAlgo.hxx/IMeshTools_ModelAlgo.cpp.o: undefined symbol: __wasm_lpad_context
2022-04-01T09:49:13.2394447Z wasm-ld: error: /opencascade.js/build/bindings/IMeshTools/IMeshTools_ModelAlgo.hxx/IMeshTools_ModelAlgo.cpp.o: undefined symbol: __wasm_lpad_context
2022-04-01T09:49:13.2395241Z wasm-ld: error: /opencascade.js/build/bindings/IMeshTools/IMeshTools_ModelAlgo.hxx/IMeshTools_ModelAlgo.cpp.o: undefined symbol: __wasm_lpad_context
2022-04-01T09:49:13.2396056Z wasm-ld: error: /opencascade.js/build/bindings/IMeshTools/IMeshTools_ModelAlgo.hxx/IMeshTools_ModelAlgo.cpp.o: undefined symbol: _Unwind_CallPersonality
2022-04-01T09:49:13.2396895Z wasm-ld: error: /opencascade.js/build/bindings/IMeshTools/IMeshTools_ModelAlgo.hxx/IMeshTools_ModelAlgo.cpp.o: undefined symbol: __wasm_lpad_context
2022-04-01T09:49:13.2400509Z wasm-ld: error: /opencascade.js/build/bindings/IMeshTools/IMeshTools_ModelAlgo.hxx/IMeshTools_ModelAlgo.cpp.o: undefined symbol: __wasm_lpad_context
2022-04-01T09:49:13.2401579Z wasm-ld: error: /opencascade.js/build/bindings/IMeshTools/IMeshTools_ModelAlgo.hxx/IMeshTools_ModelAlgo.cpp.o: undefined symbol: __wasm_lpad_context
2022-04-01T09:49:13.2402356Z wasm-ld: error: /opencascade.js/build/bindings/IMeshTools/IMeshTools_ModelAlgo.hxx/IMeshTools_ModelAlgo.cpp.o: undefined symbol: _Unwind_CallPersonality
2022-04-01T09:49:13.2402880Z wasm-ld: error: /opencascade.js/build/bindings/IMeshTools/IMeshTools_ModelAlgo.hxx/IMeshTools_ModelAlgo.cpp.o: undefined symbol: __wasm_lpad_context
2022-04-01T09:49:13.2403560Z wasm-ld: error: too many errors emitted, stopping now (use -error-limit=0 to see all errors)
2022-04-01T09:49:13.3699824Z emcc: error: '/emsdk/upstream/bin/wasm-ld @/tmp/emscripten_71dyeo4d.rsp.utf-8' failed (returned 1)