@@ -30,6 +30,8 @@ using namespace wasm;
3030int main (int argc, const char *argv[]) {
3131 bool debugInfo = false ;
3232 std::string symbolMap;
33+ std::string binaryMapFilename;
34+ std::string binaryMapUrl;
3335 Options options (" wasm-as" , " Assemble a .wast (WebAssembly text format) into a .wasm (WebAssembly binary format)" );
3436 options.extra [" validate" ] = " wasm" ;
3537 options
@@ -51,6 +53,12 @@ int main(int argc, const char *argv[]) {
5153 .add (" --debuginfo" , " -g" , " Emit names section and debug info" ,
5254 Options::Arguments::Zero,
5355 [&](Options *o, const std::string &arguments) { debugInfo = true ; })
56+ .add (" --binarymap-file" , " -bm" , " Emit binary map to the specified file" ,
57+ Options::Arguments::One,
58+ [&binaryMapFilename](Options *o, const std::string &argument) { binaryMapFilename = argument; })
59+ .add (" --binarymap-url" , " -bu" , " Use specified string as binary map URL" ,
60+ Options::Arguments::One,
61+ [&binaryMapUrl](Options *o, const std::string &argument) { binaryMapUrl = argument; })
5462 .add (" --symbolmap" , " -s" , " Emit a symbol map (indexes => names)" ,
5563 Options::Arguments::One,
5664 [&](Options *o, const std::string &argument) { symbolMap = argument; })
@@ -87,12 +95,21 @@ int main(int argc, const char *argv[]) {
8795 BufferWithRandomAccess buffer (options.debug );
8896 WasmBinaryWriter writer (&wasm, buffer, options.debug );
8997 writer.setNamesSection (debugInfo);
98+ std::unique_ptr<std::ofstream> binaryMapStream = nullptr ;
99+ if (binaryMapFilename.size ()) {
100+ binaryMapStream = make_unique<std::ofstream>();
101+ binaryMapStream->open (binaryMapFilename);
102+ writer.setBinaryMap (binaryMapStream.get (), binaryMapUrl);
103+ }
90104 if (symbolMap.size () > 0 ) writer.setSymbolMap (symbolMap);
91105 writer.write ();
92106
93107 if (options.debug ) std::cerr << " writing to output..." << std::endl;
94108 Output output (options.extra [" output" ], Flags::Binary, options.debug ? Flags::Debug : Flags::Release);
95109 buffer.writeTo (output);
110+ if (binaryMapStream) {
111+ binaryMapStream->close ();
112+ }
96113
97114 if (options.debug ) std::cerr << " Done." << std::endl;
98115}
0 commit comments