emscripten-core / emscripten-core/emscripten
Proposal: one EXPORTS setting to rule them all
- Dominant language
- C++
- Stars
- 27.6k
- Forks
- 3.6k
- Avg merge
- 1d 1h
- Merged PRs (30d)
- 105
Description
**Background**: Right now to keep alive & export a compiled function one would use `EXPORTED_FUNCTIONS`, while to ensure a JS library function exists one would use `DEFAULT_LIBRARY_FUNCS_TO_INCLUDE`, and there is `EXPORTED_RUNTIME_METHODS` for exporting parts of the JS runtime. This is needlessly complex, and confusing since a C API may be implemented in either compiled code or a JS library, and currently you need to know which in order to properly include and export it.
**Proposal**:
* A new `EXPORTS` setting, which receives a list of things to ensure exist and are exported in the final output. These can be in compiled code, the JS library, or the JS runtime - the user doesn't need to know.
* Deprecate all the other relevant options (but still support them for backwards compatibility for a long time at least), namely `EXPORTED_FUNCTIONS`, `DEFAULT_LIBRARY_FUNCS_TO_INCLUDE`, `EXPORTED_RUNTIME_METHODS`.
* No `_` prefixing, like `EXPORTED_RUNTIME_METHODS` etc., and unlike `EXPORTED_FUNCTIONS`. This moves us further along the path to get us rid of the old prefixing annoyance.
For example, `-s EXPORTS=['main', 'emscripten_main_loop', 'AsciiToString']` would export a compiled function, a JS library function, and a runtime function, respectively (and note the lack of `_` prefixes).
Thoughts?
cc @juj @sbc100 @jgravelle-google @sbc100 @dschuff
Contributor guide
Assessment
This issue has not been assessed yet.