Rollup merge of #132772 - onur-ozkan:download-rustc-default, r=jieyouxu
use `download-rustc="if-unchanged"` as a global default If `download-rustc` isn't explicitly set and the source is Git-managed, it should be totally okay to utilize "if-unchanged" behaviour. The "dist" profile already sets `download-rustc` to `false`, so this shouldn’t impact anything on CI. This also resolves an unhandled case where `bootstrap` unexpectedly panics if `"if-unchanged"` was used with a non-Git source. Now we exits gracefully with an error message pointing the problem.
This commit is contained in:
commit
c435fa8c4b
@ -11,6 +11,7 @@ extended = true
|
|||||||
# Most users installing from source want to build all parts of the project from source.
|
# Most users installing from source want to build all parts of the project from source.
|
||||||
[llvm]
|
[llvm]
|
||||||
download-ci-llvm = false
|
download-ci-llvm = false
|
||||||
|
|
||||||
[rust]
|
[rust]
|
||||||
# We have several defaults in bootstrap that depend on whether the channel is `dev` (e.g. `omit-git-hash` and `download-ci-llvm`).
|
# We have several defaults in bootstrap that depend on whether the channel is `dev` (e.g. `omit-git-hash` and `download-ci-llvm`).
|
||||||
# Make sure they don't get set when installing from source.
|
# Make sure they don't get set when installing from source.
|
||||||
|
@ -8,9 +8,6 @@ bench-stage = 0
|
|||||||
[rust]
|
[rust]
|
||||||
# This greatly increases the speed of rebuilds, especially when there are only minor changes. However, it makes the initial build slightly slower.
|
# This greatly increases the speed of rebuilds, especially when there are only minor changes. However, it makes the initial build slightly slower.
|
||||||
incremental = true
|
incremental = true
|
||||||
# Download rustc from CI instead of building it from source.
|
|
||||||
# For stage > 1 builds, this cuts compile times significantly when there are no changes on "compiler" tree.
|
|
||||||
download-rustc = "if-unchanged"
|
|
||||||
# Make the compiler and standard library faster to build, at the expense of a ~20% runtime slowdown.
|
# Make the compiler and standard library faster to build, at the expense of a ~20% runtime slowdown.
|
||||||
lto = "off"
|
lto = "off"
|
||||||
|
|
||||||
|
@ -3,11 +3,6 @@
|
|||||||
[rust]
|
[rust]
|
||||||
# This greatly increases the speed of rebuilds, especially when there are only minor changes. However, it makes the initial build slightly slower.
|
# This greatly increases the speed of rebuilds, especially when there are only minor changes. However, it makes the initial build slightly slower.
|
||||||
incremental = true
|
incremental = true
|
||||||
# Download rustc from CI instead of building it from source.
|
|
||||||
# For stage > 1 builds, this cuts compile times significantly when there are no changes on "compiler" tree.
|
|
||||||
# Using these defaults will download the stage2 compiler (see `download-rustc`
|
|
||||||
# setting) and the stage2 toolchain should therefore be used for these defaults.
|
|
||||||
download-rustc = "if-unchanged"
|
|
||||||
|
|
||||||
[build]
|
[build]
|
||||||
# Document with the in-tree rustdoc by default, since `download-rustc` makes it quick to compile.
|
# Document with the in-tree rustdoc by default, since `download-rustc` makes it quick to compile.
|
||||||
|
@ -1665,10 +1665,26 @@ fn get_table(option: &str) -> Result<TomlConfig, toml::de::Error> {
|
|||||||
let mut debuginfo_level_tools = None;
|
let mut debuginfo_level_tools = None;
|
||||||
let mut debuginfo_level_tests = None;
|
let mut debuginfo_level_tests = None;
|
||||||
let mut optimize = None;
|
let mut optimize = None;
|
||||||
let mut omit_git_hash = None;
|
|
||||||
let mut lld_enabled = None;
|
let mut lld_enabled = None;
|
||||||
let mut std_features = None;
|
let mut std_features = None;
|
||||||
|
|
||||||
|
let default = config.channel == "dev";
|
||||||
|
config.omit_git_hash = toml.rust.as_ref().and_then(|r| r.omit_git_hash).unwrap_or(default);
|
||||||
|
|
||||||
|
config.rust_info = GitInfo::new(config.omit_git_hash, &config.src);
|
||||||
|
config.cargo_info = GitInfo::new(config.omit_git_hash, &config.src.join("src/tools/cargo"));
|
||||||
|
config.rust_analyzer_info =
|
||||||
|
GitInfo::new(config.omit_git_hash, &config.src.join("src/tools/rust-analyzer"));
|
||||||
|
config.clippy_info =
|
||||||
|
GitInfo::new(config.omit_git_hash, &config.src.join("src/tools/clippy"));
|
||||||
|
config.miri_info = GitInfo::new(config.omit_git_hash, &config.src.join("src/tools/miri"));
|
||||||
|
config.rustfmt_info =
|
||||||
|
GitInfo::new(config.omit_git_hash, &config.src.join("src/tools/rustfmt"));
|
||||||
|
config.enzyme_info =
|
||||||
|
GitInfo::new(config.omit_git_hash, &config.src.join("src/tools/enzyme"));
|
||||||
|
config.in_tree_llvm_info = GitInfo::new(false, &config.src.join("src/llvm-project"));
|
||||||
|
config.in_tree_gcc_info = GitInfo::new(false, &config.src.join("src/gcc"));
|
||||||
|
|
||||||
let mut is_user_configured_rust_channel = false;
|
let mut is_user_configured_rust_channel = false;
|
||||||
|
|
||||||
if let Some(rust) = toml.rust {
|
if let Some(rust) = toml.rust {
|
||||||
@ -1699,7 +1715,7 @@ fn get_table(option: &str) -> Result<TomlConfig, toml::de::Error> {
|
|||||||
verbose_tests,
|
verbose_tests,
|
||||||
optimize_tests,
|
optimize_tests,
|
||||||
codegen_tests,
|
codegen_tests,
|
||||||
omit_git_hash: omit_git_hash_toml,
|
omit_git_hash: _, // already handled above
|
||||||
dist_src,
|
dist_src,
|
||||||
save_toolstates,
|
save_toolstates,
|
||||||
codegen_backends,
|
codegen_backends,
|
||||||
@ -1750,7 +1766,6 @@ fn get_table(option: &str) -> Result<TomlConfig, toml::de::Error> {
|
|||||||
std_features = std_features_toml;
|
std_features = std_features_toml;
|
||||||
|
|
||||||
optimize = optimize_toml;
|
optimize = optimize_toml;
|
||||||
omit_git_hash = omit_git_hash_toml;
|
|
||||||
config.rust_new_symbol_mangling = new_symbol_mangling;
|
config.rust_new_symbol_mangling = new_symbol_mangling;
|
||||||
set(&mut config.rust_optimize_tests, optimize_tests);
|
set(&mut config.rust_optimize_tests, optimize_tests);
|
||||||
set(&mut config.codegen_tests, codegen_tests);
|
set(&mut config.codegen_tests, codegen_tests);
|
||||||
@ -1826,24 +1841,6 @@ fn get_table(option: &str) -> Result<TomlConfig, toml::de::Error> {
|
|||||||
|
|
||||||
config.reproducible_artifacts = flags.reproducible_artifact;
|
config.reproducible_artifacts = flags.reproducible_artifact;
|
||||||
|
|
||||||
// rust_info must be set before is_ci_llvm_available() is called.
|
|
||||||
let default = config.channel == "dev";
|
|
||||||
config.omit_git_hash = omit_git_hash.unwrap_or(default);
|
|
||||||
config.rust_info = GitInfo::new(config.omit_git_hash, &config.src);
|
|
||||||
|
|
||||||
config.cargo_info = GitInfo::new(config.omit_git_hash, &config.src.join("src/tools/cargo"));
|
|
||||||
config.rust_analyzer_info =
|
|
||||||
GitInfo::new(config.omit_git_hash, &config.src.join("src/tools/rust-analyzer"));
|
|
||||||
config.clippy_info =
|
|
||||||
GitInfo::new(config.omit_git_hash, &config.src.join("src/tools/clippy"));
|
|
||||||
config.miri_info = GitInfo::new(config.omit_git_hash, &config.src.join("src/tools/miri"));
|
|
||||||
config.rustfmt_info =
|
|
||||||
GitInfo::new(config.omit_git_hash, &config.src.join("src/tools/rustfmt"));
|
|
||||||
config.enzyme_info =
|
|
||||||
GitInfo::new(config.omit_git_hash, &config.src.join("src/tools/enzyme"));
|
|
||||||
config.in_tree_llvm_info = GitInfo::new(false, &config.src.join("src/llvm-project"));
|
|
||||||
config.in_tree_gcc_info = GitInfo::new(false, &config.src.join("src/gcc"));
|
|
||||||
|
|
||||||
// We need to override `rust.channel` if it's manually specified when using the CI rustc.
|
// We need to override `rust.channel` if it's manually specified when using the CI rustc.
|
||||||
// This is because if the compiler uses a different channel than the one specified in config.toml,
|
// This is because if the compiler uses a different channel than the one specified in config.toml,
|
||||||
// tests may fail due to using a different channel than the one used by the compiler during tests.
|
// tests may fail due to using a different channel than the one used by the compiler during tests.
|
||||||
@ -2760,9 +2757,19 @@ fn download_ci_rustc_commit(
|
|||||||
|
|
||||||
// If `download-rustc` is not set, default to rebuilding.
|
// If `download-rustc` is not set, default to rebuilding.
|
||||||
let if_unchanged = match download_rustc {
|
let if_unchanged = match download_rustc {
|
||||||
None | Some(StringOrBool::Bool(false)) => return None,
|
None => self.rust_info.is_managed_git_subrepository(),
|
||||||
|
Some(StringOrBool::Bool(false)) => return None,
|
||||||
Some(StringOrBool::Bool(true)) => false,
|
Some(StringOrBool::Bool(true)) => false,
|
||||||
Some(StringOrBool::String(s)) if s == "if-unchanged" => true,
|
Some(StringOrBool::String(s)) if s == "if-unchanged" => {
|
||||||
|
if !self.rust_info.is_managed_git_subrepository() {
|
||||||
|
println!(
|
||||||
|
"ERROR: `download-rustc=if-unchanged` is only compatible with Git managed sources."
|
||||||
|
);
|
||||||
|
crate::exit!(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
true
|
||||||
|
}
|
||||||
Some(StringOrBool::String(other)) => {
|
Some(StringOrBool::String(other)) => {
|
||||||
panic!("unrecognized option for download-rustc: {other}")
|
panic!("unrecognized option for download-rustc: {other}")
|
||||||
}
|
}
|
||||||
@ -2789,7 +2796,7 @@ fn download_ci_rustc_commit(
|
|||||||
}
|
}
|
||||||
println!("ERROR: could not find commit hash for downloading rustc");
|
println!("ERROR: could not find commit hash for downloading rustc");
|
||||||
println!("HELP: maybe your repository history is too shallow?");
|
println!("HELP: maybe your repository history is too shallow?");
|
||||||
println!("HELP: consider disabling `download-rustc`");
|
println!("HELP: consider setting `rust.download-rustc=false` in config.toml");
|
||||||
println!("HELP: or fetch enough history to include one upstream commit");
|
println!("HELP: or fetch enough history to include one upstream commit");
|
||||||
crate::exit!(1);
|
crate::exit!(1);
|
||||||
}
|
}
|
||||||
|
@ -135,6 +135,7 @@ fn override_toml() {
|
|||||||
[rust]
|
[rust]
|
||||||
lto = "off"
|
lto = "off"
|
||||||
deny-warnings = true
|
deny-warnings = true
|
||||||
|
download-rustc=false
|
||||||
|
|
||||||
[build]
|
[build]
|
||||||
gdb = "foo"
|
gdb = "foo"
|
||||||
@ -200,6 +201,8 @@ fn override_toml() {
|
|||||||
.collect(),
|
.collect(),
|
||||||
"setting dictionary value"
|
"setting dictionary value"
|
||||||
);
|
);
|
||||||
|
assert!(!config.llvm_from_ci);
|
||||||
|
assert!(!config.download_rustc());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
Loading…
Reference in New Issue
Block a user