summaryrefslogtreecommitdiff
path: root/src/wasm/wasm-emscripten.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/wasm/wasm-emscripten.cpp')
-rw-r--r--src/wasm/wasm-emscripten.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/wasm/wasm-emscripten.cpp b/src/wasm/wasm-emscripten.cpp
index 978afa296..3aa6f5647 100644
--- a/src/wasm/wasm-emscripten.cpp
+++ b/src/wasm/wasm-emscripten.cpp
@@ -22,6 +22,7 @@
#include "asmjs/shared-constants.h"
#include "ir/function-type-utils.h"
#include "ir/import-utils.h"
+#include "ir/literal-utils.h"
#include "ir/module-utils.h"
#include "shared-constants.h"
#include "wasm-builder.h"
@@ -1210,4 +1211,22 @@ void EmscriptenGlueGenerator::separateDataSegments(Output* outfile,
wasm.memory.segments.clear();
}
+void EmscriptenGlueGenerator::exportWasiStart() {
+ // If main exists, export a function to call it per the wasi standard.
+ Name main = "main";
+ if (!wasm.getFunctionOrNull(main)) {
+ return;
+ }
+ Name _start = "_start";
+ Builder builder(wasm);
+ auto* body = builder.makeDrop(builder.makeCall(
+ main,
+ {LiteralUtils::makeZero(i32, wasm), LiteralUtils::makeZero(i32, wasm)},
+ i32));
+ auto* func =
+ builder.makeFunction(_start, std::vector<wasm::Type>{}, none, {}, body);
+ wasm.addFunction(func);
+ wasm.addExport(builder.makeExport(_start, _start, ExternalKind::Function));
+}
+
} // namespace wasm