Add --compile-time-deps argument for x check

This reduces the amount of time it takes to do the x check for
rust-analyzer analysis from 12m16s to 3m34s when the bootstrap compiler
is already downloaded.
This commit is contained in:
bjorn3 2025-07-11 12:23:56 +00:00
parent 855e0fe46e
commit 3fe3edbcde
17 changed files with 226 additions and 51 deletions

View file

@ -54,6 +54,11 @@ impl Step for Std {
return;
}
if run.builder.config.compile_time_deps {
// libstd doesn't have any important build scripts and can't have any proc macros
return;
}
let crates = std_crates_for_run_make(&run);
run.builder.ensure(Std {
build_compiler: prepare_compiler_for_check(run.builder, run.target, Mode::Std),
@ -250,6 +255,13 @@ fn prepare_compiler_for_check(
match mode {
Mode::ToolBootstrap => builder.compiler(0, host),
Mode::ToolStd => {
if builder.config.compile_time_deps {
// When --compile-time-deps is passed, we can't use any rustc
// other than the bootstrap compiler. Luckily build scripts and
// proc macros for tools are unlikely to need nightly.
return builder.compiler(0, host);
}
// These tools require the local standard library to be checked
let build_compiler = builder.compiler(builder.top_stage, host);

View file

@ -2542,6 +2542,11 @@ pub fn stream_cargo(
}
cmd.arg("--message-format").arg(message_format);
if builder.config.compile_time_deps {
cmd.arg("-Zunstable-options");
cmd.arg("--compile-time-deps");
}
for arg in tail_args {
cmd.arg(arg);
}

View file

@ -586,12 +586,14 @@ Select which editor you would like to set up [default: None]: ";
"b5dd299b93dca3ceeb9b335f929293cb3d4bf4977866fbe7ceeac2a8a9f99088",
"631c837b0e98ae35fd48b0e5f743b1ca60adadf2d0a2b23566ba25df372cf1a9",
"080955765db84bb6cbf178879f489c4e2369397626a6ecb3debedb94a9d0b3ce",
"f501475c6654187091c924ae26187fa5791d74d4a8ab3fb61fbbe4c0275aade1",
],
EditorKind::Helix => &[
"2d3069b8cf1b977e5d4023965eb6199597755e6c96c185ed5f2854f98b83d233",
"6736d61409fbebba0933afd2e4c44ff2f97c1cb36cf0299a7f4a7819b8775040",
"f252dcc30ca85a193a699581e5e929d5bd6c19d40d7a7ade5e257a9517a124a5",
"198c195ed0c070d15907b279b8b4ea96198ca71b939f5376454f3d636ab54da5",
"1c43ead340b20792b91d02b08494ee68708e7e09f56b6766629b4b72079208f1",
],
EditorKind::Vim | EditorKind::VsCode => &[
"ea67e259dedf60d4429b6c349a564ffcd1563cf41c920a856d1f5b16b4701ac8",
@ -607,12 +609,14 @@ Select which editor you would like to set up [default: None]: ";
"e53e9129ca5ee5dcbd6ec8b68c2d87376474eb154992deba3c6d9ab1703e0717",
"f954316090936c7e590c253ca9d524008375882fa13c5b41d7e2547a896ff893",
"701b73751efd7abd6487f2c79348dab698af7ac4427b79fa3d2087c867144b12",
"a61df796c0c007cb6512127330564e49e57d558dec715703916a928b072a1054",
],
EditorKind::Zed => &[
"bbce727c269d1bd0c98afef4d612eb4ce27aea3c3a8968c5f10b31affbc40b6c",
"a5380cf5dd9328731aecc5dfb240d16dac46ed272126b9728006151ef42f5909",
"2e96bf0d443852b12f016c8fc9840ab3d0a2b4fe0b0fb3a157e8d74d5e7e0e26",
"4fadd4c87389a601a27db0d3d74a142fa3a2e656ae78982e934dbe24bee32ad6",
"f0bb3d23ab1a49175ab0ef5c4071af95bb03d01d460776cdb716d91333443382",
],
}
}

View file

@ -110,6 +110,7 @@ pub struct Config {
pub include_default_paths: bool,
pub rustc_error_format: Option<String>,
pub json_output: bool,
pub compile_time_deps: bool,
pub test_compare_mode: bool,
pub color: Color,
pub patch_binaries_for_nix: Option<bool>,
@ -421,6 +422,7 @@ impl Config {
jobs: flags_jobs,
warnings: flags_warnings,
json_output: flags_json_output,
compile_time_deps: flags_compile_time_deps,
color: flags_color,
bypass_bootstrap_lock: flags_bypass_bootstrap_lock,
rust_profile_generate: flags_rust_profile_generate,
@ -468,6 +470,7 @@ impl Config {
config.include_default_paths = flags_include_default_paths;
config.rustc_error_format = flags_rustc_error_format;
config.json_output = flags_json_output;
config.compile_time_deps = flags_compile_time_deps;
config.on_fail = flags_on_fail;
config.cmd = flags_cmd;
config.incremental = flags_incremental;
@ -1064,6 +1067,13 @@ impl Config {
_ => {}
}
if config.compile_time_deps && !matches!(config.cmd, Subcommand::Check { .. }) {
eprintln!(
"WARNING: Can't use --compile-time-deps with any subcommand other than check."
);
exit!(1);
}
// CI should always run stage 2 builds, unless it specifically states otherwise
#[cfg(not(test))]
if flags_stage.is_none() && config.is_running_on_ci {

View file

@ -132,6 +132,9 @@ pub struct Flags {
#[arg(global = true, long)]
/// use message-format=json
pub json_output: bool,
#[arg(global = true, long)]
/// use --compile-time-deps
pub compile_time_deps: bool,
#[arg(global = true, long, value_name = "STYLE")]
#[arg(value_enum, default_value_t = Color::Auto)]