rules_rust

Rust Wasm Bindgen

Overview

To build a rust_binary for wasm32-unknown-unknown target add the --platforms=@rules_rust//rust/platform:wasm flag.

bazel build @examples//hello_world_wasm --platforms=@rules_rust//rust/platform:wasm

To build a rust_binary for wasm32-wasi target add the --platforms=@rules_rust//rust/platform:wasi flag.

bazel build @examples//hello_world_wasm --platforms=@rules_rust//rust/platform:wasi

rust_wasm_bindgen will automatically transition to the wasm platform and can be used when building WebAssembly code for the host target.

rust_wasm_bindgen

rust_wasm_bindgen(name, bindgen_flags, target, wasm_file)

Generates javascript and typescript bindings for a webassembly module using wasm-bindgen.

To use the Rust WebAssembly bindgen rules, add the following to your WORKSPACE file to add the external repositories for the Rust bindgen toolchain (in addition to the Rust rules setup):

load("@rules_rust//wasm_bindgen:repositories.bzl", "rust_wasm_bindgen_repositories")

rust_wasm_bindgen_repositories()

For more details on rust_wasm_bindgen_repositories, see here.

An example of this rule in use can be seen at @rules_rust//examples/wasm

ATTRIBUTES

Name Description Type Mandatory Default
name A unique name for this target. Name required  
bindgen_flags Flags to pass directly to the bindgen executable. See https://github.com/rustwasm/wasm-bindgen/ for details. List of strings optional []
target The type of output to generate. See https://rustwasm.github.io/wasm-bindgen/reference/deployment.html for details. String optional “bundler”
wasm_file The .wasm file or crate to generate bindings for. Label required  

rust_wasm_bindgen_toolchain

rust_wasm_bindgen_toolchain(name, bindgen)

The tools required for the rust_wasm_bindgen rule.

In cases where users want to control or change the version of wasm-bindgen used by rust_wasm_bindgen, a unique toolchain can be created as in the example below:

load("@rules_rust//bindgen:bindgen.bzl", "rust_bindgen_toolchain")

rust_bindgen_toolchain(
    bindgen = "//my/cargo_raze:cargo_bin_wasm_bindgen",
)

toolchain(
    name = "wasm_bindgen_toolchain",
    toolchain = "wasm_bindgen_toolchain_impl",
    toolchain_type = "@rules_rust//wasm_bindgen:wasm_bindgen_toolchain",
)

Now that you have your own toolchain, you need to register it by inserting the following statement in your WORKSPACE file:

register_toolchains("//my/toolchains:wasm_bindgen_toolchain")

For additional information, see the Bazel toolchains documentation.

ATTRIBUTES

Name Description Type Mandatory Default
name A unique name for this target. Name required  
bindgen The label of a wasm-bindgen-cli executable. Label optional None

rust_wasm_bindgen_repositories

rust_wasm_bindgen_repositories(register_default_toolchain)

Declare dependencies needed for rust_wasm_bindgen.

PARAMETERS

Name Description Default Value
register_default_toolchain If True, the default rust_wasm_bindgen_toolchain (@rules_rust//wasm_bindgen:default_wasm_bindgen_toolchain) is registered. This toolchain requires a set of dependencies that were generated using cargo raze. These will also be loaded. True