Cargo
cargo_dep_env
cargo_dep_env(name, src, out_dir)
A rule for generating variables for dependent cargo_build_script
s without a build script. This is useful for using Bazel rules instead of a build script, while also generating configuration information for build scripts which depend on this crate.
ATTRIBUTES
Name | Description | Type | Mandatory | Default |
---|---|---|---|---|
name | A unique name for this target. | Name | required | |
src | File containing additional environment variables to set for build scripts of direct dependencies. This has the same effect as a cargo_build_script which prints cargo:VAR=VALUE lines, but without requiring a build script.This files should contain a single variable per line, of format NAME=value , and newlines may be included in a value by ending a line with a trailing back-slash (\\ ). | Label | required | |
out_dir | Folder containing additional inputs when building all direct dependencies. This has the same effect as a cargo_build_script which prints puts files into $OUT_DIR , but without requiring a build script. | Label | optional | None |
cargo_build_script
cargo_build_script(name, edition, crate_name, crate_root, srcs, crate_features, version, deps, link_deps, proc_macro_deps, build_script_env, data, compile_data, tools, links, rundir, rustc_env, rustc_env_files, rustc_flags, visibility, tags, aliases, pkg_name, kwargs)
Compile and execute a rust build script to generate build attributes
This rules take the same arguments as rust_binary.
Example:
Suppose you have a crate with a cargo build script build.rs
:
[workspace]/
hello_lib/
BUILD
build.rs
src/
lib.rs
Then you want to use the build script in the following:
hello_lib/BUILD
:
package(default_visibility = ["//visibility:public"])
load("@rules_rust//rust:defs.bzl", "rust_binary", "rust_library")
load("@rules_rust//cargo:defs.bzl", "cargo_build_script")
# This will run the build script from the root of the workspace, and
# collect the outputs.
cargo_build_script(
name = "build_script",
srcs = ["build.rs"],
# Optional environment variables passed during build.rs compilation
rustc_env = {
"CARGO_PKG_VERSION": "0.1.2",
},
# Optional environment variables passed during build.rs execution.
# Note that as the build script's working directory is not execroot,
# execpath/location will return an absolute path, instead of a relative
# one.
build_script_env = {
"SOME_TOOL_OR_FILE": "$(execpath @tool//:binary)"
},
# Optional data/tool dependencies
data = ["@tool//:binary"],
)
rust_library(
name = "hello_lib",
srcs = [
"src/lib.rs",
],
deps = [":build_script"],
)
The hello_lib
target will be build with the flags and the environment variables declared by the build script in addition to the file generated by it.
PARAMETERS
cargo_env
cargo_env(env)
A helper for generating platform specific environment variables
load("@rules_rust//rust:defs.bzl", "rust_common")
load("@rules_rust//cargo:defs.bzl", "cargo_bootstrap_repository", "cargo_env")
cargo_bootstrap_repository(
name = "bootstrapped_bin",
cargo_lockfile = "//:Cargo.lock",
cargo_toml = "//:Cargo.toml",
srcs = ["//:resolver_srcs"],
version = rust_common.default_version,
binary = "my-crate-binary",
env = {
"x86_64-unknown-linux-gnu": cargo_env({
"FOO": "BAR",
}),
},
env_label = {
"aarch64-unknown-linux-musl": cargo_env({
"DOC": "//:README.md",
}),
}
)
PARAMETERS
RETURNS
str: A json encoded string of the environment variables
cargo_bootstrap_repository
cargo_bootstrap_repository(name, srcs, binary, build_mode, cargo_config, cargo_lockfile, cargo_toml, env, env_label, repo_mapping, rust_toolchain_cargo_template, rust_toolchain_rustc_template, timeout, version)
A rule for bootstrapping a Rust binary using Cargo
ATTRIBUTES
Name | Description | Type | Mandatory | Default |
---|---|---|---|---|
name | A unique name for this repository. | Name | required | |
srcs | Souce files of the crate to build. Passing source files here can be used to trigger rebuilds when changes are made | List of labels | optional | [] |
binary | The binary to build (the --bin parameter for Cargo). If left empty, the repository name will be used. | String | optional | "" |
build_mode | The build mode the binary should be built with | String | optional | "release" |
cargo_config | The path of the Cargo configuration (Config.toml ) file. | Label | optional | None |
cargo_lockfile | The lockfile of the crate_universe resolver | Label | required | |
cargo_toml | The path of the Cargo.toml file. | Label | required | |
env | A mapping of platform triple to a set of environment variables. See cargo_env for usage details. Additionally, the platform triple * applies to all platforms. | Dictionary: String -> String | optional | {} |
env_label | A mapping of platform triple to a set of environment variables. This attribute differs from env in that all variables passed here must be fully qualified labels of files. See cargo_env for usage details. Additionally, the platform triple * applies to all platforms. | Dictionary: String -> String | optional | {} |
repo_mapping | In 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 -> String | optional | |
rust_toolchain_cargo_template | The template to use for finding the host cargo binary. {version} (eg. '1.53.0'), {triple} (eg. 'x86_64-unknown-linux-gnu'), {arch} (eg. 'aarch64'), {vendor} (eg. 'unknown'), {system} (eg. 'darwin'), {channel} (eg. 'stable'), and {tool} (eg. 'rustc.exe') will be replaced in the string if present. | String | optional | "@rust_{system}_{arch}__{triple}__{channel}_tools//:bin/{tool}" |
rust_toolchain_rustc_template | The template to use for finding the host rustc binary. {version} (eg. '1.53.0'), {triple} (eg. 'x86_64-unknown-linux-gnu'), {arch} (eg. 'aarch64'), {vendor} (eg. 'unknown'), {system} (eg. 'darwin'), {channel} (eg. 'stable'), and {tool} (eg. 'rustc.exe') will be replaced in the string if present. | String | optional | "@rust_{system}_{arch}__{triple}__{channel}_tools//:bin/{tool}" |
timeout | Maximum duration of the Cargo build command in seconds | Integer | optional | 600 |
version | The version of Rust the currently registered toolchain is using. Eg. 1.56.0 , or nightly/2021-09-08 | String | optional | "1.83.0" |