Rollup merge of #143785 - bjorn3:faster_ra_build_script_build, r=Kobzol
Add --compile-time-deps argument for x check Together with skipping building C++ code in rustc_llvm for check, this reduces the amount of time it takes to do the x check for rust-analyzer analysis from 12m16s to 3m06s when the bootstrap compiler is already downloaded.
This commit is contained in:
commit
b4b00c7d10
25 changed files with 249 additions and 51 deletions
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
],
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -747,6 +747,12 @@ impl Builder<'_> {
|
|||
// Make cargo emit diagnostics relative to the rustc src dir.
|
||||
cargo.arg(format!("-Zroot-dir={}", self.src.display()));
|
||||
|
||||
if self.config.compile_time_deps {
|
||||
// Build only build scripts and proc-macros for rust-analyzer when requested.
|
||||
cargo.arg("-Zunstable-options");
|
||||
cargo.arg("--compile-time-deps");
|
||||
}
|
||||
|
||||
// FIXME: Temporary fix for https://github.com/rust-lang/cargo/issues/3005
|
||||
// Force cargo to output binaries with disambiguating hashes in the name
|
||||
let mut metadata = if compiler.stage == 0 {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -132,6 +132,9 @@ pub struct Flags {
|
|||
#[arg(global = true, long)]
|
||||
/// use message-format=json
|
||||
pub json_output: bool,
|
||||
#[arg(global = true, long)]
|
||||
/// only build proc-macros and build scripts (for rust-analyzer)
|
||||
pub compile_time_deps: bool,
|
||||
|
||||
#[arg(global = true, long, value_name = "STYLE")]
|
||||
#[arg(value_enum, default_value_t = Color::Auto)]
|
||||
|
|
|
|||
|
|
@ -775,6 +775,9 @@ impl Build {
|
|||
if self.config.rust_randomize_layout && check("rustc_randomized_layouts") {
|
||||
features.push("rustc_randomized_layouts");
|
||||
}
|
||||
if self.config.compile_time_deps && kind == Kind::Check {
|
||||
features.push("check_only");
|
||||
}
|
||||
|
||||
// If debug logging is on, then we want the default for tracing:
|
||||
// https://github.com/tokio-rs/tracing/blob/3dd5c03d907afdf2c39444a29931833335171554/tracing/src/level_filters.rs#L26
|
||||
|
|
|
|||
|
|
@ -466,4 +466,9 @@ pub const CONFIG_CHANGE_HISTORY: &[ChangeInfo] = &[
|
|||
severity: ChangeSeverity::Info,
|
||||
summary: "The --extra-checks flag now supports prefixing any check with `auto:` to only run it if relevant files are modified",
|
||||
},
|
||||
ChangeInfo {
|
||||
change_id: 143785,
|
||||
severity: ChangeSeverity::Info,
|
||||
summary: "A --compile-time-deps flag has been added to reduce the time it takes rust-analyzer to start",
|
||||
},
|
||||
];
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue