summaryrefslogtreecommitdiff
path: root/src/tools
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools')
-rw-r--r--src/tools/tool-options.h29
-rw-r--r--src/tools/wasm-emscripten-finalize.cpp18
2 files changed, 24 insertions, 23 deletions
diff --git a/src/tools/tool-options.h b/src/tools/tool-options.h
index 5b09b8d23..6c2613407 100644
--- a/src/tools/tool-options.h
+++ b/src/tools/tool-options.h
@@ -60,19 +60,12 @@ struct ToolOptions : public Options {
disabledFeatures.makeMVP();
});
(*this)
- .addFeature("sign-ext", "sign extension operations",
- FeatureSet::SignExt)
- .addFeature("threads", "atomic operations",
- FeatureSet::Atomics)
- .addFeature("mutable-globals", "mutable globals",
- FeatureSet::MutableGlobals)
- .addFeature("nontrapping-float-to-int",
- "nontrapping float-to-int operations",
- FeatureSet::TruncSat)
- .addFeature("simd", "SIMD operations and types",
- FeatureSet::SIMD)
- .addFeature("bulk-memory", "bulk memory operations",
- FeatureSet::BulkMemory)
+ .addFeature(FeatureSet::SignExt, "sign extension operations")
+ .addFeature(FeatureSet::Atomics, "atomic operations")
+ .addFeature(FeatureSet::MutableGlobals, "mutable globals")
+ .addFeature(FeatureSet::TruncSat, "nontrapping float-to-int operations")
+ .addFeature(FeatureSet::SIMD, "SIMD operations and types")
+ .addFeature(FeatureSet::BulkMemory, "bulk memory operations")
.add("--no-validation", "-n",
"Disables validation, assumes inputs are correct",
Options::Arguments::Zero,
@@ -81,11 +74,11 @@ struct ToolOptions : public Options {
});
}
- ToolOptions& addFeature(const std::string& name,
- const std::string& description,
- FeatureSet::Feature feature) {
+ ToolOptions& addFeature(FeatureSet::Feature feature,
+ const std::string& description) {
+
(*this)
- .add(std::string("--enable-") + name, "",
+ .add(std::string("--enable-") + FeatureSet::toString(feature), "",
std::string("Enable ") + description, Arguments::Zero,
[=](Options*, const std::string&) {
hasFeatureOptions = true;
@@ -94,7 +87,7 @@ struct ToolOptions : public Options {
disabledFeatures.set(feature, false);
})
- .add(std::string("--disable-") + name, "",
+ .add(std::string("--disable-") + FeatureSet::toString(feature), "",
std::string("Disable ") + description, Arguments::Zero,
[=](Options*, const std::string&) {
hasFeatureOptions = true;
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;