Skip to content
Snippets Groups Projects
Unverified Commit 2970ab15 authored by StackOverflowExcept1on's avatar StackOverflowExcept1on Committed by GitHub
Browse files

feat(wasm-builder): add support for new `wasm32v1-none` target (#7008)


# Description

Resolves #5777

Previously `wasm-builder` used hacks such as `-Zbuild-std` (required
`rust-src` component) and `RUSTC_BOOTSTRAP=1` to build WASM runtime
without WASM features: `sign-ext`, `multivalue` and `reference-types`,
but since Rust 1.84 (will be stable on 9 January, 2025) the situation
has improved as there is new
[`wasm32v1-none`](https://doc.rust-lang.org/beta/rustc/platform-support/wasm32v1-none.html)
target that disables all "post-MVP" WASM features except
`mutable-globals`.

Previously, your `rust-toolchain.toml` looked like this:

```toml
[toolchain]
channel = "stable"
components = ["rust-src"]
targets = ["wasm32-unknown-unknown"]
profile = "default"
```

It should now be updated to something like this:

```toml
[toolchain]
channel = "stable"
targets = ["wasm32v1-none"]
profile = "default"
```

To build the runtime:

```bash
cargo build --package minimal-template-runtime --release
```

## Integration

If you are using Rust 1.84 and above, then install the `wasm32v1-none`
target instead of `wasm32-unknown-unknown` as shown above. You can also
remove the unnecessary `rust-src` component.

Also note the slight differences in conditional compilation:
- `wasm32-unknown-unknown`: `#[cfg(all(target_family = "wasm", target_os
= "unknown"))]`
- `wasm32v1-none`: `#[cfg(all(target_family = "wasm", target_os =
"none"))]`

Avoid using `target_os = "unknown"` in `#[cfg(...)]` or
`#[cfg_attr(...)]` and instead use `target_family = "wasm"` or
`target_arch = "wasm32"` in the runtime code.

## Review Notes

Wasm builder requires the following prerequisites for building the WASM
binary:
- Rust >= 1.68 and Rust < 1.84:
  - `wasm32-unknown-unknown` target
  - `rust-src` component
- Rust >= 1.84:
  - `wasm32v1-none` target
- no more `-Zbuild-std` and `RUSTC_BOOTSTRAP=1` hacks and `rust-src`
component requirements!

---------

Co-authored-by: default avatarBastian Köcher <git@kchr.de>
Co-authored-by: default avatarBastian Köcher <info@kchr.de>
parent ea51bbf9
No related merge requests found
Pipeline #514854 waiting for manual action with stages
in 32 minutes and 29 seconds