Skip to content

Commit b16c1ae

Browse files
committed
update bootstrap mcp510 handling
now that it's been stabilized, beta and stage1 need to use different flags (-C vs -Z)
1 parent 98d2074 commit b16c1ae

File tree

4 files changed

+49
-16
lines changed

4 files changed

+49
-16
lines changed

src/bootstrap/src/core/build_steps/test.rs

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,13 @@ impl Step for Cargotest {
262262
.args(builder.config.test_args())
263263
.env("RUSTC", builder.rustc(compiler))
264264
.env("RUSTDOC", builder.rustdoc(compiler));
265-
add_rustdoc_cargo_linker_args(&mut cmd, builder, compiler.host, LldThreads::No);
265+
add_rustdoc_cargo_linker_args(
266+
&mut cmd,
267+
builder,
268+
compiler.host,
269+
LldThreads::No,
270+
compiler.stage,
271+
);
266272
cmd.delay_failure().run(builder);
267273
}
268274
}
@@ -857,7 +863,7 @@ impl Step for RustdocTheme {
857863
.env("CFG_RELEASE_CHANNEL", &builder.config.channel)
858864
.env("RUSTDOC_REAL", builder.rustdoc(self.compiler))
859865
.env("RUSTC_BOOTSTRAP", "1");
860-
cmd.args(linker_args(builder, self.compiler.host, LldThreads::No));
866+
cmd.args(linker_args(builder, self.compiler.host, LldThreads::No, self.compiler.stage));
861867

862868
cmd.delay_failure().run(builder);
863869
}
@@ -1033,7 +1039,13 @@ impl Step for RustdocGUI {
10331039
cmd.env("RUSTDOC", builder.rustdoc(self.compiler))
10341040
.env("RUSTC", builder.rustc(self.compiler));
10351041

1036-
add_rustdoc_cargo_linker_args(&mut cmd, builder, self.compiler.host, LldThreads::No);
1042+
add_rustdoc_cargo_linker_args(
1043+
&mut cmd,
1044+
builder,
1045+
self.compiler.host,
1046+
LldThreads::No,
1047+
self.compiler.stage,
1048+
);
10371049

10381050
for path in &builder.paths {
10391051
if let Some(p) = helpers::is_valid_test_suite_arg(path, "tests/rustdoc-gui", builder) {
@@ -1802,7 +1814,7 @@ NOTE: if you're sure you want to do this, please open an issue as to why. In the
18021814
}
18031815

18041816
let mut hostflags = flags.clone();
1805-
hostflags.extend(linker_flags(builder, compiler.host, LldThreads::No));
1817+
hostflags.extend(linker_flags(builder, compiler.host, LldThreads::No, compiler.stage));
18061818

18071819
let mut targetflags = flags;
18081820

src/bootstrap/src/core/builder/cargo.rs

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ impl Cargo {
115115
// No need to configure the target linker for these command types.
116116
Kind::Clean | Kind::Check | Kind::Suggest | Kind::Format | Kind::Setup => {}
117117
_ => {
118-
cargo.configure_linker(builder);
118+
cargo.configure_linker(builder, mode);
119119
}
120120
}
121121

@@ -206,7 +206,7 @@ impl Cargo {
206206

207207
// FIXME(onur-ozkan): Add coverage to make sure modifications to this function
208208
// doesn't cause cache invalidations (e.g., #130108).
209-
fn configure_linker(&mut self, builder: &Builder<'_>) -> &mut Cargo {
209+
fn configure_linker(&mut self, builder: &Builder<'_>, mode: Mode) -> &mut Cargo {
210210
let target = self.target;
211211
let compiler = self.compiler;
212212

@@ -261,7 +261,15 @@ impl Cargo {
261261
}
262262
}
263263

264-
for arg in linker_args(builder, compiler.host, LldThreads::Yes) {
264+
// When determining flags for the host (build scripts/proc macros),
265+
// we use the snapshot compiler when building `Mode::Std` tools, and
266+
// the current compiler when building anything else.
267+
// We need to determine the current stage here to pass proper linker args (e.g. -C vs -Z)
268+
// to the compiler used to compile build scripts.
269+
// This should stay synchronized with the [cargo] function.
270+
let host_stage = if mode == Mode::Std { 0 } else { compiler.stage };
271+
272+
for arg in linker_args(builder, compiler.host, LldThreads::Yes, host_stage) {
265273
self.hostflags.arg(&arg);
266274
}
267275

@@ -271,10 +279,10 @@ impl Cargo {
271279
}
272280
// We want to set -Clinker using Cargo, therefore we only call `linker_flags` and not
273281
// `linker_args` here.
274-
for flag in linker_flags(builder, target, LldThreads::Yes) {
282+
for flag in linker_flags(builder, target, LldThreads::Yes, compiler.stage) {
275283
self.rustflags.arg(&flag);
276284
}
277-
for arg in linker_args(builder, target, LldThreads::Yes) {
285+
for arg in linker_args(builder, target, LldThreads::Yes, compiler.stage) {
278286
self.rustdocflags.arg(&arg);
279287
}
280288

src/bootstrap/src/core/builder/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1496,7 +1496,7 @@ impl<'a> Builder<'a> {
14961496
cmd.arg("-Dwarnings");
14971497
}
14981498
cmd.arg("-Znormalize-docs");
1499-
cmd.args(linker_args(self, compiler.host, LldThreads::Yes));
1499+
cmd.args(linker_args(self, compiler.host, LldThreads::Yes, compiler.stage));
15001500
cmd
15011501
}
15021502

src/bootstrap/src/utils/helpers.rs

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -428,8 +428,9 @@ pub fn linker_args(
428428
builder: &Builder<'_>,
429429
target: TargetSelection,
430430
lld_threads: LldThreads,
431+
stage: u32,
431432
) -> Vec<String> {
432-
let mut args = linker_flags(builder, target, lld_threads);
433+
let mut args = linker_flags(builder, target, lld_threads, stage);
433434

434435
if let Some(linker) = builder.linker(target) {
435436
args.push(format!("-Clinker={}", linker.display()));
@@ -444,19 +445,30 @@ pub fn linker_flags(
444445
builder: &Builder<'_>,
445446
target: TargetSelection,
446447
lld_threads: LldThreads,
448+
stage: u32,
447449
) -> Vec<String> {
448450
let mut args = vec![];
449451
if !builder.is_lld_direct_linker(target) && builder.config.lld_mode.is_used() {
450452
match builder.config.lld_mode {
451453
LldMode::External => {
452-
args.push("-Zlinker-features=+lld".to_string());
453-
// FIXME(kobzol): remove this flag once MCP510 gets stabilized
454+
// cfg(bootstrap) - remove the stage 0 check after updating the bootstrap compiler:
455+
// `-Clinker-features` has been stabilized.
456+
if stage == 0 {
457+
args.push("-Zlinker-features=+lld".to_string());
458+
} else {
459+
args.push("-Clinker-features=+lld".to_string());
460+
}
454461
args.push("-Zunstable-options".to_string());
455462
}
456463
LldMode::SelfContained => {
457-
args.push("-Zlinker-features=+lld".to_string());
464+
// cfg(bootstrap) - remove the stage 0 check after updating the bootstrap compiler:
465+
// `-Clinker-features` has been stabilized.
466+
if stage == 0 {
467+
args.push("-Zlinker-features=+lld".to_string());
468+
} else {
469+
args.push("-Clinker-features=+lld".to_string());
470+
}
458471
args.push("-Clink-self-contained=+linker".to_string());
459-
// FIXME(kobzol): remove this flag once MCP510 gets stabilized
460472
args.push("-Zunstable-options".to_string());
461473
}
462474
LldMode::Unused => unreachable!(),
@@ -477,8 +489,9 @@ pub fn add_rustdoc_cargo_linker_args(
477489
builder: &Builder<'_>,
478490
target: TargetSelection,
479491
lld_threads: LldThreads,
492+
stage: u32,
480493
) {
481-
let args = linker_args(builder, target, lld_threads);
494+
let args = linker_args(builder, target, lld_threads, stage);
482495
let mut flags = cmd
483496
.get_envs()
484497
.find_map(|(k, v)| if k == OsStr::new("RUSTDOCFLAGS") { v } else { None })

0 commit comments

Comments
 (0)