diff --git a/cargo/cargo_build_script.bzl b/cargo/cargo_build_script.bzl index 5ef33565cd..ed01729674 100644 --- a/cargo/cargo_build_script.bzl +++ b/cargo/cargo_build_script.bzl @@ -1,13 +1,14 @@ # buildifier: disable=module-docstring load("@bazel_tools//tools/build_defs/cc:action_names.bzl", "C_COMPILE_ACTION_NAME") load("@bazel_tools//tools/cpp:toolchain_utils.bzl", "find_cpp_toolchain") +load("//rust:defs.bzl", "rust_common") load("//rust:rust.bzl", "rust_binary") # buildifier: disable=bzl-visibility load("//rust/private:rust.bzl", "name_to_crate_name") # buildifier: disable=bzl-visibility -load("//rust/private:rustc.bzl", "BuildInfo", "DepInfo", "get_compilation_mode_opts", "get_linker_and_args") +load("//rust/private:rustc.bzl", "BuildInfo", "get_compilation_mode_opts", "get_linker_and_args") # buildifier: disable=bzl-visibility load("//rust/private:utils.bzl", "expand_locations", "find_cc_toolchain", "find_toolchain") @@ -161,11 +162,11 @@ def _build_script_impl(ctx): ]) build_script_inputs = [] for dep in ctx.attr.deps: - if DepInfo in dep and dep[DepInfo].dep_env: - dep_env_file = dep[DepInfo].dep_env + if rust_common.dep_info in dep and dep[rust_common.dep_info].dep_env: + dep_env_file = dep[rust_common.dep_info].dep_env args.add(dep_env_file.path) build_script_inputs.append(dep_env_file) - for dep_build_info in dep[DepInfo].transitive_build_infos.to_list(): + for dep_build_info in dep[rust_common.dep_info].transitive_build_infos.to_list(): build_script_inputs.append(dep_build_info.out_dir) ctx.actions.run( @@ -211,7 +212,7 @@ _build_script_run = rule( ), "deps": attr.label_list( doc = "The Rust dependencies of the crate defined by `crate_name`", - providers = [DepInfo], + providers = [rust_common.dep_info], ), "links": attr.string( doc = "The name of the native library this crate links against.", diff --git a/docs/flatten.md b/docs/flatten.md index b6cc6a3376..b36309a952 100644 --- a/docs/flatten.md +++ b/docs/flatten.md @@ -1010,9 +1010,9 @@ Run the test with `bazel build //hello_lib:hello_lib_test`. ## rust_toolchain
-rust_toolchain(name, binary_ext, cargo, clippy_driver, debug_info, default_edition, dylib_ext, - exec_triple, opt_level, os, rust_doc, rust_lib, rustc, rustc_lib, rustc_src, rustfmt, - staticlib_ext, stdlib_linkflags, target_triple) +rust_toolchain(name, allocator_library, binary_ext, cargo, clippy_driver, debug_info, + default_edition, dylib_ext, exec_triple, opt_level, os, rust_doc, rust_lib, rustc, + rustc_lib, rustc_src, rustfmt, staticlib_ext, stdlib_linkflags, target_triple)Declares a Rust toolchain for use. @@ -1062,6 +1062,7 @@ See @rules_rust//rust:repositories.bzl for examples of defining the @rust_cpuX r | Name | Description | Type | Mandatory | Default | | :------------- | :------------- | :------------- | :------------- | :------------- | | name | A unique name for this target. | Name | required | | +| allocator_library | Target that provides allocator functions when rust_library targets are embedded in a cc_binary. | Label | optional | None | | binary_ext | The extension for binaries created from rustc. | String | required | | | cargo | The location of the
cargo
binary. Can be a direct source or a filegroup containing one item. | Label | optional | None |
| clippy_driver | The location of the clippy-driver
binary. Can be a direct source or a filegroup containing one item. | Label | optional | None |
diff --git a/docs/rust_repositories.md b/docs/rust_repositories.md
index e5577e0f8d..1f8631d8f3 100644
--- a/docs/rust_repositories.md
+++ b/docs/rust_repositories.md
@@ -10,9 +10,9 @@
## rust_toolchain
-rust_toolchain(name, binary_ext, cargo, clippy_driver, debug_info, default_edition, dylib_ext, - exec_triple, opt_level, os, rust_doc, rust_lib, rustc, rustc_lib, rustc_src, rustfmt, - staticlib_ext, stdlib_linkflags, target_triple) +rust_toolchain(name, allocator_library, binary_ext, cargo, clippy_driver, debug_info, + default_edition, dylib_ext, exec_triple, opt_level, os, rust_doc, rust_lib, rustc, + rustc_lib, rustc_src, rustfmt, staticlib_ext, stdlib_linkflags, target_triple)Declares a Rust toolchain for use. @@ -62,6 +62,7 @@ See @rules_rust//rust:repositories.bzl for examples of defining the @rust_cpuX r | Name | Description | Type | Mandatory | Default | | :------------- | :------------- | :------------- | :------------- | :------------- | | name | A unique name for this target. | Name | required | | +| allocator_library | Target that provides allocator functions when rust_library targets are embedded in a cc_binary. | Label | optional | None | | binary_ext | The extension for binaries created from rustc. | String | required | | | cargo | The location of the
cargo
binary. Can be a direct source or a filegroup containing one item. | Label | optional | None |
| clippy_driver | The location of the clippy-driver
binary. Can be a direct source or a filegroup containing one item. | Label | optional | None |
diff --git a/rust/private/common.bzl b/rust/private/common.bzl
index 4e3f740876..d3de8730f6 100644
--- a/rust/private/common.bzl
+++ b/rust/private/common.bzl
@@ -23,8 +23,9 @@ which exports the `rust_common` struct.
In the Bazel lingo, `rust_common` gives the access to the Rust Sandwich API.
"""
-load(":providers.bzl", "CrateInfo")
+load(":providers.bzl", "CrateInfo", "DepInfo")
rust_common = struct(
crate_info = CrateInfo,
+ dep_info = DepInfo,
)
diff --git a/rust/private/providers.bzl b/rust/private/providers.bzl
index 5035da661f..549e371c6a 100644
--- a/rust/private/providers.bzl
+++ b/rust/private/providers.bzl
@@ -30,3 +30,15 @@ CrateInfo = provider(
"type": "str: The type of this crate. eg. lib or bin",
},
)
+
+DepInfo = provider(
+ doc = "A provider containing information about a Crate's dependencies.",
+ fields = {
+ "dep_env": "File: File with environment variables direct dependencies build scripts rely upon.",
+ "direct_crates": "depset[CrateInfo]",
+ "transitive_build_infos": "depset[BuildInfo]",
+ "transitive_crates": "depset[CrateInfo]",
+ "transitive_libs": "List[File]: All transitive dependencies, not filtered by type.",
+ "transitive_noncrates": "depset[LinkerInput]: All transitive dependencies that aren't crates.",
+ },
+)
diff --git a/rust/private/rustc.bzl b/rust/private/rustc.bzl
index a620a054d4..c7b88c00d5 100644
--- a/rust/private/rustc.bzl
+++ b/rust/private/rustc.bzl
@@ -47,18 +47,6 @@ AliasableDepInfo = provider(
},
)
-DepInfo = provider(
- doc = "A provider containing information about a Crate's dependencies.",
- fields = {
- "dep_env": "File: File with environment variables direct dependencies build scripts rely upon.",
- "direct_crates": "depset[CrateInfo]",
- "transitive_build_infos": "depset[BuildInfo]",
- "transitive_crates": "depset[CrateInfo]",
- "transitive_libs": "List[File]: All transitive dependencies, not filtered by type.",
- "transitive_noncrates": "depset[LinkerInput]: All transitive dependencies that aren't crates.",
- },
-)
-
_error_format_values = ["human", "json", "short"]
ErrorFormatInfo = provider(
@@ -163,10 +151,10 @@ def collect_deps(label, deps, proc_macro_deps, aliases, toolchain):
dep = direct_dep,
))
- transitive_crates.append(depset([dep[rust_common.crate_info]], transitive = [dep[DepInfo].transitive_crates]))
- transitive_noncrates.append(dep[DepInfo].transitive_noncrates)
- transitive_noncrate_libs.append(depset(dep[DepInfo].transitive_libs))
- transitive_build_infos.append(dep[DepInfo].transitive_build_infos)
+ transitive_crates.append(depset([dep[rust_common.crate_info]], transitive = [dep[rust_common.dep_info].transitive_crates]))
+ transitive_noncrates.append(dep[rust_common.dep_info].transitive_noncrates)
+ transitive_noncrate_libs.append(depset(dep[rust_common.dep_info].transitive_libs))
+ transitive_build_infos.append(dep[rust_common.dep_info].transitive_build_infos)
elif CcInfo in dep:
# This dependency is a cc_library
@@ -190,7 +178,7 @@ def collect_deps(label, deps, proc_macro_deps, aliases, toolchain):
)
return (
- DepInfo(
+ rust_common.dep_info(
direct_crates = depset(direct_crates),
transitive_crates = transitive_crates_depset,
transitive_noncrates = depset(
diff --git a/rust/private/rustdoc.bzl b/rust/private/rustdoc.bzl
index 00d8456ebd..edbc4b8f46 100644
--- a/rust/private/rustdoc.bzl
+++ b/rust/private/rustdoc.bzl
@@ -14,7 +14,7 @@
# buildifier: disable=module-docstring
load("//rust/private:common.bzl", "rust_common")
-load("//rust/private:rustc.bzl", "DepInfo", "add_crate_link_flags", "add_edition_flags")
+load("//rust/private:rustc.bzl", "add_crate_link_flags", "add_edition_flags")
load("//rust/private:utils.bzl", "find_toolchain")
_rust_doc_doc = """Generates code documentation.
@@ -66,7 +66,7 @@ def _rust_doc_impl(ctx):
fail("Expected rust_library or rust_binary.", "dep")
crate = ctx.attr.dep[rust_common.crate_info]
- dep_info = ctx.attr.dep[DepInfo]
+ dep_info = ctx.attr.dep[rust_common.dep_info]
toolchain = find_toolchain(ctx)
diff --git a/rust/private/rustdoc_test.bzl b/rust/private/rustdoc_test.bzl
index 641dacecd1..312685ef29 100644
--- a/rust/private/rustdoc_test.bzl
+++ b/rust/private/rustdoc_test.bzl
@@ -14,7 +14,6 @@
# buildifier: disable=module-docstring
load("//rust/private:common.bzl", "rust_common")
-load("//rust/private:rustc.bzl", "DepInfo")
load("//rust/private:utils.bzl", "find_toolchain", "get_lib_name", "get_preferred_artifact")
def _rust_doc_test_impl(ctx):
@@ -33,7 +32,7 @@ def _rust_doc_test_impl(ctx):
toolchain = find_toolchain(ctx)
- dep_info = ctx.attr.dep[DepInfo]
+ dep_info = ctx.attr.dep[rust_common.dep_info]
# Construct rustdoc test command, which will be written to a shell script
# to be executed to run the test.
diff --git a/test/unit/stdlib_ordering/stdlib_ordering.bzl b/test/unit/stdlib_ordering/stdlib_ordering.bzl
index 2ae211e5d0..645943f39e 100644
--- a/test/unit/stdlib_ordering/stdlib_ordering.bzl
+++ b/test/unit/stdlib_ordering/stdlib_ordering.bzl
@@ -1,4 +1,5 @@
"""Unittest to verify ordering of rust stdlib in rust_library() CcInfo"""
+
load("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts")
load("//rust:defs.bzl", "rust_library")