#!/usr/bin/env python3 import argparse import sys from pathlib import Path JS_TEMPLATE = """ #include "emscripten.h" EM_JS(void, {function_name}, (void), {{ return new WebAssembly.Module(hexStringToUTF8Array("{hex_string}")); }} function hexStringToUTF8Array(hex) {{ const bytes = []; for (let i = 0; i < hex.length; i += 2) {{ bytes.push(parseInt(hex.substr(i, 2), 16)); }} return new Uint8Array(bytes); }}); """ def prepare_wasm(input_file, output_file, function_name): # Read the compiled WASM as binary and convert to hex wasm_bytes = Path(input_file).read_bytes() hex_string = "".join(f"{byte:02x}" for byte in wasm_bytes) # Generate JavaScript module js_content = JS_TEMPLATE.format( function_name=function_name, hex_string=hex_string ) Path(output_file).write_text(js_content) print( f"Successfully compiled {input_file} and generated {output_file}" ) return 0 def main(): parser = argparse.ArgumentParser( description="Compile WebAssembly text files using wasm-as" ) parser.add_argument("input_file", help="Input .wat file to compile") parser.add_argument("output_file", help="Output file name") parser.add_argument("function_name", help="Name of the export function") args = parser.parse_args() return prepare_wasm(args.input_file, args.output_file, args.function_name) if __name__ == "__main__": sys.exit(main())