Address review: retract the JSPI-only conclusion, fix harness hygiene, bound the size claim
P1: the MAIN_MODULE=2 legacy-EH failure was self-inflicted. libdylink.js synthesises invoke_*
and __cxa_find_matching_catch_* on demand in \, so the report's claim that a
side module 'cannot add them after the fact' was wrong. The real gaps were symbols the
prototype's own filter dropped. With a complete derivation legacy EH passes, and so does
legacy EH + ASYNCIFY, which means the plugin-EP path does NOT force JSPI and does not pin
ORT-web to a browser floor. Three inclusion mechanisms are needed:
- EXPORTED_FUNCTIONS for wasm functions/data/tags (incl. __THREW__)
- DEFAULT_LIBRARY_FUNCS_TO_INCLUDE for JS-library functions (llvm_eh_typeid_for)
- a custom --js-library for JS-only symbols with no C-callable alias (getTempRet0)
__asyncify_data/__asyncify_state must NOT be listed: the ASYNCIFY Binaryen pass runs after
wasm-ld and exports them itself.
P2: build.ps1 now deletes and recreates each output directory, and run_all.ps1 honours \
by skipping execution and reporting SKIPPED, so a row can no longer show PASS from stale
artifacts.
P2: the duplicated-core cost is relabelled as an explicit projection. Added measurements of the
published onnxruntime-web 1.27.0 wasm artifacts to bound it, including the clean apples-to-apples
asyncify-vs-jspi comparison (23.13 MB vs 14.35 MB, ASYNCIFY costs ~8.8 MB).
Also drop the superfluous experimental JSPI flags from browser_run.js; stock Chromium 151
exposes WebAssembly.Suspending without them.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>