This module provides a single place for all aspects, rules, and macros that are meant to have stardoc generated documentation.

Rules

crate_universe

A rule for downloading Rust dependencies (crates).

WARNING: This rule experimental and subject to change without warning.

Environment Variables:

  • REPIN: Re-pin the lockfile if set (useful for repinning deps from multiple rulesets).
  • RULES_RUST_REPIN: Re-pin the lockfile if set (useful for only repinning Rust deps).
  • RULES_RUST_CRATE_UNIVERSE_RESOLVER_URL_OVERRIDE: Override URL to use to download resolver binary
    • for local paths use a file:// URL.
  • RULES_RUST_CRATE_UNIVERSE_RESOLVER_URL_OVERRIDE_SHA256: An optional sha256 value for the binary at the override url location.

name

A unique name for this repository.

additional_registries

Additional registries used by Cargo (see https://doc.rust-lang.org/cargo/reference/registries.html).

Dict of registry_name: index_url.

cargo_toml_files

A list of Cargo manifests (Cargo.toml files).

default_registry_download_url_template

A template for where to download crates from for the default crate registry. This must contain {version} and {crate} templates.

iso_date

The iso_date of cargo binary the resolver should use. Note: This can only be set if version is beta or nightly

lockfile

The path to a file which stores pinned information about the generated dependency graph. this target must be a file and will be updated by the repository rule when the REPIN environment variable is set. If this is not set, dependencies will be re-resolved more often, setting this allows caching resolves, but will error if the cache is stale.

overrides

Mapping of crate name to specification overrides. See crate.override for more details.

packages

A list of crate specifications. See crate.spec for more details.

repo_mapping

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).

resolver

The label of a crate_universe resolver. Resolvers can be built using cargo_bootstrap_repository but if possible, it's recommended to stick with downloading a resoler via resolver_download_url_template.

resolver_download_url_template

URL template from which to download the resolver binary. {host_triple} and {extension} will be filled in according to the host platform.

resolver_sha256s

Dictionary of host_triple -> sha256 for resolver binary.

rust_toolchain_repository_template

The template to use for finding the host rust_toolchain repository. {version} (eg. '1.53.0'), {triple} (eg. 'x86_64-unknown-linux-gnu'), {system} (eg. 'darwin'), and {arch} (eg. 'aarch64') will be replaced in the string if present.

rust_toolchain_repository_tool_path

The relative path of the tools in the repository

sha256s

The sha256 checksum of the desired rust artifacts

supported_targets

A list of supported platform triples to consider when resoliving dependencies.

version

The version of cargo the resolver should use


Macros and Functions

crate.spec

A simple crate definition for use in the crate_universe rule.

WARNING: This rule experimental and subject to change without warning.

Example:

load("@rules_rust//crate_universe:defs.bzl", "crate_universe", "crate")

crate_universe(
    name = "spec_example",
    packages = [
        crate.spec(
            name = "lazy_static",
            semver = "=1.4",
        ),
    ],
)

name

The name of the crate as it would appear in a crate registry.

semver

The desired version (semver) of the crate

features

A list of desired features.


crate.override

A map of overrides for a particular crate

WARNING: This rule experimental and subject to change without warning.

Example:

load("@rules_rust//crate_universe:defs.bzl", "crate_universe", "crate")

crate_universe(
    name = "override_example",
    # [...]
    overrides = {
        "tokio": crate.override(
            extra_rustc_env_vars = {
                "MY_ENV_VAR": "MY_ENV_VALUE",
            },
            extra_build_script_env_vars = {
                "MY_BUILD_SCRIPT_ENV_VAR": "MY_ENV_VALUE",
            },
            extra_bazel_deps = {
                # Extra dependencies are per target. They are additive.
                "cfg(unix)": ["@somerepo//:foo"],  # cfg() predicate.
                "x86_64-apple-darwin": ["@somerepo//:bar"],  # Specific triple.
                "cfg(all())": ["@somerepo//:baz"],  # Applies to all targets ("regular dependency").
            },
            extra_build_script_bazel_deps = {
                # Extra dependencies are per target. They are additive.
                "cfg(unix)": ["@buildscriptdep//:foo"],
                "x86_64-apple-darwin": ["@buildscriptdep//:bar"],
                "cfg(all())": ["@buildscriptdep//:baz"],
            },
            extra_bazel_data_deps = {
                # ...
            },
            extra_build_script_bazel_data_deps = {
                # ...
            },
        ),
    },
)

extra_bazel_data_deps

Targets to add to the data attribute of the generated target (eg: rust_library.data).

extra_bazel_deps

Targets to add to the deps attribute of the generated target (eg: rust_library.deps).

extra_build_script_bazel_data_deps

Targets to add to the data attribute of the generated cargo_build_script target.

extra_build_script_bazel_deps

Targets to add to the deps attribute of the generated cargo_build_script target.

extra_build_script_env_vars

Environment variables to add to the build_script_env attribute of the generated cargo_build_script target.

extra_rustc_env_vars

Environment variables to add to the rustc_env attribute for the generated target (eg: rust_library.rustc_env).

features_to_remove

A list of features to remove from a generated target.