Skip to content

Commit 62e0f0c

Browse files
committed
Add incompatible flag to stop merging cc sysroot into rust toolchain's all_files
1 parent 8da6166 commit 62e0f0c

File tree

3 files changed

+35
-19
lines changed

3 files changed

+35
-19
lines changed

rust/settings/BUILD.bazel

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ load(
2626
"extra_rustc_flags",
2727
"incompatible_change_clippy_error_format",
2828
"incompatible_change_rust_test_compilation_output_directory",
29+
"incompatible_do_not_include_cc_toolchain_files_in_rust_toolchain_all_files",
2930
"incompatible_do_not_include_data_in_compile_data",
3031
"lto",
3132
"no_std",
@@ -109,6 +110,8 @@ incompatible_change_clippy_error_format()
109110

110111
incompatible_change_rust_test_compilation_output_directory()
111112

113+
incompatible_do_not_include_cc_toolchain_files_in_rust_toolchain_all_files()
114+
112115
incompatible_do_not_include_data_in_compile_data()
113116

114117
lto()

rust/settings/settings.bzl

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,16 @@ def incompatible_change_rust_test_compilation_output_directory():
218218
issue = "https://github.com/bazelbuild/rules_rust/issues/2827",
219219
)
220220

221+
# buildifier: disable=unnamed-macro
222+
def incompatible_do_not_include_cc_toolchain_files_in_rust_toolchain_all_files():
223+
"""A flag to omit the cc_toolchain's all_files from the rust toolchain's all_files depset.
224+
"""
225+
incompatible_flag(
226+
name = "incompatible_do_not_include_cc_toolchain_files_in_rust_toolchain_all_files",
227+
build_setting_default = False,
228+
issue = "https://github.com/bazelbuild/rules_rust/issues/3680",
229+
)
230+
221231
def experimental_link_std_dylib():
222232
"""A flag to control whether to link libstd dynamically."""
223233
bool_flag(

rust/toolchain.bzl

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -446,7 +446,7 @@ def _generate_sysroot(
446446

447447
# Rustc
448448
sysroot_rustc = _symlink_sysroot_bin(ctx, name, "bin", rustc)
449-
direct_files.extend([sysroot_rustc])
449+
direct_files.append(sysroot_rustc)
450450

451451
# Rustc dependencies
452452
sysroot_rustc_lib = None
@@ -456,43 +456,43 @@ def _generate_sysroot(
456456

457457
# Rustdoc
458458
sysroot_rustdoc = _symlink_sysroot_bin(ctx, name, "bin", rustdoc)
459-
direct_files.extend([sysroot_rustdoc])
459+
direct_files.append(sysroot_rustdoc)
460460

461461
# Clippy
462462
sysroot_clippy = None
463463
if clippy:
464464
sysroot_clippy = _symlink_sysroot_bin(ctx, name, "bin", clippy)
465-
direct_files.extend([sysroot_clippy])
465+
direct_files.append(sysroot_clippy)
466466

467467
# Cargo
468468
sysroot_cargo = None
469469
if cargo:
470470
sysroot_cargo = _symlink_sysroot_bin(ctx, name, "bin", cargo)
471-
direct_files.extend([sysroot_cargo])
471+
direct_files.append(sysroot_cargo)
472472

473473
# Cargo-clippy
474474
sysroot_cargo_clippy = None
475475
if cargo_clippy:
476476
sysroot_cargo_clippy = _symlink_sysroot_bin(ctx, name, "bin", cargo_clippy)
477-
direct_files.extend([sysroot_cargo_clippy])
477+
direct_files.append(sysroot_cargo_clippy)
478478

479479
# Rustfmt
480480
sysroot_rustfmt = None
481481
if rustfmt:
482482
sysroot_rustfmt = _symlink_sysroot_bin(ctx, name, "bin", rustfmt)
483-
direct_files.extend([sysroot_rustfmt])
483+
direct_files.append(sysroot_rustfmt)
484484

485485
# Llvm tools
486486
sysroot_llvm_tools = None
487487
if llvm_tools:
488488
sysroot_llvm_tools = _symlink_sysroot_tree(ctx, name, llvm_tools)
489-
transitive_file_sets.extend([sysroot_llvm_tools])
489+
transitive_file_sets.append(sysroot_llvm_tools)
490490

491491
# Rust standard library
492492
sysroot_rust_std = None
493493
if rust_std:
494494
sysroot_rust_std = _symlink_sysroot_tree(ctx, name, rust_std)
495-
transitive_file_sets.extend([sysroot_rust_std])
495+
transitive_file_sets.append(sysroot_rust_std)
496496

497497
# Made available to support $(location) expansion in stdlib_linkflags and extra_rustc_flags.
498498
transitive_file_sets.append(depset(ctx.files.rust_std))
@@ -617,14 +617,10 @@ def _rust_toolchain_impl(ctx):
617617
}
618618

619619
if sysroot.cargo:
620-
make_variables.update({
621-
"CARGO": sysroot.cargo.path,
622-
})
620+
make_variables["CARGO"] = sysroot.cargo.path
623621

624622
if sysroot.rustfmt:
625-
make_variables.update({
626-
"RUSTFMT": sysroot.rustfmt.path,
627-
})
623+
make_variables["RUSTFMT"] = sysroot.rustfmt.path
628624

629625
make_variable_info = platform_common.TemplateVariableInfo(make_variables)
630626

@@ -704,13 +700,17 @@ def _rust_toolchain_impl(ctx):
704700
)
705701

706702
# Include C++ toolchain files to ensure tools like 'ar' are available for cross-compilation
707-
cc_toolchain, _ = find_cc_toolchain(ctx)
708-
all_files_depsets = [sysroot.all_files]
709-
if cc_toolchain and cc_toolchain.all_files:
710-
all_files_depsets.append(cc_toolchain.all_files)
703+
if ctx.attr._incompatible_do_not_include_cc_toolchain_files_in_rust_toolchain_all_files[IncompatibleFlagInfo].enabled:
704+
all_files = sysroot.all_files
705+
else:
706+
cc_toolchain, _ = find_cc_toolchain(ctx)
707+
all_files_depsets = [sysroot.all_files]
708+
if cc_toolchain and cc_toolchain.all_files:
709+
all_files_depsets.append(cc_toolchain.all_files)
710+
all_files = depset(transitive = all_files_depsets)
711711

712712
toolchain = platform_common.ToolchainInfo(
713-
all_files = depset(transitive = all_files_depsets),
713+
all_files = all_files,
714714
binary_ext = ctx.attr.binary_ext,
715715
cargo = sysroot.cargo,
716716
clippy_driver = sysroot.clippy,
@@ -982,6 +982,9 @@ rust_toolchain = rule(
982982
"_incompatible_change_rust_test_compilation_output_directory": attr.label(
983983
default = Label("//rust/settings:incompatible_change_rust_test_compilation_output_directory"),
984984
),
985+
"_incompatible_do_not_include_cc_toolchain_files_in_rust_toolchain_all_files": attr.label(
986+
default = Label("//rust/settings:incompatible_do_not_include_cc_toolchain_files_in_rust_toolchain_all_files"),
987+
),
985988
"_incompatible_do_not_include_data_in_compile_data": attr.label(
986989
default = Label("//rust/settings:incompatible_do_not_include_data_in_compile_data"),
987990
doc = "Label to a boolean build setting that controls whether to include data files in compile_data.",

0 commit comments

Comments
 (0)