mirror of
https://github.com/rust-lang/rust
synced 2024-10-01 06:14:33 +00:00
Rollup merge of #125930 - weihanglo:opt-dist-respect-cargo-config, r=Kobzol
feat(opt-dist): new flag `--benchmark-cargo-config`
This should be the last piece toward self-contained `opt-dist` (I believe).
The flag propagates cargo configs to `rustc-perf --cargo-config`,
which is particularly useful when the environment is air-gapped,
and you want to use the default set of training crates vendored
in the rustc-src tarball.
It fixes the issue described in #125465
> * The current pinned rustc-perf uses `tempfile::Tempdir` as the working
directory when collecting profiles from some of these packages.
This "tmp" working directory usage make it impossible for Cargo to pick
up the correct vendor sources setting in `.cargo/config.toml` bundled
in the rustc-src tarball. [^1]
> [^1]: 4f313add60/collector/src/compile/benchmark/mod.rs (L164-L173)
See also
* <https://github.com/rust-lang/rustc-perf/pull/1913>
* <https://github.com/rust-lang/rust/pull/125465>
* https://rust-lang.zulipchat.com/#narrow/stream/247081-t-compiler.2Fperformance/topic/tempfile.20in.20rustc-perf.20make.20it.20hard.20to.20configure.20vendor
r? Kobzol
This commit is contained in:
commit
610592b5fe
|
@ -17,6 +17,9 @@ pub struct Environment {
|
|||
host_llvm_dir: Utf8PathBuf,
|
||||
/// List of test paths that should be skipped when testing the optimized artifacts.
|
||||
skipped_tests: Vec<String>,
|
||||
/// Arguments passed to `rustc-perf --cargo-config <value>` when running benchmarks.
|
||||
#[builder(default)]
|
||||
benchmark_cargo_config: Vec<String>,
|
||||
/// Directory containing a pre-built rustc-perf checkout.
|
||||
#[builder(default)]
|
||||
prebuilt_rustc_perf: Option<Utf8PathBuf>,
|
||||
|
@ -94,6 +97,10 @@ pub fn supports_shared_llvm(&self) -> bool {
|
|||
pub fn skipped_tests(&self) -> &[String] {
|
||||
&self.skipped_tests
|
||||
}
|
||||
|
||||
pub fn benchmark_cargo_config(&self) -> &[String] {
|
||||
&self.benchmark_cargo_config
|
||||
}
|
||||
}
|
||||
|
||||
/// What is the extension of binary executables on this platform?
|
||||
|
|
|
@ -90,6 +90,10 @@ enum EnvironmentCmd {
|
|||
|
||||
#[clap(flatten)]
|
||||
shared: SharedArgs,
|
||||
|
||||
/// Arguments passed to `rustc-perf --cargo-config <value>` when running benchmarks.
|
||||
#[arg(long)]
|
||||
benchmark_cargo_config: Vec<String>,
|
||||
},
|
||||
/// Perform an optimized build on Linux CI, from inside Docker.
|
||||
LinuxCi {
|
||||
|
@ -119,6 +123,7 @@ fn create_environment(args: Args) -> anyhow::Result<(Environment, Vec<String>)>
|
|||
llvm_shared,
|
||||
use_bolt,
|
||||
skipped_tests,
|
||||
benchmark_cargo_config,
|
||||
shared,
|
||||
} => {
|
||||
let env = EnvironmentBuilder::default()
|
||||
|
@ -132,6 +137,7 @@ fn create_environment(args: Args) -> anyhow::Result<(Environment, Vec<String>)>
|
|||
.shared_llvm(llvm_shared)
|
||||
.use_bolt(use_bolt)
|
||||
.skipped_tests(skipped_tests)
|
||||
.benchmark_cargo_config(benchmark_cargo_config)
|
||||
.build()?;
|
||||
|
||||
(env, shared.build_args)
|
||||
|
|
|
@ -36,7 +36,7 @@ fn init_compiler_benchmarks(
|
|||
// Run rustc-perf benchmarks
|
||||
// Benchmark using profile_local with eprintln, which essentially just means
|
||||
// don't actually benchmark -- just make sure we run rustc a bunch of times.
|
||||
cmd(&[
|
||||
let mut cmd = cmd(&[
|
||||
env.cargo_stage_0().as_str(),
|
||||
"run",
|
||||
"-p",
|
||||
|
@ -61,7 +61,17 @@ fn init_compiler_benchmarks(
|
|||
.env("RUST_LOG", "collector=debug")
|
||||
.env("RUSTC", env.rustc_stage_0().as_str())
|
||||
.env("RUSTC_BOOTSTRAP", "1")
|
||||
.workdir(&env.rustc_perf_dir())
|
||||
.workdir(&env.rustc_perf_dir());
|
||||
|
||||
// This propagates cargo configs to `rustc-perf --cargo-config`,
|
||||
// which is particularly useful when the environment is air-gapped,
|
||||
// and you want to use the default set of training crates vendored
|
||||
// in the rustc-src tarball.
|
||||
for config in env.benchmark_cargo_config() {
|
||||
cmd = cmd.arg("--cargo-config").arg(config);
|
||||
}
|
||||
|
||||
cmd
|
||||
}
|
||||
|
||||
/// Describes which `llvm-profdata` binary should be used for merging PGO profiles.
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit cc81f9654dac3fe08de286907dba747538417afd
|
||||
Subproject commit 72daa50ce2350f5a9b5ae6dc3ad6babccd14ec0a
|
Loading…
Reference in a new issue