Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions rust/settings/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ load(
"extra_rustc_flags",
"incompatible_change_clippy_error_format",
"incompatible_change_rust_test_compilation_output_directory",
"incompatible_do_not_include_cc_toolchain_files_in_rust_toolchain_all_files",
"incompatible_do_not_include_data_in_compile_data",
"lto",
"no_std",
Expand Down Expand Up @@ -109,6 +110,8 @@ incompatible_change_clippy_error_format()

incompatible_change_rust_test_compilation_output_directory()

incompatible_do_not_include_cc_toolchain_files_in_rust_toolchain_all_files()

incompatible_do_not_include_data_in_compile_data()

lto()
Expand Down
10 changes: 10 additions & 0 deletions rust/settings/settings.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,16 @@ def incompatible_change_rust_test_compilation_output_directory():
issue = "https://github.com/bazelbuild/rules_rust/issues/2827",
)

# buildifier: disable=unnamed-macro
def incompatible_do_not_include_cc_toolchain_files_in_rust_toolchain_all_files():
"""A flag to omit the cc_toolchain's all_files from the rust toolchain's all_files depset.
"""
incompatible_flag(
name = "incompatible_do_not_include_cc_toolchain_files_in_rust_toolchain_all_files",
build_setting_default = False,
issue = "https://github.com/bazelbuild/rules_rust/issues/3680",
)

def experimental_link_std_dylib():
"""A flag to control whether to link libstd dynamically."""
bool_flag(
Expand Down
41 changes: 22 additions & 19 deletions rust/toolchain.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -451,7 +451,7 @@ def _generate_sysroot(

# Rustc
sysroot_rustc = _symlink_sysroot_bin(ctx, name, "bin", rustc)
direct_files.extend([sysroot_rustc])
direct_files.append(sysroot_rustc)

# Rustc dependencies
sysroot_rustc_lib = None
Expand All @@ -461,43 +461,43 @@ def _generate_sysroot(

# Rustdoc
sysroot_rustdoc = _symlink_sysroot_bin(ctx, name, "bin", rustdoc)
direct_files.extend([sysroot_rustdoc])
direct_files.append(sysroot_rustdoc)

# Clippy
sysroot_clippy = None
if clippy:
sysroot_clippy = _symlink_sysroot_bin(ctx, name, "bin", clippy)
direct_files.extend([sysroot_clippy])
direct_files.append(sysroot_clippy)

# Cargo
sysroot_cargo = None
if cargo:
sysroot_cargo = _symlink_sysroot_bin(ctx, name, "bin", cargo)
direct_files.extend([sysroot_cargo])
direct_files.append(sysroot_cargo)

# Cargo-clippy
sysroot_cargo_clippy = None
if cargo_clippy:
sysroot_cargo_clippy = _symlink_sysroot_bin(ctx, name, "bin", cargo_clippy)
direct_files.extend([sysroot_cargo_clippy])
direct_files.append(sysroot_cargo_clippy)

# Rustfmt
sysroot_rustfmt = None
if rustfmt:
sysroot_rustfmt = _symlink_sysroot_bin(ctx, name, "bin", rustfmt)
direct_files.extend([sysroot_rustfmt])
direct_files.append(sysroot_rustfmt)

# Llvm tools
sysroot_llvm_tools = None
if llvm_tools:
sysroot_llvm_tools = _symlink_sysroot_tree(ctx, name, llvm_tools)
transitive_file_sets.extend([sysroot_llvm_tools])
transitive_file_sets.append(sysroot_llvm_tools)

# Rust standard library
sysroot_rust_std = None
if rust_std:
sysroot_rust_std = _symlink_sysroot_tree(ctx, name, rust_std)
transitive_file_sets.extend([sysroot_rust_std])
transitive_file_sets.append(sysroot_rust_std)

# Made available to support $(location) expansion in stdlib_linkflags and extra_rustc_flags.
transitive_file_sets.append(depset(ctx.files.rust_std))
Expand Down Expand Up @@ -622,14 +622,10 @@ def _rust_toolchain_impl(ctx):
}

if sysroot.cargo:
make_variables.update({
"CARGO": sysroot.cargo.path,
})
make_variables["CARGO"] = sysroot.cargo.path

if sysroot.rustfmt:
make_variables.update({
"RUSTFMT": sysroot.rustfmt.path,
})
make_variables["RUSTFMT"] = sysroot.rustfmt.path

make_variable_info = platform_common.TemplateVariableInfo(make_variables)

Expand Down Expand Up @@ -709,13 +705,17 @@ def _rust_toolchain_impl(ctx):
)

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

toolchain = platform_common.ToolchainInfo(
all_files = depset(transitive = all_files_depsets),
all_files = all_files,
binary_ext = ctx.attr.binary_ext,
cargo = sysroot.cargo,
clippy_driver = sysroot.clippy,
Expand Down Expand Up @@ -987,6 +987,9 @@ rust_toolchain = rule(
"_incompatible_change_rust_test_compilation_output_directory": attr.label(
default = Label("//rust/settings:incompatible_change_rust_test_compilation_output_directory"),
),
"_incompatible_do_not_include_cc_toolchain_files_in_rust_toolchain_all_files": attr.label(
default = Label("//rust/settings:incompatible_do_not_include_cc_toolchain_files_in_rust_toolchain_all_files"),
),
"_incompatible_do_not_include_data_in_compile_data": attr.label(
default = Label("//rust/settings:incompatible_do_not_include_data_in_compile_data"),
doc = "Label to a boolean build setting that controls whether to include data files in compile_data.",
Expand Down