Skip to content

Commit c64dea9

Browse files
author
Kjetil Kjeka
committed
LLVM bitcode linker: use --cfg=parallell_compiler to avoid trashing the cache of rustdoc
1 parent accc516 commit c64dea9

File tree

1 file changed

+74
-1
lines changed
  • src/bootstrap/src/core/build_steps

1 file changed

+74
-1
lines changed

src/bootstrap/src/core/build_steps/tool.rs

Lines changed: 74 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -692,6 +692,80 @@ impl Step for RustAnalyzerProcMacroSrv {
692692
}
693693
}
694694

695+
#[derive(Debug, Clone, Hash, PartialEq, Eq)]
696+
pub struct LlvmBitcodeLinker {
697+
pub compiler: Compiler,
698+
pub target: TargetSelection,
699+
pub extra_features: Vec<String>,
700+
}
701+
702+
impl Step for LlvmBitcodeLinker {
703+
type Output = PathBuf;
704+
const DEFAULT: bool = true;
705+
const ONLY_HOSTS: bool = true;
706+
707+
fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> {
708+
let builder = run.builder;
709+
run.path("src/tools/llvm-bitcode-linker").default_condition(
710+
builder.config.extended
711+
&& builder.config.tools.as_ref().map_or(
712+
false || builder.build.unstable_features(),
713+
|tools| {
714+
tools.iter().any(|tool| match tool.as_ref() {
715+
"clippy" => "llvm-bitcode-linker" == "clippy-driver",
716+
x => "llvm-bitcode-linker" == x,
717+
})
718+
},
719+
),
720+
)
721+
}
722+
fn make_run(run: RunConfig<'_>) {
723+
run.builder.ensure(LlvmBitcodeLinker {
724+
compiler: run.builder.compiler(run.builder.top_stage, run.builder.config.build),
725+
extra_features: Vec::new(),
726+
target: run.target,
727+
});
728+
}
729+
730+
fn run(self, builder: &Builder<'_>) -> PathBuf {
731+
let bin_name = "llvm-bitcode-linker";
732+
733+
builder.ensure(compile::Std::new(self.compiler, self.compiler.host));
734+
builder.ensure(compile::Rustc::new(self.compiler, self.target));
735+
736+
let mut cargo = prepare_tool_cargo(
737+
builder,
738+
self.compiler,
739+
Mode::ToolRustc,
740+
self.target,
741+
"build",
742+
"src/tools/llvm-bitcode-linker",
743+
SourceType::InTree,
744+
&self.extra_features,
745+
);
746+
747+
if builder.config.rustc_parallel {
748+
cargo.rustflag("--cfg=parallel_compiler");
749+
}
750+
751+
builder.run(&mut cargo.into());
752+
753+
let tool_out = builder
754+
.cargo_out(self.compiler, Mode::ToolRustc, self.target)
755+
.join(exe(bin_name, self.compiler.host));
756+
757+
if self.compiler.stage > 0 {
758+
let bindir = builder.sysroot(self.compiler).join("bin");
759+
t!(fs::create_dir_all(&bindir));
760+
let bin_destination = bindir.join(exe(bin_name, self.compiler.host));
761+
builder.copy(&tool_out, &bin_destination);
762+
bin_destination
763+
} else {
764+
tool_out
765+
}
766+
}
767+
}
768+
695769
macro_rules! tool_extended {
696770
(($sel:ident, $builder:ident),
697771
$($name:ident,
@@ -795,7 +869,6 @@ tool_extended!((self, builder),
795869
Rls, "src/tools/rls", "rls", stable=true, tool_std=true;
796870
RustDemangler, "src/tools/rust-demangler", "rust-demangler", stable=false, tool_std=true;
797871
Rustfmt, "src/tools/rustfmt", "rustfmt", stable=true, add_bins_to_sysroot = ["rustfmt", "cargo-fmt"];
798-
LlvmBitcodeLinker, "src/tools/llvm-bitcode-linker", "llvm-bitcode-linker", stable=false, add_bins_to_sysroot = ["llvm-bitcode-linker"];
799872
);
800873

801874
impl<'a> Builder<'a> {

0 commit comments

Comments
 (0)