Rust Repositories

Repository rules for defining Rust dependencies and toolchains.

Functions

Repository Rules

rules_rust_dependencies

load("@rules_rust//rust:repositories.bzl", "rules_rust_dependencies")

rules_rust_dependencies()

Dependencies used in the implementation of rules_rust.

rust_analyzer_toolchain_repository

load("@rules_rust//rust:repositories.bzl", "rust_analyzer_toolchain_repository")

rust_analyzer_toolchain_repository(name, version, exec_compatible_with, target_compatible_with,
                                   sha256s, urls, auth, netrc, auth_patterns)

Assemble a remote rust_analyzer_toolchain target based on the given params.

PARAMETERS

NameDescriptionDefault Value
nameThe name of the toolchain proxy repository contianing the registerable toolchain.none
versionThe version of the tool among "nightly", "beta', or an exact version.none
exec_compatible_withA list of constraints for the execution platform for this toolchain.[]
target_compatible_withA list of constraints for the target platform for this toolchain.[]
sha256sA dict associating tool subdirectories to sha256 hashes. See rust_register_toolchains for more details.None
urlsA list of mirror urls containing the tools from the Rust-lang static file server. These must contain the '{}' used to substitute the tool being fetched (using .format). Defaults to ['https://static.rust-lang.org/dist/{}.tar.xz']None
authAuth object compatible with repository_ctx.download to use when downloading files. See repository_ctx.download for more details.None
netrc.netrc file to use for authentication; mirrors the eponymous attribute from http_archiveNone
auth_patternsOverride mapping of hostnames to authorization patterns; mirrors the eponymous attribute from http_archiveNone

RETURNS

str: The name of a registerable rust_analyzer_toolchain.

rust_register_toolchains

load("@rules_rust//rust:repositories.bzl", "rust_register_toolchains")

rust_register_toolchains(dev_components, edition, allocator_library, global_allocator_library,
                         register_toolchains, rustfmt_version, rust_analyzer_version, sha256s,
                         extra_target_triples, extra_rustc_flags, extra_exec_rustc_flags, urls,
                         versions, aliases, hub_name, compact_windows_names, toolchain_triples,
                         rustfmt_toolchain_triples, extra_toolchain_infos)

Emits a default set of toolchains for Linux, MacOS, and Freebsd

Skip this macro and call the rust_repository_set macros directly if you need a compiler for other hosts or for additional target triples.

The sha256s attribute represents a dict associating tool subdirectories to sha256 hashes. As an example:

{
    "rust-1.46.0-x86_64-unknown-linux-gnu": "e3b98bc3440fe92817881933f9564389eccb396f5f431f33d48b979fa2fbdcf5",
    "rustfmt-1.4.12-x86_64-unknown-linux-gnu": "1894e76913303d66bf40885a601462844eec15fca9e76a6d13c390d7000d64b0",
    "rust-std-1.46.0-x86_64-unknown-linux-gnu": "ac04aef80423f612c0079829b504902de27a6997214eb58ab0765d02f7ec1dbc",
}

This would match for exec_triple = "x86_64-unknown-linux-gnu". If not specified, rules_rust pulls from a non-exhaustive list of known checksums..

See load_arbitrary_tool in @rules_rust//rust:repositories.bzl for more details.

PARAMETERS

NameDescriptionDefault Value
dev_componentsWhether to download the rustc-dev components (defaults to False). Requires version to be "nightly".False
editionThe rust edition to be used by default (2015, 2018, or 2021). If absent, every target is required to specify its edition attribute.None
allocator_libraryTarget that provides allocator functions when rust_library targets are embedded in a cc_binary.None
global_allocator_libraryTarget that provides allocator functions when global allocator is used with cc_common.link.None
register_toolchainsIf true, repositories will be generated to produce and register rust_toolchain targets.True
rustfmt_versionThe version of rustfmt. If none is supplied and only a single version in versions is given, then this defaults to that version, otherwise will default to the default nightly version.None
rust_analyzer_versionThe version of Rustc to pair with rust-analyzer.None
sha256sA dict associating tool subdirectories to sha256 hashes.None
extra_target_triplesAdditional rust-style targets that rust toolchains should support.["wasm32-unknown-unknown", "wasm32-wasip1"]
extra_rustc_flagsDictionary of target triples to list of extra flags to pass to rustc in non-exec configuration.None
extra_exec_rustc_flagsExtra flags to pass to rustc in exec configuration.None
urlsA list of mirror urls containing the tools from the Rust-lang static file server. These must contain the '{}' used to substitute the tool being fetched (using .format).["https://static.rust-lang.org/dist/{}.tar.xz"]
versionsA list of toolchain versions to download. This parameter only accepts one versions per channel. E.g. ["1.65.0", "nightly/2022-11-02", "beta/2020-12-30"].["1.83.0", "nightly/2024-11-28"]
aliasesA mapping of "full" repository name to another name to use instead.{}
hub_nameThe name of the bzlmod hub repository for toolchains.None
compact_windows_namesWhether or not to produce compact repository names for windows toolchains. This is to avoid MAX_PATH issues.True
toolchain_triplesMapping of rust target triple -> repository name to create.{"aarch64-apple-darwin": "rust_darwin_aarch64", "aarch64-pc-windows-msvc": "rust_windows_aarch64", "aarch64-unknown-linux-gnu": "rust_linux_aarch64", "s390x-unknown-linux-gnu": "rust_linux_s390x", "x86_64-apple-darwin": "rust_darwin_x86_64", "x86_64-pc-windows-msvc": "rust_windows_x86_64", "x86_64-unknown-freebsd": "rust_freebsd_x86_64", "x86_64-unknown-linux-gnu": "rust_linux_x86_64"}
rustfmt_toolchain_triplesLike toolchain_triples, but for rustfmt toolchains.{"aarch64-apple-darwin": "rust_darwin_aarch64", "aarch64-pc-windows-msvc": "rust_windows_aarch64", "aarch64-unknown-linux-gnu": "rust_linux_aarch64", "s390x-unknown-linux-gnu": "rust_linux_s390x", "x86_64-apple-darwin": "rust_darwin_x86_64", "x86_64-pc-windows-msvc": "rust_windows_x86_64", "x86_64-unknown-freebsd": "rust_freebsd_x86_64", "x86_64-unknown-linux-gnu": "rust_linux_x86_64"}
extra_toolchain_infos(dict[str, dict], optional): Mapping of information about extra toolchains which were created outside of this call, which should be added to the hub repo.None

rust_repositories

load("@rules_rust//rust:repositories.bzl", "rust_repositories")

rust_repositories(kwargs)

Deprecated: Use rules_rust_dependencies and rust_register_toolchains directly.

PARAMETERS

NameDescriptionDefault Value
kwargsKeyword arguments for the rust_register_toolchains macro.none

rust_repository_set

load("@rules_rust//rust:repositories.bzl", "rust_repository_set")

rust_repository_set(name, versions, exec_triple, target_settings, allocator_library,
                    global_allocator_library, extra_target_triples, rustfmt_version, edition,
                    dev_components, extra_rustc_flags, extra_exec_rustc_flags, opt_level, sha256s,
                    urls, auth, netrc, auth_patterns, register_toolchain, exec_compatible_with,
                    default_target_compatible_with, aliases, compact_windows_names)

Assembles a remote repository for the given toolchain params, produces a proxy repository to contain the toolchain declaration, and registers the toolchains.

PARAMETERS

NameDescriptionDefault Value
nameThe name of the generated repositorynone
versionsA list of toolchain versions to download. This paramter only accepts one versions per channel. E.g. ["1.65.0", "nightly/2022-11-02", "beta/2020-12-30"].none
exec_tripleThe Rust-style target that this compiler runs onnone
target_settingsA list of config_settings that must be satisfied by the target configuration in order for this set of toolchains to be selected during toolchain resolution.[]
allocator_libraryTarget that provides allocator functions when rust_library targets are embedded in a cc_binary.None
global_allocator_libraryTarget that provides allocator functions a global allocator is used with cc_common.link.None
extra_target_triplesAdditional rust-style targets that this set of toolchains should support. If a map, values should be (optional) target_compatible_with lists for that particular target triple.{}
rustfmt_versionThe version of rustfmt to be associated with the toolchain.None
editionThe rust edition to be used by default (2015, 2018, or 2021). If absent, every rule is required to specify its edition attribute.None
dev_componentsWhether to download the rustc-dev components. Requires version to be "nightly".False
extra_rustc_flagsDictionary of target triples to list of extra flags to pass to rustc in non-exec configuration.None
extra_exec_rustc_flagsExtra flags to pass to rustc in exec configuration.None
opt_levelDictionary of target triples to optimiztion config.None
sha256sA dict associating tool subdirectories to sha256 hashes. See rust_register_toolchains for more details.None
urlsA list of mirror urls containing the tools from the Rust-lang static file server. These must contain the '{}' used to substitute the tool being fetched (using .format).["https://static.rust-lang.org/dist/{}.tar.xz"]
authAuth object compatible with repository_ctx.download to use when downloading files. See repository_ctx.download for more details.None
netrc.netrc file to use for authentication; mirrors the eponymous attribute from http_archiveNone
auth_patternsOverride mapping of hostnames to authorization patterns; mirrors the eponymous attribute from http_archiveNone
register_toolchainIf True, the generated rust_toolchain target will become a registered toolchain.True
exec_compatible_withA list of constraints for the execution platform for this toolchain.None
default_target_compatible_withA list of constraints for the target platform for this toolchain when the exec platform is the same as the target platform.None
aliasesReplacement names to use for toolchains created by this macro.{}
compact_windows_namesWhether or not to produce compact repository names for windows toolchains. This is to avoid MAX_PATH issues.True

RETURNS

dict[str, dict]: A dict of informations about all generated toolchains.

rust_toolchain_repository

load("@rules_rust//rust:repositories.bzl", "rust_toolchain_repository")

rust_toolchain_repository(name, version, exec_triple, target_triple, exec_compatible_with,
                          target_compatible_with, target_settings, channel, allocator_library,
                          global_allocator_library, rustfmt_version, edition, dev_components,
                          extra_rustc_flags, extra_exec_rustc_flags, opt_level, sha256s, urls, auth,
                          netrc, auth_patterns)

Assembles a remote repository for the given toolchain params, produces a proxy repository to contain the toolchain declaration, and registers the toolchains.

PARAMETERS

NameDescriptionDefault Value
nameThe name of the generated repositorynone
versionThe version of the tool among "nightly", "beta", or an exact version.none
exec_tripleThe Rust-style target that this compiler runs on.none
target_tripleThe Rust-style target to build for.none
exec_compatible_withA list of constraints for the execution platform for this toolchain.None
target_compatible_withA list of constraints for the target platform for this toolchain.None
target_settingsA list of config_settings that must be satisfied by the target configuration in order for this toolchain to be selected during toolchain resolution.[]
channelThe channel of the Rust toolchain.None
allocator_libraryTarget that provides allocator functions when rust_library targets are embedded in a cc_binary.None
global_allocator_libraryTarget that provides allocator functions when a global allocator is used with cc_common.link.None
rustfmt_versionThe version of rustfmt to be associated with the toolchain.None
editionThe rust edition to be used by default (2015, 2018, or 2021). If absent, every rule is required to specify its edition attribute.None
dev_componentsWhether to download the rustc-dev components. Requires version to be "nightly". Defaults to False.False
extra_rustc_flagsExtra flags to pass to rustc in non-exec configuration.None
extra_exec_rustc_flagsExtra flags to pass to rustc in exec configuration.None
opt_levelOptimization level config for this toolchain.None
sha256sA dict associating tool subdirectories to sha256 hashes. See rust_register_toolchains for more details.None
urlsA list of mirror urls containing the tools from the Rust-lang static file server. These must contain the '{}' used to substitute the tool being fetched (using .format). Defaults to ['https://static.rust-lang.org/dist/{}.tar.xz']["https://static.rust-lang.org/dist/{}.tar.xz"]
authAuth object compatible with repository_ctx.download to use when downloading files. See repository_ctx.download for more details.None
netrc.netrc file to use for authentication; mirrors the eponymous attribute from http_archiveNone
auth_patternsA list of patterns to match against urls for which the auth object should be used.None

RETURNS

dict[str, str]: Information about the registerable toolchain created by this rule.

rust_toolchain_repository_proxy

load("@rules_rust//rust:repositories.bzl", "rust_toolchain_repository_proxy")

rust_toolchain_repository_proxy(name, exec_compatible_with, repo_mapping, target_compatible_with,
                                target_settings, toolchain, toolchain_type)

Generates a toolchain-bearing repository that declares the toolchains from some other rust_toolchain_repository.

ATTRIBUTES

NameDescriptionTypeMandatoryDefault
nameA unique name for this repository.Namerequired
exec_compatible_withA list of constraints for the execution platform for this toolchain.List of stringsoptional[]
repo_mappingIn WORKSPACE context only: a dictionary from local repository name to global repository name. This allows controls over workspace dependency resolution for dependencies of this repository.

For example, an entry "@foo": "@bar" declares that, for any time this repository depends on @foo (such as a dependency on @foo//some:target, it should actually resolve that dependency within globally-declared @bar (@bar//some:target).

This attribute is not supported in MODULE.bazel context (when invoking a repository rule inside a module extension's implementation function).
Dictionary: String -> Stringoptional
target_compatible_withA list of constraints for the target platform for this toolchain.List of stringsoptional[]
target_settingsA list of config_settings that must be satisfied by the target configuration in order for this toolchain to be selected during toolchain resolution.List of stringsoptional[]
toolchainThe name of the toolchain implementation target.Stringrequired
toolchain_typeThe toolchain type of the toolchain to declareStringrequired

rust_toolchain_tools_repository

load("@rules_rust//rust:repositories.bzl", "rust_toolchain_tools_repository")

rust_toolchain_tools_repository(name, allocator_library, auth, auth_patterns, dev_components,
                                edition, exec_triple, extra_exec_rustc_flags, extra_rustc_flags,
                                global_allocator_library, netrc, opt_level, repo_mapping,
                                rustfmt_version, sha256s, target_triple, urls, version)

Composes a single workspace containing the toolchain components for compiling on a given platform to a series of target platforms.

A given instance of this rule should be accompanied by a toolchain_repository_proxy invocation to declare its toolchains to Bazel; the indirection allows separating toolchain selection from toolchain fetching.

ATTRIBUTES

NameDescriptionTypeMandatoryDefault
nameA unique name for this repository.Namerequired
allocator_libraryTarget that provides allocator functions when rust_library targets are embedded in a cc_binary.Stringoptional"@rules_rust//ffi/cc/allocator_library"
authAuth object compatible with repository_ctx.download to use when downloading files. See repository_ctx.download for more details.Dictionary: String -> Stringoptional{}
auth_patternsA list of patterns to match against urls for which the auth object should be used.List of stringsoptional[]
dev_componentsWhether to download the rustc-dev components (defaults to False). Requires version to be "nightly".BooleanoptionalFalse
editionThe rust edition to be used by default (2015, 2018, or 2021). If absent, every rule is required to specify its edition attribute.Stringoptional""
exec_tripleThe Rust-style target that this compiler runs onStringrequired
extra_exec_rustc_flagsExtra flags to pass to rustc in exec configurationList of stringsoptional[]
extra_rustc_flagsExtra flags to pass to rustc in non-exec configurationList of stringsoptional[]
global_allocator_libraryTarget that provides allocator functions when a global allocator is used with cc_common.link.Stringoptional"@rules_rust//ffi/cc/global_allocator_library"
netrc.netrc file to use for authentication; mirrors the eponymous attribute from http_archiveStringoptional""
opt_levelRustc optimization levels. For more details see the documentation for rust_toolchain.opt_level.Dictionary: String -> Stringoptional{}
repo_mappingIn WORKSPACE context only: a dictionary from local repository name to global repository name. This allows controls over workspace dependency resolution for dependencies of this repository.

For example, an entry "@foo": "@bar" declares that, for any time this repository depends on @foo (such as a dependency on @foo//some:target, it should actually resolve that dependency within globally-declared @bar (@bar//some:target).

This attribute is not supported in MODULE.bazel context (when invoking a repository rule inside a module extension's implementation function).
Dictionary: String -> Stringoptional
rustfmt_versionThe version of the tool among "nightly", "beta", or an exact version.Stringoptional""
sha256sA dict associating tool subdirectories to sha256 hashes. See rust_register_toolchains for more details.Dictionary: String -> Stringoptional{}
target_tripleThe Rust-style target that this compiler builds for.Stringrequired
urlsA list of mirror urls containing the tools from the Rust-lang static file server. These must contain the '{}' used to substitute the tool being fetched (using .format).List of stringsoptional["https://static.rust-lang.org/dist/{}.tar.xz"]
versionThe version of the tool among "nightly", "beta", or an exact version.Stringrequired