Skip to content

Commit c68a5ec

Browse files
committed
Add [gcc] download-ci-gcc option
1 parent 009aba0 commit c68a5ec

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

Diff for: config.example.toml

+5
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,11 @@
167167
# Tweaking how GCC is compiled
168168
# =============================================================================
169169
[gcc]
170+
# Download GCC from CI instead of building it locally.
171+
# Note that this will attempt to download GCC even if there are local
172+
# modifications to the `src/gcc` submodule.
173+
# Currently, this is only supported for the `x86_64-unknown-linux-gnu` target.
174+
# download-ci-gcc = false
170175

171176
# =============================================================================
172177
# General build configuration options

Diff for: src/bootstrap/src/core/config/config.rs

+27-1
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,17 @@ impl LldMode {
171171
}
172172
}
173173

174+
/// Determines how will GCC be provided.
175+
#[derive(Default, Clone)]
176+
pub enum GccCiMode {
177+
/// Build GCC from the local `src/gcc` submodule.
178+
#[default]
179+
BuildLocally,
180+
/// Try to download GCC from CI.
181+
/// If it is not available on CI, it will be built locally instead.
182+
DownloadFromCi,
183+
}
184+
174185
/// Global configuration for the entire build and/or bootstrap.
175186
///
176187
/// This structure is parsed from `config.toml`, and some of the fields are inferred from `git` or build-time parameters.
@@ -283,6 +294,9 @@ pub struct Config {
283294
pub llvm_ldflags: Option<String>,
284295
pub llvm_use_libcxx: bool,
285296

297+
// gcc codegen options
298+
pub gcc_ci_mode: GccCiMode,
299+
286300
// rust codegen options
287301
pub rust_optimize: RustOptimize,
288302
pub rust_codegen_units: Option<u32>,
@@ -999,7 +1013,9 @@ define_config! {
9991013

10001014
define_config! {
10011015
/// TOML representation of how the GCC build is configured.
1002-
struct Gcc {}
1016+
struct Gcc {
1017+
download_ci_gcc: Option<bool> = "download-ci-gcc",
1018+
}
10031019
}
10041020

10051021
define_config! {
@@ -2143,6 +2159,16 @@ impl Config {
21432159
config.llvm_from_ci = config.parse_download_ci_llvm(None, false);
21442160
}
21452161

2162+
if let Some(gcc) = toml.gcc {
2163+
config.gcc_ci_mode = match gcc.download_ci_gcc {
2164+
Some(value) => match value {
2165+
true => GccCiMode::DownloadFromCi,
2166+
false => GccCiMode::BuildLocally,
2167+
},
2168+
None => GccCiMode::default(),
2169+
};
2170+
}
2171+
21462172
if let Some(t) = toml.target {
21472173
for (triple, cfg) in t {
21482174
let mut target = Target::from_triple(&triple);

0 commit comments

Comments
 (0)