Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions quest/m1/moq/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion quest/m2/adoption/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
6 changes: 4 additions & 2 deletions quest/m2/adoption/targets/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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.
Expand All @@ -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
22 changes: 22 additions & 0 deletions quest/m2/adoption/targets/wasm.md
Original file line number Diff line number Diff line change
@@ -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.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This reversal leaves three docs still stating the pre-#543 "no wasm build" state, and the quest's deliverables only name PLATFORMS.md. quest/m0/adapters/ring.md:14 is the one that matters most — it records the old state unqualified in the quest tree. Add these to the quest's Goal (or repoint them here), so the reversal is recorded both ways.

Technical details
# wasm reversal leaves stale "no wasm build" claims

## Affected sites

- quest/m0/adapters/ring.md:14 — "`wasm32_unknown_unknown_js` stays a no-op because rind doesn't build for wasm32 at all". The reason goes stale once #543 lands; the conclusion (no browser build loses entropy) still holds, since the adapters stay non-goals on wasm, but the cited state is the one this epic reverses. Convention: a call reversal adds pointers both ways (as the m4 parity epic did for its out-of-reach call).
- MIGRATE.md:56 — "rind compiles only for x86_64, aarch64, and 32-bit ARM, so i686, wasm32, riscv64, and every other architecture fail to build".
- rind-dart/pubspec.yaml:15 — "# No web: rind has no wasm build, so the package refuses that target." The refusal itself can stay (the build hook is native-only); only the stated reason goes stale.

## Required outcome

- Each site either states the new state (the rind library compiles for wasm32, compile-checked on every PR) or links the quest / targets epic as the record of the change.


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.