Export Emscripten runtime for the Web #509
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Some runtime environments look like Node.js, but are not Node.js which confuses Emscripten loader code. I'm talking about JavaScript bundlers that are used for Web and Electron apps. These things make the code believe that it can use
require()
for importing andmodule.exports
for exporting things, and expect this be the case.However, Emscripten believes that it is smarter, detects that it's not running in Node.js environment, and just uses
Module
for exports. This breaks bundler's expectation and various Emscripten runtime functions (likeallocate()
) end up not being exported, resulting in weird TypeErrors when WasmThemis code tries calling them.This can be avoided by exporting whatever Emscripten wants to export in Node.js style via "module.exports". We can insert this code into generated file by using
--pre-js
flag of emcc.Since now we have more than one file for Emscripten compilation, move them all into a subdirectory to keep the root directory tidy.