3939 "generate_output_diagnostics" ,
4040 "get_edition" ,
4141 "get_import_macro_deps" ,
42+ "partition_deps" ,
4243 "transform_deps" ,
4344 "transform_sources" ,
4445)
@@ -53,31 +54,6 @@ def _assert_no_deprecated_attributes(_ctx):
5354 """
5455 pass
5556
56- def _assert_correct_dep_mapping (ctx ):
57- """Forces a failure if proc_macro_deps and deps are mixed inappropriately
58-
59- Args:
60- ctx (ctx): The current rule's context object
61- """
62- for dep in ctx .attr .deps :
63- if rust_common .crate_info in dep :
64- if dep [rust_common .crate_info ].type == "proc-macro" :
65- fail (
66- "{} listed {} in its deps, but it is a proc-macro. It should instead be in the bazel property proc_macro_deps." .format (
67- ctx .label ,
68- dep .label ,
69- ),
70- )
71- for dep in ctx .attr .proc_macro_deps :
72- type = dep [rust_common .crate_info ].type
73- if type != "proc-macro" :
74- fail (
75- "{} listed {} in its proc_macro_deps, but it is not proc-macro, it is a {}. It should probably instead be listed in deps." .format (
76- ctx .label ,
77- dep .label ,
78- type ,
79- ),
80- )
8157
8258def _rust_library_impl (ctx ):
8359 """The implementation of the `rust_library` rule.
@@ -148,7 +124,7 @@ def _rust_library_common(ctx, crate_type):
148124 list: A list of providers. See `rustc_compile_action`
149125 """
150126 _assert_no_deprecated_attributes (ctx )
151- _assert_correct_dep_mapping (ctx )
127+ deps , proc_macro_deps = partition_deps (ctx )
152128
153129 toolchain = find_toolchain (ctx )
154130
@@ -195,8 +171,8 @@ def _rust_library_common(ctx, crate_type):
195171 not ctx .attr .disable_pipelining
196172 )
197173
198- deps = transform_deps (ctx . attr . deps )
199- proc_macro_deps = transform_deps (ctx . attr . proc_macro_deps + get_import_macro_deps (ctx ))
174+ deps = transform_deps (deps )
175+ proc_macro_deps = transform_deps (proc_macro_deps + get_import_macro_deps (ctx ))
200176
201177 return rustc_compile_action (
202178 ctx = ctx ,
@@ -238,16 +214,16 @@ def _rust_binary_impl(ctx):
238214 """
239215 toolchain = find_toolchain (ctx )
240216 crate_name = compute_crate_name (ctx .workspace_name , ctx .label , toolchain , ctx .attr .crate_name )
241- _assert_correct_dep_mapping (ctx )
217+ deps , proc_macro_deps = partition_deps (ctx )
242218
243219 if ctx .attr .binary_name :
244220 output_filename = ctx .attr .binary_name
245221 else :
246222 output_filename = ctx .label .name
247223 output = ctx .actions .declare_file (output_filename + toolchain .binary_ext )
248224
249- deps = transform_deps (ctx . attr . deps )
250- proc_macro_deps = transform_deps (ctx . attr . proc_macro_deps + get_import_macro_deps (ctx ))
225+ deps = transform_deps (deps )
226+ proc_macro_deps = transform_deps (proc_macro_deps + get_import_macro_deps (ctx ))
251227
252228 crate_root = getattr (ctx .file , "crate_root" , None )
253229 if not crate_root :
@@ -327,13 +303,13 @@ def _rust_test_impl(ctx):
327303 list: The list of providers. See `rustc_compile_action`
328304 """
329305 _assert_no_deprecated_attributes (ctx )
330- _assert_correct_dep_mapping (ctx )
306+ deps , proc_macro_deps = partition_deps (ctx )
331307
332308 toolchain = find_toolchain (ctx )
333309
334310 crate_type = "bin"
335- deps = transform_deps (ctx . attr . deps )
336- proc_macro_deps = transform_deps (ctx . attr . proc_macro_deps + get_import_macro_deps (ctx ))
311+ deps = transform_deps (deps )
312+ proc_macro_deps = transform_deps (proc_macro_deps + get_import_macro_deps (ctx ))
337313
338314 if ctx .attr .crate and ctx .attr .srcs :
339315 fail ("rust_test.crate and rust_test.srcs are mutually exclusive. Update {} to use only one of these attributes" .format (
@@ -1072,6 +1048,80 @@ rust_shared_library = rule(
10721048 """ ),
10731049)
10741050
1051+ # See https://github.com/bazelbuild/bazel/blob/952a7580c3fcf913371019238ef06611cead4857/src/main/starlark/builtins_bzl/common/builtin_exec_platforms.bzl#L219-L282
1052+ _EXEC_TRANSITION_PROPAGATED = [
1053+ #"//command_line_option:experimental_output_directory_naming_scheme",
1054+ "//command_line_option:host_compilation_mode" ,
1055+ #"//command_line_option:experimental_exec_configuration_distinguisher",
1056+ #"//command_line_option:experimental_output_paths",
1057+ "//command_line_option:enable_runfiles" ,
1058+ "//command_line_option:enforce_constraints" ,
1059+ #"//command_line_option:incompatible_merge_genfiles_directory",
1060+ #"//command_line_option:experimental_platform_in_output_dir",
1061+ "//command_line_option:host_cpu" ,
1062+ #"//command_line_option:incompatible_modify_execution_info_additive",
1063+ "//command_line_option:include_config_fragments_provider" ,
1064+ #"//command_line_option:experimental_debug_selects_always_succeed",
1065+ #"//command_line_option:incompatible_check_testonly_for_output_files",
1066+ #"//command_line_option:incompatible_auto_exec_groups",
1067+ #"//command_line_option:incompatible_bazel_test_exec_run_under",
1068+ #"//command_line_option:experimental_writable_outputs",
1069+ "//command_line_option:build_runfile_manifests" ,
1070+ "//command_line_option:build_runfile_links" ,
1071+ #"//command_line_option:experimental_remotable_source_manifests",
1072+ #"//command_line_option:incompatible_always_include_files_in_data",
1073+ #"//command_line_option:experimental_strict_fileset_output",
1074+ "//command_line_option:strict_filesets" ,
1075+ "//command_line_option:check_visibility" ,
1076+ "//command_line_option:check_licenses" ,
1077+ "//command_line_option:host_features" ,
1078+ "//command_line_option:host_action_env" ,
1079+ "//command_line_option:archived_tree_artifact_mnemonics_filter" ,
1080+ "//command_line_option:allow_unresolved_symlinks" ,
1081+ #"//command_line_option:experimental_exec_config",
1082+ #"//command_line_option:experimental_exclude_defines_from_exec_config",
1083+ #"//command_line_option:experimental_exclude_starlark_flags_from_exec_config",
1084+ #"//command_line_option:experimental_propagate_custom_flag",
1085+ "//command_line_option:allow_analysis_failures" ,
1086+ #"//command_line_option:experimental_collect_code_coverage_for_generated_files",
1087+ #"//command_line_option:experimental_extended_sanity_checks",
1088+ #"//command_line_option:experimental_inprocess_symlink_creation",
1089+ #"//command_line_option:experimental_throttle_action_cache_check",
1090+ #"//command_line_option:experimental_use_platforms_in_output_dir_legacy_heuristic",
1091+ #"//command_line_option:incompatible_compact_repo_mapping_manifest",
1092+ #"//command_line_option:incompatible_filegroup_runfiles_for_data",
1093+ ]
1094+
1095+ def _exec_transition_impl (settings , _attr ):
1096+ transitioned = {
1097+ "//command_line_option:compilation_mode" : settings ["//command_line_option:host_compilation_mode" ],
1098+ "//command_line_option:is exec configuration" : True ,
1099+ "//command_line_option:cpu" : settings ["//command_line_option:host_cpu" ],
1100+ "//command_line_option:stamp" : False ,
1101+ "//command_line_option:action_env" : settings ["//command_line_option:host_action_env" ],
1102+ "//command_line_option:features" : settings ["//command_line_option:host_features" ],
1103+ }
1104+
1105+ for opt in _EXEC_TRANSITION_PROPAGATED :
1106+ transitioned [opt ] = settings [opt ]
1107+
1108+ return transitioned
1109+
1110+ _exec_transition = transition (
1111+ inputs = [
1112+ "//command_line_option:features" ,
1113+ ] + _EXEC_TRANSITION_PROPAGATED ,
1114+ outputs = [
1115+ "//command_line_option:compilation_mode" ,
1116+ "//command_line_option:is exec configuration" ,
1117+ "//command_line_option:cpu" ,
1118+ "//command_line_option:stamp" ,
1119+ "//command_line_option:features" ,
1120+ "//command_line_option:action_env" ,
1121+ ] + _EXEC_TRANSITION_PROPAGATED ,
1122+ implementation = _exec_transition_impl ,
1123+ )
1124+
10751125def _proc_macro_dep_transition_impl (settings , _attr ):
10761126 if settings ["//rust/private:is_proc_macro_dep_enabled" ]:
10771127 return {"//rust/private:is_proc_macro_dep" : True }
@@ -1106,6 +1156,7 @@ rust_proc_macro = rule(
11061156 cfg = _proc_macro_dep_transition ,
11071157 ),
11081158 ),
1159+ cfg = _exec_transition ,
11091160 fragments = ["cpp" ],
11101161 toolchains = [
11111162 str (Label ("//rust:toolchain_type" )),
0 commit comments