Rollup merge of #119414 - xry111:xry111/lto-test, r=Mark-Simulacrum
bootstrap: Move -Clto= setting from Rustc::run to rustc_cargo It prevents a full rebuild of stage 1 compiler when issuing "x.py test" with rust.lto != thin-local in config.toml.
This commit is contained in:
commit
98ba299a48
@ -905,34 +905,6 @@ impl Step for Rustc {
|
|||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
// We currently don't support cross-crate LTO in stage0. This also isn't hugely necessary
|
|
||||||
// and may just be a time sink.
|
|
||||||
if compiler.stage != 0 {
|
|
||||||
match builder.config.rust_lto {
|
|
||||||
RustcLto::Thin | RustcLto::Fat => {
|
|
||||||
// Since using LTO for optimizing dylibs is currently experimental,
|
|
||||||
// we need to pass -Zdylib-lto.
|
|
||||||
cargo.rustflag("-Zdylib-lto");
|
|
||||||
// Cargo by default passes `-Cembed-bitcode=no` and doesn't pass `-Clto` when
|
|
||||||
// compiling dylibs (and their dependencies), even when LTO is enabled for the
|
|
||||||
// crate. Therefore, we need to override `-Clto` and `-Cembed-bitcode` here.
|
|
||||||
let lto_type = match builder.config.rust_lto {
|
|
||||||
RustcLto::Thin => "thin",
|
|
||||||
RustcLto::Fat => "fat",
|
|
||||||
_ => unreachable!(),
|
|
||||||
};
|
|
||||||
cargo.rustflag(&format!("-Clto={lto_type}"));
|
|
||||||
cargo.rustflag("-Cembed-bitcode=yes");
|
|
||||||
}
|
|
||||||
RustcLto::ThinLocal => { /* Do nothing, this is the default */ }
|
|
||||||
RustcLto::Off => {
|
|
||||||
cargo.rustflag("-Clto=off");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if builder.config.rust_lto == RustcLto::Off {
|
|
||||||
cargo.rustflag("-Clto=off");
|
|
||||||
}
|
|
||||||
|
|
||||||
for krate in &*self.crates {
|
for krate in &*self.crates {
|
||||||
cargo.arg("-p").arg(krate);
|
cargo.arg("-p").arg(krate);
|
||||||
}
|
}
|
||||||
@ -989,6 +961,34 @@ pub fn rustc_cargo(builder: &Builder<'_>, cargo: &mut Cargo, target: TargetSelec
|
|||||||
|
|
||||||
cargo.rustdocflag("-Zcrate-attr=warn(rust_2018_idioms)");
|
cargo.rustdocflag("-Zcrate-attr=warn(rust_2018_idioms)");
|
||||||
|
|
||||||
|
// We currently don't support cross-crate LTO in stage0. This also isn't hugely necessary
|
||||||
|
// and may just be a time sink.
|
||||||
|
if stage != 0 {
|
||||||
|
match builder.config.rust_lto {
|
||||||
|
RustcLto::Thin | RustcLto::Fat => {
|
||||||
|
// Since using LTO for optimizing dylibs is currently experimental,
|
||||||
|
// we need to pass -Zdylib-lto.
|
||||||
|
cargo.rustflag("-Zdylib-lto");
|
||||||
|
// Cargo by default passes `-Cembed-bitcode=no` and doesn't pass `-Clto` when
|
||||||
|
// compiling dylibs (and their dependencies), even when LTO is enabled for the
|
||||||
|
// crate. Therefore, we need to override `-Clto` and `-Cembed-bitcode` here.
|
||||||
|
let lto_type = match builder.config.rust_lto {
|
||||||
|
RustcLto::Thin => "thin",
|
||||||
|
RustcLto::Fat => "fat",
|
||||||
|
_ => unreachable!(),
|
||||||
|
};
|
||||||
|
cargo.rustflag(&format!("-Clto={lto_type}"));
|
||||||
|
cargo.rustflag("-Cembed-bitcode=yes");
|
||||||
|
}
|
||||||
|
RustcLto::ThinLocal => { /* Do nothing, this is the default */ }
|
||||||
|
RustcLto::Off => {
|
||||||
|
cargo.rustflag("-Clto=off");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if builder.config.rust_lto == RustcLto::Off {
|
||||||
|
cargo.rustflag("-Clto=off");
|
||||||
|
}
|
||||||
|
|
||||||
rustc_cargo_env(builder, cargo, target, stage);
|
rustc_cargo_env(builder, cargo, target, stage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user