Rollup merge of #126318 - Kobzol:bootstrap-perf, r=onur-ozkan
Add a `x perf` command for integrating bootstrap with `rustc-perf` This PR adds a new `x perf` command to bootstrap. The idea is to let rustc developers profile (`profile_local`) and benchmark (`bench_local`) a stage1/stage2 compiler directly from within `rust`. Before, if you wanted to use `rustc-perf`, you had to clone it, set it up, copy the `rustc` sysroot after every change to `rust` etc. This is an attempt to automate that. I opened this PR mostly for discussion. My idea is to offer an interface that looks something like this (a random sample of commands): ```bash x perf --stage 2 profile eprintln x perf --stage1 profile cachegrind x perf benchmark --id baseline x perf benchmark --id after-edit x perf cmp baseline after-edit ``` In this PR, I'd like to only implement the simplest case (`profile_local (eprintln)`), because that only requires a single sysroot (you don't compare anything), and it's relatively easy to set up. Also, I'd like to avoid forcing developers to deal with the rustc-perf UI, so more complex use-cases (like benchmarking two sysroots and comparing the results) should probably wait for https://github.com/rust-lang/rustc-perf/issues/1734 (which is hopefully coming along soon-ish). I'm not sure if it's better to do this in bootstrap directly, or if I should create some shim tool that will receive a `rustc` sysroot, and offer a simplified CLI on top of `rustc-perf`. ## Why is a separate CLI needed? We definitely need to add some support to bootstrap to automate preparing `rustc-perf` and the `rustc` sysroot, but in theory after that we could just let people invoke `rustc-perf` manually. While that is definitely possible, you'd need to manually figure out where is your sysroot located, which seems annoying to me. The `rustc-perf` CLI is also relatively complex, and for this use-case it makes sense to only use a subset of it. So I thought that it would be better to offer a simplified interface on top of it that would make life easier for contributors. But maybe it's not worth it. CC `@onur-ozkan`
This commit is contained in:
commit
162120b4fa
11 changed files with 380 additions and 8 deletions
|
@ -7,6 +7,7 @@ pub(crate) mod doc;
|
||||||
pub(crate) mod format;
|
pub(crate) mod format;
|
||||||
pub(crate) mod install;
|
pub(crate) mod install;
|
||||||
pub(crate) mod llvm;
|
pub(crate) mod llvm;
|
||||||
|
pub(crate) mod perf;
|
||||||
pub(crate) mod run;
|
pub(crate) mod run;
|
||||||
pub(crate) mod setup;
|
pub(crate) mod setup;
|
||||||
pub(crate) mod suggest;
|
pub(crate) mod suggest;
|
||||||
|
|
45
src/bootstrap/src/core/build_steps/perf.rs
Normal file
45
src/bootstrap/src/core/build_steps/perf.rs
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
use std::process::Command;
|
||||||
|
|
||||||
|
use crate::core::build_steps::compile::{Std, Sysroot};
|
||||||
|
use crate::core::build_steps::tool::RustcPerf;
|
||||||
|
use crate::core::builder::Builder;
|
||||||
|
use crate::core::config::DebuginfoLevel;
|
||||||
|
|
||||||
|
/// Performs profiling using `rustc-perf` on a built version of the compiler.
|
||||||
|
pub fn perf(builder: &Builder<'_>) {
|
||||||
|
let collector = builder.ensure(RustcPerf {
|
||||||
|
compiler: builder.compiler(0, builder.config.build),
|
||||||
|
target: builder.config.build,
|
||||||
|
});
|
||||||
|
|
||||||
|
if builder.build.config.rust_debuginfo_level_rustc == DebuginfoLevel::None {
|
||||||
|
builder.info(r#"WARNING: You are compiling rustc without debuginfo, this will make profiling less useful.
|
||||||
|
Consider setting `rust.debuginfo-level = 1` in `config.toml`."#);
|
||||||
|
}
|
||||||
|
|
||||||
|
let compiler = builder.compiler(builder.top_stage, builder.config.build);
|
||||||
|
builder.ensure(Std::new(compiler, builder.config.build));
|
||||||
|
let sysroot = builder.ensure(Sysroot::new(compiler));
|
||||||
|
let rustc = sysroot.join("bin/rustc");
|
||||||
|
|
||||||
|
let results_dir = builder.build.tempdir().join("rustc-perf");
|
||||||
|
|
||||||
|
let mut cmd = Command::new(collector);
|
||||||
|
let cmd = cmd
|
||||||
|
.arg("profile_local")
|
||||||
|
.arg("eprintln")
|
||||||
|
.arg("--out-dir")
|
||||||
|
.arg(&results_dir)
|
||||||
|
.arg("--include")
|
||||||
|
.arg("helloworld")
|
||||||
|
.arg(&rustc);
|
||||||
|
|
||||||
|
builder.info(&format!("Running `rustc-perf` using `{}`", rustc.display()));
|
||||||
|
|
||||||
|
// We need to set the working directory to `src/tools/perf`, so that it can find the directory
|
||||||
|
// with compile-time benchmarks.
|
||||||
|
let cmd = cmd.current_dir(builder.src.join("src/tools/rustc-perf"));
|
||||||
|
builder.build.run(cmd);
|
||||||
|
|
||||||
|
builder.info(&format!("You can find the results at `{}`", results_dir.display()));
|
||||||
|
}
|
|
@ -32,6 +32,8 @@ struct ToolBuild {
|
||||||
extra_features: Vec<String>,
|
extra_features: Vec<String>,
|
||||||
/// Nightly-only features that are allowed (comma-separated list).
|
/// Nightly-only features that are allowed (comma-separated list).
|
||||||
allow_features: &'static str,
|
allow_features: &'static str,
|
||||||
|
/// Additional arguments to pass to the `cargo` invocation.
|
||||||
|
cargo_args: Vec<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Builder<'_> {
|
impl Builder<'_> {
|
||||||
|
@ -100,6 +102,7 @@ impl Step for ToolBuild {
|
||||||
if !self.allow_features.is_empty() {
|
if !self.allow_features.is_empty() {
|
||||||
cargo.allow_features(self.allow_features);
|
cargo.allow_features(self.allow_features);
|
||||||
}
|
}
|
||||||
|
cargo.args(self.cargo_args);
|
||||||
let _guard = builder.msg_tool(
|
let _guard = builder.msg_tool(
|
||||||
Kind::Build,
|
Kind::Build,
|
||||||
self.mode,
|
self.mode,
|
||||||
|
@ -126,10 +129,7 @@ impl Step for ToolBuild {
|
||||||
if tool == "tidy" {
|
if tool == "tidy" {
|
||||||
tool = "rust-tidy";
|
tool = "rust-tidy";
|
||||||
}
|
}
|
||||||
let cargo_out = builder.cargo_out(compiler, self.mode, target).join(exe(tool, target));
|
copy_link_tool_bin(builder, self.compiler, self.target, self.mode, tool)
|
||||||
let bin = builder.tools_dir(compiler).join(exe(tool, target));
|
|
||||||
builder.copy_link(&cargo_out, &bin);
|
|
||||||
bin
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -214,6 +214,21 @@ pub fn prepare_tool_cargo(
|
||||||
cargo
|
cargo
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Links a built tool binary with the given `name` from the build directory to the
|
||||||
|
/// tools directory.
|
||||||
|
fn copy_link_tool_bin(
|
||||||
|
builder: &Builder<'_>,
|
||||||
|
compiler: Compiler,
|
||||||
|
target: TargetSelection,
|
||||||
|
mode: Mode,
|
||||||
|
name: &str,
|
||||||
|
) -> PathBuf {
|
||||||
|
let cargo_out = builder.cargo_out(compiler, mode, target).join(exe(name, target));
|
||||||
|
let bin = builder.tools_dir(compiler).join(exe(name, target));
|
||||||
|
builder.copy_link(&cargo_out, &bin);
|
||||||
|
bin
|
||||||
|
}
|
||||||
|
|
||||||
macro_rules! bootstrap_tool {
|
macro_rules! bootstrap_tool {
|
||||||
($(
|
($(
|
||||||
$name:ident, $path:expr, $tool_name:expr
|
$name:ident, $path:expr, $tool_name:expr
|
||||||
|
@ -283,6 +298,7 @@ macro_rules! bootstrap_tool {
|
||||||
},
|
},
|
||||||
extra_features: vec![],
|
extra_features: vec![],
|
||||||
allow_features: concat!($($allow_features)*),
|
allow_features: concat!($($allow_features)*),
|
||||||
|
cargo_args: vec![]
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -349,10 +365,60 @@ impl Step for OptimizedDist {
|
||||||
source_type: SourceType::InTree,
|
source_type: SourceType::InTree,
|
||||||
extra_features: Vec::new(),
|
extra_features: Vec::new(),
|
||||||
allow_features: "",
|
allow_features: "",
|
||||||
|
cargo_args: Vec::new(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// The [rustc-perf](https://github.com/rust-lang/rustc-perf) benchmark suite, which is added
|
||||||
|
/// as a submodule at `src/tools/rustc-perf`.
|
||||||
|
#[derive(Debug, Clone, Hash, PartialEq, Eq)]
|
||||||
|
pub struct RustcPerf {
|
||||||
|
pub compiler: Compiler,
|
||||||
|
pub target: TargetSelection,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Step for RustcPerf {
|
||||||
|
/// Path to the built `collector` binary.
|
||||||
|
type Output = PathBuf;
|
||||||
|
|
||||||
|
fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> {
|
||||||
|
run.path("src/tools/rustc-perf")
|
||||||
|
}
|
||||||
|
|
||||||
|
fn make_run(run: RunConfig<'_>) {
|
||||||
|
run.builder.ensure(RustcPerf {
|
||||||
|
compiler: run.builder.compiler(0, run.builder.config.build),
|
||||||
|
target: run.target,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
fn run(self, builder: &Builder<'_>) -> PathBuf {
|
||||||
|
// We need to ensure the rustc-perf submodule is initialized.
|
||||||
|
builder.update_submodule(Path::new("src/tools/rustc-perf"));
|
||||||
|
|
||||||
|
let tool = ToolBuild {
|
||||||
|
compiler: self.compiler,
|
||||||
|
target: self.target,
|
||||||
|
tool: "collector",
|
||||||
|
mode: Mode::ToolBootstrap,
|
||||||
|
path: "src/tools/rustc-perf",
|
||||||
|
source_type: SourceType::Submodule,
|
||||||
|
extra_features: Vec::new(),
|
||||||
|
allow_features: "",
|
||||||
|
// Only build the collector package, which is used for benchmarking through
|
||||||
|
// a CLI.
|
||||||
|
cargo_args: vec!["-p".to_string(), "collector".to_string()],
|
||||||
|
};
|
||||||
|
let collector_bin = builder.ensure(tool.clone());
|
||||||
|
// We also need to symlink the `rustc-fake` binary to the corresponding directory,
|
||||||
|
// because `collector` expects it in the same directory.
|
||||||
|
copy_link_tool_bin(builder, tool.compiler, tool.target, tool.mode, "rustc-fake");
|
||||||
|
|
||||||
|
collector_bin
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Hash, PartialEq, Eq, Ord, PartialOrd)]
|
#[derive(Debug, Clone, Hash, PartialEq, Eq, Ord, PartialOrd)]
|
||||||
pub struct ErrorIndex {
|
pub struct ErrorIndex {
|
||||||
pub compiler: Compiler,
|
pub compiler: Compiler,
|
||||||
|
@ -403,6 +469,7 @@ impl Step for ErrorIndex {
|
||||||
source_type: SourceType::InTree,
|
source_type: SourceType::InTree,
|
||||||
extra_features: Vec::new(),
|
extra_features: Vec::new(),
|
||||||
allow_features: "",
|
allow_features: "",
|
||||||
|
cargo_args: Vec::new(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -437,6 +504,7 @@ impl Step for RemoteTestServer {
|
||||||
source_type: SourceType::InTree,
|
source_type: SourceType::InTree,
|
||||||
extra_features: Vec::new(),
|
extra_features: Vec::new(),
|
||||||
allow_features: "",
|
allow_features: "",
|
||||||
|
cargo_args: Vec::new(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -595,6 +663,7 @@ impl Step for Cargo {
|
||||||
source_type: SourceType::Submodule,
|
source_type: SourceType::Submodule,
|
||||||
extra_features: Vec::new(),
|
extra_features: Vec::new(),
|
||||||
allow_features: "",
|
allow_features: "",
|
||||||
|
cargo_args: Vec::new(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -622,6 +691,7 @@ impl Step for LldWrapper {
|
||||||
source_type: SourceType::InTree,
|
source_type: SourceType::InTree,
|
||||||
extra_features: Vec::new(),
|
extra_features: Vec::new(),
|
||||||
allow_features: "",
|
allow_features: "",
|
||||||
|
cargo_args: Vec::new(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -670,6 +740,7 @@ impl Step for RustAnalyzer {
|
||||||
extra_features: vec!["in-rust-tree".to_owned()],
|
extra_features: vec!["in-rust-tree".to_owned()],
|
||||||
source_type: SourceType::InTree,
|
source_type: SourceType::InTree,
|
||||||
allow_features: RustAnalyzer::ALLOW_FEATURES,
|
allow_features: RustAnalyzer::ALLOW_FEATURES,
|
||||||
|
cargo_args: Vec::new(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -717,6 +788,7 @@ impl Step for RustAnalyzerProcMacroSrv {
|
||||||
extra_features: vec!["in-rust-tree".to_owned()],
|
extra_features: vec!["in-rust-tree".to_owned()],
|
||||||
source_type: SourceType::InTree,
|
source_type: SourceType::InTree,
|
||||||
allow_features: RustAnalyzer::ALLOW_FEATURES,
|
allow_features: RustAnalyzer::ALLOW_FEATURES,
|
||||||
|
cargo_args: Vec::new(),
|
||||||
});
|
});
|
||||||
|
|
||||||
// Copy `rust-analyzer-proc-macro-srv` to `<sysroot>/libexec/`
|
// Copy `rust-analyzer-proc-macro-srv` to `<sysroot>/libexec/`
|
||||||
|
@ -923,6 +995,7 @@ macro_rules! tool_extended {
|
||||||
extra_features: $sel.extra_features,
|
extra_features: $sel.extra_features,
|
||||||
source_type: SourceType::InTree,
|
source_type: SourceType::InTree,
|
||||||
allow_features: concat!($($allow_features)*),
|
allow_features: concat!($($allow_features)*),
|
||||||
|
cargo_args: vec![]
|
||||||
});
|
});
|
||||||
|
|
||||||
if (false $(|| !$add_bins_to_sysroot.is_empty())?) && $sel.compiler.stage > 0 {
|
if (false $(|| !$add_bins_to_sysroot.is_empty())?) && $sel.compiler.stage > 0 {
|
||||||
|
|
|
@ -666,6 +666,7 @@ pub enum Kind {
|
||||||
Setup,
|
Setup,
|
||||||
Suggest,
|
Suggest,
|
||||||
Vendor,
|
Vendor,
|
||||||
|
Perf,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Kind {
|
impl Kind {
|
||||||
|
@ -687,6 +688,7 @@ impl Kind {
|
||||||
Kind::Setup => "setup",
|
Kind::Setup => "setup",
|
||||||
Kind::Suggest => "suggest",
|
Kind::Suggest => "suggest",
|
||||||
Kind::Vendor => "vendor",
|
Kind::Vendor => "vendor",
|
||||||
|
Kind::Perf => "perf",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -698,6 +700,7 @@ impl Kind {
|
||||||
Kind::Run => "Running",
|
Kind::Run => "Running",
|
||||||
Kind::Suggest => "Suggesting",
|
Kind::Suggest => "Suggesting",
|
||||||
Kind::Clippy => "Linting",
|
Kind::Clippy => "Linting",
|
||||||
|
Kind::Perf => "Profiling & benchmarking",
|
||||||
_ => {
|
_ => {
|
||||||
let title_letter = self.as_str()[0..1].to_ascii_uppercase();
|
let title_letter = self.as_str()[0..1].to_ascii_uppercase();
|
||||||
return format!("{title_letter}{}ing", &self.as_str()[1..]);
|
return format!("{title_letter}{}ing", &self.as_str()[1..]);
|
||||||
|
@ -749,7 +752,8 @@ impl<'a> Builder<'a> {
|
||||||
tool::RustdocGUITest,
|
tool::RustdocGUITest,
|
||||||
tool::OptimizedDist,
|
tool::OptimizedDist,
|
||||||
tool::CoverageDump,
|
tool::CoverageDump,
|
||||||
tool::LlvmBitcodeLinker
|
tool::LlvmBitcodeLinker,
|
||||||
|
tool::RustcPerf,
|
||||||
),
|
),
|
||||||
Kind::Clippy => describe!(
|
Kind::Clippy => describe!(
|
||||||
clippy::Std,
|
clippy::Std,
|
||||||
|
@ -945,7 +949,7 @@ impl<'a> Builder<'a> {
|
||||||
Kind::Clean => describe!(clean::CleanAll, clean::Rustc, clean::Std),
|
Kind::Clean => describe!(clean::CleanAll, clean::Rustc, clean::Std),
|
||||||
Kind::Vendor => describe!(vendor::Vendor),
|
Kind::Vendor => describe!(vendor::Vendor),
|
||||||
// special-cased in Build::build()
|
// special-cased in Build::build()
|
||||||
Kind::Format | Kind::Suggest => vec![],
|
Kind::Format | Kind::Suggest | Kind::Perf => vec![],
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1017,6 +1021,7 @@ impl<'a> Builder<'a> {
|
||||||
path.as_ref().map_or([].as_slice(), |path| std::slice::from_ref(path)),
|
path.as_ref().map_or([].as_slice(), |path| std::slice::from_ref(path)),
|
||||||
),
|
),
|
||||||
Subcommand::Vendor { .. } => (Kind::Vendor, &paths[..]),
|
Subcommand::Vendor { .. } => (Kind::Vendor, &paths[..]),
|
||||||
|
Subcommand::Perf { .. } => (Kind::Perf, &paths[..]),
|
||||||
};
|
};
|
||||||
|
|
||||||
Self::new_internal(build, kind, paths.to_owned())
|
Self::new_internal(build, kind, paths.to_owned())
|
||||||
|
|
|
@ -2043,6 +2043,7 @@ impl Config {
|
||||||
Subcommand::Bench { .. } => flags.stage.or(bench_stage).unwrap_or(2),
|
Subcommand::Bench { .. } => flags.stage.or(bench_stage).unwrap_or(2),
|
||||||
Subcommand::Dist { .. } => flags.stage.or(dist_stage).unwrap_or(2),
|
Subcommand::Dist { .. } => flags.stage.or(dist_stage).unwrap_or(2),
|
||||||
Subcommand::Install { .. } => flags.stage.or(install_stage).unwrap_or(2),
|
Subcommand::Install { .. } => flags.stage.or(install_stage).unwrap_or(2),
|
||||||
|
Subcommand::Perf { .. } => flags.stage.unwrap_or(1),
|
||||||
// These are all bootstrap tools, which don't depend on the compiler.
|
// These are all bootstrap tools, which don't depend on the compiler.
|
||||||
// The stage we pass shouldn't matter, but use 0 just in case.
|
// The stage we pass shouldn't matter, but use 0 just in case.
|
||||||
Subcommand::Clean { .. }
|
Subcommand::Clean { .. }
|
||||||
|
@ -2080,7 +2081,8 @@ impl Config {
|
||||||
| Subcommand::Setup { .. }
|
| Subcommand::Setup { .. }
|
||||||
| Subcommand::Format { .. }
|
| Subcommand::Format { .. }
|
||||||
| Subcommand::Suggest { .. }
|
| Subcommand::Suggest { .. }
|
||||||
| Subcommand::Vendor { .. } => {}
|
| Subcommand::Vendor { .. }
|
||||||
|
| Subcommand::Perf { .. } => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -469,6 +469,9 @@ Arguments:
|
||||||
#[arg(long)]
|
#[arg(long)]
|
||||||
versioned_dirs: bool,
|
versioned_dirs: bool,
|
||||||
},
|
},
|
||||||
|
/// Perform profiling and benchmarking of the compiler using the
|
||||||
|
/// `rustc-perf` benchmark suite.
|
||||||
|
Perf {},
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Subcommand {
|
impl Subcommand {
|
||||||
|
@ -490,6 +493,7 @@ impl Subcommand {
|
||||||
Subcommand::Setup { .. } => Kind::Setup,
|
Subcommand::Setup { .. } => Kind::Setup,
|
||||||
Subcommand::Suggest { .. } => Kind::Suggest,
|
Subcommand::Suggest { .. } => Kind::Suggest,
|
||||||
Subcommand::Vendor { .. } => Kind::Vendor,
|
Subcommand::Vendor { .. } => Kind::Vendor,
|
||||||
|
Subcommand::Perf { .. } => Kind::Perf,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -659,6 +659,9 @@ impl Build {
|
||||||
Subcommand::Suggest { run } => {
|
Subcommand::Suggest { run } => {
|
||||||
return core::build_steps::suggest::suggest(&builder::Builder::new(self), *run);
|
return core::build_steps::suggest::suggest(&builder::Builder::new(self), *run);
|
||||||
}
|
}
|
||||||
|
Subcommand::Perf { .. } => {
|
||||||
|
return core::build_steps::perf::perf(&builder::Builder::new(self));
|
||||||
|
}
|
||||||
_ => (),
|
_ => (),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -48,6 +48,7 @@ complete -c x.py -n "__fish_use_subcommand" -f -a "run" -d 'Run tools contained
|
||||||
complete -c x.py -n "__fish_use_subcommand" -f -a "setup" -d 'Set up the environment for development'
|
complete -c x.py -n "__fish_use_subcommand" -f -a "setup" -d 'Set up the environment for development'
|
||||||
complete -c x.py -n "__fish_use_subcommand" -f -a "suggest" -d 'Suggest a subset of tests to run, based on modified files'
|
complete -c x.py -n "__fish_use_subcommand" -f -a "suggest" -d 'Suggest a subset of tests to run, based on modified files'
|
||||||
complete -c x.py -n "__fish_use_subcommand" -f -a "vendor" -d 'Vendor dependencies'
|
complete -c x.py -n "__fish_use_subcommand" -f -a "vendor" -d 'Vendor dependencies'
|
||||||
|
complete -c x.py -n "__fish_use_subcommand" -f -a "perf" -d 'Perform profiling and benchmarking of the compiler using the `rustc-perf` benchmark suite'
|
||||||
complete -c x.py -n "__fish_seen_subcommand_from build" -l config -d 'TOML configuration file for build' -r -F
|
complete -c x.py -n "__fish_seen_subcommand_from build" -l config -d 'TOML configuration file for build' -r -F
|
||||||
complete -c x.py -n "__fish_seen_subcommand_from build" -l build-dir -d 'Build directory, overrides `build.build-dir` in `config.toml`' -r -f -a "(__fish_complete_directories)"
|
complete -c x.py -n "__fish_seen_subcommand_from build" -l build-dir -d 'Build directory, overrides `build.build-dir` in `config.toml`' -r -f -a "(__fish_complete_directories)"
|
||||||
complete -c x.py -n "__fish_seen_subcommand_from build" -l build -d 'build target of the stage0 compiler' -r -f
|
complete -c x.py -n "__fish_seen_subcommand_from build" -l build -d 'build target of the stage0 compiler' -r -f
|
||||||
|
@ -628,3 +629,37 @@ complete -c x.py -n "__fish_seen_subcommand_from vendor" -l llvm-profile-generat
|
||||||
complete -c x.py -n "__fish_seen_subcommand_from vendor" -l enable-bolt-settings -d 'Enable BOLT link flags'
|
complete -c x.py -n "__fish_seen_subcommand_from vendor" -l enable-bolt-settings -d 'Enable BOLT link flags'
|
||||||
complete -c x.py -n "__fish_seen_subcommand_from vendor" -l skip-stage0-validation -d 'Skip stage0 compiler validation'
|
complete -c x.py -n "__fish_seen_subcommand_from vendor" -l skip-stage0-validation -d 'Skip stage0 compiler validation'
|
||||||
complete -c x.py -n "__fish_seen_subcommand_from vendor" -s h -l help -d 'Print help (see more with \'--help\')'
|
complete -c x.py -n "__fish_seen_subcommand_from vendor" -s h -l help -d 'Print help (see more with \'--help\')'
|
||||||
|
complete -c x.py -n "__fish_seen_subcommand_from perf" -l config -d 'TOML configuration file for build' -r -F
|
||||||
|
complete -c x.py -n "__fish_seen_subcommand_from perf" -l build-dir -d 'Build directory, overrides `build.build-dir` in `config.toml`' -r -f -a "(__fish_complete_directories)"
|
||||||
|
complete -c x.py -n "__fish_seen_subcommand_from perf" -l build -d 'build target of the stage0 compiler' -r -f
|
||||||
|
complete -c x.py -n "__fish_seen_subcommand_from perf" -l host -d 'host targets to build' -r -f
|
||||||
|
complete -c x.py -n "__fish_seen_subcommand_from perf" -l target -d 'target targets to build' -r -f
|
||||||
|
complete -c x.py -n "__fish_seen_subcommand_from perf" -l exclude -d 'build paths to exclude' -r -F
|
||||||
|
complete -c x.py -n "__fish_seen_subcommand_from perf" -l skip -d 'build paths to skip' -r -F
|
||||||
|
complete -c x.py -n "__fish_seen_subcommand_from perf" -l rustc-error-format -r -f
|
||||||
|
complete -c x.py -n "__fish_seen_subcommand_from perf" -l on-fail -d 'command to run on failure' -r -f -a "(__fish_complete_command)"
|
||||||
|
complete -c x.py -n "__fish_seen_subcommand_from perf" -l stage -d 'stage to build (indicates compiler to use/test, e.g., stage 0 uses the bootstrap compiler, stage 1 the stage 0 rustc artifacts, etc.)' -r -f
|
||||||
|
complete -c x.py -n "__fish_seen_subcommand_from perf" -l keep-stage -d 'stage(s) to keep without recompiling (pass multiple times to keep e.g., both stages 0 and 1)' -r -f
|
||||||
|
complete -c x.py -n "__fish_seen_subcommand_from perf" -l keep-stage-std -d 'stage(s) of the standard library to keep without recompiling (pass multiple times to keep e.g., both stages 0 and 1)' -r -f
|
||||||
|
complete -c x.py -n "__fish_seen_subcommand_from perf" -l src -d 'path to the root of the rust checkout' -r -f -a "(__fish_complete_directories)"
|
||||||
|
complete -c x.py -n "__fish_seen_subcommand_from perf" -s j -l jobs -d 'number of jobs to run in parallel' -r -f
|
||||||
|
complete -c x.py -n "__fish_seen_subcommand_from perf" -l warnings -d 'if value is deny, will deny warnings if value is warn, will emit warnings otherwise, use the default configured behaviour' -r -f -a "{deny '',warn '',default ''}"
|
||||||
|
complete -c x.py -n "__fish_seen_subcommand_from perf" -l error-format -d 'rustc error format' -r -f
|
||||||
|
complete -c x.py -n "__fish_seen_subcommand_from perf" -l color -d 'whether to use color in cargo and rustc output' -r -f -a "{always '',never '',auto ''}"
|
||||||
|
complete -c x.py -n "__fish_seen_subcommand_from perf" -l llvm-skip-rebuild -d 'whether rebuilding llvm should be skipped, overriding `skip-rebuld` in config.toml' -r -f -a "{true '',false ''}"
|
||||||
|
complete -c x.py -n "__fish_seen_subcommand_from perf" -l rust-profile-generate -d 'generate PGO profile with rustc build' -r -F
|
||||||
|
complete -c x.py -n "__fish_seen_subcommand_from perf" -l rust-profile-use -d 'use PGO profile for rustc build' -r -F
|
||||||
|
complete -c x.py -n "__fish_seen_subcommand_from perf" -l llvm-profile-use -d 'use PGO profile for LLVM build' -r -F
|
||||||
|
complete -c x.py -n "__fish_seen_subcommand_from perf" -l reproducible-artifact -d 'Additional reproducible artifacts that should be added to the reproducible artifacts archive' -r
|
||||||
|
complete -c x.py -n "__fish_seen_subcommand_from perf" -l set -d 'override options in config.toml' -r -f
|
||||||
|
complete -c x.py -n "__fish_seen_subcommand_from perf" -s v -l verbose -d 'use verbose output (-vv for very verbose)'
|
||||||
|
complete -c x.py -n "__fish_seen_subcommand_from perf" -s i -l incremental -d 'use incremental compilation'
|
||||||
|
complete -c x.py -n "__fish_seen_subcommand_from perf" -l include-default-paths -d 'include default paths in addition to the provided ones'
|
||||||
|
complete -c x.py -n "__fish_seen_subcommand_from perf" -l dry-run -d 'dry run; don\'t build anything'
|
||||||
|
complete -c x.py -n "__fish_seen_subcommand_from perf" -l dump-bootstrap-shims -d 'Indicates whether to dump the work done from bootstrap shims'
|
||||||
|
complete -c x.py -n "__fish_seen_subcommand_from perf" -l json-output -d 'use message-format=json'
|
||||||
|
complete -c x.py -n "__fish_seen_subcommand_from perf" -l bypass-bootstrap-lock -d 'Bootstrap uses this value to decide whether it should bypass locking the build process. This is rarely needed (e.g., compiling the std library for different targets in parallel)'
|
||||||
|
complete -c x.py -n "__fish_seen_subcommand_from perf" -l llvm-profile-generate -d 'generate PGO profile with llvm built for rustc'
|
||||||
|
complete -c x.py -n "__fish_seen_subcommand_from perf" -l enable-bolt-settings -d 'Enable BOLT link flags'
|
||||||
|
complete -c x.py -n "__fish_seen_subcommand_from perf" -l skip-stage0-validation -d 'Skip stage0 compiler validation'
|
||||||
|
complete -c x.py -n "__fish_seen_subcommand_from perf" -s h -l help -d 'Print help (see more with \'--help\')'
|
||||||
|
|
|
@ -75,6 +75,7 @@ Register-ArgumentCompleter -Native -CommandName 'x.py' -ScriptBlock {
|
||||||
[CompletionResult]::new('setup', 'setup', [CompletionResultType]::ParameterValue, 'Set up the environment for development')
|
[CompletionResult]::new('setup', 'setup', [CompletionResultType]::ParameterValue, 'Set up the environment for development')
|
||||||
[CompletionResult]::new('suggest', 'suggest', [CompletionResultType]::ParameterValue, 'Suggest a subset of tests to run, based on modified files')
|
[CompletionResult]::new('suggest', 'suggest', [CompletionResultType]::ParameterValue, 'Suggest a subset of tests to run, based on modified files')
|
||||||
[CompletionResult]::new('vendor', 'vendor', [CompletionResultType]::ParameterValue, 'Vendor dependencies')
|
[CompletionResult]::new('vendor', 'vendor', [CompletionResultType]::ParameterValue, 'Vendor dependencies')
|
||||||
|
[CompletionResult]::new('perf', 'perf', [CompletionResultType]::ParameterValue, 'Perform profiling and benchmarking of the compiler using the `rustc-perf` benchmark suite')
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
'x.py;build' {
|
'x.py;build' {
|
||||||
|
@ -769,6 +770,47 @@ Register-ArgumentCompleter -Native -CommandName 'x.py' -ScriptBlock {
|
||||||
[CompletionResult]::new('--help', 'help', [CompletionResultType]::ParameterName, 'Print help (see more with ''--help'')')
|
[CompletionResult]::new('--help', 'help', [CompletionResultType]::ParameterName, 'Print help (see more with ''--help'')')
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
'x.py;perf' {
|
||||||
|
[CompletionResult]::new('--config', 'config', [CompletionResultType]::ParameterName, 'TOML configuration file for build')
|
||||||
|
[CompletionResult]::new('--build-dir', 'build-dir', [CompletionResultType]::ParameterName, 'Build directory, overrides `build.build-dir` in `config.toml`')
|
||||||
|
[CompletionResult]::new('--build', 'build', [CompletionResultType]::ParameterName, 'build target of the stage0 compiler')
|
||||||
|
[CompletionResult]::new('--host', 'host', [CompletionResultType]::ParameterName, 'host targets to build')
|
||||||
|
[CompletionResult]::new('--target', 'target', [CompletionResultType]::ParameterName, 'target targets to build')
|
||||||
|
[CompletionResult]::new('--exclude', 'exclude', [CompletionResultType]::ParameterName, 'build paths to exclude')
|
||||||
|
[CompletionResult]::new('--skip', 'skip', [CompletionResultType]::ParameterName, 'build paths to skip')
|
||||||
|
[CompletionResult]::new('--rustc-error-format', 'rustc-error-format', [CompletionResultType]::ParameterName, 'rustc-error-format')
|
||||||
|
[CompletionResult]::new('--on-fail', 'on-fail', [CompletionResultType]::ParameterName, 'command to run on failure')
|
||||||
|
[CompletionResult]::new('--stage', 'stage', [CompletionResultType]::ParameterName, 'stage to build (indicates compiler to use/test, e.g., stage 0 uses the bootstrap compiler, stage 1 the stage 0 rustc artifacts, etc.)')
|
||||||
|
[CompletionResult]::new('--keep-stage', 'keep-stage', [CompletionResultType]::ParameterName, 'stage(s) to keep without recompiling (pass multiple times to keep e.g., both stages 0 and 1)')
|
||||||
|
[CompletionResult]::new('--keep-stage-std', 'keep-stage-std', [CompletionResultType]::ParameterName, 'stage(s) of the standard library to keep without recompiling (pass multiple times to keep e.g., both stages 0 and 1)')
|
||||||
|
[CompletionResult]::new('--src', 'src', [CompletionResultType]::ParameterName, 'path to the root of the rust checkout')
|
||||||
|
[CompletionResult]::new('-j', 'j', [CompletionResultType]::ParameterName, 'number of jobs to run in parallel')
|
||||||
|
[CompletionResult]::new('--jobs', 'jobs', [CompletionResultType]::ParameterName, 'number of jobs to run in parallel')
|
||||||
|
[CompletionResult]::new('--warnings', 'warnings', [CompletionResultType]::ParameterName, 'if value is deny, will deny warnings if value is warn, will emit warnings otherwise, use the default configured behaviour')
|
||||||
|
[CompletionResult]::new('--error-format', 'error-format', [CompletionResultType]::ParameterName, 'rustc error format')
|
||||||
|
[CompletionResult]::new('--color', 'color', [CompletionResultType]::ParameterName, 'whether to use color in cargo and rustc output')
|
||||||
|
[CompletionResult]::new('--llvm-skip-rebuild', 'llvm-skip-rebuild', [CompletionResultType]::ParameterName, 'whether rebuilding llvm should be skipped, overriding `skip-rebuld` in config.toml')
|
||||||
|
[CompletionResult]::new('--rust-profile-generate', 'rust-profile-generate', [CompletionResultType]::ParameterName, 'generate PGO profile with rustc build')
|
||||||
|
[CompletionResult]::new('--rust-profile-use', 'rust-profile-use', [CompletionResultType]::ParameterName, 'use PGO profile for rustc build')
|
||||||
|
[CompletionResult]::new('--llvm-profile-use', 'llvm-profile-use', [CompletionResultType]::ParameterName, 'use PGO profile for LLVM build')
|
||||||
|
[CompletionResult]::new('--reproducible-artifact', 'reproducible-artifact', [CompletionResultType]::ParameterName, 'Additional reproducible artifacts that should be added to the reproducible artifacts archive')
|
||||||
|
[CompletionResult]::new('--set', 'set', [CompletionResultType]::ParameterName, 'override options in config.toml')
|
||||||
|
[CompletionResult]::new('-v', 'v', [CompletionResultType]::ParameterName, 'use verbose output (-vv for very verbose)')
|
||||||
|
[CompletionResult]::new('--verbose', 'verbose', [CompletionResultType]::ParameterName, 'use verbose output (-vv for very verbose)')
|
||||||
|
[CompletionResult]::new('-i', 'i', [CompletionResultType]::ParameterName, 'use incremental compilation')
|
||||||
|
[CompletionResult]::new('--incremental', 'incremental', [CompletionResultType]::ParameterName, 'use incremental compilation')
|
||||||
|
[CompletionResult]::new('--include-default-paths', 'include-default-paths', [CompletionResultType]::ParameterName, 'include default paths in addition to the provided ones')
|
||||||
|
[CompletionResult]::new('--dry-run', 'dry-run', [CompletionResultType]::ParameterName, 'dry run; don''t build anything')
|
||||||
|
[CompletionResult]::new('--dump-bootstrap-shims', 'dump-bootstrap-shims', [CompletionResultType]::ParameterName, 'Indicates whether to dump the work done from bootstrap shims')
|
||||||
|
[CompletionResult]::new('--json-output', 'json-output', [CompletionResultType]::ParameterName, 'use message-format=json')
|
||||||
|
[CompletionResult]::new('--bypass-bootstrap-lock', 'bypass-bootstrap-lock', [CompletionResultType]::ParameterName, 'Bootstrap uses this value to decide whether it should bypass locking the build process. This is rarely needed (e.g., compiling the std library for different targets in parallel)')
|
||||||
|
[CompletionResult]::new('--llvm-profile-generate', 'llvm-profile-generate', [CompletionResultType]::ParameterName, 'generate PGO profile with llvm built for rustc')
|
||||||
|
[CompletionResult]::new('--enable-bolt-settings', 'enable-bolt-settings', [CompletionResultType]::ParameterName, 'Enable BOLT link flags')
|
||||||
|
[CompletionResult]::new('--skip-stage0-validation', 'skip-stage0-validation', [CompletionResultType]::ParameterName, 'Skip stage0 compiler validation')
|
||||||
|
[CompletionResult]::new('-h', 'h', [CompletionResultType]::ParameterName, 'Print help (see more with ''--help'')')
|
||||||
|
[CompletionResult]::new('--help', 'help', [CompletionResultType]::ParameterName, 'Print help (see more with ''--help'')')
|
||||||
|
break
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
$completions.Where{ $_.CompletionText -like "$wordToComplete*" } |
|
$completions.Where{ $_.CompletionText -like "$wordToComplete*" } |
|
||||||
|
|
|
@ -45,6 +45,9 @@ _x.py() {
|
||||||
bootstrap,miri)
|
bootstrap,miri)
|
||||||
cmd="bootstrap__miri"
|
cmd="bootstrap__miri"
|
||||||
;;
|
;;
|
||||||
|
bootstrap,perf)
|
||||||
|
cmd="bootstrap__perf"
|
||||||
|
;;
|
||||||
bootstrap,run)
|
bootstrap,run)
|
||||||
cmd="bootstrap__run"
|
cmd="bootstrap__run"
|
||||||
;;
|
;;
|
||||||
|
@ -67,7 +70,7 @@ _x.py() {
|
||||||
|
|
||||||
case "${cmd}" in
|
case "${cmd}" in
|
||||||
x.py)
|
x.py)
|
||||||
opts="-v -i -j -h --verbose --incremental --config --build-dir --build --host --target --exclude --skip --include-default-paths --rustc-error-format --on-fail --dry-run --dump-bootstrap-shims --stage --keep-stage --keep-stage-std --src --jobs --warnings --error-format --json-output --color --bypass-bootstrap-lock --llvm-skip-rebuild --rust-profile-generate --rust-profile-use --llvm-profile-use --llvm-profile-generate --enable-bolt-settings --skip-stage0-validation --reproducible-artifact --set --help [PATHS]... [ARGS]... build check clippy fix fmt doc test miri bench clean dist install run setup suggest vendor"
|
opts="-v -i -j -h --verbose --incremental --config --build-dir --build --host --target --exclude --skip --include-default-paths --rustc-error-format --on-fail --dry-run --dump-bootstrap-shims --stage --keep-stage --keep-stage-std --src --jobs --warnings --error-format --json-output --color --bypass-bootstrap-lock --llvm-skip-rebuild --rust-profile-generate --rust-profile-use --llvm-profile-use --llvm-profile-generate --enable-bolt-settings --skip-stage0-validation --reproducible-artifact --set --help [PATHS]... [ARGS]... build check clippy fix fmt doc test miri bench clean dist install run setup suggest vendor perf"
|
||||||
if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then
|
if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then
|
||||||
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
|
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
|
||||||
return 0
|
return 0
|
||||||
|
@ -1414,6 +1417,116 @@ _x.py() {
|
||||||
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
|
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
|
||||||
return 0
|
return 0
|
||||||
;;
|
;;
|
||||||
|
x.py__perf)
|
||||||
|
opts="-v -i -j -h --verbose --incremental --config --build-dir --build --host --target --exclude --skip --include-default-paths --rustc-error-format --on-fail --dry-run --dump-bootstrap-shims --stage --keep-stage --keep-stage-std --src --jobs --warnings --error-format --json-output --color --bypass-bootstrap-lock --llvm-skip-rebuild --rust-profile-generate --rust-profile-use --llvm-profile-use --llvm-profile-generate --enable-bolt-settings --skip-stage0-validation --reproducible-artifact --set --help [PATHS]... [ARGS]..."
|
||||||
|
if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
|
||||||
|
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
case "${prev}" in
|
||||||
|
--config)
|
||||||
|
COMPREPLY=($(compgen -f "${cur}"))
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
--build-dir)
|
||||||
|
COMPREPLY=($(compgen -f "${cur}"))
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
--build)
|
||||||
|
COMPREPLY=("${cur}")
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
--host)
|
||||||
|
COMPREPLY=("${cur}")
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
--target)
|
||||||
|
COMPREPLY=("${cur}")
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
--exclude)
|
||||||
|
COMPREPLY=($(compgen -f "${cur}"))
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
--skip)
|
||||||
|
COMPREPLY=($(compgen -f "${cur}"))
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
--rustc-error-format)
|
||||||
|
COMPREPLY=("${cur}")
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
--on-fail)
|
||||||
|
COMPREPLY=($(compgen -f "${cur}"))
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
--stage)
|
||||||
|
COMPREPLY=("${cur}")
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
--keep-stage)
|
||||||
|
COMPREPLY=("${cur}")
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
--keep-stage-std)
|
||||||
|
COMPREPLY=("${cur}")
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
--src)
|
||||||
|
COMPREPLY=($(compgen -f "${cur}"))
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
--jobs)
|
||||||
|
COMPREPLY=("${cur}")
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
-j)
|
||||||
|
COMPREPLY=("${cur}")
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
--warnings)
|
||||||
|
COMPREPLY=($(compgen -W "deny warn default" -- "${cur}"))
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
--error-format)
|
||||||
|
COMPREPLY=("${cur}")
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
--color)
|
||||||
|
COMPREPLY=($(compgen -W "always never auto" -- "${cur}"))
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
--llvm-skip-rebuild)
|
||||||
|
COMPREPLY=($(compgen -W "true false" -- "${cur}"))
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
--rust-profile-generate)
|
||||||
|
COMPREPLY=($(compgen -f "${cur}"))
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
--rust-profile-use)
|
||||||
|
COMPREPLY=($(compgen -f "${cur}"))
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
--llvm-profile-use)
|
||||||
|
COMPREPLY=($(compgen -f "${cur}"))
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
--reproducible-artifact)
|
||||||
|
COMPREPLY=($(compgen -f "${cur}"))
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
--set)
|
||||||
|
COMPREPLY=("${cur}")
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
COMPREPLY=()
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
x.py__run)
|
x.py__run)
|
||||||
opts="-v -i -j -h --args --verbose --incremental --config --build-dir --build --host --target --exclude --skip --include-default-paths --rustc-error-format --on-fail --dry-run --dump-bootstrap-shims --stage --keep-stage --keep-stage-std --src --jobs --warnings --error-format --json-output --color --bypass-bootstrap-lock --llvm-skip-rebuild --rust-profile-generate --rust-profile-use --llvm-profile-use --llvm-profile-generate --enable-bolt-settings --skip-stage0-validation --reproducible-artifact --set --help [PATHS]... [ARGS]..."
|
opts="-v -i -j -h --args --verbose --incremental --config --build-dir --build --host --target --exclude --skip --include-default-paths --rustc-error-format --on-fail --dry-run --dump-bootstrap-shims --stage --keep-stage --keep-stage-std --src --jobs --warnings --error-format --json-output --color --bypass-bootstrap-lock --llvm-skip-rebuild --rust-profile-generate --rust-profile-use --llvm-profile-use --llvm-profile-generate --enable-bolt-settings --skip-stage0-validation --reproducible-artifact --set --help [PATHS]... [ARGS]..."
|
||||||
if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
|
if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
|
||||||
|
|
|
@ -788,6 +788,49 @@ _arguments "${_arguments_options[@]}" \
|
||||||
'--help[Print help (see more with '\''--help'\'')]' \
|
'--help[Print help (see more with '\''--help'\'')]' \
|
||||||
'*::paths -- paths for the subcommand:_files' \
|
'*::paths -- paths for the subcommand:_files' \
|
||||||
&& ret=0
|
&& ret=0
|
||||||
|
;;
|
||||||
|
(perf)
|
||||||
|
_arguments "${_arguments_options[@]}" \
|
||||||
|
'--config=[TOML configuration file for build]:FILE:_files' \
|
||||||
|
'--build-dir=[Build directory, overrides \`build.build-dir\` in \`config.toml\`]:DIR:_files -/' \
|
||||||
|
'--build=[build target of the stage0 compiler]:BUILD:( )' \
|
||||||
|
'--host=[host targets to build]:HOST:( )' \
|
||||||
|
'--target=[target targets to build]:TARGET:( )' \
|
||||||
|
'*--exclude=[build paths to exclude]:PATH:_files' \
|
||||||
|
'*--skip=[build paths to skip]:PATH:_files' \
|
||||||
|
'--rustc-error-format=[]:RUSTC_ERROR_FORMAT:( )' \
|
||||||
|
'--on-fail=[command to run on failure]:CMD:_cmdstring' \
|
||||||
|
'--stage=[stage to build (indicates compiler to use/test, e.g., stage 0 uses the bootstrap compiler, stage 1 the stage 0 rustc artifacts, etc.)]:N:( )' \
|
||||||
|
'*--keep-stage=[stage(s) to keep without recompiling (pass multiple times to keep e.g., both stages 0 and 1)]:N:( )' \
|
||||||
|
'*--keep-stage-std=[stage(s) of the standard library to keep without recompiling (pass multiple times to keep e.g., both stages 0 and 1)]:N:( )' \
|
||||||
|
'--src=[path to the root of the rust checkout]:DIR:_files -/' \
|
||||||
|
'-j+[number of jobs to run in parallel]:JOBS:( )' \
|
||||||
|
'--jobs=[number of jobs to run in parallel]:JOBS:( )' \
|
||||||
|
'--warnings=[if value is deny, will deny warnings if value is warn, will emit warnings otherwise, use the default configured behaviour]:deny|warn:(deny warn default)' \
|
||||||
|
'--error-format=[rustc error format]:FORMAT:( )' \
|
||||||
|
'--color=[whether to use color in cargo and rustc output]:STYLE:(always never auto)' \
|
||||||
|
'--llvm-skip-rebuild=[whether rebuilding llvm should be skipped, overriding \`skip-rebuld\` in config.toml]:VALUE:(true false)' \
|
||||||
|
'--rust-profile-generate=[generate PGO profile with rustc build]:PROFILE:_files' \
|
||||||
|
'--rust-profile-use=[use PGO profile for rustc build]:PROFILE:_files' \
|
||||||
|
'--llvm-profile-use=[use PGO profile for LLVM build]:PROFILE:_files' \
|
||||||
|
'*--reproducible-artifact=[Additional reproducible artifacts that should be added to the reproducible artifacts archive]:REPRODUCIBLE_ARTIFACT: ' \
|
||||||
|
'*--set=[override options in config.toml]:section.option=value:( )' \
|
||||||
|
'*-v[use verbose output (-vv for very verbose)]' \
|
||||||
|
'*--verbose[use verbose output (-vv for very verbose)]' \
|
||||||
|
'-i[use incremental compilation]' \
|
||||||
|
'--incremental[use incremental compilation]' \
|
||||||
|
'--include-default-paths[include default paths in addition to the provided ones]' \
|
||||||
|
'--dry-run[dry run; don'\''t build anything]' \
|
||||||
|
'--dump-bootstrap-shims[Indicates whether to dump the work done from bootstrap shims]' \
|
||||||
|
'--json-output[use message-format=json]' \
|
||||||
|
'--bypass-bootstrap-lock[Bootstrap uses this value to decide whether it should bypass locking the build process. This is rarely needed (e.g., compiling the std library for different targets in parallel)]' \
|
||||||
|
'--llvm-profile-generate[generate PGO profile with llvm built for rustc]' \
|
||||||
|
'--enable-bolt-settings[Enable BOLT link flags]' \
|
||||||
|
'--skip-stage0-validation[Skip stage0 compiler validation]' \
|
||||||
|
'-h[Print help (see more with '\''--help'\'')]' \
|
||||||
|
'--help[Print help (see more with '\''--help'\'')]' \
|
||||||
|
'*::paths -- paths for the subcommand:_files' \
|
||||||
|
&& ret=0
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
|
@ -813,6 +856,7 @@ _x.py_commands() {
|
||||||
'setup:Set up the environment for development' \
|
'setup:Set up the environment for development' \
|
||||||
'suggest:Suggest a subset of tests to run, based on modified files' \
|
'suggest:Suggest a subset of tests to run, based on modified files' \
|
||||||
'vendor:Vendor dependencies' \
|
'vendor:Vendor dependencies' \
|
||||||
|
'perf:Perform profiling and benchmarking of the compiler using the \`rustc-perf\` benchmark suite' \
|
||||||
)
|
)
|
||||||
_describe -t commands 'x.py commands' commands "$@"
|
_describe -t commands 'x.py commands' commands "$@"
|
||||||
}
|
}
|
||||||
|
@ -871,6 +915,11 @@ _x.py__miri_commands() {
|
||||||
local commands; commands=()
|
local commands; commands=()
|
||||||
_describe -t commands 'x.py miri commands' commands "$@"
|
_describe -t commands 'x.py miri commands' commands "$@"
|
||||||
}
|
}
|
||||||
|
(( $+functions[_x.py__perf_commands] )) ||
|
||||||
|
_x.py__perf_commands() {
|
||||||
|
local commands; commands=()
|
||||||
|
_describe -t commands 'x.py perf commands' commands "$@"
|
||||||
|
}
|
||||||
(( $+functions[_x.py__run_commands] )) ||
|
(( $+functions[_x.py__run_commands] )) ||
|
||||||
_x.py__run_commands() {
|
_x.py__run_commands() {
|
||||||
local commands; commands=()
|
local commands; commands=()
|
||||||
|
|
Loading…
Add table
Reference in a new issue