summaryrefslogtreecommitdiff
path: root/src/tools/wasm-emscripten-finalize.cpp
diff options
context:
space:
mode:
authorThomas Lively <7121787+tlively@users.noreply.github.com>2019-04-05 16:08:51 -0700
committerGitHub <noreply@github.com>2019-04-05 16:08:51 -0700
commitfc13d0f3585318ada789b9f27421e667056e9a84 (patch)
tree7d1056029e89823a8c2b291413f68bd4b5e6ed70 /src/tools/wasm-emscripten-finalize.cpp
parent2129cef6acbbe4acd5fd675fbb00c329e2220a40 (diff)
downloadbinaryen-fc13d0f3585318ada789b9f27421e667056e9a84.tar.gz
binaryen-fc13d0f3585318ada789b9f27421e667056e9a84.tar.bz2
binaryen-fc13d0f3585318ada789b9f27421e667056e9a84.zip
Add feature options to emscripten metadata (#1982)
Emscripten runs wasm-emscripten-finalize before running wasm-opt, so the target features section is stripped out before optimizations are run. One option would have been to add another wasm-opt invocation at the very end to strip the target features section, but dumping the features as metadata avoids the extra tool invocation. In the long run, it would be nice to have only as single binaryen invocation to do all the work that needs doing.
Diffstat (limited to 'src/tools/wasm-emscripten-finalize.cpp')
-rw-r--r--src/tools/wasm-emscripten-finalize.cpp18
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;