--- a/rust/private/rustc.bzl +++ b/rust/private/rustc.bzl @@ -472,7 +472,19 @@ ) ld_is_direct_driver = False - if not ld or toolchain.linker_preference == "rust": + # The bootstrap process wrapper is built without the normal rules_rust + # process wrapper. On Windows nightly toolchains that expose rust-lld, the + # C++ toolchain path currently resolves to clang++ while still emitting + # MSVC-style arguments, so prefer rust-lld for this one bootstrap binary + # instead of switching all Rust actions over. + use_bootstrap_rust_linker = ( + toolchain.target_os.startswith("windows") and + toolchain.linker != None and + hasattr(ctx.executable, "_bootstrap_process_wrapper") and + not ctx.executable._process_wrapper + ) + + if not ld or toolchain.linker_preference == "rust" or use_bootstrap_rust_linker: ld = toolchain.linker.path ld_is_direct_driver = toolchain.linker_type == "direct"