From 2109a0a105baae04148bbe68b9e0f01996ea4e3b Mon Sep 17 00:00:00 2001 From: Marcel Hlopko Date: Thu, 11 Mar 2021 11:54:40 +0100 Subject: [PATCH] Move DepInfo definition into rust_common (#631) * Extract DepInfo into rust_common * Regenerate documentation * Run buildifier --- cargo/cargo_build_script.bzl | 11 +++++----- docs/flatten.md | 7 +++--- docs/rust_repositories.md | 7 +++--- rust/private/common.bzl | 3 ++- rust/private/providers.bzl | 12 ++++++++++ rust/private/rustc.bzl | 22 +++++-------------- rust/private/rustdoc.bzl | 4 ++-- rust/private/rustdoc_test.bzl | 3 +-- test/unit/stdlib_ordering/stdlib_ordering.bzl | 1 + 9 files changed, 37 insertions(+), 33 deletions(-) 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")