Skip to content

Commit 0149b9d

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 707b37f commit 0149b9d

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
@@ -261,7 +261,13 @@ impl Step for Cargotest {
261261
.args(builder.config.test_args())
262262
.env("RUSTC", builder.rustc(compiler))
263263
.env("RUSTDOC", builder.rustdoc(compiler));
264-
add_rustdoc_cargo_linker_args(&mut cmd, builder, compiler.host, LldThreads::No);
264+
add_rustdoc_cargo_linker_args(
265+
&mut cmd,
266+
builder,
267+
compiler.host,
268+
LldThreads::No,
269+
compiler.stage,
270+
);
265271
cmd.delay_failure().run(builder);
266272
}
267273
}
@@ -839,7 +845,7 @@ impl Step for RustdocTheme {
839845
.env("CFG_RELEASE_CHANNEL", &builder.config.channel)
840846
.env("RUSTDOC_REAL", builder.rustdoc(self.compiler))
841847
.env("RUSTC_BOOTSTRAP", "1");
842-
cmd.args(linker_args(builder, self.compiler.host, LldThreads::No));
848+
cmd.args(linker_args(builder, self.compiler.host, LldThreads::No, self.compiler.stage));
843849

844850
cmd.delay_failure().run(builder);
845851
}
@@ -1015,7 +1021,13 @@ impl Step for RustdocGUI {
10151021
cmd.env("RUSTDOC", builder.rustdoc(self.compiler))
10161022
.env("RUSTC", builder.rustc(self.compiler));
10171023

1018-
add_rustdoc_cargo_linker_args(&mut cmd, builder, self.compiler.host, LldThreads::No);
1024+
add_rustdoc_cargo_linker_args(
1025+
&mut cmd,
1026+
builder,
1027+
self.compiler.host,
1028+
LldThreads::No,
1029+
self.compiler.stage,
1030+
);
10191031

10201032
for path in &builder.paths {
10211033
if let Some(p) = helpers::is_valid_test_suite_arg(path, "tests/rustdoc-gui", builder) {
@@ -1784,7 +1796,7 @@ NOTE: if you're sure you want to do this, please open an issue as to why. In the
17841796
}
17851797

17861798
let mut hostflags = flags.clone();
1787-
hostflags.extend(linker_flags(builder, compiler.host, LldThreads::No));
1799+
hostflags.extend(linker_flags(builder, compiler.host, LldThreads::No, compiler.stage));
17881800

17891801
let mut targetflags = flags;
17901802

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
@@ -1479,7 +1479,7 @@ impl<'a> Builder<'a> {
14791479
cmd.arg("-Dwarnings");
14801480
}
14811481
cmd.arg("-Znormalize-docs");
1482-
cmd.args(linker_args(self, compiler.host, LldThreads::Yes));
1482+
cmd.args(linker_args(self, compiler.host, LldThreads::Yes, compiler.stage));
14831483
cmd
14841484
}
14851485

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)