summaryrefslogtreecommitdiffstats
path: root/src/bootstrap/tool.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/bootstrap/tool.rs')
-rw-r--r--src/bootstrap/tool.rs72
1 files changed, 65 insertions, 7 deletions
diff --git a/src/bootstrap/tool.rs b/src/bootstrap/tool.rs
index 9a2100c2f..3c9a154da 100644
--- a/src/bootstrap/tool.rs
+++ b/src/bootstrap/tool.rs
@@ -33,6 +33,44 @@ struct ToolBuild {
allow_features: &'static str,
}
+fn tooling_output(
+ mode: Mode,
+ tool: &str,
+ build_stage: u32,
+ host: &TargetSelection,
+ target: &TargetSelection,
+) -> String {
+ match mode {
+ // depends on compiler stage, different to host compiler
+ Mode::ToolRustc => {
+ if host == target {
+ format!("Building tool {} (stage{} -> stage{})", tool, build_stage, build_stage + 1)
+ } else {
+ format!(
+ "Building tool {} (stage{}:{} -> stage{}:{})",
+ tool,
+ build_stage,
+ host,
+ build_stage + 1,
+ target
+ )
+ }
+ }
+ // doesn't depend on compiler, same as host compiler
+ Mode::ToolStd => {
+ if host == target {
+ format!("Building tool {} (stage{})", tool, build_stage)
+ } else {
+ format!(
+ "Building tool {} (stage{}:{} -> stage{}:{})",
+ tool, build_stage, host, build_stage, target
+ )
+ }
+ }
+ _ => format!("Building tool {} (stage{})", tool, build_stage),
+ }
+}
+
impl Step for ToolBuild {
type Output = Option<PathBuf>;
@@ -74,8 +112,14 @@ impl Step for ToolBuild {
if !self.allow_features.is_empty() {
cargo.allow_features(self.allow_features);
}
-
- builder.info(&format!("Building stage{} tool {} ({})", compiler.stage, tool, target));
+ let msg = tooling_output(
+ self.mode,
+ self.tool,
+ self.compiler.stage,
+ &self.compiler.host,
+ &self.target,
+ );
+ builder.info(&msg);
let mut duplicates = Vec::new();
let is_expected = compile::stream_cargo(builder, cargo, vec![], &mut |msg| {
// Only care about big things like the RLS/Cargo for now
@@ -551,7 +595,7 @@ impl Step for Rustdoc {
features.push("jemalloc".to_string());
}
- let cargo = prepare_tool_cargo(
+ let mut cargo = prepare_tool_cargo(
builder,
build_compiler,
Mode::ToolRustc,
@@ -562,10 +606,18 @@ impl Step for Rustdoc {
features.as_slice(),
);
- builder.info(&format!(
- "Building rustdoc for stage{} ({})",
- target_compiler.stage, target_compiler.host
- ));
+ if builder.config.rustc_parallel {
+ cargo.rustflag("--cfg=parallel_compiler");
+ }
+
+ let msg = tooling_output(
+ Mode::ToolRustc,
+ "rustdoc",
+ build_compiler.stage,
+ &self.compiler.host,
+ &target,
+ );
+ builder.info(&msg);
builder.run(&mut cargo.into());
// Cargo adds a number of paths to the dylib search path on windows, which results in
@@ -765,9 +817,15 @@ impl Step for RustAnalyzerProcMacroSrv {
const ONLY_HOSTS: bool = true;
fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> {
+ let builder = run.builder;
// Allow building `rust-analyzer-proc-macro-srv` both as part of the `rust-analyzer` and as a stand-alone tool.
run.path("src/tools/rust-analyzer")
.path("src/tools/rust-analyzer/crates/proc-macro-srv-cli")
+ .default_condition(builder.config.tools.as_ref().map_or(true, |tools| {
+ tools
+ .iter()
+ .any(|tool| tool == "rust-analyzer" || tool == "rust-analyzer-proc-macro-srv")
+ }))
}
fn make_run(run: RunConfig<'_>) {