Skip to content

Update support for p3 to match the latest wasm-tools - #1198

Merged
dicej merged 4 commits into
bytecodealliance:mainfrom
alexcrichton:fix-p3-support
Mar 7, 2025
Merged

Update support for p3 to match the latest wasm-tools#1198
dicej merged 4 commits into
bytecodealliance:mainfrom
alexcrichton:fix-p3-support

Conversation

@alexcrichton

Copy link
Copy Markdown
Member

Work-in-progress currently as bytecodealliance/wasip3-prototyping#68 is the upstream work in Wasmtime being used to discover test failures and such.

Fix the name and signature of various intrinsics in the Rust bindings
generator for p3 support. This is detected by updating wasm-tools in the
wasip3-prototyping repository which requires changes here.
This is temporary (and relies on the host to ignore the waitable-set parameter)
until we have proper waitable-set support, which I'll work on soon.
Signed-off-by: Joel Dice <joel.dice@fermyon.com>
@alexcrichton
alexcrichton marked this pull request as ready for review March 7, 2025 18:01
@alexcrichton

Copy link
Copy Markdown
MemberAuthor

@dicej your commit here looks good to me, although I can't self-approve my own PR

I also threw in a merge with main to get the update of wasm-tools out of the diff as well

@dicej
dicej enabled auto-merge March 7, 2025 18:09
@dicej
dicej added this pull request to the merge queueMar 7, 2025
Merged via the queue into bytecodealliance:main with commit 1d8cbb9Mar 7, 2025
rvolosatovs added a commit to bytecodealliance/wrpc that referenced this pull request Jun 22, 2026
Merge upstream wit-bindgen 0.41.0 into the vendored bindgen subtree.
- Bump wit-bindgen-core 0.40 -> 0.41 (wit-parser stays 0.227).
- Carry upstream's `gen` -> `r#gen` rename of the `InterfaceGenerator` field (and
the `gen` locals in `lib.rs`) so `interface.rs`/`lib.rs` match upstream
verbatim, including at the three `additional_derive_ignore` sites.
- Port upstream feature bytecodealliance/wit-bindgen#1199 (`additional_derives_ignore`): variants and records
named in this kebab-case list are excluded when applying `additional_derives`,
so a type whose payload doesn't implement an added trait (e.g. a resource
handle vs `serde::Deserialize`) keeps the bindings compiling. The macro half
(`crates/wit-bindgen-rust-macro`) merged cleanly; reimplemented the generator
half against wRPC's `Opts` (new `additional_derive_ignore` field + preamble
log) and the three derive sites in `interface.rs` (record/variant/enum), each
gated by `!additional_derive_ignore.contains(&name.to_kebab_case())`.
- Make wRPC's value-codec decoder generation edition-2024-clean: drop the
explicit `ref mut` bindings in the three generated decoder match patterns in
`interface.rs` (the default binding mode yields `&mut` under both editions),
so generated bindings compile under edition 2024 as well as 2021. This is
validated by the dual-edition `verify` carried with the test subcommand below.
- Carry upstream feature bytecodealliance/wit-bindgen#1192 (`wit-bindgen test` subcommand), vendored from
upstream's `crates/test` into a new `wit-bindgen-wrpc-test` crate
(`crates/wit-bindgen-test`) with the guest-Wasm-specific pieces removed. The
CLI gains a `wit-bindgen-wrpc test` subcommand. `lib.rs`/`config.rs` track
upstream verbatim (kept `deny_unknown_fields`); `rust.rs` keeps upstream's
`Edition` enum and dual-edition `verify` (compiling generated bindings under
both 2021 and 2024) but is host-adapted. Dropped as guest-Wasm: the C/WAT
language backends and the custom external-runner (`crates/test/src/{c,wat,
custom}.rs`), the wasmtime runner (`runner.rs`), and in `lib.rs` the wasm32
component compilation/`convert_p1_to_component`, `wasm-compose` composition and
`wasmparser` validation. Codegen tests run the generic `tests/codegen/*.wit`
inputs (replacing the `codegen_tests!` macro harness, so
`crates/wit-bindgen-{rust,go}/tests/codegen.rs` are deleted). Runtime tests
live under `tests/runtime/rust/<name>/` with `runner`+`test` worlds; since wRPC
bindings are `Invoke`/`Serve` RPC stubs rather than guest components, the
`runner` (client) and `test` (server) are linked into one host binary connected
over an in-process TCP transport and run to completion, instead of being
composed in a component runtime. `go.rs` is wRPC-specific (upstream has no Go
backend at this version). bytecodealliance/wit-bindgen#1199's `custom-derives` test is ported here as a
runtime test, behaviorally proving the derives apply (and that `ignoreme` is
excluded), alongside ports of upstream's option tests (skip, with, with-types,
with-option-generate, alternative-bitflags, gated-features, unused-types). The
suite is driven under `cargo test` via `tests/bindgen.rs`, which invokes the
subcommand through `CARGO_BIN_EXE_wit-bindgen-wrpc`.
Non-carries (not applicable to wRPC, dropped from the merge):
- upstream removed Go from its own tree (bytecodealliance/wit-bindgen#1195); wRPC keeps its own
`wit-bindgen-go` generator.
- canonical-ABI / component-async / wasm-export-attribute changes (bytecodealliance/wit-bindgen#1206/bytecodealliance/wit-bindgen#1205
rust 2024 edition export attrs, bytecodealliance/wit-bindgen#1163 64-bit guest adaption, bytecodealliance/wit-bindgen#1185 async stack
args, bytecodealliance/wit-bindgen#1198 p3) do not apply to wRPC's transport-stub generator.
`wit-bindgen-wrpc test` runs 172 codegen tests (86 WITs x rust/go, each rust case
verified under editions 2021 and 2024) and the runtime tests green; the whole
workspace builds; `cargo clippy --workspace` and `cargo doc --workspace` are
clean.
Assisted-by: claude:claude-opus-4-8
Upstream diff: bytecodealliance/wit-bindgen@v0.40.0...v0.41.0
rvolosatovs added a commit to bytecodealliance/wrpc that referenced this pull request Jun 23, 2026
Merge upstream wit-bindgen 0.41.0 into the vendored bindgen subtree.
- Bump wit-bindgen-core 0.40 -> 0.41 (wit-parser stays 0.227).
- Carry upstream's `gen` -> `r#gen` rename of the `InterfaceGenerator` field (and
the `gen` locals in `lib.rs`) so `interface.rs`/`lib.rs` match upstream
verbatim, including at the three `additional_derive_ignore` sites.
- Port upstream feature bytecodealliance/wit-bindgen#1199 (`additional_derives_ignore`): variants and records
named in this kebab-case list are excluded when applying `additional_derives`,
so a type whose payload doesn't implement an added trait (e.g. a resource
handle vs `serde::Deserialize`) keeps the bindings compiling. The macro half
(`crates/wit-bindgen-rust-macro`) merged cleanly; reimplemented the generator
half against wRPC's `Opts` (new `additional_derive_ignore` field + preamble
log) and the three derive sites in `interface.rs` (record/variant/enum), each
gated by `!additional_derive_ignore.contains(&name.to_kebab_case())`.
- Make wRPC's value-codec decoder generation edition-2024-clean: drop the
explicit `ref mut` bindings in the three generated decoder match patterns in
`interface.rs` (the default binding mode yields `&mut` under both editions),
so generated bindings compile under edition 2024 as well as 2021. This is
validated by the dual-edition `verify` carried with the test subcommand below.
- Carry upstream feature bytecodealliance/wit-bindgen#1192 (`wit-bindgen test` subcommand), vendored from
upstream's `crates/test` into a new `wit-bindgen-wrpc-test` crate
(`crates/wit-bindgen-test`) with the guest-Wasm-specific pieces removed. The
CLI gains a `wit-bindgen-wrpc test` subcommand. `lib.rs`/`config.rs` track
upstream verbatim (kept `deny_unknown_fields`); `rust.rs` keeps upstream's
`Edition` enum and dual-edition `verify` (compiling generated bindings under
both 2021 and 2024) but is host-adapted. Dropped as guest-Wasm: the C/WAT
language backends and the custom external-runner (`crates/test/src/{c,wat,
custom}.rs`), the wasmtime runner (`runner.rs`), and in `lib.rs` the wasm32
component compilation/`convert_p1_to_component`, `wasm-compose` composition and
`wasmparser` validation. Codegen tests run the generic `tests/codegen/*.wit`
inputs (replacing the `codegen_tests!` macro harness, so
`crates/wit-bindgen-{rust,go}/tests/codegen.rs` are deleted). Runtime tests
live under `tests/runtime/rust/<name>/` with `runner`+`test` worlds; since wRPC
bindings are `Invoke`/`Serve` RPC stubs rather than guest components, the
`runner` (client) and `test` (server) are linked into one host binary connected
over an in-process TCP transport and run to completion, instead of being
composed in a component runtime. `go.rs` is wRPC-specific (upstream has no Go
backend at this version). bytecodealliance/wit-bindgen#1199's `custom-derives` test is ported here as a
runtime test, behaviorally proving the derives apply (and that `ignoreme` is
excluded), alongside ports of upstream's option tests (skip, with, with-types,
with-option-generate, alternative-bitflags, gated-features, unused-types). The
suite is driven under `cargo test` via `tests/bindgen.rs`, which invokes the
subcommand through `CARGO_BIN_EXE_wit-bindgen-wrpc`.
Non-carries (not applicable to wRPC, dropped from the merge):
- upstream removed Go from its own tree (bytecodealliance/wit-bindgen#1195); wRPC keeps its own
`wit-bindgen-go` generator.
- canonical-ABI / component-async / wasm-export-attribute changes (bytecodealliance/wit-bindgen#1206/bytecodealliance/wit-bindgen#1205
rust 2024 edition export attrs, bytecodealliance/wit-bindgen#1163 64-bit guest adaption, bytecodealliance/wit-bindgen#1185 async stack
args, bytecodealliance/wit-bindgen#1198 p3) do not apply to wRPC's transport-stub generator.
`wit-bindgen-wrpc test` runs 172 codegen tests (86 WITs x rust/go, each rust case
verified under editions 2021 and 2024) and the runtime tests green; the whole
workspace builds; `cargo clippy --workspace` and `cargo doc --workspace` are
clean.
Assisted-by: claude:claude-opus-4-8
Upstream diff: bytecodealliance/wit-bindgen@v0.40.0...v0.41.0
rvolosatovs added a commit to bytecodealliance/wrpc that referenced this pull request Jun 23, 2026
Merge upstream wit-bindgen 0.41.0 into the vendored bindgen subtree.
- Bump wit-bindgen-core 0.40 -> 0.41 (wit-parser stays 0.227).
- Carry upstream's `gen` -> `r#gen` rename of the `InterfaceGenerator` field (and
the `gen` locals in `lib.rs`) so `interface.rs`/`lib.rs` match upstream
verbatim, including at the three `additional_derive_ignore` sites.
- Port upstream feature bytecodealliance/wit-bindgen#1199 (`additional_derives_ignore`): variants and records
named in this kebab-case list are excluded when applying `additional_derives`,
so a type whose payload doesn't implement an added trait (e.g. a resource
handle vs `serde::Deserialize`) keeps the bindings compiling. The macro half
(`crates/wit-bindgen-rust-macro`) merged cleanly; reimplemented the generator
half against wRPC's `Opts` (new `additional_derive_ignore` field + preamble
log) and the three derive sites in `interface.rs` (record/variant/enum), each
gated by `!additional_derive_ignore.contains(&name.to_kebab_case())`.
- Make wRPC's value-codec decoder generation edition-2024-clean: drop the
explicit `ref mut` bindings in the three generated decoder match patterns in
`interface.rs` (the default binding mode yields `&mut` under both editions),
so generated bindings compile under edition 2024 as well as 2021. This is
validated by the dual-edition `verify` carried with the test subcommand below.
- Carry upstream feature bytecodealliance/wit-bindgen#1192 (`wit-bindgen test` subcommand), vendored from
upstream's `crates/test` into a new `wit-bindgen-wrpc-test` crate
(`crates/wit-bindgen-test`) with the guest-Wasm-specific pieces removed. The
CLI gains a `wit-bindgen-wrpc test` subcommand. `lib.rs`/`config.rs` track
upstream verbatim (kept `deny_unknown_fields`); `rust.rs` keeps upstream's
`Edition` enum and dual-edition `verify` (compiling generated bindings under
both 2021 and 2024) but is host-adapted. Dropped as guest-Wasm: the C/WAT
language backends and the custom external-runner (`crates/test/src/{c,wat,
custom}.rs`), the wasmtime runner (`runner.rs`), and in `lib.rs` the wasm32
component compilation/`convert_p1_to_component`, `wasm-compose` composition and
`wasmparser` validation. Codegen tests run the generic `tests/codegen/*.wit`
inputs (replacing the `codegen_tests!` macro harness, so
`crates/wit-bindgen-{rust,go}/tests/codegen.rs` are deleted). Runtime tests
live under `tests/runtime/rust/<name>/` with `runner`+`test` worlds; since wRPC
bindings are `Invoke`/`Serve` RPC stubs rather than guest components, the
`runner` (client) and `test` (server) are linked into one host binary connected
over an in-process TCP transport and run to completion, instead of being
composed in a component runtime. `go.rs` is wRPC-specific (upstream has no Go
backend at this version). bytecodealliance/wit-bindgen#1199's `custom-derives` test is ported here as a
runtime test, behaviorally proving the derives apply (and that `ignoreme` is
excluded), alongside ports of upstream's option tests (skip, with, with-types,
with-option-generate, alternative-bitflags, gated-features, unused-types). The
suite is driven under `cargo test` via `tests/bindgen.rs`, which invokes the
subcommand through `CARGO_BIN_EXE_wit-bindgen-wrpc`.
Non-carries (not applicable to wRPC, dropped from the merge):
- upstream removed Go from its own tree (bytecodealliance/wit-bindgen#1195); wRPC keeps its own
`wit-bindgen-go` generator.
- canonical-ABI / component-async / wasm-export-attribute changes (bytecodealliance/wit-bindgen#1206/bytecodealliance/wit-bindgen#1205
rust 2024 edition export attrs, bytecodealliance/wit-bindgen#1163 64-bit guest adaption, bytecodealliance/wit-bindgen#1185 async stack
args, bytecodealliance/wit-bindgen#1198 p3) do not apply to wRPC's transport-stub generator.
`wit-bindgen-wrpc test` runs 172 codegen tests (86 WITs x rust/go, each rust case
verified under editions 2021 and 2024) and the runtime tests green; the whole
workspace builds; `cargo clippy --workspace` and `cargo doc --workspace` are
clean.
Assisted-by: claude:claude-opus-4-8
Upstream diff: bytecodealliance/wit-bindgen@v0.40.0...v0.41.0
rvolosatovs added a commit to bytecodealliance/wrpc that referenced this pull request Jun 23, 2026
Merge upstream wit-bindgen 0.41.0 into the vendored bindgen subtree.
- Bump wit-bindgen-core 0.40 -> 0.41 (wit-parser stays 0.227).
- Carry upstream's `gen` -> `r#gen` rename of the `InterfaceGenerator` field (and
the `gen` locals in `lib.rs`) so `interface.rs`/`lib.rs` match upstream
verbatim, including at the three `additional_derive_ignore` sites.
- Port upstream feature bytecodealliance/wit-bindgen#1199 (`additional_derives_ignore`): variants and records
named in this kebab-case list are excluded when applying `additional_derives`,
so a type whose payload doesn't implement an added trait (e.g. a resource
handle vs `serde::Deserialize`) keeps the bindings compiling. The macro half
(`crates/wit-bindgen-rust-macro`) merged cleanly; reimplemented the generator
half against wRPC's `Opts` (new `additional_derive_ignore` field + preamble
log) and the three derive sites in `interface.rs` (record/variant/enum), each
gated by `!additional_derive_ignore.contains(&name.to_kebab_case())`.
- Make wRPC's value-codec decoder generation edition-2024-clean: drop the
explicit `ref mut` bindings in the three generated decoder match patterns in
`interface.rs` (the default binding mode yields `&mut` under both editions),
so generated bindings compile under edition 2024 as well as 2021. This is
validated by the dual-edition `verify` carried with the test subcommand below.
- Carry upstream feature bytecodealliance/wit-bindgen#1192 (`wit-bindgen test` subcommand), vendored from
upstream's `crates/test` into a new `wit-bindgen-wrpc-test` crate
(`crates/wit-bindgen-test`) with the guest-Wasm-specific pieces removed. The
CLI gains a `wit-bindgen-wrpc test` subcommand. `lib.rs`/`config.rs` track
upstream verbatim (kept `deny_unknown_fields`); `rust.rs` keeps upstream's
`Edition` enum and dual-edition `verify` (compiling generated bindings under
both 2021 and 2024) but is host-adapted. Dropped as guest-Wasm: the C/WAT
language backends and the custom external-runner (`crates/test/src/{c,wat,
custom}.rs`), the wasmtime runner (`runner.rs`), and in `lib.rs` the wasm32
component compilation/`convert_p1_to_component`, `wasm-compose` composition and
`wasmparser` validation. Codegen tests run the generic `tests/codegen/*.wit`
inputs (replacing the `codegen_tests!` macro harness, so
`crates/wit-bindgen-{rust,go}/tests/codegen.rs` are deleted). Runtime tests
live under `tests/runtime/rust/<name>/` with `runner`+`test` worlds; since wRPC
bindings are `Invoke`/`Serve` RPC stubs rather than guest components, the
`runner` (client) and `test` (server) are linked into one host binary connected
over an in-process TCP transport and run to completion, instead of being
composed in a component runtime. `go.rs` is wRPC-specific (upstream has no Go
backend at this version). bytecodealliance/wit-bindgen#1199's `custom-derives` test is ported here as a
runtime test, behaviorally proving the derives apply (and that `ignoreme` is
excluded), alongside ports of upstream's option tests (skip, with, with-types,
with-option-generate, alternative-bitflags, gated-features, unused-types). The
suite is driven under `cargo test` via `tests/bindgen.rs`, which invokes the
subcommand through `CARGO_BIN_EXE_wit-bindgen-wrpc`.
Non-carries (not applicable to wRPC, dropped from the merge):
- upstream removed Go from its own tree (bytecodealliance/wit-bindgen#1195); wRPC keeps its own
`wit-bindgen-go` generator.
- canonical-ABI / component-async / wasm-export-attribute changes (bytecodealliance/wit-bindgen#1206/bytecodealliance/wit-bindgen#1205
rust 2024 edition export attrs, bytecodealliance/wit-bindgen#1163 64-bit guest adaption, bytecodealliance/wit-bindgen#1185 async stack
args, bytecodealliance/wit-bindgen#1198 p3) do not apply to wRPC's transport-stub generator.
`wit-bindgen-wrpc test` runs 172 codegen tests (86 WITs x rust/go, each rust case
verified under editions 2021 and 2024) and the runtime tests green; the whole
workspace builds; `cargo clippy --workspace` and `cargo doc --workspace` are
clean.
Assisted-by: claude:claude-opus-4-8
Upstream diff: bytecodealliance/wit-bindgen@v0.40.0...v0.41.0
rvolosatovs added a commit to bytecodealliance/wrpc that referenced this pull request Jun 23, 2026
Merge upstream wit-bindgen 0.41.0 into the vendored bindgen subtree.
- Bump wit-bindgen-core 0.40 -> 0.41 (wit-parser stays 0.227).
- Carry upstream's `gen` -> `r#gen` rename of the `InterfaceGenerator` field (and
the `gen` locals in `lib.rs`) so `interface.rs`/`lib.rs` match upstream
verbatim, including at the three `additional_derive_ignore` sites.
- Port upstream feature bytecodealliance/wit-bindgen#1199 (`additional_derives_ignore`): variants and records
named in this kebab-case list are excluded when applying `additional_derives`,
so a type whose payload doesn't implement an added trait (e.g. a resource
handle vs `serde::Deserialize`) keeps the bindings compiling. The macro half
(`crates/wit-bindgen-rust-macro`) merged cleanly; reimplemented the generator
half against wRPC's `Opts` (new `additional_derive_ignore` field + preamble
log) and the three derive sites in `interface.rs` (record/variant/enum), each
gated by `!additional_derive_ignore.contains(&name.to_kebab_case())`.
- Make wRPC's value-codec decoder generation edition-2024-clean: drop the
explicit `ref mut` bindings in the three generated decoder match patterns in
`interface.rs` (the default binding mode yields `&mut` under both editions),
so generated bindings compile under edition 2024 as well as 2021. This is
validated by the dual-edition `verify` carried with the test subcommand below.
- Carry upstream feature bytecodealliance/wit-bindgen#1192 (`wit-bindgen test` subcommand), vendored from
upstream's `crates/test` into a new `wit-bindgen-wrpc-test` crate
(`crates/wit-bindgen-test`) with the guest-Wasm-specific pieces removed. The
CLI gains a `wit-bindgen-wrpc test` subcommand. `lib.rs`/`config.rs` track
upstream verbatim (kept `deny_unknown_fields`); `rust.rs` keeps upstream's
`Edition` enum and dual-edition `verify` (compiling generated bindings under
both 2021 and 2024) but is host-adapted. Dropped as guest-Wasm: the C/WAT
language backends and the custom external-runner (`crates/test/src/{c,wat,
custom}.rs`), the wasmtime runner (`runner.rs`), and in `lib.rs` the wasm32
component compilation/`convert_p1_to_component`, `wasm-compose` composition and
`wasmparser` validation. Codegen tests run the generic `tests/codegen/*.wit`
inputs (replacing the `codegen_tests!` macro harness, so
`crates/wit-bindgen-{rust,go}/tests/codegen.rs` are deleted). Runtime tests
live under `tests/runtime/rust/<name>/` with `runner`+`test` worlds; since wRPC
bindings are `Invoke`/`Serve` RPC stubs rather than guest components, the
`runner` (client) and `test` (server) are linked into one host binary connected
over an in-process TCP transport and run to completion, instead of being
composed in a component runtime. `go.rs` is wRPC-specific (upstream has no Go
backend at this version). bytecodealliance/wit-bindgen#1199's `custom-derives` test is ported here as a
runtime test, behaviorally proving the derives apply (and that `ignoreme` is
excluded), alongside ports of upstream's option tests (skip, with, with-types,
with-option-generate, alternative-bitflags, gated-features, unused-types). The
suite is driven under `cargo test` via `tests/bindgen.rs`, which invokes the
subcommand through `CARGO_BIN_EXE_wit-bindgen-wrpc`.
Non-carries (not applicable to wRPC, dropped from the merge):
- upstream removed Go from its own tree (bytecodealliance/wit-bindgen#1195); wRPC keeps its own
`wit-bindgen-go` generator.
- canonical-ABI / component-async / wasm-export-attribute changes (bytecodealliance/wit-bindgen#1206/bytecodealliance/wit-bindgen#1205
rust 2024 edition export attrs, bytecodealliance/wit-bindgen#1163 64-bit guest adaption, bytecodealliance/wit-bindgen#1185 async stack
args, bytecodealliance/wit-bindgen#1198 p3) do not apply to wRPC's transport-stub generator.
`wit-bindgen-wrpc test` runs 172 codegen tests (86 WITs x rust/go, each rust case
verified under editions 2021 and 2024) and the runtime tests green; the whole
workspace builds; `cargo clippy --workspace` and `cargo doc --workspace` are
clean.
Assisted-by: claude:claude-opus-4-8
Upstream diff: bytecodealliance/wit-bindgen@v0.40.0...v0.41.0
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@alexcrichton@dicej