@@ -243,6 +243,7 @@ pub struct Build {
243243 initial_rustc : PathBuf ,
244244 initial_cargo : PathBuf ,
245245 initial_lld : PathBuf ,
246+ initial_libdir : PathBuf ,
246247
247248 // Runtime state filled in later on
248249 // C/C++ compilers and archiver for all targets
@@ -344,8 +345,8 @@ impl Build {
344345 // we always try to use git for LLVM builds
345346 let in_tree_llvm_info = channel:: GitInfo :: new ( false , & src. join ( "src/llvm-project" ) ) ;
346347
347- let initial_target_libdir = if config. dry_run {
348- "/dummy/path/to/lib/" . to_string ( )
348+ let initial_target_libdir_str = if config. dry_run {
349+ "/dummy/lib/ path/to/lib/" . to_string ( )
349350 } else {
350351 output (
351352 Command :: new ( & config. initial_rustc )
@@ -355,13 +356,28 @@ impl Build {
355356 . arg ( "target-libdir" ) ,
356357 )
357358 } ;
358- let initial_lld =
359- Path :: new ( & initial_target_libdir) . parent ( ) . unwrap ( ) . join ( "bin" ) . join ( "rust-lld" ) ;
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 ( ) ;
360375
361376 let mut build = Build {
362377 initial_rustc : config. initial_rustc . clone ( ) ,
363378 initial_cargo : config. initial_cargo . clone ( ) ,
364379 initial_lld,
380+ initial_libdir,
365381 local_rebuild : config. local_rebuild ,
366382 fail_fast : config. cmd . fail_fast ( ) ,
367383 doc_tests : config. cmd . doc_tests ( ) ,
0 commit comments