Remove host parameter from step configurations

rustc is a natively cross-compiling compiler, and generally none of our steps
should care whether they are using a compiler built of triple A or B, just the
--target directive being passed to the running compiler. e.g., when building for
some target C, you don't generally want to build two stds: one with a host A
compiler and the other with a host B compiler. Just one std is sufficient.
This commit is contained in:
Mark Rousskov 2020-09-06 12:24:22 -04:00
parent 25b2f48612
commit 3193d52a21
6 changed files with 36 additions and 48 deletions

View File

@ -87,11 +87,16 @@ pub trait Step: 'static + Clone + Debug + PartialEq + Eq + Hash {
pub struct RunConfig<'a> {
pub builder: &'a Builder<'a>,
pub host: TargetSelection,
pub target: TargetSelection,
pub path: PathBuf,
}
impl RunConfig<'_> {
pub fn build_triple(&self) -> TargetSelection {
self.builder.build.build
}
}
struct StepDescription {
default: bool,
only_hosts: bool,
@ -165,7 +170,6 @@ impl StepDescription {
pathset, self.name, builder.config.exclude
);
}
let hosts = &builder.hosts;
// Determine the targets participating in this rule.
let targets = if self.only_hosts {
@ -178,16 +182,9 @@ impl StepDescription {
&builder.targets
};
for host in hosts {
for target in targets {
let run = RunConfig {
builder,
path: pathset.path(builder),
host: *host,
target: *target,
};
(self.make_run)(run);
}
for target in targets {
let run = RunConfig { builder, path: pathset.path(builder), target: *target };
(self.make_run)(run);
}
}

View File

@ -384,12 +384,9 @@ mod dist {
compile::Std { compiler: Compiler { host: a, stage: 0 }, target: a },
compile::Std { compiler: Compiler { host: a, stage: 1 }, target: a },
compile::Std { compiler: Compiler { host: a, stage: 2 }, target: a },
compile::Std { compiler: Compiler { host: b, stage: 2 }, target: a },
compile::Std { compiler: Compiler { host: a, stage: 1 }, target: b },
compile::Std { compiler: Compiler { host: a, stage: 2 }, target: b },
compile::Std { compiler: Compiler { host: b, stage: 2 }, target: b },
compile::Std { compiler: Compiler { host: a, stage: 2 }, target: c },
compile::Std { compiler: Compiler { host: b, stage: 2 }, target: c },
]
);
assert!(!builder.cache.all::<compile::Assemble>().is_empty());
@ -399,10 +396,8 @@ mod dist {
compile::Rustc { compiler: Compiler { host: a, stage: 0 }, target: a },
compile::Rustc { compiler: Compiler { host: a, stage: 1 }, target: a },
compile::Rustc { compiler: Compiler { host: a, stage: 2 }, target: a },
compile::Rustc { compiler: Compiler { host: b, stage: 2 }, target: a },
compile::Rustc { compiler: Compiler { host: a, stage: 1 }, target: b },
compile::Rustc { compiler: Compiler { host: a, stage: 2 }, target: b },
compile::Rustc { compiler: Compiler { host: b, stage: 2 }, target: b },
]
);
}
@ -425,12 +420,9 @@ mod dist {
compile::Std { compiler: Compiler { host: a, stage: 0 }, target: a },
compile::Std { compiler: Compiler { host: a, stage: 1 }, target: a },
compile::Std { compiler: Compiler { host: a, stage: 2 }, target: a },
compile::Std { compiler: Compiler { host: b, stage: 2 }, target: a },
compile::Std { compiler: Compiler { host: a, stage: 1 }, target: b },
compile::Std { compiler: Compiler { host: a, stage: 2 }, target: b },
compile::Std { compiler: Compiler { host: b, stage: 2 }, target: b },
compile::Std { compiler: Compiler { host: a, stage: 2 }, target: c },
compile::Std { compiler: Compiler { host: b, stage: 2 }, target: c },
]
);
assert_eq!(
@ -439,7 +431,6 @@ mod dist {
compile::Assemble { target_compiler: Compiler { host: a, stage: 0 } },
compile::Assemble { target_compiler: Compiler { host: a, stage: 1 } },
compile::Assemble { target_compiler: Compiler { host: a, stage: 2 } },
compile::Assemble { target_compiler: Compiler { host: b, stage: 2 } },
]
);
assert_eq!(
@ -447,7 +438,6 @@ mod dist {
&[
compile::Rustc { compiler: Compiler { host: a, stage: 0 }, target: a },
compile::Rustc { compiler: Compiler { host: a, stage: 1 }, target: a },
compile::Rustc { compiler: Compiler { host: a, stage: 1 }, target: b },
]
);
}

View File

@ -45,7 +45,7 @@ impl Step for Std {
fn make_run(run: RunConfig<'_>) {
run.builder.ensure(Std {
compiler: run.builder.compiler(run.builder.top_stage, run.host),
compiler: run.builder.compiler(run.builder.top_stage, run.build_triple()),
target: run.target,
});
}
@ -385,7 +385,7 @@ impl Step for StartupObjects {
fn make_run(run: RunConfig<'_>) {
run.builder.ensure(StartupObjects {
compiler: run.builder.compiler(run.builder.top_stage, run.host),
compiler: run.builder.compiler(run.builder.top_stage, run.build_triple()),
target: run.target,
});
}
@ -454,7 +454,7 @@ impl Step for Rustc {
fn make_run(run: RunConfig<'_>) {
run.builder.ensure(Rustc {
compiler: run.builder.compiler(run.builder.top_stage, run.host),
compiler: run.builder.compiler(run.builder.top_stage, run.build_triple()),
target: run.target,
});
}

View File

@ -605,7 +605,9 @@ impl Step for DebuggerScripts {
fn make_run(run: RunConfig<'_>) {
run.builder.ensure(DebuggerScripts {
sysroot: run.builder.sysroot(run.builder.compiler(run.builder.top_stage, run.host)),
sysroot: run
.builder
.sysroot(run.builder.compiler(run.builder.top_stage, run.build_triple())),
host: run.target,
});
}

View File

@ -584,7 +584,7 @@ impl Step for RustdocTheme {
}
fn make_run(run: RunConfig<'_>) {
let compiler = run.builder.compiler(run.builder.top_stage, run.host);
let compiler = run.builder.compiler(run.builder.top_stage, run.target);
run.builder.ensure(RustdocTheme { compiler });
}
@ -651,7 +651,6 @@ impl Step for RustdocJSStd {
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
pub struct RustdocJSNotStd {
pub host: TargetSelection,
pub target: TargetSelection,
pub compiler: Compiler,
}
@ -666,8 +665,8 @@ impl Step for RustdocJSNotStd {
}
fn make_run(run: RunConfig<'_>) {
let compiler = run.builder.compiler(run.builder.top_stage, run.host);
run.builder.ensure(RustdocJSNotStd { host: run.host, target: run.target, compiler });
let compiler = run.builder.compiler(run.builder.top_stage, run.build_triple());
run.builder.ensure(RustdocJSNotStd { target: run.target, compiler });
}
fn run(self, builder: &Builder<'_>) {
@ -688,7 +687,6 @@ impl Step for RustdocJSNotStd {
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
pub struct RustdocUi {
pub host: TargetSelection,
pub target: TargetSelection,
pub compiler: Compiler,
}
@ -703,8 +701,8 @@ impl Step for RustdocUi {
}
fn make_run(run: RunConfig<'_>) {
let compiler = run.builder.compiler(run.builder.top_stage, run.host);
run.builder.ensure(RustdocUi { host: run.host, target: run.target, compiler });
let compiler = run.builder.compiler(run.builder.top_stage, run.build_triple());
run.builder.ensure(RustdocUi { target: run.target, compiler });
}
fn run(self, builder: &Builder<'_>) {
@ -873,7 +871,7 @@ macro_rules! test_definitions {
}
fn make_run(run: RunConfig<'_>) {
let compiler = run.builder.compiler(run.builder.top_stage, run.host);
let compiler = run.builder.compiler(run.builder.top_stage, run.build_triple());
run.builder.ensure($name { compiler, target: run.target });
}
@ -1422,7 +1420,7 @@ macro_rules! test_book {
fn make_run(run: RunConfig<'_>) {
run.builder.ensure($name {
compiler: run.builder.compiler(run.builder.top_stage, run.host),
compiler: run.builder.compiler(run.builder.top_stage, run.target),
});
}
@ -1469,7 +1467,7 @@ impl Step for ErrorIndex {
// error_index_generator depends on librustdoc. Use the compiler that
// is normally used to build rustdoc for other tests (like compiletest
// tests in src/test/rustdoc) so that it shares the same artifacts.
let compiler = run.builder.compiler_for(run.builder.top_stage, run.host, run.host);
let compiler = run.builder.compiler_for(run.builder.top_stage, run.target, run.target);
run.builder.ensure(ErrorIndex { compiler });
}
@ -1573,7 +1571,7 @@ impl Step for CrateLibrustc {
fn make_run(run: RunConfig<'_>) {
let builder = run.builder;
let compiler = builder.compiler(builder.top_stage, run.host);
let compiler = builder.compiler(builder.top_stage, run.build_triple());
for krate in builder.in_tree_crates("rustc-main") {
if krate.path.ends_with(&run.path) {
@ -1620,7 +1618,7 @@ impl Step for CrateNotDefault {
fn make_run(run: RunConfig<'_>) {
let builder = run.builder;
let compiler = builder.compiler(builder.top_stage, run.host);
let compiler = builder.compiler(builder.top_stage, run.build_triple());
let test_kind = builder.kind.into();
@ -1668,7 +1666,7 @@ impl Step for Crate {
fn make_run(run: RunConfig<'_>) {
let builder = run.builder;
let compiler = builder.compiler(builder.top_stage, run.host);
let compiler = builder.compiler(builder.top_stage, run.build_triple());
let make = |mode: Mode, krate: &CargoCrate| {
let test_kind = builder.kind.into();
@ -1808,7 +1806,7 @@ impl Step for CrateRustdoc {
let test_kind = builder.kind.into();
builder.ensure(CrateRustdoc { host: run.host, test_kind });
builder.ensure(CrateRustdoc { host: run.target, test_kind });
}
fn run(self, builder: &Builder<'_>) {
@ -2054,7 +2052,6 @@ impl Step for Bootstrap {
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
pub struct TierCheck {
pub compiler: Compiler,
target: TargetSelection,
}
impl Step for TierCheck {
@ -2067,18 +2064,19 @@ impl Step for TierCheck {
}
fn make_run(run: RunConfig<'_>) {
let compiler = run.builder.compiler_for(run.builder.top_stage, run.host, run.host);
run.builder.ensure(TierCheck { compiler, target: run.host });
let compiler =
run.builder.compiler_for(run.builder.top_stage, run.builder.build.build, run.target);
run.builder.ensure(TierCheck { compiler });
}
/// Tests the Platform Support page in the rustc book.
fn run(self, builder: &Builder<'_>) {
builder.ensure(compile::Std { compiler: self.compiler, target: self.target });
builder.ensure(compile::Std { compiler: self.compiler, target: self.compiler.host });
let mut cargo = tool::prepare_tool_cargo(
builder,
self.compiler,
Mode::ToolRustc,
self.target,
Mode::ToolStd,
self.compiler.host,
"run",
"src/tools/tier-check",
SourceType::InTree,

View File

@ -469,8 +469,9 @@ impl Step for Rustdoc {
}
fn make_run(run: RunConfig<'_>) {
run.builder
.ensure(Rustdoc { compiler: run.builder.compiler(run.builder.top_stage, run.host) });
run.builder.ensure(Rustdoc {
compiler: run.builder.compiler(run.builder.top_stage, run.build_triple()),
});
}
fn run(self, builder: &Builder<'_>) -> PathBuf {