Skip to content

Commit 0b9e9b8

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 c323940 commit 0b9e9b8

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
@@ -1481,7 +1481,7 @@ impl<'a> Builder<'a> {
14811481
cmd.arg("-Dwarnings");
14821482
}
14831483
cmd.arg("-Znormalize-docs");
1484-
cmd.args(linker_args(self, compiler.host, LldThreads::Yes));
1484+
cmd.args(linker_args(self, compiler.host, LldThreads::Yes, compiler.stage));
14851485
cmd
14861486
}
14871487

src/bootstrap/src/utils/helpers.rs

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -465,8 +465,9 @@ pub fn linker_args(
465465
builder: &Builder<'_>,
466466
target: TargetSelection,
467467
lld_threads: LldThreads,
468+
stage: u32,
468469
) -> Vec<String> {
469-
let mut args = linker_flags(builder, target, lld_threads);
470+
let mut args = linker_flags(builder, target, lld_threads, stage);
470471

471472
if let Some(linker) = builder.linker(target) {
472473
args.push(format!("-Clinker={}", linker.display()));
@@ -481,19 +482,30 @@ pub fn linker_flags(
481482
builder: &Builder<'_>,
482483
target: TargetSelection,
483484
lld_threads: LldThreads,
485+
stage: u32,
484486
) -> Vec<String> {
485487
let mut args = vec![];
486488
if !builder.is_lld_direct_linker(target) && builder.config.lld_mode.is_used() {
487489
match builder.config.lld_mode {
488490
LldMode::External => {
489-
args.push("-Zlinker-features=+lld".to_string());
490-
// FIXME(kobzol): remove this flag once MCP510 gets stabilized
491+
// cfg(bootstrap) - remove the stage 0 check after updating the bootstrap compiler:
492+
// `-Clinker-features` has been stabilized.
493+
if stage == 0 {
494+
args.push("-Zlinker-features=+lld".to_string());
495+
} else {
496+
args.push("-Clinker-features=+lld".to_string());
497+
}
491498
args.push("-Zunstable-options".to_string());
492499
}
493500
LldMode::SelfContained => {
494-
args.push("-Zlinker-features=+lld".to_string());
501+
// cfg(bootstrap) - remove the stage 0 check after updating the bootstrap compiler:
502+
// `-Clinker-features` has been stabilized.
503+
if stage == 0 {
504+
args.push("-Zlinker-features=+lld".to_string());
505+
} else {
506+
args.push("-Clinker-features=+lld".to_string());
507+
}
495508
args.push("-Clink-self-contained=+linker".to_string());
496-
// FIXME(kobzol): remove this flag once MCP510 gets stabilized
497509
args.push("-Zunstable-options".to_string());
498510
}
499511
LldMode::Unused => unreachable!(),
@@ -514,8 +526,9 @@ pub fn add_rustdoc_cargo_linker_args(
514526
builder: &Builder<'_>,
515527
target: TargetSelection,
516528
lld_threads: LldThreads,
529+
stage: u32,
517530
) {
518-
let args = linker_args(builder, target, lld_threads);
531+
let args = linker_args(builder, target, lld_threads, stage);
519532
let mut flags = cmd
520533
.get_envs()
521534
.find_map(|(k, v)| if k == OsStr::new("RUSTDOCFLAGS") { v } else { None })

0 commit comments

Comments
 (0)