@@ -368,25 +368,27 @@ impl BuildQueue {
368
368
if self . config . cfg_test {
369
369
args. push ( "--test" . to_owned ( ) ) ;
370
370
}
371
- args. push ( "--sysroot" . to_owned ( ) ) ;
372
- let home = option_env ! ( "RUSTUP_HOME" ) . or ( option_env ! ( "MULTIRUST_HOME" ) ) ;
373
- let toolchain = option_env ! ( "RUSTUP_TOOLCHAIN" ) . or ( option_env ! ( "MULTIRUST_TOOLCHAIN" ) ) ;
374
- let sys_root = if let ( Some ( home) , Some ( toolchain) ) = ( home, toolchain) {
375
- format ! ( "{}/toolchains/{}" , home, toolchain)
376
- } else {
377
- option_env ! ( "SYSROOT" )
378
- . map ( |s| s. to_owned ( ) )
379
- . or_else ( || Command :: new ( "rustc" )
380
- . arg ( "--print" )
381
- . arg ( "sysroot" )
382
- . output ( )
383
- . ok ( )
384
- . and_then ( |out| String :: from_utf8 ( out. stdout ) . ok ( ) )
385
- . map ( |s| s. trim ( ) . to_owned ( ) ) )
386
- . expect ( "need to specify SYSROOT env var, \
387
- or use rustup or multirust")
388
- } ;
389
- args. push ( sys_root. to_owned ( ) ) ;
371
+ if self . config . sysroot . is_empty ( ) {
372
+ args. push ( "--sysroot" . to_owned ( ) ) ;
373
+ let home = option_env ! ( "RUSTUP_HOME" ) . or ( option_env ! ( "MULTIRUST_HOME" ) ) ;
374
+ let toolchain = option_env ! ( "RUSTUP_TOOLCHAIN" ) . or ( option_env ! ( "MULTIRUST_TOOLCHAIN" ) ) ;
375
+ let sys_root = if let ( Some ( home) , Some ( toolchain) ) = ( home, toolchain) {
376
+ format ! ( "{}/toolchains/{}" , home, toolchain)
377
+ } else {
378
+ option_env ! ( "SYSROOT" )
379
+ . map ( |s| s. to_owned ( ) )
380
+ . or_else ( || Command :: new ( "rustc" )
381
+ . arg ( "--print" )
382
+ . arg ( "sysroot" )
383
+ . output ( )
384
+ . ok ( )
385
+ . and_then ( |out| String :: from_utf8 ( out. stdout ) . ok ( ) )
386
+ . map ( |s| s. trim ( ) . to_owned ( ) ) )
387
+ . expect ( "need to specify SYSROOT env var, \
388
+ or use rustup or multirust")
389
+ } ;
390
+ args. push ( sys_root. to_owned ( ) ) ;
391
+ }
390
392
391
393
let envs = cmd. get_envs ( ) ;
392
394
trace ! ( "envs: {:?}" , envs) ;
@@ -428,9 +430,13 @@ impl BuildQueue {
428
430
// However, if Cargo doesn't run a separate thread, then we'll just wait
429
431
// forever. Therefore, we spawn an extra thread here to be safe.
430
432
let handle = thread:: spawn ( move || {
431
- env:: set_var ( "RUSTFLAGS" ,
432
- "-Zunstable-options -Zsave-analysis --error-format=json \
433
- -Zcontinue-parse-after-error") ;
433
+ let hardcoded = "-Zunstable-options -Zsave-analysis --error-format=json \
434
+ -Zcontinue-parse-after-error";
435
+ if rls_config. sysroot . is_empty ( ) {
436
+ env:: set_var ( "RUSTFLAGS" , hardcoded) ;
437
+ } else {
438
+ env:: set_var ( "RUSTFLAGS" , & format ! ( "--sysroot {} {}" , rls_config. sysroot, hardcoded) ) ;
439
+ }
434
440
435
441
let shell = MultiShell :: from_write ( Box :: new ( BufWriter ( out. clone ( ) ) ) ,
436
442
Box :: new ( BufWriter ( err. clone ( ) ) ) ) ;
0 commit comments