# Cargo * [cargo_bootstrap_repository](#cargo_bootstrap_repository) * [cargo_build_script](#cargo_build_script) * [cargo_dep_env](#cargo_dep_env) * [cargo_env](#cargo_env) ## 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.
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`: ```output [workspace]/ hello_lib/ BUILD build.rs src/ lib.rs ``` Then you want to use the build script in the following: `hello_lib/BUILD`: ```python 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** | Name | Description | Default Value | | :------------- | :------------- | :------------- | | name | The name for the underlying rule. This should be the name of the package being compiled, optionally with a suffix of `_bs`. Otherwise, you can set the package name via `pkg_name`. | none | | edition | The rust edition to use for the internal binary crate. | `None` | | crate_name | Crate name to use for build script. | `None` | | crate_root | The file that will be passed to rustc to be used for building this crate. | `None` | | srcs | Souce files of the crate to build. Passing source files here can be used to trigger rebuilds when changes are made. | `[]` | | crate_features | A list of features to enable for the build script. | `[]` | | version | The semantic version (semver) of the crate. | `None` | | deps | The build-dependencies of the crate. | `[]` | | link_deps | The subset of the (normal) dependencies of the crate that have the links attribute and therefore provide environment variables to this build script. | `[]` | | proc_macro_deps | List of rust_proc_macro targets used to build the script. | `[]` | | build_script_env | Environment variables for build scripts. | `{}` | | data | Files needed by the build script. | `[]` | | compile_data | Files needed for the compilation of the build script. | `[]` | | tools | Tools (executables) needed by the build script. | `[]` | | links | Name of the native library this crate links against. | `None` | | rundir | A directory to `cd` to before the cargo_build_script is run. This should be a path relative to the exec root.
cargo_env(env)A helper for generating platform specific environment variables ```python 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** | Name | Description | Default Value | | :------------- | :------------- | :------------- | | env | A map of environment variables | none | **RETURNS** str: A json encoded string of the environment variables ## cargo_bootstrap_repository
cargo_bootstrap_repository(name, srcs, binary, build_mode, 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](https://doc.rust-lang.org/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_lockfile | The lockfile of the crate_universe resolver | Label | required | | | cargo_toml | The path of the crate_universe resolver manifest (`Cargo.toml` file) | Label | required | | | env | A mapping of platform triple to a set of environment variables. See [cargo_env](#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](#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.