emscripten-core / emscripten-core/emscripten

Support enabling native exception support at compile time and disabling it at link time

Open
#16,665 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
C++
Stars
27.6k
Forks
3.6k
Avg merge
1d 1h
Merged PRs (30d)
105

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](https://github.com/donalffons/opencascade.js). 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)
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.