diff options
Diffstat (limited to 'src/tools/asm2wasm.cpp')
-rw-r--r-- | src/tools/asm2wasm.cpp | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/src/tools/asm2wasm.cpp b/src/tools/asm2wasm.cpp index cf0715198..3fa97d981 100644 --- a/src/tools/asm2wasm.cpp +++ b/src/tools/asm2wasm.cpp @@ -36,6 +36,8 @@ int main(int argc, const char *argv[]) { bool legalizeJavaScriptFFI = true; Asm2WasmBuilder::TrapMode trapMode = Asm2WasmBuilder::TrapMode::JS; bool wasmOnly = false; + std::string sourceMapFilename; + std::string sourceMapUrl; std::string symbolMap; bool emitBinary = true; @@ -99,9 +101,15 @@ int main(int argc, const char *argv[]) { [&legalizeJavaScriptFFI](Options *o, const std::string &) { legalizeJavaScriptFFI = false; }) - .add("--debuginfo", "-g", "Emit names section and debug info (for debug info you must emit text, -S, for this to work)", + .add("--debuginfo", "-g", "Emit names section in wasm binary (or full debuginfo in wast)", Options::Arguments::Zero, [&](Options *o, const std::string &arguments) { options.passOptions.debugInfo = true; }) + .add("--source-map", "-sm", "Emit source map (if using binary output) to the specified file", + Options::Arguments::One, + [&sourceMapFilename](Options *o, const std::string &argument) { sourceMapFilename = argument; }) + .add("--source-map-url", "-su", "Use specified string as source map URL", + Options::Arguments::One, + [&sourceMapUrl](Options *o, const std::string &argument) { sourceMapUrl = argument; }) .add("--symbolmap", "-s", "Emit a symbol map (indexes => names)", Options::Arguments::One, [&](Options *o, const std::string &argument) { symbolMap = argument; }) @@ -136,8 +144,9 @@ int main(int argc, const char *argv[]) { } Asm2WasmPreProcessor pre; - // wasm binaries can contain a names section, but not full debug info - pre.debugInfo = options.passOptions.debugInfo && !emitBinary; + // wasm binaries can contain a names section, but not full debug info -- + // debug info is disabled if a map file is not specified with wasm binary + pre.debugInfo = options.passOptions.debugInfo && (!emitBinary || sourceMapFilename.size()); auto input( read_file<std::vector<char>>(options.extra["infile"], Flags::Text, options.debug ? Flags::Debug : Flags::Release)); char *start = pre.process(input.data()); @@ -204,6 +213,10 @@ int main(int argc, const char *argv[]) { writer.setDebugInfo(options.passOptions.debugInfo); writer.setSymbolMap(symbolMap); writer.setBinary(emitBinary); + if (emitBinary) { + writer.setSourceMapFilename(sourceMapFilename); + writer.setSourceMapUrl(sourceMapUrl); + } writer.write(wasm, options.extra["output"]); if (options.debug) std::cerr << "done." << std::endl; |