This repo is mostly so I can more easily share my hacking experiments.
I'm trying to set up a build where:
- Emscripten is driving the build.
- My C++ has a Rust dep.
- Emscripten is using embind to interface with JS.
- Rust is using wasm-bindgen to interface with JS.
To do this, my goal is to make wasm-bindgen output JS that can be consumed by Emscripten. Changes to both wasm-bindgen and Emscripten will be necessary.
You'll need Emscripten from https://github.com/walkingeyerobot/emscripten
You'll need wasm-bindgen from https://github.com/walkingeyerobot/wasm-bindgen
I could probably do some more setup instructions here.
cargo build -v --target=wasm32-unknown-emscripten
EMCC_DEBUG=1 EMCC_DEBUG_SAVE=1 em++ embind.cc random_point_generator.cc -lembind target/wasm32-unknown-emscripten/debug/libcxxrustdemo.a --pre-js=pre.js --js-library library_wbg.js -sEXPORTED_FUNCTIONS=___wbg_randompointgeneratorrs_free,___wbg_rspoint_free,___wbindgen_describe_randompointgeneratorrs_get_random_point,___wbindgen_describe_randompointgeneratorrs_new,___wbindgen_describe_rs_add,___wbindgen_describe_rspoint_get_x,___wbindgen_describe_rspoint_get_y,_random_rs,_randompointgeneratorrs_get_random_point,_randompointgeneratorrs_new,_rs_add,_rspoint_get_x,_rspoint_get_y,___externref_drop_slice,___externref_heap_live_count,___externref_table_alloc,___externref_table_dealloc,___wbindgen_exn_store,___wbindgen_free,___wbindgen_malloc,___wbindgen_realloc -Wno-undefined -sWASM_BINDGEN
node a.out.js
You should see some random numbers get printed out like this:
5.844805697018973, 1.1136176474794368
7
66.11376134888434, 59.28121329175588
- Make changes to wasm-bindgen to automatically generate
pre.js
andlibrary_wbg.js
. - Figure out how to merge the
pre.js
code intolibrary_wbg.js
. This isn't strictly necessary, but it would simplify things. - Make changes to Emscripten to properly take a
-sWASM_BINDGEN
option or something. - There's an issue with running stripping on the wasm-bindgen produced .wasm.
llvm-objcopy
errors out withinvalid function export
. I just commented out that part in Emscripten for now, but it needs to be fixed. - Automatically generate exports from the rust compiles to pass to Emscripten during link. Maybe see about the
tmpdir
argument here or maybe use llvm-nm on rust object files or something?