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.cpp18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/tools/wasm-emscripten-finalize.cpp b/src/tools/wasm-emscripten-finalize.cpp
index ea69cabbc..8a246e5d2 100644
--- a/src/tools/wasm-emscripten-finalize.cpp
+++ b/src/tools/wasm-emscripten-finalize.cpp
@@ -50,6 +50,8 @@ int main(int argc, const char* argv[]) {
bool legalizeJavaScriptFFI = true;
bool checkStackOverflow = false;
uint64_t globalBase = INVALID_BASE;
+ bool standaloneWasm = false;
+
ToolOptions options("wasm-emscripten-finalize",
"Performs Emscripten-specific transforms on .wasm files");
options
@@ -135,6 +137,14 @@ int main(int argc, const char* argv[]) {
[&checkStackOverflow](Options* o, const std::string&) {
checkStackOverflow = true;
})
+ .add("--standalone-wasm",
+ "",
+ "Emit a wasm file that does not depend on JS, as much as possible,"
+ " using wasi and other standard conventions etc. where possible",
+ Options::Arguments::Zero,
+ [&standaloneWasm](Options* o, const std::string&) {
+ standaloneWasm = true;
+ })
.add_positional("INFILE",
Options::Arguments::One,
[&infile](Options* o, const std::string& argument) {
@@ -233,7 +243,13 @@ int main(int argc, const char* argv[]) {
}
}
- generator.generateDynCallThunks();
+ if (standaloneWasm) {
+ // Export a standard wasi "_start" method.
+ generator.exportWasiStart();
+ } else {
+ // If not standalone wasm then JS is relevant and we need dynCalls.
+ generator.generateDynCallThunks();
+ }
// Legalize the wasm.
{