Skip to content

Commit 6d562b2

Browse files
committed
Implement RustcPrivateCompilers to unify building of rustc_private tools
1 parent 2f3bfff commit 6d562b2

File tree

9 files changed

+287
-269
lines changed

9 files changed

+287
-269
lines changed

src/bootstrap/src/core/build_steps/compile.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1635,6 +1635,7 @@ impl Step for CodegenBackend {
16351635
let target = self.target;
16361636
let backend = self.backend;
16371637

1638+
// FIXME: migrate to RustcPrivateCompilers
16381639
builder.ensure(Rustc::new(compiler, target));
16391640

16401641
if builder.config.keep_stage.contains(&compiler.stage) {

src/bootstrap/src/core/build_steps/dist.rs

Lines changed: 39 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ use object::read::archive::ArchiveFile;
2020
use tracing::instrument;
2121

2222
use crate::core::build_steps::doc::DocumentationFormat;
23-
use crate::core::build_steps::tool::{self, Tool};
23+
use crate::core::build_steps::tool::{self, RustcPrivateCompilers, Tool};
2424
use crate::core::build_steps::vendor::{VENDOR_DIR, Vendor};
2525
use crate::core::build_steps::{compile, llvm};
2626
use crate::core::builder::{Builder, Kind, RunConfig, ShouldRun, Step, StepMetadata};
@@ -431,13 +431,14 @@ impl Step for Rustc {
431431

432432
let ra_proc_macro_srv_compiler =
433433
builder.compiler_for(compiler.stage, builder.config.host_target, compiler.host);
434-
builder.ensure(compile::Rustc::new(ra_proc_macro_srv_compiler, compiler.host));
434+
let compilers = RustcPrivateCompilers::from_build_compiler(
435+
builder,
436+
ra_proc_macro_srv_compiler,
437+
compiler.host,
438+
);
435439

436440
if let Some(ra_proc_macro_srv) = builder.ensure_if_default(
437-
tool::RustAnalyzerProcMacroSrv {
438-
compiler: ra_proc_macro_srv_compiler,
439-
target: compiler.host,
440-
},
441+
tool::RustAnalyzerProcMacroSrv::from_compilers(compilers),
441442
builder.kind,
442443
) {
443444
let dst = image.join("libexec");
@@ -1228,7 +1229,7 @@ impl Step for Cargo {
12281229

12291230
#[derive(Debug, PartialOrd, Ord, Clone, Hash, PartialEq, Eq)]
12301231
pub struct RustAnalyzer {
1231-
pub compiler: Compiler,
1232+
pub build_compiler: Compiler,
12321233
pub target: TargetSelection,
12331234
}
12341235

@@ -1244,7 +1245,7 @@ impl Step for RustAnalyzer {
12441245

12451246
fn make_run(run: RunConfig<'_>) {
12461247
run.builder.ensure(RustAnalyzer {
1247-
compiler: run.builder.compiler_for(
1248+
build_compiler: run.builder.compiler_for(
12481249
run.builder.top_stage,
12491250
run.builder.config.host_target,
12501251
run.target,
@@ -1254,12 +1255,11 @@ impl Step for RustAnalyzer {
12541255
}
12551256

12561257
fn run(self, builder: &Builder<'_>) -> Option<GeneratedTarball> {
1257-
let compiler = self.compiler;
12581258
let target = self.target;
1259+
let compilers =
1260+
RustcPrivateCompilers::from_build_compiler(builder, self.build_compiler, self.target);
12591261

1260-
builder.ensure(compile::Rustc::new(compiler, target));
1261-
1262-
let rust_analyzer = builder.ensure(tool::RustAnalyzer { compiler, target });
1262+
let rust_analyzer = builder.ensure(tool::RustAnalyzer::from_compilers(compilers));
12631263

12641264
let mut tarball = Tarball::new(builder, "rust-analyzer", &target.triple);
12651265
tarball.set_overlay(OverlayKind::RustAnalyzer);
@@ -1270,9 +1270,9 @@ impl Step for RustAnalyzer {
12701270
}
12711271
}
12721272

1273-
#[derive(Debug, PartialOrd, Ord, Clone, Hash, PartialEq, Eq)]
1273+
#[derive(Debug, Clone, Hash, PartialEq, Eq)]
12741274
pub struct Clippy {
1275-
pub compiler: Compiler,
1275+
pub build_compiler: Compiler,
12761276
pub target: TargetSelection,
12771277
}
12781278

@@ -1288,7 +1288,7 @@ impl Step for Clippy {
12881288

12891289
fn make_run(run: RunConfig<'_>) {
12901290
run.builder.ensure(Clippy {
1291-
compiler: run.builder.compiler_for(
1291+
build_compiler: run.builder.compiler_for(
12921292
run.builder.top_stage,
12931293
run.builder.config.host_target,
12941294
run.target,
@@ -1298,16 +1298,15 @@ impl Step for Clippy {
12981298
}
12991299

13001300
fn run(self, builder: &Builder<'_>) -> Option<GeneratedTarball> {
1301-
let compiler = self.compiler;
13021301
let target = self.target;
1303-
1304-
builder.ensure(compile::Rustc::new(compiler, target));
1302+
let compilers =
1303+
RustcPrivateCompilers::from_build_compiler(builder, self.build_compiler, target);
13051304

13061305
// Prepare the image directory
13071306
// We expect clippy to build, because we've exited this step above if tool
13081307
// state for clippy isn't testing.
1309-
let clippy = builder.ensure(tool::Clippy { compiler, target });
1310-
let cargoclippy = builder.ensure(tool::CargoClippy { compiler, target });
1308+
let clippy = builder.ensure(tool::Clippy::from_compilers(compilers));
1309+
let cargoclippy = builder.ensure(tool::CargoClippy::from_compilers(compilers));
13111310

13121311
let mut tarball = Tarball::new(builder, "clippy", &target.triple);
13131312
tarball.set_overlay(OverlayKind::Clippy);
@@ -1319,9 +1318,9 @@ impl Step for Clippy {
13191318
}
13201319
}
13211320

1322-
#[derive(Debug, PartialOrd, Ord, Clone, Hash, PartialEq, Eq)]
1321+
#[derive(Debug, Clone, Hash, PartialEq, Eq)]
13231322
pub struct Miri {
1324-
pub compiler: Compiler,
1323+
pub build_compiler: Compiler,
13251324
pub target: TargetSelection,
13261325
}
13271326

@@ -1337,7 +1336,7 @@ impl Step for Miri {
13371336

13381337
fn make_run(run: RunConfig<'_>) {
13391338
run.builder.ensure(Miri {
1340-
compiler: run.builder.compiler_for(
1339+
build_compiler: run.builder.compiler_for(
13411340
run.builder.top_stage,
13421341
run.builder.config.host_target,
13431342
run.target,
@@ -1354,15 +1353,12 @@ impl Step for Miri {
13541353
return None;
13551354
}
13561355

1357-
let compiler = self.compiler;
1358-
let target = self.target;
1359-
1360-
builder.ensure(compile::Rustc::new(compiler, target));
1361-
1362-
let miri = builder.ensure(tool::Miri { compiler, target });
1363-
let cargomiri = builder.ensure(tool::CargoMiri { compiler, target });
1356+
let compilers =
1357+
RustcPrivateCompilers::from_build_compiler(builder, self.build_compiler, self.target);
1358+
let miri = builder.ensure(tool::Miri::from_compilers(compilers));
1359+
let cargomiri = builder.ensure(tool::CargoMiri::from_compilers(compilers));
13641360

1365-
let mut tarball = Tarball::new(builder, "miri", &target.triple);
1361+
let mut tarball = Tarball::new(builder, "miri", &self.target.triple);
13661362
tarball.set_overlay(OverlayKind::Miri);
13671363
tarball.is_preview(true);
13681364
tarball.add_file(&miri.tool_path, "bin", FileType::Executable);
@@ -1466,9 +1462,9 @@ impl Step for CodegenBackend {
14661462
}
14671463
}
14681464

1469-
#[derive(Debug, PartialOrd, Ord, Clone, Hash, PartialEq, Eq)]
1465+
#[derive(Debug, Clone, Hash, PartialEq, Eq)]
14701466
pub struct Rustfmt {
1471-
pub compiler: Compiler,
1467+
pub build_compiler: Compiler,
14721468
pub target: TargetSelection,
14731469
}
14741470

@@ -1484,7 +1480,7 @@ impl Step for Rustfmt {
14841480

14851481
fn make_run(run: RunConfig<'_>) {
14861482
run.builder.ensure(Rustfmt {
1487-
compiler: run.builder.compiler_for(
1483+
build_compiler: run.builder.compiler_for(
14881484
run.builder.top_stage,
14891485
run.builder.config.host_target,
14901486
run.target,
@@ -1494,14 +1490,13 @@ impl Step for Rustfmt {
14941490
}
14951491

14961492
fn run(self, builder: &Builder<'_>) -> Option<GeneratedTarball> {
1497-
let compiler = self.compiler;
1498-
let target = self.target;
1493+
let compilers =
1494+
RustcPrivateCompilers::from_build_compiler(builder, self.build_compiler, self.target);
14991495

1500-
builder.ensure(compile::Rustc::new(compiler, target));
1496+
let rustfmt = builder.ensure(tool::Rustfmt::from_compilers(compilers));
1497+
let cargofmt = builder.ensure(tool::Cargofmt::from_compilers(compilers));
15011498

1502-
let rustfmt = builder.ensure(tool::Rustfmt { compiler, target });
1503-
let cargofmt = builder.ensure(tool::Cargofmt { compiler, target });
1504-
let mut tarball = Tarball::new(builder, "rustfmt", &target.triple);
1499+
let mut tarball = Tarball::new(builder, "rustfmt", &self.target.triple);
15051500
tarball.set_overlay(OverlayKind::Rustfmt);
15061501
tarball.is_preview(true);
15071502
tarball.add_file(&rustfmt.tool_path, "bin", FileType::Executable);
@@ -1569,11 +1564,11 @@ impl Step for Extended {
15691564
add_component!("rust-docs" => Docs { host: target });
15701565
add_component!("rust-json-docs" => JsonDocs { host: target });
15711566
add_component!("cargo" => Cargo { compiler, target });
1572-
add_component!("rustfmt" => Rustfmt { compiler, target });
1573-
add_component!("rust-analyzer" => RustAnalyzer { compiler, target });
1567+
add_component!("rustfmt" => Rustfmt { build_compiler: compiler, target });
1568+
add_component!("rust-analyzer" => RustAnalyzer { build_compiler: compiler, target });
15741569
add_component!("llvm-components" => LlvmTools { target });
1575-
add_component!("clippy" => Clippy { compiler, target });
1576-
add_component!("miri" => Miri { compiler, target });
1570+
add_component!("clippy" => Clippy { build_compiler: compiler, target });
1571+
add_component!("miri" => Miri { build_compiler: compiler, target });
15771572
add_component!("analysis" => Analysis { compiler, target });
15781573
add_component!("rustc-codegen-cranelift" => CodegenBackend {
15791574
compiler: builder.compiler(stage, target),

src/bootstrap/src/core/build_steps/install.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ install!((self, builder, _config),
221221
};
222222
RustAnalyzer, alias = "rust-analyzer", Self::should_build(_config), only_hosts: true, {
223223
if let Some(tarball) =
224-
builder.ensure(dist::RustAnalyzer { compiler: self.compiler, target: self.target })
224+
builder.ensure(dist::RustAnalyzer { build_compiler: self.compiler, target: self.target })
225225
{
226226
install_sh(builder, "rust-analyzer", self.compiler.stage, Some(self.target), &tarball);
227227
} else {
@@ -232,12 +232,12 @@ install!((self, builder, _config),
232232
};
233233
Clippy, alias = "clippy", Self::should_build(_config), only_hosts: true, {
234234
let tarball = builder
235-
.ensure(dist::Clippy { compiler: self.compiler, target: self.target })
235+
.ensure(dist::Clippy { build_compiler: self.compiler, target: self.target })
236236
.expect("missing clippy");
237237
install_sh(builder, "clippy", self.compiler.stage, Some(self.target), &tarball);
238238
};
239239
Miri, alias = "miri", Self::should_build(_config), only_hosts: true, {
240-
if let Some(tarball) = builder.ensure(dist::Miri { compiler: self.compiler, target: self.target }) {
240+
if let Some(tarball) = builder.ensure(dist::Miri { build_compiler: self.compiler, target: self.target }) {
241241
install_sh(builder, "miri", self.compiler.stage, Some(self.target), &tarball);
242242
} else {
243243
// Miri is only available on nightly
@@ -257,7 +257,7 @@ install!((self, builder, _config),
257257
};
258258
Rustfmt, alias = "rustfmt", Self::should_build(_config), only_hosts: true, {
259259
if let Some(tarball) = builder.ensure(dist::Rustfmt {
260-
compiler: self.compiler,
260+
build_compiler: self.compiler,
261261
target: self.target
262262
}) {
263263
install_sh(builder, "rustfmt", self.compiler.stage, Some(self.target), &tarball);

src/bootstrap/src/core/build_steps/run.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use clap_complete::{Generator, shells};
99

1010
use crate::core::build_steps::dist::distdir;
1111
use crate::core::build_steps::test;
12-
use crate::core::build_steps::tool::{self, SourceType, Tool};
12+
use crate::core::build_steps::tool::{self, RustcPrivateCompilers, SourceType, Tool};
1313
use crate::core::build_steps::vendor::{Vendor, default_paths_to_vendor};
1414
use crate::core::builder::{Builder, Kind, RunConfig, ShouldRun, Step};
1515
use crate::core::config::TargetSelection;
@@ -135,13 +135,13 @@ impl Step for Miri {
135135
}
136136

137137
// This compiler runs on the host, we'll just use it for the target.
138-
let target_compiler = builder.compiler(stage, target);
139-
let miri_build = builder.ensure(tool::Miri { compiler: target_compiler, target });
140-
// Rustc tools are off by one stage, so use the build compiler to run miri.
138+
let compilers = RustcPrivateCompilers::new(builder, stage, target);
139+
let miri_build = builder.ensure(tool::Miri::from_compilers(compilers));
141140
let host_compiler = miri_build.build_compiler;
142141

143142
// Get a target sysroot for Miri.
144-
let miri_sysroot = test::Miri::build_miri_sysroot(builder, target_compiler, target);
143+
let miri_sysroot =
144+
test::Miri::build_miri_sysroot(builder, compilers.link_compiler(), target);
145145

146146
// # Run miri.
147147
// Running it via `cargo run` as that figures out the right dylib path.
@@ -465,8 +465,8 @@ impl Step for Rustfmt {
465465
std::process::exit(1);
466466
}
467467

468-
let compiler = builder.compiler(stage, host);
469-
let rustfmt_build = builder.ensure(tool::Rustfmt { compiler, target: host });
468+
let compilers = RustcPrivateCompilers::new(builder, stage, host);
469+
let rustfmt_build = builder.ensure(tool::Rustfmt::from_compilers(compilers));
470470

471471
let mut rustfmt = tool::prepare_tool_cargo(
472472
builder,

0 commit comments

Comments
 (0)