diff options
Diffstat (limited to 'src/tools/wasm-emscripten-finalize.cpp')
-rw-r--r-- | src/tools/wasm-emscripten-finalize.cpp | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/tools/wasm-emscripten-finalize.cpp b/src/tools/wasm-emscripten-finalize.cpp index 0ed0e0857..e39d9e2d6 100644 --- a/src/tools/wasm-emscripten-finalize.cpp +++ b/src/tools/wasm-emscripten-finalize.cpp @@ -23,8 +23,8 @@ #include "ir/trapping.h" #include "support/colors.h" -#include "support/command-line.h" #include "support/file.h" +#include "tool-options.h" #include "wasm-binary.h" #include "wasm-emscripten.h" #include "wasm-io.h" @@ -50,8 +50,8 @@ int main(int argc, const char *argv[]) { bool legalizeJavaScriptFFI = true; uint64_t globalBase = INVALID_BASE; uint64_t initialStackPointer = INVALID_BASE; - Options options("wasm-emscripten-finalize", - "Performs Emscripten-specific transforms on .wasm files"); + ToolOptions options("wasm-emscripten-finalize", + "Performs Emscripten-specific transforms on .wasm files"); options .add("--output", "-o", "Output file", Options::Arguments::One, @@ -130,6 +130,8 @@ int main(int argc, const char *argv[]) { Fatal() << "error in parsing wasm source map"; } + options.calculateFeatures(wasm); + if (options.debug) { std::cerr << "Module before:\n"; WasmPrinter::printModule(&wasm, std::cerr); @@ -204,12 +206,11 @@ int main(int argc, const char *argv[]) { legalizeJavaScriptFFI ? ABI::LegalizationLevel::Full : ABI::LegalizationLevel::Minimal )); - passRunner.add("strip-target-features"); passRunner.run(); } // Substantial changes to the wasm are done, enough to create the metadata. - std::string metadata = generator.generateEmscriptenMetadata(dataSize, initializerFunctions); + std::string metadata = generator.generateEmscriptenMetadata(dataSize, initializerFunctions, options.passOptions.features); // Finally, separate out data segments if relevant (they may have been needed // for metadata). @@ -226,6 +227,13 @@ int main(int argc, const char *argv[]) { WasmPrinter::printModule(&wasm, std::cerr); } + // Strip target features section (its information is in the metadata) + { + PassRunner passRunner(&wasm); + passRunner.add("strip-target-features"); + passRunner.run(); + } + auto outputBinaryFlag = emitBinary ? Flags::Binary : Flags::Text; Output output(outfile, outputBinaryFlag, Flags::Release); ModuleWriter writer; |