Skip to content

Commit 6f2d900

Browse files
committed
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.
1 parent 2a023bf commit 6f2d900

File tree

17 files changed

+226
-51
lines changed

17 files changed

+226
-51
lines changed

src/bootstrap/src/core/build_steps/check.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@ impl Step for Std {
4747
}
4848

4949
fn make_run(run: RunConfig<'_>) {
50+
if run.builder.config.compile_time_deps {
51+
// libstd doesn't have any important build scripts and can't have any proc macros
52+
return;
53+
}
54+
5055
let crates = std_crates_for_run_make(&run);
5156
run.builder.ensure(Std {
5257
build_compiler: prepare_compiler_for_check(run.builder, run.target, Mode::Std),
@@ -250,6 +255,13 @@ fn prepare_compiler_for_check(
250255
match mode {
251256
Mode::ToolBootstrap => builder.compiler(0, host),
252257
Mode::ToolStd => {
258+
if builder.config.compile_time_deps {
259+
// When --compile-time-deps is passed, we can't use any rustc
260+
// other than the bootstrap compiler. Luckily build scripts and
261+
// proc macros for tools are unlikely to need nightly.
262+
return builder.compiler(0, host);
263+
}
264+
253265
// These tools require the local standard library to be checked
254266
let build_compiler = builder.compiler(builder.top_stage, host);
255267

src/bootstrap/src/core/build_steps/compile.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2542,6 +2542,11 @@ pub fn stream_cargo(
25422542
}
25432543
cmd.arg("--message-format").arg(message_format);
25442544

2545+
if builder.config.compile_time_deps {
2546+
cmd.arg("-Zunstable-options");
2547+
cmd.arg("--compile-time-deps");
2548+
}
2549+
25452550
for arg in tail_args {
25462551
cmd.arg(arg);
25472552
}

src/bootstrap/src/core/build_steps/setup.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -586,12 +586,14 @@ Select which editor you would like to set up [default: None]: ";
586586
"b5dd299b93dca3ceeb9b335f929293cb3d4bf4977866fbe7ceeac2a8a9f99088",
587587
"631c837b0e98ae35fd48b0e5f743b1ca60adadf2d0a2b23566ba25df372cf1a9",
588588
"080955765db84bb6cbf178879f489c4e2369397626a6ecb3debedb94a9d0b3ce",
589+
"f501475c6654187091c924ae26187fa5791d74d4a8ab3fb61fbbe4c0275aade1",
589590
],
590591
EditorKind::Helix => &[
591592
"2d3069b8cf1b977e5d4023965eb6199597755e6c96c185ed5f2854f98b83d233",
592593
"6736d61409fbebba0933afd2e4c44ff2f97c1cb36cf0299a7f4a7819b8775040",
593594
"f252dcc30ca85a193a699581e5e929d5bd6c19d40d7a7ade5e257a9517a124a5",
594595
"198c195ed0c070d15907b279b8b4ea96198ca71b939f5376454f3d636ab54da5",
596+
"1c43ead340b20792b91d02b08494ee68708e7e09f56b6766629b4b72079208f1",
595597
],
596598
EditorKind::Vim | EditorKind::VsCode => &[
597599
"ea67e259dedf60d4429b6c349a564ffcd1563cf41c920a856d1f5b16b4701ac8",
@@ -607,12 +609,14 @@ Select which editor you would like to set up [default: None]: ";
607609
"e53e9129ca5ee5dcbd6ec8b68c2d87376474eb154992deba3c6d9ab1703e0717",
608610
"f954316090936c7e590c253ca9d524008375882fa13c5b41d7e2547a896ff893",
609611
"701b73751efd7abd6487f2c79348dab698af7ac4427b79fa3d2087c867144b12",
612+
"a61df796c0c007cb6512127330564e49e57d558dec715703916a928b072a1054",
610613
],
611614
EditorKind::Zed => &[
612615
"bbce727c269d1bd0c98afef4d612eb4ce27aea3c3a8968c5f10b31affbc40b6c",
613616
"a5380cf5dd9328731aecc5dfb240d16dac46ed272126b9728006151ef42f5909",
614617
"2e96bf0d443852b12f016c8fc9840ab3d0a2b4fe0b0fb3a157e8d74d5e7e0e26",
615618
"4fadd4c87389a601a27db0d3d74a142fa3a2e656ae78982e934dbe24bee32ad6",
619+
"f0bb3d23ab1a49175ab0ef5c4071af95bb03d01d460776cdb716d91333443382",
616620
],
617621
}
618622
}

src/bootstrap/src/core/config/config.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ pub struct Config {
110110
pub include_default_paths: bool,
111111
pub rustc_error_format: Option<String>,
112112
pub json_output: bool,
113+
pub compile_time_deps: bool,
113114
pub test_compare_mode: bool,
114115
pub color: Color,
115116
pub patch_binaries_for_nix: Option<bool>,
@@ -421,6 +422,7 @@ impl Config {
421422
jobs: flags_jobs,
422423
warnings: flags_warnings,
423424
json_output: flags_json_output,
425+
compile_time_deps: flags_compile_time_deps,
424426
color: flags_color,
425427
bypass_bootstrap_lock: flags_bypass_bootstrap_lock,
426428
rust_profile_generate: flags_rust_profile_generate,
@@ -468,6 +470,7 @@ impl Config {
468470
config.include_default_paths = flags_include_default_paths;
469471
config.rustc_error_format = flags_rustc_error_format;
470472
config.json_output = flags_json_output;
473+
config.compile_time_deps = flags_compile_time_deps;
471474
config.on_fail = flags_on_fail;
472475
config.cmd = flags_cmd;
473476
config.incremental = flags_incremental;
@@ -1064,6 +1067,13 @@ impl Config {
10641067
_ => {}
10651068
}
10661069

1070+
if config.compile_time_deps && !matches!(config.cmd, Subcommand::Check { .. }) {
1071+
eprintln!(
1072+
"WARNING: Can't use --compile-time-deps with any subcommand other than check."
1073+
);
1074+
exit!(1);
1075+
}
1076+
10671077
// CI should always run stage 2 builds, unless it specifically states otherwise
10681078
#[cfg(not(test))]
10691079
if flags_stage.is_none() && config.is_running_on_ci {

src/bootstrap/src/core/config/flags.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,9 @@ pub struct Flags {
132132
#[arg(global = true, long)]
133133
/// use message-format=json
134134
pub json_output: bool,
135+
#[arg(global = true, long)]
136+
/// use --compile-time-deps
137+
pub compile_time_deps: bool,
135138

136139
#[arg(global = true, long, value_name = "STYLE")]
137140
#[arg(value_enum, default_value_t = Color::Auto)]

0 commit comments

Comments
 (0)