Skip to content

Commit c435fa8

Browse files
authored
Rollup merge of rust-lang#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.
2 parents 88acd49 + 2a38108 commit c435fa8

File tree

5 files changed

+35
-32
lines changed

5 files changed

+35
-32
lines changed

src/bootstrap/defaults/config.dist.toml

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ extended = true
1111
# Most users installing from source want to build all parts of the project from source.
1212
[llvm]
1313
download-ci-llvm = false
14+
1415
[rust]
1516
# We have several defaults in bootstrap that depend on whether the channel is `dev` (e.g. `omit-git-hash` and `download-ci-llvm`).
1617
# Make sure they don't get set when installing from source.

src/bootstrap/defaults/config.library.toml

-3
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,6 @@ bench-stage = 0
88
[rust]
99
# This greatly increases the speed of rebuilds, especially when there are only minor changes. However, it makes the initial build slightly slower.
1010
incremental = true
11-
# Download rustc from CI instead of building it from source.
12-
# For stage > 1 builds, this cuts compile times significantly when there are no changes on "compiler" tree.
13-
download-rustc = "if-unchanged"
1411
# Make the compiler and standard library faster to build, at the expense of a ~20% runtime slowdown.
1512
lto = "off"
1613

src/bootstrap/defaults/config.tools.toml

-5
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,6 @@
33
[rust]
44
# This greatly increases the speed of rebuilds, especially when there are only minor changes. However, it makes the initial build slightly slower.
55
incremental = true
6-
# Download rustc from CI instead of building it from source.
7-
# For stage > 1 builds, this cuts compile times significantly when there are no changes on "compiler" tree.
8-
# Using these defaults will download the stage2 compiler (see `download-rustc`
9-
# setting) and the stage2 toolchain should therefore be used for these defaults.
10-
download-rustc = "if-unchanged"
116

127
[build]
138
# Document with the in-tree rustdoc by default, since `download-rustc` makes it quick to compile.

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

+31-24
Original file line numberDiff line numberDiff line change
@@ -1665,10 +1665,26 @@ impl Config {
16651665
let mut debuginfo_level_tools = None;
16661666
let mut debuginfo_level_tests = None;
16671667
let mut optimize = None;
1668-
let mut omit_git_hash = None;
16691668
let mut lld_enabled = None;
16701669
let mut std_features = None;
16711670

1671+
let default = config.channel == "dev";
1672+
config.omit_git_hash = toml.rust.as_ref().and_then(|r| r.omit_git_hash).unwrap_or(default);
1673+
1674+
config.rust_info = GitInfo::new(config.omit_git_hash, &config.src);
1675+
config.cargo_info = GitInfo::new(config.omit_git_hash, &config.src.join("src/tools/cargo"));
1676+
config.rust_analyzer_info =
1677+
GitInfo::new(config.omit_git_hash, &config.src.join("src/tools/rust-analyzer"));
1678+
config.clippy_info =
1679+
GitInfo::new(config.omit_git_hash, &config.src.join("src/tools/clippy"));
1680+
config.miri_info = GitInfo::new(config.omit_git_hash, &config.src.join("src/tools/miri"));
1681+
config.rustfmt_info =
1682+
GitInfo::new(config.omit_git_hash, &config.src.join("src/tools/rustfmt"));
1683+
config.enzyme_info =
1684+
GitInfo::new(config.omit_git_hash, &config.src.join("src/tools/enzyme"));
1685+
config.in_tree_llvm_info = GitInfo::new(false, &config.src.join("src/llvm-project"));
1686+
config.in_tree_gcc_info = GitInfo::new(false, &config.src.join("src/gcc"));
1687+
16721688
let mut is_user_configured_rust_channel = false;
16731689

16741690
if let Some(rust) = toml.rust {
@@ -1699,7 +1715,7 @@ impl Config {
16991715
verbose_tests,
17001716
optimize_tests,
17011717
codegen_tests,
1702-
omit_git_hash: omit_git_hash_toml,
1718+
omit_git_hash: _, // already handled above
17031719
dist_src,
17041720
save_toolstates,
17051721
codegen_backends,
@@ -1750,7 +1766,6 @@ impl Config {
17501766
std_features = std_features_toml;
17511767

17521768
optimize = optimize_toml;
1753-
omit_git_hash = omit_git_hash_toml;
17541769
config.rust_new_symbol_mangling = new_symbol_mangling;
17551770
set(&mut config.rust_optimize_tests, optimize_tests);
17561771
set(&mut config.codegen_tests, codegen_tests);
@@ -1826,24 +1841,6 @@ impl Config {
18261841

18271842
config.reproducible_artifacts = flags.reproducible_artifact;
18281843

1829-
// rust_info must be set before is_ci_llvm_available() is called.
1830-
let default = config.channel == "dev";
1831-
config.omit_git_hash = omit_git_hash.unwrap_or(default);
1832-
config.rust_info = GitInfo::new(config.omit_git_hash, &config.src);
1833-
1834-
config.cargo_info = GitInfo::new(config.omit_git_hash, &config.src.join("src/tools/cargo"));
1835-
config.rust_analyzer_info =
1836-
GitInfo::new(config.omit_git_hash, &config.src.join("src/tools/rust-analyzer"));
1837-
config.clippy_info =
1838-
GitInfo::new(config.omit_git_hash, &config.src.join("src/tools/clippy"));
1839-
config.miri_info = GitInfo::new(config.omit_git_hash, &config.src.join("src/tools/miri"));
1840-
config.rustfmt_info =
1841-
GitInfo::new(config.omit_git_hash, &config.src.join("src/tools/rustfmt"));
1842-
config.enzyme_info =
1843-
GitInfo::new(config.omit_git_hash, &config.src.join("src/tools/enzyme"));
1844-
config.in_tree_llvm_info = GitInfo::new(false, &config.src.join("src/llvm-project"));
1845-
config.in_tree_gcc_info = GitInfo::new(false, &config.src.join("src/gcc"));
1846-
18471844
// We need to override `rust.channel` if it's manually specified when using the CI rustc.
18481845
// This is because if the compiler uses a different channel than the one specified in config.toml,
18491846
// tests may fail due to using a different channel than the one used by the compiler during tests.
@@ -2760,9 +2757,19 @@ impl Config {
27602757

27612758
// If `download-rustc` is not set, default to rebuilding.
27622759
let if_unchanged = match download_rustc {
2763-
None | Some(StringOrBool::Bool(false)) => return None,
2760+
None => self.rust_info.is_managed_git_subrepository(),
2761+
Some(StringOrBool::Bool(false)) => return None,
27642762
Some(StringOrBool::Bool(true)) => false,
2765-
Some(StringOrBool::String(s)) if s == "if-unchanged" => true,
2763+
Some(StringOrBool::String(s)) if s == "if-unchanged" => {
2764+
if !self.rust_info.is_managed_git_subrepository() {
2765+
println!(
2766+
"ERROR: `download-rustc=if-unchanged` is only compatible with Git managed sources."
2767+
);
2768+
crate::exit!(1);
2769+
}
2770+
2771+
true
2772+
}
27662773
Some(StringOrBool::String(other)) => {
27672774
panic!("unrecognized option for download-rustc: {other}")
27682775
}
@@ -2789,7 +2796,7 @@ impl Config {
27892796
}
27902797
println!("ERROR: could not find commit hash for downloading rustc");
27912798
println!("HELP: maybe your repository history is too shallow?");
2792-
println!("HELP: consider disabling `download-rustc`");
2799+
println!("HELP: consider setting `rust.download-rustc=false` in config.toml");
27932800
println!("HELP: or fetch enough history to include one upstream commit");
27942801
crate::exit!(1);
27952802
}

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

+3
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ change-id = 0
135135
[rust]
136136
lto = "off"
137137
deny-warnings = true
138+
download-rustc=false
138139
139140
[build]
140141
gdb = "foo"
@@ -200,6 +201,8 @@ runner = "x86_64-runner"
200201
.collect(),
201202
"setting dictionary value"
202203
);
204+
assert!(!config.llvm_from_ci);
205+
assert!(!config.download_rustc());
203206
}
204207

205208
#[test]

0 commit comments

Comments
 (0)