summaryrefslogtreecommitdiff
path: root/src/tools/wasm-emscripten-finalize.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/wasm-emscripten-finalize.cpp')
-rw-r--r--src/tools/wasm-emscripten-finalize.cpp30
1 files changed, 25 insertions, 5 deletions
diff --git a/src/tools/wasm-emscripten-finalize.cpp b/src/tools/wasm-emscripten-finalize.cpp
index 1d1ea2247..49f8beabf 100644
--- a/src/tools/wasm-emscripten-finalize.cpp
+++ b/src/tools/wasm-emscripten-finalize.cpp
@@ -58,6 +58,8 @@ int main(int argc, const char* argv[]) {
bool standaloneWasm = false;
// TODO: remove after https://github.com/WebAssembly/binaryen/issues/3043
bool minimizeWasmChanges = false;
+ bool noDynCalls = false;
+ bool onlyI64DynCalls = false;
ToolOptions options("wasm-emscripten-finalize",
"Performs Emscripten-specific transforms on .wasm files");
@@ -174,6 +176,18 @@ int main(int argc, const char* argv[]) {
[&minimizeWasmChanges](Options* o, const std::string&) {
minimizeWasmChanges = true;
})
+ .add("--no-dyncalls",
+ "",
+ "",
+ Options::Arguments::Zero,
+ [&noDynCalls](Options* o, const std::string&) { noDynCalls = true; })
+ .add("--dyncalls-i64",
+ "",
+ "",
+ Options::Arguments::Zero,
+ [&onlyI64DynCalls](Options* o, const std::string&) {
+ onlyI64DynCalls = true;
+ })
.add_positional("INFILE",
Options::Arguments::One,
[&infile](Options* o, const std::string& argument) {
@@ -231,9 +245,11 @@ int main(int argc, const char* argv[]) {
}
EmscriptenGlueGenerator generator(wasm);
- generator.setStandalone(standaloneWasm);
- generator.setSideModule(sideModule);
- generator.setMinimizeWasmChanges(minimizeWasmChanges);
+ generator.standalone = standaloneWasm;
+ generator.sideModule = sideModule;
+ generator.minimizeWasmChanges = minimizeWasmChanges;
+ generator.onlyI64DynCalls = onlyI64DynCalls;
+ generator.noDynCalls = noDynCalls;
generator.fixInvokeFunctionNames();
@@ -278,9 +294,13 @@ int main(int argc, const char* argv[]) {
passRunner.add("emscripten-pic-main-module");
}
- if (!standaloneWasm) {
+ if (!noDynCalls && !standaloneWasm) {
// If not standalone wasm then JS is relevant and we need dynCalls.
- passRunner.add("generate-dyncalls");
+ if (onlyI64DynCalls) {
+ passRunner.add("generate-i64-dyncalls");
+ } else {
+ passRunner.add("generate-dyncalls");
+ }
}
// Legalize the wasm, if BigInts don't make that moot.