Crafter.Build/interfaces
catbot 022ada70a6
Some checks failed
CI / build-test-release (pull_request) Failing after 7m19s
feat: feature-detected browser-wasm variants (relaxed-SIMD) + variant-aware runtime
The browser wasm pipeline hardcoded -msimd128 for every wasm32 target and
baked a single wasm URL into index.html, so newer codegen features that
aren't yet baseline across engines (relaxed SIMD today; threads, future SIMD
revisions later) couldn't be adopted without dropping the browsers that lack
them.

Add a general, feature-parameterized mechanism owned entirely by
Crafter.Build:

- Configuration::wasmVariants declares N codegen variants (label, extra -m
  flags, runtime probes). Build() compiles the baseline plus one
  outputName.<label>.wasm per variant, recompiling the whole graph (incl.
  dep libs + std PCM) with the variant's flags — relaxed-SIMD is per-TU
  codegen, not a link switch. wasmVariantFlags folds into VariantId so each
  variant's objects/PCMs land in their own build+bin dir.
- EnableWasiBrowserRuntime emits a variants.json manifest (label -> url +
  probes), preferred-first with the baseline as the universal fallback.
- The shipped runtime.js runs inlined wasm-feature-detect probes
  (relaxed-simd, simd, tail-call, bulk-memory, exception-handling, threads),
  picks the first variant whose probes all pass, and falls back to the single
  baked CRAFTER_WASM_URL when no manifest is present (backward compatible).
- EnableWasiRelaxedSimdVariant registers the relaxed-SIMD variant — the
  motivating case (Chrome 114+/Firefox 120+ enable it by default; Safari
  still flag-gates it as of mid-2026).

Verified end to end: a wasm32-wasip1 build emits both wasi-hello.wasm and
wasi-hello.relaxed-simd.wasm + variants.json; Firefox selects the
relaxed-simd variant and runs it.

Resolves #24

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 15:14:18 +00:00
..
Crafter.Build-Api.h test runner, cross-target runners, lib/exe split 2026-04-27 22:32:19 +02:00
Crafter.Build-Asset.cppm asset changes 2026-05-19 00:50:06 +02:00
Crafter.Build-Clang.cppm feat: feature-detected browser-wasm variants (relaxed-SIMD) + variant-aware runtime 2026-06-15 15:14:18 +00:00
Crafter.Build-External.cppm asset changes 2026-05-19 00:50:06 +02:00
Crafter.Build-Implementation.cppm test runner, cross-target runners, lib/exe split 2026-04-27 22:32:19 +02:00
Crafter.Build-Interface.cppm test runner, cross-target runners, lib/exe split 2026-04-27 22:32:19 +02:00
Crafter.Build-Platform.cppm V2: WASI, -r flag, CI pipeline, examples & tests cleanup 2026-04-28 23:24:46 +02:00
Crafter.Build-Progress.cppm loading bar 2026-04-29 03:27:11 +02:00
Crafter.Build-Shader.cppm fixes 2026-05-02 21:08:51 +02:00
Crafter.Build-Test.cppm new tests 2026-05-27 19:45:05 +02:00
Crafter.Build.cppm asset compression 2026-05-12 01:16:40 +02:00