From 970e7687b11081ad1fb5acfa431f146ee70d844e Mon Sep 17 00:00:00 2001 From: David Zbarsky Date: Tue, 9 Sep 2025 09:19:46 -0400 Subject: [PATCH 1/4] Improve proc_macro_deps ergonomics --- .../private/wasm_bindgen_test.bzl | 7 +- rust/defs.bzl | 29 ++++++-- rust/private/rust.bzl | 69 +++++++------------ rust/private/rustc.bzl | 2 +- rust/private/rustdoc/BUILD.bazel | 2 +- rust/private/rustdoc_test.bzl | 8 ++- rust/private/utils.bzl | 29 +++++++- 7 files changed, 87 insertions(+), 59 deletions(-) diff --git a/extensions/wasm_bindgen/private/wasm_bindgen_test.bzl b/extensions/wasm_bindgen/private/wasm_bindgen_test.bzl index ad16f5bf1c..3d7cdc3e17 100644 --- a/extensions/wasm_bindgen/private/wasm_bindgen_test.bzl +++ b/extensions/wasm_bindgen/private/wasm_bindgen_test.bzl @@ -16,6 +16,7 @@ load( "@rules_rust//rust/private:utils.bzl", "determine_output_hash", "expand_dict_value_locations", + "filter_deps", "find_toolchain", "generate_output_diagnostics", "get_import_macro_deps", @@ -67,8 +68,10 @@ def _rust_wasm_bindgen_test_impl(ctx): toolchain = find_toolchain(ctx) crate_type = "bin" - deps = transform_deps(ctx.attr.deps + [wb_toolchain.wasm_bindgen_test]) - proc_macro_deps = transform_deps(ctx.attr.proc_macro_deps + get_import_macro_deps(ctx)) + + deps, proc_macro_deps = filter_deps(ctx) + deps = transform_deps(deps + [wb_toolchain.wasm_bindgen_test]) + proc_macro_deps = transform_deps(proc_macro_deps + get_import_macro_deps(ctx)) # Target is building the crate in `test` config if WasmBindgenTestCrateInfo in ctx.attr.wasm: diff --git a/rust/defs.bzl b/rust/defs.bzl index e05c4ada3c..20d217a511 100644 --- a/rust/defs.bzl +++ b/rust/defs.bzl @@ -76,25 +76,40 @@ load( _rust_unpretty_aspect = "rust_unpretty_aspect", ) -rust_library = _rust_library +def _rule_wrapper(rule): + def _wrapped(name, deps = [], proc_macro_deps = [], **kwargs): + if proc_macro_deps: + print("proc_macros can now be passed directly to `deps`, no need to use `proc_macro_deps` in " + native.package_relative_label(name)) + + rule( + name = name, + deps = deps + proc_macro_deps, + # TODO(zbarsky): This attribute would ideally be called `exec_configured_deps` or similar. + proc_macro_deps = deps + proc_macro_deps, + **kwargs + ) + + return _wrapped + +rust_library = _rule_wrapper(_rust_library) # See @rules_rust//rust/private:rust.bzl for a complete description. -rust_static_library = _rust_static_library +rust_static_library = _rule_wrapper(_rust_static_library) # See @rules_rust//rust/private:rust.bzl for a complete description. -rust_shared_library = _rust_shared_library +rust_shared_library = _rule_wrapper(_rust_shared_library) # See @rules_rust//rust/private:rust.bzl for a complete description. -rust_proc_macro = _rust_proc_macro +rust_proc_macro = _rule_wrapper(_rust_proc_macro) # See @rules_rust//rust/private:rust.bzl for a complete description. -rust_binary = _rust_binary +rust_binary = _rule_wrapper(_rust_binary) # See @rules_rust//rust/private:rust.bzl for a complete description. rust_library_group = _rust_library_group # See @rules_rust//rust/private:rust.bzl for a complete description. -rust_test = _rust_test +rust_test = _rule_wrapper(_rust_test) # See @rules_rust//rust/private:rust.bzl for a complete description. rust_test_suite = _rust_test_suite @@ -103,7 +118,7 @@ rust_test_suite = _rust_test_suite rust_doc = _rust_doc # See @rules_rust//rust/private:rustdoc.bzl for a complete description. -rust_doc_test = _rust_doc_test +rust_doc_test = _rule_wrapper(_rust_doc_test) # See @rules_rust//rust/private:rustdoc_test.bzl for a complete description. clippy_flag = _clippy_flag diff --git a/rust/private/rust.bzl b/rust/private/rust.bzl index 3e9258c51e..56e37508e9 100644 --- a/rust/private/rust.bzl +++ b/rust/private/rust.bzl @@ -22,6 +22,9 @@ load( "AllocatorLibrariesImplInfo", "AllocatorLibrariesInfo", "BuildInfo", + "CrateInfo", + "CrateGroupInfo", + "DepInfo", "LintsInfo", ) load("//rust/private:rustc.bzl", "rustc_compile_action") @@ -35,6 +38,7 @@ load( "determine_lib_name", "determine_output_hash", "expand_dict_value_locations", + "filter_deps", "find_toolchain", "generate_output_diagnostics", "get_edition", @@ -53,32 +57,6 @@ def _assert_no_deprecated_attributes(_ctx): """ pass -def _assert_correct_dep_mapping(ctx): - """Forces a failure if proc_macro_deps and deps are mixed inappropriately - - Args: - ctx (ctx): The current rule's context object - """ - for dep in ctx.attr.deps: - if rust_common.crate_info in dep: - if dep[rust_common.crate_info].type == "proc-macro": - fail( - "{} listed {} in its deps, but it is a proc-macro. It should instead be in the bazel property proc_macro_deps.".format( - ctx.label, - dep.label, - ), - ) - for dep in ctx.attr.proc_macro_deps: - type = dep[rust_common.crate_info].type - if type != "proc-macro": - fail( - "{} listed {} in its proc_macro_deps, but it is not proc-macro, it is a {}. It should probably instead be listed in deps.".format( - ctx.label, - dep.label, - type, - ), - ) - def _rust_library_impl(ctx): """The implementation of the `rust_library` rule. @@ -148,7 +126,7 @@ def _rust_library_common(ctx, crate_type): list: A list of providers. See `rustc_compile_action` """ _assert_no_deprecated_attributes(ctx) - _assert_correct_dep_mapping(ctx) + deps, proc_macro_deps = filter_deps(ctx) toolchain = find_toolchain(ctx) @@ -195,8 +173,8 @@ def _rust_library_common(ctx, crate_type): not ctx.attr.disable_pipelining ) - deps = transform_deps(ctx.attr.deps) - proc_macro_deps = transform_deps(ctx.attr.proc_macro_deps + get_import_macro_deps(ctx)) + deps = transform_deps(deps) + proc_macro_deps = transform_deps(proc_macro_deps + get_import_macro_deps(ctx)) return rustc_compile_action( ctx = ctx, @@ -238,7 +216,7 @@ def _rust_binary_impl(ctx): """ toolchain = find_toolchain(ctx) crate_name = compute_crate_name(ctx.workspace_name, ctx.label, toolchain, ctx.attr.crate_name) - _assert_correct_dep_mapping(ctx) + deps, proc_macro_deps = filter_deps(ctx) if ctx.attr.binary_name: output_filename = ctx.attr.binary_name @@ -246,8 +224,8 @@ def _rust_binary_impl(ctx): output_filename = ctx.label.name output = ctx.actions.declare_file(output_filename + toolchain.binary_ext) - deps = transform_deps(ctx.attr.deps) - proc_macro_deps = transform_deps(ctx.attr.proc_macro_deps + get_import_macro_deps(ctx)) + deps = transform_deps(deps) + proc_macro_deps = transform_deps(proc_macro_deps + get_import_macro_deps(ctx)) crate_root = getattr(ctx.file, "crate_root", None) if not crate_root: @@ -327,13 +305,13 @@ def _rust_test_impl(ctx): list: The list of providers. See `rustc_compile_action` """ _assert_no_deprecated_attributes(ctx) - _assert_correct_dep_mapping(ctx) + deps, proc_macro_deps = filter_deps(ctx) toolchain = find_toolchain(ctx) crate_type = "bin" - deps = transform_deps(ctx.attr.deps) - proc_macro_deps = transform_deps(ctx.attr.proc_macro_deps + get_import_macro_deps(ctx)) + deps = transform_deps(deps) + proc_macro_deps = transform_deps(proc_macro_deps + get_import_macro_deps(ctx)) if ctx.attr.crate and ctx.attr.srcs: fail("rust_test.crate and rust_test.srcs are mutually exclusive. Update {} to use only one of these attributes".format( @@ -526,16 +504,16 @@ def _rust_library_group_impl(ctx): runfiles = [] for dep in ctx.attr.deps: - if rust_common.crate_info in dep: + if CrateInfo in dep: dep_variant_infos.append(rust_common.dep_variant_info( - crate_info = dep[rust_common.crate_info] if rust_common.crate_info in dep else None, - dep_info = dep[rust_common.dep_info] if rust_common.crate_info in dep else None, + crate_info = dep[CrateInfo] if CrateInfo in dep else None, + dep_info = dep[DepInfo] if DepInfo in dep else None, build_info = dep[BuildInfo] if BuildInfo in dep else None, cc_info = dep[CcInfo] if CcInfo in dep else None, crate_group_info = None, )) - elif rust_common.crate_group_info in dep: - dep_variant_transitive_infos.append(dep[rust_common.crate_group_info].dep_variant_infos) + elif CrateGroupInfo in dep: + dep_variant_transitive_infos.append(dep[CrateGroupInfo].dep_variant_infos) else: fail("crate_group_info targets can only depend on rust_library or rust_library_group targets.") @@ -724,10 +702,12 @@ _common_attrs = { # `@local_config_platform//:exec` exposed. "proc_macro_deps": attr.label_list( doc = dedent("""\ - List of `rust_proc_macro` targets used to help build this library target. + Copy of deps in exec configuration. This should really be called `exec_configured_deps`. + + Rule implementations use this to select exec-configured `rust_proc_macro` targets. + User code should pass all deps to `deps` for the macros loaded from `defs.bzl`. """), cfg = "exec", - providers = [rust_common.crate_info], ), "rustc_env": attr.string_dict( doc = dedent("""\ @@ -1330,6 +1310,7 @@ rust_binary_without_process_wrapper = rule( "_allowlist_function_transition": attr.label( default = "@bazel_tools//tools/allowlists/function_transition_allowlist", ), + "_skip_deps_verification": attr.bool(default = True), }), executable = True, fragments = ["cpp"], @@ -1510,7 +1491,7 @@ rust_test = rule( """), ) -def rust_test_suite(name, srcs, shared_srcs = [], **kwargs): +def rust_test_suite(name, srcs, shared_srcs = [], deps = [], proc_macro_deps = [], **kwargs): """A rule for creating a test suite for a set of `rust_test` targets. This rule can be used for setting up typical rust [integration tests][it]. Given the following @@ -1593,6 +1574,8 @@ def rust_test_suite(name, srcs, shared_srcs = [], **kwargs): srcs = [src] + shared_srcs, tags = tags, crate_name = crate_name, + deps = deps + proc_macro_deps, + proc_macro_deps = deps + proc_macro_deps, **kwargs ) tests.append(test_name) diff --git a/rust/private/rustc.bzl b/rust/private/rustc.bzl index 60d5cfc6a0..97c6f6200f 100644 --- a/rust/private/rustc.bzl +++ b/rust/private/rustc.bzl @@ -229,7 +229,7 @@ def collect_deps( Args: deps (list): The deps from ctx.attr.deps. - proc_macro_deps (list): The proc_macro deps from ctx.attr.proc_macro_deps. + proc_macro_deps (list): The proc_macro deps from `filter_deps(ctx)`. aliases (dict): A dict mapping aliased targets to their actual Crate information. Returns: diff --git a/rust/private/rustdoc/BUILD.bazel b/rust/private/rustdoc/BUILD.bazel index ee2067a87d..85cda1cd7e 100644 --- a/rust/private/rustdoc/BUILD.bazel +++ b/rust/private/rustdoc/BUILD.bazel @@ -1,4 +1,4 @@ -load("//rust/private:rust.bzl", "rust_binary") +load("//rust:defs.bzl", "rust_binary") package(default_visibility = ["//visibility:public"]) diff --git a/rust/private/rustdoc_test.bzl b/rust/private/rustdoc_test.bzl index 36afda488d..8a4bc5bbd1 100644 --- a/rust/private/rustdoc_test.bzl +++ b/rust/private/rustdoc_test.bzl @@ -18,7 +18,7 @@ load("@rules_cc//cc/common:cc_info.bzl", "CcInfo") load("//rust/private:common.bzl", "rust_common") load("//rust/private:providers.bzl", "CrateInfo") load("//rust/private:rustdoc.bzl", "rustdoc_compile_action") -load("//rust/private:utils.bzl", "dedent", "find_toolchain", "transform_deps") +load("//rust/private:utils.bzl", "dedent", "filter_deps", "find_toolchain", "transform_deps") def _construct_writer_arguments(ctx, test_runner, opt_test_params, action, crate_info): """Construct arguments and environment variables specific to `rustdoc_test_writer`. @@ -110,8 +110,10 @@ def _rust_doc_test_impl(ctx): toolchain = find_toolchain(ctx) crate = ctx.attr.crate[rust_common.crate_info] - deps = transform_deps(ctx.attr.deps) - proc_macro_deps = transform_deps(ctx.attr.proc_macro_deps) + + deps, proc_macro_deps = filter_deps(ctx) + deps = transform_deps(deps) + proc_macro_deps = transform_deps(proc_macro_deps) crate_info = rust_common.create_crate_info( name = crate.name, diff --git a/rust/private/utils.bzl b/rust/private/utils.bzl index df0ad4a980..a06530ba68 100644 --- a/rust/private/utils.bzl +++ b/rust/private/utils.bzl @@ -498,14 +498,39 @@ def is_exec_configuration(ctx): # TODO(djmarcin): Is there any better way to determine cfg=exec? return ctx.genfiles_dir.path.find("-exec") != -1 + +def filter_deps(ctx): + """Filters the provided (combined) deps into normal deps and proc_macro deps. + + Args: + ctx (ctx): The current rule's context object + + Returns: + deps and proc_macro_deps + """ + if len(ctx.attr.deps) != len(ctx.attr.proc_macro_deps) and not getattr(ctx.attr, "_skip_deps_verification", False): + fail("All deps should be passed to both `deps` and `proc_macro_deps`; please use the macros in //rust:defs.bzl") + + deps = [] + for dep in ctx.attr.deps: + if CrateInfo not in dep or dep[CrateInfo].type != "proc-macro": + deps.append(dep) + + proc_macro_deps = [] + for dep in ctx.attr.proc_macro_deps: + if CrateInfo in dep and dep[CrateInfo].type == "proc-macro": + proc_macro_deps.append(dep) + + return deps, proc_macro_deps + def transform_deps(deps): """Transforms a [Target] into [DepVariantInfo]. - This helper function is used to transform ctx.attr.deps and ctx.attr.proc_macro_deps into + This helper function is used to transform deps and .proc_macro_deps coming from `filter_deps` into [DepVariantInfo]. Args: - deps (list of Targets): Dependencies coming from ctx.attr.deps or ctx.attr.proc_macro_deps + deps (list of Targets): Dependencies coming from `filter_deps` Returns: list of DepVariantInfos. From 1072ffbd3ca70ad6b36424a147082f09f5a1d249 Mon Sep 17 00:00:00 2001 From: David Zbarsky Date: Sat, 6 Sep 2025 11:42:44 -0400 Subject: [PATCH 2/4] Fix warnings --- test/proc_macro/BUILD.bazel | 2 +- test/proc_macro/data/BUILD.bazel | 6 ++---- test/rust_analyzer/aspect_traversal_test/BUILD.bazel | 12 ++++++------ .../pipelined_compilation_test.bzl | 6 ++++-- .../leaks_deps/proc_macro_does_not_leak_deps.bzl | 6 ++---- test/unit/rustdoc/rustdoc_unit_test.bzl | 12 +++++++----- .../transitive_link_search_paths_test.bzl | 6 ++++-- test/unpretty/BUILD.bazel | 6 +++--- 8 files changed, 29 insertions(+), 27 deletions(-) diff --git a/test/proc_macro/BUILD.bazel b/test/proc_macro/BUILD.bazel index 5a20707972..2b195322eb 100644 --- a/test/proc_macro/BUILD.bazel +++ b/test/proc_macro/BUILD.bazel @@ -5,7 +5,7 @@ load("//rust:defs.bzl", "rust_test") name = "proc_macro_{}_integration_test".format(edition), srcs = ["proc_macro_{}_test.rs".format(edition)], edition = edition, - proc_macro_deps = ["//test/unit/proc_macro:proc_macro_{}".format(edition)], + deps = ["//test/unit/proc_macro:proc_macro_{}".format(edition)], ) for edition in [ "2015", diff --git a/test/proc_macro/data/BUILD.bazel b/test/proc_macro/data/BUILD.bazel index eaa1467b7a..061a783537 100644 --- a/test/proc_macro/data/BUILD.bazel +++ b/test/proc_macro/data/BUILD.bazel @@ -6,11 +6,9 @@ rust_test( name = "proc_macro_data_test", srcs = ["rust_test.rs"], edition = "2021", - proc_macro_deps = [ - ":rust_proc_macro", - ], deps = [ ":nonmacro_library", + ":rust_proc_macro", ], ) @@ -19,7 +17,7 @@ rust_library( name = "nonmacro_library", srcs = ["nonmacro_library.rs"], edition = "2021", - proc_macro_deps = [ + deps = [ ":rust_proc_macro", ], ) diff --git a/test/rust_analyzer/aspect_traversal_test/BUILD.bazel b/test/rust_analyzer/aspect_traversal_test/BUILD.bazel index 737621201c..38c70f54a3 100644 --- a/test/rust_analyzer/aspect_traversal_test/BUILD.bazel +++ b/test/rust_analyzer/aspect_traversal_test/BUILD.bazel @@ -8,14 +8,12 @@ rust_library( ":renamed_proc_macro_dep": "shorter_name", }, edition = "2018", - proc_macro_deps = [ - ":proc_macro_dep", - ":renamed_proc_macro_dep", - ], deps = [ ":alias_dep", ":custom_alias_dep", ":lib_dep", + ":proc_macro_dep", + ":renamed_proc_macro_dep", ], ) @@ -71,8 +69,10 @@ rust_test( name = "mylib_test", crate = ":mylib", edition = "2018", - proc_macro_deps = [":extra_proc_macro_dep"], - deps = [":extra_test_dep"], + deps = [ + ":extra_test_dep", + ":extra_proc_macro_dep" + ], ) rust_library( diff --git a/test/unit/pipelined_compilation/pipelined_compilation_test.bzl b/test/unit/pipelined_compilation/pipelined_compilation_test.bzl index 18540a59e0..7c5770b1bf 100644 --- a/test/unit/pipelined_compilation/pipelined_compilation_test.bzl +++ b/test/unit/pipelined_compilation/pipelined_compilation_test.bzl @@ -99,8 +99,10 @@ def _pipelined_compilation_test(): name = "second", edition = "2021", srcs = ["second.rs"], - deps = [":first"], - proc_macro_deps = [":my_macro"], + deps = [ + ":first", + ":my_macro", + ], ) rust_binary( diff --git a/test/unit/proc_macro/leaks_deps/proc_macro_does_not_leak_deps.bzl b/test/unit/proc_macro/leaks_deps/proc_macro_does_not_leak_deps.bzl index f246e1ddc0..fe0765579b 100644 --- a/test/unit/proc_macro/leaks_deps/proc_macro_does_not_leak_deps.bzl +++ b/test/unit/proc_macro/leaks_deps/proc_macro_does_not_leak_deps.bzl @@ -63,11 +63,9 @@ def _proc_macro_does_not_leak_deps_test(): srcs = ["leaks_deps/proc_macro_user.rs"], edition = "2018", deps = [ - "//test/unit/proc_macro/leaks_deps/native", - ], - proc_macro_deps = [ ":proc_macro_definition", ":proc_macro_with_native_dep", + "//test/unit/proc_macro/leaks_deps/native", ], ) @@ -123,7 +121,7 @@ def _proc_macro_does_not_leak_lib_deps_test(): name = "a", srcs = ["leaks_deps/lib/a.rs"], edition = "2018", - proc_macro_deps = [ + deps = [ ":my_macro", ], ) diff --git a/test/unit/rustdoc/rustdoc_unit_test.bzl b/test/unit/rustdoc/rustdoc_unit_test.bzl index aa1f9b2f02..59c28f02ae 100644 --- a/test/unit/rustdoc/rustdoc_unit_test.bzl +++ b/test/unit/rustdoc/rustdoc_unit_test.bzl @@ -248,7 +248,7 @@ def _define_targets(): name = "lib_with_proc_macro", srcs = ["rustdoc_lib.rs"], rustdoc_deps = [":adder"], - proc_macro_deps = [":rustdoc_proc_macro"], + deps = [":rustdoc_proc_macro"], crate_features = ["with_proc_macro"], ) @@ -256,7 +256,7 @@ def _define_targets(): rust_library, name = "lib_with_proc_macro_in_docs", srcs = ["procmacro_in_rustdoc.rs"], - proc_macro_deps = [":rustdoc_proc_macro"], + deps = [":rustdoc_proc_macro"], ) _target_maker( @@ -270,7 +270,7 @@ def _define_targets(): rust_library, name = "lib_nodep_with_proc_macro", srcs = ["rustdoc_nodep_lib.rs"], - proc_macro_deps = [":rustdoc_proc_macro"], + deps = [":rustdoc_proc_macro"], crate_features = ["with_proc_macro"], ) @@ -278,8 +278,10 @@ def _define_targets(): rust_binary, name = "bin_with_transitive_proc_macro", srcs = ["rustdoc_bin.rs"], - deps = [":lib_with_proc_macro"], - proc_macro_deps = [":rustdoc_proc_macro"], + deps = [ + ":lib_with_proc_macro", + ":rustdoc_proc_macro", + ], crate_features = ["with_proc_macro"], ) diff --git a/test/unit/transitive_link_search_paths/transitive_link_search_paths_test.bzl b/test/unit/transitive_link_search_paths/transitive_link_search_paths_test.bzl index e23d9d0111..3b7d996721 100644 --- a/test/unit/transitive_link_search_paths/transitive_link_search_paths_test.bzl +++ b/test/unit/transitive_link_search_paths/transitive_link_search_paths_test.bzl @@ -56,8 +56,10 @@ def _transitive_link_search_paths_test(): name = "dep", srcs = ["dep.rs"], edition = "2018", - proc_macro_deps = [":proc_macro"], - deps = [":dep_build_script"], + deps = [ + ":dep_build_script", + ":proc_macro", + ], ) rust_binary( diff --git a/test/unpretty/BUILD.bazel b/test/unpretty/BUILD.bazel index 19c644ca10..a4f1ead384 100644 --- a/test/unpretty/BUILD.bazel +++ b/test/unpretty/BUILD.bazel @@ -32,7 +32,7 @@ rust_test( name = "proc_macro_test", srcs = ["proc_macro_consumer.rs"], edition = "2021", - proc_macro_deps = [":proc_macro"], + deps = [":proc_macro"], ) rust_unpretty( @@ -59,7 +59,7 @@ rust_library( name = "proc_macro_lib", srcs = ["proc_macro_consumer.rs"], edition = "2021", - proc_macro_deps = [":proc_macro"], + deps = [":proc_macro"], ) rust_unpretty( @@ -86,7 +86,7 @@ rust_shared_library( name = "proc_macro_shared_lib", srcs = ["proc_macro_consumer.rs"], edition = "2021", - proc_macro_deps = [":proc_macro"], + deps = [":proc_macro"], ) rust_unpretty( From 4e4a6c32ca5135ffc0bf2d3efc170c52e3c7cca2 Mon Sep 17 00:00:00 2001 From: David Zbarsky Date: Sat, 6 Sep 2025 11:17:01 -0400 Subject: [PATCH 3/4] Stop generating proc_macro_deps in crate_universe --- crate_universe/BUILD.bazel | 3 +- crate_universe/defs.bzl | 8 +- crate_universe/extensions.bzl | 4 - crate_universe/src/rendering.rs | 86 +++++++++---------- crate_universe/src/utils/starlark.rs | 8 -- .../tools/cross_installer/BUILD.bazel | 6 +- .../tools/urls_generator/BUILD.bazel | 3 +- 7 files changed, 47 insertions(+), 71 deletions(-) diff --git a/crate_universe/BUILD.bazel b/crate_universe/BUILD.bazel index 3f8a594dfc..a276636485 100644 --- a/crate_universe/BUILD.bazel +++ b/crate_universe/BUILD.bazel @@ -66,7 +66,6 @@ rust_library( aliases = aliases(), compile_data = [":rust_data"], edition = "2021", - proc_macro_deps = all_crate_deps(proc_macro = True), # This target embeds additional, stamping related information (see # https://docs.bazel.build/versions/main/user-manual.html#workspace_status # for more information). Set stamp = -1 to indicate that it should respect @@ -74,7 +73,7 @@ rust_library( stamp = -1, version = VERSION, visibility = ["//visibility:public"], - deps = all_crate_deps(normal = True), + deps = all_crate_deps(normal = True, proc_macro = True), ) rust_binary( diff --git a/crate_universe/defs.bzl b/crate_universe/defs.bzl index 2d5f219ebd..52ca4250ed 100644 --- a/crate_universe/defs.bzl +++ b/crate_universe/defs.bzl @@ -75,8 +75,6 @@ rust_library( aliases = aliases(), deps = all_crate_deps( normal = True, - ), - proc_macro_deps = all_crate_deps( proc_macro = True, ), ) @@ -90,8 +88,6 @@ rust_test( ), deps = all_crate_deps( normal_dev = True, - ), - proc_macro_deps = all_crate_deps( proc_macro_dev = True, ), ) @@ -143,10 +139,8 @@ load("@rules_rust//rust:defs.bzl", "rust_library", "rust_test") rust_library( name = "lib", deps = [ - "@crate_index//:tokio", - ], - proc_macro_deps = [ "@crate_index//:async-trait", + "@crate_index//:tokio", ], ) diff --git a/crate_universe/extensions.bzl b/crate_universe/extensions.bzl index 2f105af3a2..3aa51a0c2f 100644 --- a/crate_universe/extensions.bzl +++ b/crate_universe/extensions.bzl @@ -89,8 +89,6 @@ rust_library( aliases = aliases(), deps = all_crate_deps( normal = True, - ), - proc_macro_deps = all_crate_deps( proc_macro = True, ), ) @@ -104,8 +102,6 @@ rust_test( ), deps = all_crate_deps( normal_dev = True, - ), - proc_macro_deps = all_crate_deps( proc_macro_dev = True, ), ) diff --git a/crate_universe/src/rendering.rs b/crate_universe/src/rendering.rs index 425bd1b213..8f4666765f 100644 --- a/crate_universe/src/rendering.rs +++ b/crate_universe/src/rendering.rs @@ -582,11 +582,19 @@ impl Renderer { attrs.map(|attrs| attrs.data.clone()).unwrap_or_default(), ), deps: SelectSet::new( - self.make_deps( - attrs.map(|attrs| attrs.deps.clone()).unwrap_or_default(), - attrs - .map(|attrs| attrs.extra_deps.clone()) - .unwrap_or_default(), + Select::merge( + self.make_deps( + attrs.map(|attrs| attrs.deps.clone()).unwrap_or_default(), + attrs + .map(|attrs| attrs.extra_deps.clone()) + .unwrap_or_default(), + ), + self.make_deps( + attrs.map(|attrs| attrs.proc_macro_deps.clone()).unwrap_or_default(), + attrs + .map(|attrs| attrs.extra_proc_macro_deps.clone()) + .unwrap_or_default(), + ), ), platforms, ), @@ -605,17 +613,6 @@ impl Renderer { linker_script: krate.common_attrs.linker_script.clone(), links: attrs.and_then(|attrs| attrs.links.clone()), pkg_name: Some(krate.name.clone()), - proc_macro_deps: SelectSet::new( - self.make_deps( - attrs - .map(|attrs| attrs.proc_macro_deps.clone()) - .unwrap_or_default(), - attrs - .map(|attrs| attrs.extra_proc_macro_deps.clone()) - .unwrap_or_default(), - ), - platforms, - ), rundir: SelectScalar::new( attrs.map(|attrs| attrs.rundir.clone()).unwrap_or_default(), platforms, @@ -674,16 +671,15 @@ impl Renderer { Ok(RustProcMacro { name: target.crate_name.clone(), deps: SelectSet::new( - self.make_deps( - krate.common_attrs.deps.clone(), - krate.common_attrs.extra_deps.clone(), - ), - platforms, - ), - proc_macro_deps: SelectSet::new( - self.make_deps( - krate.common_attrs.proc_macro_deps.clone(), - krate.common_attrs.extra_proc_macro_deps.clone(), + Select::merge( + self.make_deps( + krate.common_attrs.deps.clone(), + krate.common_attrs.extra_deps.clone(), + ), + self.make_deps( + krate.common_attrs.proc_macro_deps.clone(), + krate.common_attrs.extra_proc_macro_deps.clone(), + ), ), platforms, ), @@ -701,16 +697,15 @@ impl Renderer { Ok(RustLibrary { name: target.crate_name.clone(), deps: SelectSet::new( - self.make_deps( - krate.common_attrs.deps.clone(), - krate.common_attrs.extra_deps.clone(), - ), - platforms, - ), - proc_macro_deps: SelectSet::new( - self.make_deps( - krate.common_attrs.proc_macro_deps.clone(), - krate.common_attrs.extra_proc_macro_deps.clone(), + Select::merge( + self.make_deps( + krate.common_attrs.deps.clone(), + krate.common_attrs.extra_deps.clone(), + ), + self.make_deps( + krate.common_attrs.proc_macro_deps.clone(), + krate.common_attrs.extra_proc_macro_deps.clone(), + ), ), platforms, ), @@ -729,9 +724,15 @@ impl Renderer { Ok(RustBinary { name: format!("{}__bin", target.crate_name), deps: { - let mut deps = self.make_deps( - krate.common_attrs.deps.clone(), - krate.common_attrs.extra_deps.clone(), + let mut deps = Select::merge( + self.make_deps( + krate.common_attrs.deps.clone(), + krate.common_attrs.extra_deps.clone(), + ), + self.make_deps( + krate.common_attrs.proc_macro_deps.clone(), + krate.common_attrs.extra_proc_macro_deps.clone(), + ), ); if let Some(library_target_name) = &krate.library_target_name { deps.insert( @@ -741,13 +742,6 @@ impl Renderer { } SelectSet::new(deps, platforms) }, - proc_macro_deps: SelectSet::new( - self.make_deps( - krate.common_attrs.proc_macro_deps.clone(), - krate.common_attrs.extra_proc_macro_deps.clone(), - ), - platforms, - ), aliases: SelectDict::new(self.make_aliases(krate, false, false), platforms), common: self.make_common_attrs(platforms, krate, target)?, }) diff --git a/crate_universe/src/utils/starlark.rs b/crate_universe/src/utils/starlark.rs index a33a1ac77a..8a21eef0ba 100644 --- a/crate_universe/src/utils/starlark.rs +++ b/crate_universe/src/utils/starlark.rs @@ -118,8 +118,6 @@ pub(crate) struct CargoBuildScript { pub(crate) links: Option, #[serde(skip_serializing_if = "Option::is_none")] pub(crate) pkg_name: Option, - #[serde(skip_serializing_if = "SelectSet::is_empty")] - pub(crate) proc_macro_deps: SelectSet