@@ -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
10001014define_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
10051021define_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