| # Toolchains | |
| A Rust build in Bazel selects its compiler, standard library, and companion tools | |
| through a set of registered [Bazel toolchains][bazel_toolchains]. `rules_rust` | |
| ships one toolchain type per companion tool so that Rust, `rust-analyzer`, and | |
| `rustfmt` can be resolved independently. | |
| [bazel_toolchains]: https://bazel.build/extending/toolchains | |
| Most users register toolchains via the `rust` module extension (see | |
| [Bzlmod](./rust_bzlmod.md)) rather than declaring these rules directly. The rules | |
| below exist for users who need to define custom toolchains — for example, to point | |
| at a locally built `rustc` or to add a target triple that the extension doesn't | |
| cover. | |
| ## Toolchain rules | |
| - [rust_toolchain](./rust_toolchain.md) — Declare a Rust compilation toolchain: the | |
| `rustc` binary, standard library, linker, and per-target compilation settings. | |
| - [rustfmt_toolchain](./rustfmt_toolchain.md) — Declare a toolchain providing the | |
| `rustfmt` binary used by [rustfmt](./rustfmt.md) rules. | |
| - [rust_analyzer_toolchain](./rust_analyzer_toolchain.md) — Declare a toolchain | |
| providing the `rust-analyzer` binary and proc-macro server used by the | |
| [rust_analyzer](./rust_analyzer.md) integration. | |
| ## Data rules | |
| - [rust_stdlib_filegroup](./rust_stdlib_filegroup.md) — Group the files of a Rust | |
| standard library archive into a target that can be attached to a | |
| `rust_toolchain` via the `rust_std` attribute. |