diff --git a/quest/m1/moq/README.md b/quest/m1/moq/README.md index a49f6ba7..7f83dd71 100644 --- a/quest/m1/moq/README.md +++ b/quest/m1/moq/README.md @@ -62,8 +62,9 @@ Targets, refused rather than falling back: same API, so no adapter or MoQ feature carries a per-target exclusion. Operations with no consumer, SHA-3 and SHAKE, are not built there (maintainer, 2026-10-27). -- Every other target fails to compile. wasm32 does not build rind; nothing in - MoQ needs native crypto there. +- MoQ needs no other target. Nothing in MoQ needs native crypto on wasm32; + rind's other targets, wasm32 included, are the + [targets epic](/quest/m2/adoption/targets/README.md)'s. Each quest lands the tests for what it adds: Wycheproof vectors where they exist, differential tests against aws-lc-rs as a dev-dependency, and a diff --git a/quest/m2/adoption/README.md b/quest/m2/adoption/README.md index 03304cf3..746bddaa 100644 --- a/quest/m2/adoption/README.md +++ b/quest/m2/adoption/README.md @@ -77,4 +77,4 @@ don't ask again (✅ is the chosen option): - [rind-rustls supports rustls 0.24](/quest/m2/adoption/rind-rustls-0.24.md) - a release on 0.24 soon after it ships - [rustls 0.24 is released](/quest/m2/adoption/rustls-0.24-release.md) - waiting on the release - [rind replaces ring and aws-lc-rs throughout a binary's tree](/quest/m2/adoption/aws-lc-rs/README.md) - rind-aws-lc-rs, and git-only `ring` and `aws-lc-rs` patch shims -- [rind on every ring or aws-lc-rs target](/quest/m2/adoption/targets/README.md) - a portable backend for every architecture except wasm, so libraries can go rind-only +- [rind on every ring or aws-lc-rs target](/quest/m2/adoption/targets/README.md) - a portable backend for every architecture, and a compile-checked wasm32 build, so libraries can go rind-only diff --git a/quest/m2/adoption/targets/README.md b/quest/m2/adoption/targets/README.md index d9c55523..49cbc7b7 100644 --- a/quest/m2/adoption/targets/README.md +++ b/quest/m2/adoption/targets/README.md @@ -2,9 +2,9 @@ ## Goal -rind and rind-rustls build and run on every architecture that ring 0.17 or aws-lc-rs supports, wasm excepted, so a library can depend on rind alone without dropping targets its users build. Architectures with no assembly in rind get one portable Rust backend. Each one's CI runs the tests under qemu. +rind and rind-rustls build and run on every architecture that ring 0.17 or aws-lc-rs supports, and the rind library compiles for wasm32, so a library can depend on rind alone without dropping targets its users build. Architectures with no assembly in rind get one portable Rust backend. Each one's CI runs the tests under qemu. -Non-goals: wasm (browsers bring their own TLS, and every consumer that needed wasm was already left out), and speed work on the new architectures, which waits for a consumer. +Non-goals: running the tests on wasm, or the adapters there (browsers bring their own TLS), and speed work on the new architectures, which waits for a consumer. ## Plan @@ -14,6 +14,7 @@ Decided with the maintainer on 2026-11-06, in moq-dev/web-transport's planning i - Backend: ✅ a portable fallback generalized from armv7's libcrux path / per-arch assembly. - Placement: ✅ m2 adoption / m1 / m3 parity. - Split: ✅ epic, one child per architecture family / one [XL] quest. +- wasm (2026-11-09, landing [moq-dev/rind#543](https://github.com/moq-dev/rind/pull/543)): ✅ compile-only, checked on every PR, since an outside user needs it (rejected: nightly best-effort; stay a non-goal). This replaces the 2026-11-06 "minus wasm". - Consumer: moq-dev/web-transport goes rind-only now on its x86_64/aarch64/armv7 release targets. Its library users on other architectures are the reason for this epic. The union of ring 0.17's and aws-lc-rs's CI and build scripts, listed on 2026-11-06, adds armv6, which both test. It drops i586, which ring refuses for lacking SSE2 and aws-lc-rs doesn't test. riscv32 and sparc64 are compile-only in both, as loongarch64 is, so they wait for a consumer. aarch64_be and armeb, which ring compiles and aws-lc refuses, compile the portable backend, untested. @@ -33,4 +34,5 @@ The epic's own work, once every child has merged: - [PowerPC](/quest/m2/adoption/targets/powerpc.md) - powerpc64le, powerpc64 and powerpc Linux - [s390x](/quest/m2/adoption/targets/s390x.md) - s390x Linux - [loongarch64](/quest/m2/adoption/targets/loongarch64.md) - loongarch64 Linux +- [wasm32](/quest/m2/adoption/targets/wasm.md) - the rind library compiles for wasm32 on every PR - [MIPS](/quest/m2/adoption/targets/mips.md) - mips and mips64 Linux, if ring or aws-lc-rs still supports them diff --git a/quest/m2/adoption/targets/wasm.md b/quest/m2/adoption/targets/wasm.md new file mode 100644 index 00000000..4ed47acc --- /dev/null +++ b/quest/m2/adoption/targets/wasm.md @@ -0,0 +1,22 @@ +# [S] wasm32 compiles on every PR + +## Goal + +Every PR that changes rind's code compiles the `rind` library for `wasm32-unknown-unknown` (with `getrandom/wasm_js`) and `wasm32-wasip2`, with and without `wipe`, in `just check`'s `cross` module, so a wasm build break fails before merging rather than in a nightly run. +The flake's pinned toolchain gains both targets. +The nightly `wasm` job in `build.yml` that [moq-dev/rind#543](https://github.com/moq-dev/rind/pull/543) added is deleted as redundant, and [PLATFORMS.md](/PLATFORMS.md) says PRs check it. + +Non-goals: runtime tests on wasm, the adapters on wasm, and speed. + +## Plan + +Decided with the maintainer on 2026-11-09, while landing moq-dev/rind#543 (✅ chosen): + +- Gate: ✅ check wasm on every PR in a follow-up quest (rejected: extend #543 to do it; keep wasm nightly-only). +- Scope: ✅ wasm32 is a compile-only target on the portable backend, checked on every PR (rejected: nightly best-effort and unsupported; stay a non-goal and strip #543 to the MD5 fix). An outside user needs wasm, and a compile check is cheap. +- Goal: ✅ the `rind` library only, both targets, with and without `wipe` (rejected: also compile rind-rustls; keep #543's nightly job too). +- Placement: ✅ this epic (rejected: m0, m3). + +[moq-dev/rind#412](https://github.com/moq-dev/rind/pull/412) broke the wasm build with MD5's inline-asm optimizer barrier, and only a user noticed. #543 fixed it with `core::hint::black_box` on the wasm target family. Start once #543 has landed. + +Library builds only: the differential tests link native aws-lc, so `cargo test` cannot cross-compile to wasm.