Skip to content

Commit 455712b

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 07ad1cd commit 455712b

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
@@ -263,7 +263,13 @@ impl Step for Cargotest {
263263
.args(builder.config.test_args())
264264
.env("RUSTC", builder.rustc(compiler))
265265
.env("RUSTDOC", builder.rustdoc(compiler));
266-
add_rustdoc_cargo_linker_args(&mut cmd, builder, compiler.host, LldThreads::No);
266+
add_rustdoc_cargo_linker_args(
267+
&mut cmd,
268+
builder,
269+
compiler.host,
270+
LldThreads::No,
271+
compiler.stage,
272+
);
267273
cmd.delay_failure().run(builder);
268274
}
269275
}
@@ -858,7 +864,7 @@ impl Step for RustdocTheme {
858864
.env("CFG_RELEASE_CHANNEL", &builder.config.channel)
859865
.env("RUSTDOC_REAL", builder.rustdoc(self.compiler))
860866
.env("RUSTC_BOOTSTRAP", "1");
861-
cmd.args(linker_args(builder, self.compiler.host, LldThreads::No));
867+
cmd.args(linker_args(builder, self.compiler.host, LldThreads::No, self.compiler.stage));
862868

863869
cmd.delay_failure().run(builder);
864870
}
@@ -1034,7 +1040,13 @@ impl Step for RustdocGUI {
10341040
cmd.env("RUSTDOC", builder.rustdoc(self.compiler))
10351041
.env("RUSTC", builder.rustc(self.compiler));
10361042

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

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

18151827
let mut hostflags = flags.clone();
1816-
hostflags.extend(linker_flags(builder, compiler.host, LldThreads::No));
1828+
hostflags.extend(linker_flags(builder, compiler.host, LldThreads::No, compiler.stage));
18171829

18181830
let mut targetflags = flags;
18191831

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

@@ -209,7 +209,7 @@ impl Cargo {
209209

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

@@ -264,7 +264,15 @@ impl Cargo {
264264
}
265265
}
266266

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

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

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1587,7 +1587,7 @@ You have to build a stage1 compiler for `{}` first, and then use it to build a s
15871587
cmd.arg("-Dwarnings");
15881588
}
15891589
cmd.arg("-Znormalize-docs");
1590-
cmd.args(linker_args(self, compiler.host, LldThreads::Yes));
1590+
cmd.args(linker_args(self, compiler.host, LldThreads::Yes, compiler.stage));
15911591
cmd
15921592
}
15931593

src/bootstrap/src/utils/helpers.rs

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -404,8 +404,9 @@ pub fn linker_args(
404404
builder: &Builder<'_>,
405405
target: TargetSelection,
406406
lld_threads: LldThreads,
407+
stage: u32,
407408
) -> Vec<String> {
408-
let mut args = linker_flags(builder, target, lld_threads);
409+
let mut args = linker_flags(builder, target, lld_threads, stage);
409410

410411
if let Some(linker) = builder.linker(target) {
411412
args.push(format!("-Clinker={}", linker.display()));
@@ -420,19 +421,30 @@ pub fn linker_flags(
420421
builder: &Builder<'_>,
421422
target: TargetSelection,
422423
lld_threads: LldThreads,
424+
stage: u32,
423425
) -> Vec<String> {
424426
let mut args = vec![];
425427
if !builder.is_lld_direct_linker(target) && builder.config.lld_mode.is_used() {
426428
match builder.config.lld_mode {
427429
LldMode::External => {
428-
args.push("-Zlinker-features=+lld".to_string());
429-
// FIXME(kobzol): remove this flag once MCP510 gets stabilized
430+
// cfg(bootstrap) - remove the stage 0 check after updating the bootstrap compiler:
431+
// `-Clinker-features` has been stabilized.
432+
if stage == 0 {
433+
args.push("-Zlinker-features=+lld".to_string());
434+
} else {
435+
args.push("-Clinker-features=+lld".to_string());
436+
}
430437
args.push("-Zunstable-options".to_string());
431438
}
432439
LldMode::SelfContained => {
433-
args.push("-Zlinker-features=+lld".to_string());
440+
// cfg(bootstrap) - remove the stage 0 check after updating the bootstrap compiler:
441+
// `-Clinker-features` has been stabilized.
442+
if stage == 0 {
443+
args.push("-Zlinker-features=+lld".to_string());
444+
} else {
445+
args.push("-Clinker-features=+lld".to_string());
446+
}
434447
args.push("-Clink-self-contained=+linker".to_string());
435-
// FIXME(kobzol): remove this flag once MCP510 gets stabilized
436448
args.push("-Zunstable-options".to_string());
437449
}
438450
LldMode::Unused => unreachable!(),
@@ -453,8 +465,9 @@ pub fn add_rustdoc_cargo_linker_args(
453465
builder: &Builder<'_>,
454466
target: TargetSelection,
455467
lld_threads: LldThreads,
468+
stage: u32,
456469
) {
457-
let args = linker_args(builder, target, lld_threads);
470+
let args = linker_args(builder, target, lld_threads, stage);
458471
let mut flags = cmd
459472
.get_envs()
460473
.find_map(|(k, v)| if k == OsStr::new("RUSTDOCFLAGS") { v } else { None })

0 commit comments

Comments
 (0)