Skip to content

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

@donalffons

Description

@donalffons

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)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions