mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-15 08:23:26 +00:00
Auto merge of #133068 - jieyouxu:download-rustc-default-only-for-tools, r=clubby789
Use `download-rustc=false` global default, `if-unchanged` for tools and library profiles, and make `rust.debug-assertions=true` inhibit downloading CI rustc - Use `download-rustc = false` as global default. - Use `download-rustc = 'if-unchanged'` for tools and library profiles. - Make `rust.debug-assertions = true` inhibit downloading CI rustc because alt rustc builds do not yet have rustc debug assertions enabled. Fixes #133132. cc discussions: https://rust-lang.zulipchat.com/#narrow/channel/326414-t-infra.2Fbootstrap/topic/Bootstrap.20breakage compiler contributors poll: https://rust-lang.zulipchat.com/#narrow/channel/131828-t-compiler/topic/.60download-rustc.20.3D.20'if-unchanged'.60.20for.20.60compiler.60.20profile.3F/near/481877253 library contributors poll: https://rust-lang.zulipchat.com/#narrow/channel/219381-t-libs/topic/.60download-rustc.20.3D.20.22if-unchanged.22.60.20default.20for.20libs.20profile.3F/near/482607011 cc https://rust-lang.zulipchat.com/#narrow/channel/326414-t-infra.2Fbootstrap/topic/When.20is.20rustc.20built.20with.20debug.20assertions.3F cc `@MarcoIeni` since you're working on improving CI job times, sorry, this will definitely regress some CI job times because we're probably lying to ourselves that CI rustc had debug assertions for some time 😅 cc `@onur-ozkan` for FYI, but since you're on vacation (sorry for the ping), r? `@Kobzol` (I *think* you have a bit more context than other bootstrap reviewers?)
This commit is contained in:
commit
481b5fadd7
@ -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
|
||||
|
@ -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]
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
|
@ -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.
|
||||
|
@ -1771,8 +1771,37 @@ impl Config {
|
||||
std_features: std_features_toml,
|
||||
} = rust;
|
||||
|
||||
config.download_rustc_commit =
|
||||
config.download_ci_rustc_commit(download_rustc, config.llvm_assertions);
|
||||
// FIXME(#133381): alt rustc builds currently do *not* have rustc debug assertions
|
||||
// enabled. We should not download a CI alt rustc if we need rustc to have debug
|
||||
// assertions (e.g. for crashes test suite). This can be changed once something like
|
||||
// [Enable debug assertions on alt
|
||||
// builds](https://github.com/rust-lang/rust/pull/131077) lands.
|
||||
//
|
||||
// Note that `rust.debug = true` currently implies `rust.debug-assertions = true`!
|
||||
//
|
||||
// This relies also on the fact that the 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() {
|
||||
eprintln!(
|
||||
"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;
|
||||
@ -2778,6 +2807,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) {
|
||||
@ -2786,8 +2816,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() {
|
||||
@ -2845,6 +2879,14 @@ impl Config {
|
||||
return None;
|
||||
}
|
||||
|
||||
if debug_assertions_requested {
|
||||
eprintln!(
|
||||
"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)
|
||||
}
|
||||
|
||||
|
@ -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::Warning,
|
||||
summary: "Revert `rust.download-rustc` global default to `false` and only use `rust.download-rustc = \"if-unchanged\"` default for library and tools profile. As alt CI rustc is built without debug assertions, `rust.debug-assertions = true` will now inhibit downloading CI rustc.",
|
||||
},
|
||||
];
|
||||
|
@ -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
|
||||
|
||||
# FIXME(#133381): 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/
|
||||
|
Loading…
Reference in New Issue
Block a user