Skip to content
Snippets Groups Projects
  • StackOverflowExcept1on's avatar
    feat(wasm-builder): add support for new `wasm32v1-none` target (#7008) · 2970ab15
    StackOverflowExcept1on authored
    
    # 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>
    2970ab15
Code owners
Assign users and groups as approvers for specific file changes. Learn more.