diff options
Diffstat (limited to 'src/wasm/wasm-emscripten.cpp')
-rw-r--r-- | src/wasm/wasm-emscripten.cpp | 19 |
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 |