@@ -243,6 +243,7 @@ pub struct Build {
243
243
initial_rustc : PathBuf ,
244
244
initial_cargo : PathBuf ,
245
245
initial_lld : PathBuf ,
246
+ initial_libdir : PathBuf ,
246
247
247
248
// Runtime state filled in later on
248
249
// C/C++ compilers and archiver for all targets
@@ -344,18 +345,39 @@ impl Build {
344
345
// we always try to use git for LLVM builds
345
346
let in_tree_llvm_info = channel:: GitInfo :: new ( false , & src. join ( "src/llvm-project" ) ) ;
346
347
347
- let initial_sysroot = config. initial_rustc . parent ( ) . unwrap ( ) . parent ( ) . unwrap ( ) ;
348
- let initial_lld = initial_sysroot
349
- . join ( "lib" )
350
- . join ( "rustlib" )
351
- . join ( config. build )
352
- . join ( "bin" )
353
- . join ( "rust-lld" ) ;
348
+ let initial_target_libdir_str = if config. dry_run {
349
+ "/dummy/lib/path/to/lib/" . to_string ( )
350
+ } else {
351
+ output (
352
+ Command :: new ( & config. initial_rustc )
353
+ . arg ( "--target" )
354
+ . arg ( config. build )
355
+ . arg ( "--print" )
356
+ . arg ( "target-libdir" ) ,
357
+ )
358
+ } ;
359
+ let initial_target_dir = Path :: new ( & initial_target_libdir_str) . parent ( ) . unwrap ( ) ;
360
+ let initial_lld = initial_target_dir. join ( "bin" ) . join ( "rust-lld" ) ;
361
+
362
+ let initial_sysroot = if config. dry_run {
363
+ "/dummy" . to_string ( )
364
+ } else {
365
+ output ( Command :: new ( & config. initial_rustc ) . arg ( "--print" ) . arg ( "sysroot" ) )
366
+ } ;
367
+ let initial_libdir = initial_target_dir
368
+ . parent ( )
369
+ . unwrap ( )
370
+ . parent ( )
371
+ . unwrap ( )
372
+ . strip_prefix ( initial_sysroot. trim ( ) )
373
+ . unwrap ( )
374
+ . to_path_buf ( ) ;
354
375
355
376
let mut build = Build {
356
377
initial_rustc : config. initial_rustc . clone ( ) ,
357
378
initial_cargo : config. initial_cargo . clone ( ) ,
358
379
initial_lld,
380
+ initial_libdir,
359
381
local_rebuild : config. local_rebuild ,
360
382
fail_fast : config. cmd . fail_fast ( ) ,
361
383
doc_tests : config. cmd . doc_tests ( ) ,
0 commit comments