Automatic adaption to 64bit architectures in guest code#1163
Conversation
|
cc @jsturtevant for C# |
|
Sorry for the extensive patch, basically this changes the Rust and C code generation (in this case passing a list) to |
I wasn't able to output the proper code for C# because I don't know enough of it, but Rust or C should give a good template. |
|
The publish test will be fixed by the next wasm-tools release (blocked there) |
|
Also part of #1098 |
alexcrichton
left a comment
There was a problem hiding this comment.
This all looks great to me, thanks! I'll work on getting a wasm-tools release out next week in order to merge this.
|
The wasm-tools update is at bytecodealliance/wasm-tools#2054 which is coupled with some extra testing in Wasmtime. I also want to do some more testing in this repository before publishing to ensure that not too much is broken here. |
|
Ok the wasm-tools update should be going through in #1167 |
|
Ok this should be mergable after a rebase I believe. |
fd9c983 to
9787a9d
Compare
e3d5b70 to
26b883c
Compare
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
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
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
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
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
No description provided.