@@ -171,6 +171,17 @@ impl LldMode {
171
171
}
172
172
}
173
173
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
+
174
185
/// Global configuration for the entire build and/or bootstrap.
175
186
///
176
187
/// This structure is parsed from `config.toml`, and some of the fields are inferred from `git` or build-time parameters.
@@ -281,6 +292,9 @@ pub struct Config {
281
292
pub llvm_ldflags : Option < String > ,
282
293
pub llvm_use_libcxx : bool ,
283
294
295
+ // gcc codegen options
296
+ pub gcc_ci_mode : GccCiMode ,
297
+
284
298
// rust codegen options
285
299
pub rust_optimize : RustOptimize ,
286
300
pub rust_codegen_units : Option < u32 > ,
@@ -992,7 +1006,9 @@ define_config! {
992
1006
993
1007
define_config ! {
994
1008
/// TOML representation of how the GCC build is configured.
995
- struct Gcc { }
1009
+ struct Gcc {
1010
+ download_ci_gcc: Option <bool > = "download-ci-gcc" ,
1011
+ }
996
1012
}
997
1013
998
1014
define_config ! {
@@ -2123,6 +2139,16 @@ impl Config {
2123
2139
config. llvm_from_ci = config. parse_download_ci_llvm ( None , false ) ;
2124
2140
}
2125
2141
2142
+ if let Some ( gcc) = toml. gcc {
2143
+ config. gcc_ci_mode = match gcc. download_ci_gcc {
2144
+ Some ( value) => match value {
2145
+ true => GccCiMode :: DownloadFromCi ,
2146
+ false => GccCiMode :: BuildLocally ,
2147
+ } ,
2148
+ None => GccCiMode :: default ( ) ,
2149
+ } ;
2150
+ }
2151
+
2126
2152
if let Some ( t) = toml. target {
2127
2153
for ( triple, cfg) in t {
2128
2154
let mut target = Target :: from_triple ( & triple) ;
0 commit comments