@@ -112,7 +112,7 @@ pub struct ConfigInfo {
112
112
pub sysroot_panic_abort : bool ,
113
113
pub cg_backend_path : String ,
114
114
pub sysroot_path : String ,
115
- pub gcc_path : String ,
115
+ pub gcc_path : Option < String > ,
116
116
config_file : Option < String > ,
117
117
// This is used in particular in rust compiler bootstrap because it doesn't run at the root
118
118
// of the `cg_gcc` folder, making it complicated for us to get access to local files we need
@@ -173,6 +173,14 @@ impl ConfigInfo {
173
173
"--release-sysroot" => self . sysroot_release_channel = true ,
174
174
"--release" => self . channel = Channel :: Release ,
175
175
"--sysroot-panic-abort" => self . sysroot_panic_abort = true ,
176
+ "--gcc-path" => match args. next ( ) {
177
+ Some ( arg) if !arg. is_empty ( ) => {
178
+ self . gcc_path = Some ( arg. into ( ) ) ;
179
+ }
180
+ _ => {
181
+ return Err ( "Expected a value after `--gcc-path`, found nothing" . to_string ( ) ) ;
182
+ }
183
+ } ,
176
184
"--cg_gcc-path" => match args. next ( ) {
177
185
Some ( arg) if !arg. is_empty ( ) => {
178
186
self . cg_gcc_path = Some ( arg. into ( ) ) ;
@@ -260,8 +268,9 @@ impl ConfigInfo {
260
268
create_symlink ( & libgccjit_so, output_dir. join ( & format ! ( "{}.0" , libgccjit_so_name) ) ) ?;
261
269
}
262
270
263
- self . gcc_path = output_dir. display ( ) . to_string ( ) ;
264
- println ! ( "Using `{}` as path for libgccjit" , self . gcc_path) ;
271
+ let gcc_path = output_dir. display ( ) . to_string ( ) ;
272
+ println ! ( "Using `{}` as path for libgccjit" , gcc_path) ;
273
+ self . gcc_path = Some ( gcc_path) ;
265
274
Ok ( ( ) )
266
275
}
267
276
@@ -273,6 +282,11 @@ impl ConfigInfo {
273
282
}
274
283
275
284
pub fn setup_gcc_path ( & mut self ) -> Result < ( ) , String > {
285
+ // If the user used the `--gcc-path` option, no need to look at `config.toml` content
286
+ // since we already have everything we need.
287
+ if self . gcc_path . is_some ( ) {
288
+ return Ok ( ( ) ) ;
289
+ }
276
290
let config_file = match self . config_file . as_deref ( ) {
277
291
Some ( config_file) => config_file. into ( ) ,
278
292
None => self . compute_path ( "config.toml" ) ,
@@ -283,12 +297,10 @@ impl ConfigInfo {
283
297
self . download_gccjit_if_needed ( ) ?;
284
298
return Ok ( ( ) ) ;
285
299
}
286
- self . gcc_path = match gcc_path {
287
- Some ( path) => path,
288
- None => {
289
- return Err ( format ! ( "missing `gcc-path` value from `{}`" , config_file. display( ) , ) ) ;
290
- }
291
- } ;
300
+ if gcc_path. is_none ( ) {
301
+ return Err ( format ! ( "missing `gcc-path` value from `{}`" , config_file. display( ) ) ) ;
302
+ }
303
+ self . gcc_path = gcc_path;
292
304
Ok ( ( ) )
293
305
}
294
306
@@ -299,10 +311,11 @@ impl ConfigInfo {
299
311
) -> Result < ( ) , String > {
300
312
env. insert ( "CARGO_INCREMENTAL" . to_string ( ) , "0" . to_string ( ) ) ;
301
313
302
- if self . gcc_path . is_empty ( ) && !use_system_gcc {
314
+ if self . gcc_path . is_none ( ) && !use_system_gcc {
303
315
self . setup_gcc_path ( ) ?;
304
316
}
305
- env. insert ( "GCC_PATH" . to_string ( ) , self . gcc_path . clone ( ) ) ;
317
+ let gcc_path = self . gcc_path . clone ( ) . expect ( "GCC path wasn't provided" ) ;
318
+ env. insert ( "GCC_PATH" . to_string ( ) , gcc_path. clone ( ) ) ;
306
319
307
320
if self . cargo_target_dir . is_empty ( ) {
308
321
match env. get ( "CARGO_TARGET_DIR" ) . filter ( |dir| !dir. is_empty ( ) ) {
@@ -414,7 +427,7 @@ impl ConfigInfo {
414
427
"{target}:{sysroot}:{gcc_path}" ,
415
428
target = self . cargo_target_dir,
416
429
sysroot = sysroot. display( ) ,
417
- gcc_path = self . gcc_path,
430
+ gcc_path = gcc_path,
418
431
) ;
419
432
env. insert ( "LIBRARY_PATH" . to_string ( ) , ld_library_path. clone ( ) ) ;
420
433
env. insert ( "LD_LIBRARY_PATH" . to_string ( ) , ld_library_path. clone ( ) ) ;
@@ -459,6 +472,7 @@ impl ConfigInfo {
459
472
--release-sysroot : Build sysroot in release mode
460
473
--sysroot-panic-abort : Build the sysroot without unwinding support
461
474
--config-file : Location of the config file to be used
475
+ --gcc-path : Location of the GCC root folder
462
476
--cg_gcc-path : Location of the rustc_codegen_gcc root folder (used
463
477
when ran from another directory)
464
478
--no-default-features : Add `--no-default-features` flag to cargo commands
0 commit comments