Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use download-rustc=false global default, if-unchanged for tools and library profiles, and make rust.debug-assertions=true inhibit downloading CI rustc #133068

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 10 additions & 7 deletions config.example.toml
Original file line number Diff line number Diff line change
Expand Up @@ -496,15 +496,18 @@
#
#debug = false

# Whether to download the stage 1 and 2 compilers from CI.
# This is useful if you are working on tools, doc-comments, or library (you will be able to build
# the standard library without needing to build the compiler).
# Whether to download the stage 1 and 2 compilers from CI. This is useful if you
# are working on tools, doc-comments, or library (you will be able to build the
# standard library without needing to build the compiler).
#
# Set this to "if-unchanged" if you are working on `src/tools`, `tests` or `library` (on CI, `library`
# changes triggers in-tree compiler build) to speed up the build process.
# Set this to "if-unchanged" if you are working on `src/tools`, `tests` or
# `library` (on CI, `library` changes triggers in-tree compiler build) to speed
# up the build process if you don't need to build a compiler from the latest
# commit from `master`.
#
# Set this to `true` to always download or `false` to always use the in-tree compiler.
#download-rustc = "if-unchanged"
# Set this to `true` to always download or `false` to always use the in-tree
# compiler.
#download-rustc = false

# Number of codegen units to use for each compiler invocation. A value of 0
# means "the number of cores on this machine", and 1+ is passed through to the
Expand Down
3 changes: 3 additions & 0 deletions src/bootstrap/defaults/config.compiler.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@ lto = "off"
# Forces frame pointers to be used with `-Cforce-frame-pointers`.
# This can be helpful for profiling at a small performance cost.
frame-pointers = true
# Compiler contributors often want to build rustc even without any changes to
# e.g. check that it builds locally and check the baseline behavior of a
# compiler built from latest `master` commit.
download-rustc = false

[llvm]
Expand Down
1 change: 1 addition & 0 deletions src/bootstrap/defaults/config.dist.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ download-ci-llvm = false
# 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.
channel = "nightly"
# Never download a rustc, distributions must build a fresh compiler.
download-rustc = false
lld = true
# Build the llvm-bitcode-linker
Expand Down
4 changes: 3 additions & 1 deletion src/bootstrap/defaults/config.library.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@ bench-stage = 0
incremental = true
# Make the compiler and standard library faster to build, at the expense of a ~20% runtime slowdown.
lto = "off"
download-rustc = false
# Download rustc by default for library profile if compiler-affecting
# directories are not modified. For CI this is disabled.
download-rustc = "if-unchanged"

[llvm]
# Will download LLVM from CI if available on your platform.
Expand Down
3 changes: 3 additions & 0 deletions src/bootstrap/defaults/config.tools.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@
[rust]
# This greatly increases the speed of rebuilds, especially when there are only minor changes. However, it makes the initial build slightly slower.
incremental = true
# Most commonly, tools contributors do not need to modify the compiler, so
# downloading a CI rustc is a good default for tools profile.
download-rustc = "if-unchanged"

[build]
# Document with the in-tree rustdoc by default, since `download-rustc` makes it quick to compile.
Expand Down
49 changes: 45 additions & 4 deletions src/bootstrap/src/core/config/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1771,8 +1771,36 @@ impl Config {
std_features: std_features_toml,
} = rust;

config.download_rustc_commit =
config.download_ci_rustc_commit(download_rustc, config.llvm_assertions);
// Before something like [Enable debug assertions on alt
// builds](https://github.com/rust-lang/rust/pull/131077) lands, alt rustc builds do
// *not* have rustc debug assertions enabled. We should not download an CI alt rustc if
// we need rustc to have debug assertions (e.g. for crashes test suite).
//
// Note that `rust.debug = true` (currently) implies `rust.debug-assertions = true`!
//
// This relies also on the fact that global default for `download-rustc` will be `false`
// if it's not explicitly set.
let debug_assertions_requested = matches!(rustc_debug_assertions_toml, Some(true))
|| (matches!(debug_toml, Some(true))
&& !matches!(rustc_debug_assertions_toml, Some(false)));

if debug_assertions_requested {
if let Some(ref opt) = download_rustc {
if opt.is_string_or_true() {
println!(
"WARN: currently no CI rustc builds have rustc debug assertions \
enabled. Please either set `rust.debug-assertions` to `false` if you \
want to use download CI rustc or set `rust.download-rustc` to `false`."
);
}
}
}

config.download_rustc_commit = config.download_ci_rustc_commit(
download_rustc,
debug_assertions_requested,
config.llvm_assertions,
);

debug = debug_toml;
rustc_debug_assertions = rustc_debug_assertions_toml;
Expand Down Expand Up @@ -2778,6 +2806,7 @@ impl Config {
fn download_ci_rustc_commit(
&self,
download_rustc: Option<StringOrBool>,
debug_assertions_requested: bool,
llvm_assertions: bool,
) -> Option<String> {
if !is_download_ci_available(&self.build.triple, llvm_assertions) {
Expand All @@ -2786,8 +2815,12 @@ impl Config {

// If `download-rustc` is not set, default to rebuilding.
let if_unchanged = match download_rustc {
None => self.rust_info.is_managed_git_subrepository(),
Some(StringOrBool::Bool(false)) => return None,
// Globally default `download-rustc` to `false`, because some contributors don't use
// profiles for reasons such as:
// - They need to seamlessly switch between compiler/library work.
// - They don't want to use compiler profile because they need to override too many
// things and it's easier to not use a profile.
None | Some(StringOrBool::Bool(false)) => return None,
Some(StringOrBool::Bool(true)) => false,
Some(StringOrBool::String(s)) if s == "if-unchanged" => {
if !self.rust_info.is_managed_git_subrepository() {
Expand Down Expand Up @@ -2845,6 +2878,14 @@ impl Config {
return None;
}

if debug_assertions_requested {
println!(
"WARN: `rust.debug-assertions = true` will prevent downloading CI rustc as alt CI \
rustc is not currently built with debug assertions."
);
return None;
}

Some(commit)
}

Expand Down
5 changes: 5 additions & 0 deletions src/bootstrap/src/utils/change_tracker.rs
Original file line number Diff line number Diff line change
Expand Up @@ -305,4 +305,9 @@ pub const CONFIG_CHANGE_HISTORY: &[ChangeInfo] = &[
severity: ChangeSeverity::Info,
summary: "`rust.llvm-tools` is now enabled by default when no `config.toml` is provided.",
},
ChangeInfo {
change_id: 133068,
severity: ChangeSeverity::Info,
summary: "Reverted `download-rustc` defaults; global default is now `false`, and only use `'if-unchanged'` default for library and tools profile. Also fixed that `rust.debug-assertions = true` is incompatible with `rust.download-rustc = true | 'if-unchanged'`",
},
];
5 changes: 4 additions & 1 deletion src/ci/docker/host-x86_64/x86_64-gnu-tools/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,10 @@ ENV RUST_CONFIGURE_ARGS \
--enable-new-symbol-mangling

ENV HOST_TARGET x86_64-unknown-linux-gnu
ENV FORCE_CI_RUSTC 1

# NOTE(jieyouxu): currently rustc alt builds do *not* have rustc debug
# assertions enabled! Therefore, we cannot force download CI rustc.
#ENV FORCE_CI_RUSTC 1

COPY host-x86_64/dist-x86_64-linux/shared.sh /scripts/
COPY host-x86_64/dist-x86_64-linux/build-gccjit.sh /scripts/
Expand Down
Loading