compile all crates under test w/ -Zemit-stack-sizes

This commit is contained in:
Jorge Aparicio
2019-03-25 22:50:07 +01:00
parent 8b8488ce8f
commit 7d365cf27f
2 changed files with 20 additions and 13 deletions

View File

@@ -181,28 +181,31 @@ fn main() {
cmd.arg("-C").arg(format!("debug-assertions={}", debug_assertions)); cmd.arg("-C").arg(format!("debug-assertions={}", debug_assertions));
} }
// Build `compiler_builtins` with `-Z emit-stack-sizes` to add stack usage information. // Build all crates in the `std` facade with `-Z emit-stack-sizes` to add stack usage
// information.
// //
// When you use this flag with Cargo you get stack usage information on all crates compiled // When you use this `-Z` flag with Cargo you get stack usage information on all crates
// from source, and when you are using LTO you also get information on pre-compiled crates // compiled from source, and when you are using LTO you also get information on pre-compiled
// like `core` and `std`. However, there's an exception: `compiler_builtins`. This crate // crates like `core` and `std`, even if they were not compiled with `-Z emit-stack-sizes`.
// is special and doesn't participate in LTO because it's always linked as a separate object // However, there's an exception: `compiler_builtins`. This crate is special and doesn't
// file. Due to this it's impossible to get information about this crate using `RUSTFLAGS` // participate in LTO because it's always linked as a separate object file. For this reason
// + Cargo, or `cargo rustc`. // it's impossible to get stack usage information about `compiler-builtins` using
// `RUSTFLAGS` + Cargo, or `cargo rustc`.
// //
// To make the stack usage information of this crate available to Cargo based stack usage // To make the stack usage information of all crates under the `std` facade available to
// analysis tools we compile `compiler_builtins` with the `-Z emit-stack-sizes` flag. The // Cargo based stack usage analysis tools, in both LTO and non-LTO mode, we compile them
// flag is known to currently work with targets that produce ELF files so we limit the use // with the `-Z emit-stack-sizes` flag. The `RUSTC_EMIT_STACK_SIZES` var helps us apply this
// of the flag to those targets. // flag only to the crates in the `std` facade. The `-Z` flag is known to currently work
// with targets that produce ELF files so we limit its use flag to those targets.
// //
// NOTE(japaric) if this ever causes problem with an LLVM upgrade or any PR feel free to // NOTE(japaric) if this ever causes problem with an LLVM upgrade or any PR feel free to
// remove it or comment it out // remove it or comment it out
if crate_name == "compiler_builtins" if env::var_os("RUSTC_EMIT_STACK_SIZES").is_some()
&& (target.contains("-linux-") && (target.contains("-linux-")
|| target.contains("-none-eabi") || target.contains("-none-eabi")
|| target.ends_with("-none-elf")) || target.ends_with("-none-elf"))
{ {
cmd.arg("-Z").arg("emit-stack-sizes"); cmd.arg("-Zemit-stack-sizes");
} }
if let Ok(s) = env::var("RUSTC_CODEGEN_UNITS") { if let Ok(s) = env::var("RUSTC_CODEGEN_UNITS") {

View File

@@ -97,6 +97,8 @@ impl Step for Std {
let _folder = builder.fold_output(|| format!("stage{}-std", compiler.stage)); let _folder = builder.fold_output(|| format!("stage{}-std", compiler.stage));
builder.info(&format!("Building stage{} std artifacts ({} -> {})", compiler.stage, builder.info(&format!("Building stage{} std artifacts ({} -> {})", compiler.stage,
&compiler.host, target)); &compiler.host, target));
// compile with `-Z emit-stack-sizes`; see bootstrap/src/rustc.rs for more details
cargo.env("RUSTC_EMIT_STACK_SIZES", "1");
run_cargo(builder, run_cargo(builder,
&mut cargo, &mut cargo,
&libstd_stamp(builder, compiler, target), &libstd_stamp(builder, compiler, target),
@@ -382,6 +384,8 @@ impl Step for Test {
let _folder = builder.fold_output(|| format!("stage{}-test", compiler.stage)); let _folder = builder.fold_output(|| format!("stage{}-test", compiler.stage));
builder.info(&format!("Building stage{} test artifacts ({} -> {})", compiler.stage, builder.info(&format!("Building stage{} test artifacts ({} -> {})", compiler.stage,
&compiler.host, target)); &compiler.host, target));
// compile with `-Z emit-stack-sizes`; see bootstrap/src/rustc.rs for more details
cargo.env("RUSTC_EMIT_STACK_SIZES", "1");
run_cargo(builder, run_cargo(builder,
&mut cargo, &mut cargo,
&libtest_stamp(builder, compiler, target), &libtest_stamp(builder, compiler, target),