@@ -19,6 +19,7 @@ use build_helper::{output, mtime, up_to_date};
1919use filetime:: FileTime ;
2020use serde_json;
2121
22+ use crate :: dist;
2223use crate :: util:: { exe, libdir, is_dylib} ;
2324use crate :: { Compiler , Mode , GitRepo } ;
2425use crate :: native;
@@ -104,7 +105,6 @@ impl Step for Std {
104105 & compiler. host, target) ) ;
105106 run_cargo ( builder,
106107 & mut cargo,
107- vec ! [ ] ,
108108 & libstd_stamp ( builder, compiler, target) ,
109109 false ) ;
110110
@@ -365,7 +365,6 @@ impl Step for Test {
365365 & compiler. host, target) ) ;
366366 run_cargo ( builder,
367367 & mut cargo,
368- vec ! [ ] ,
369368 & libtest_stamp ( builder, compiler, target) ,
370369 false ) ;
371370
@@ -493,7 +492,6 @@ impl Step for Rustc {
493492 compiler. stage, & compiler. host, target) ) ;
494493 run_cargo ( builder,
495494 & mut cargo,
496- vec ! [ ] ,
497495 & librustc_stamp ( builder, compiler, target) ,
498496 false ) ;
499497
@@ -636,47 +634,18 @@ impl Step for CodegenBackend {
636634
637635 let out_dir = builder. cargo_out ( compiler, Mode :: Codegen , target) ;
638636
639- let mut cargo = builder. cargo ( compiler, Mode :: Codegen , target, "rustc " ) ;
637+ let mut cargo = builder. cargo ( compiler, Mode :: Codegen , target, "build " ) ;
640638 cargo. arg ( "--manifest-path" )
641639 . arg ( builder. src . join ( "src/librustc_codegen_llvm/Cargo.toml" ) ) ;
642640 rustc_cargo_env ( builder, & mut cargo) ;
643641
644642 let features = build_codegen_backend ( & builder, & mut cargo, & compiler, target, backend) ;
645643
646- let mut cargo_tails_args = vec ! [ ] ;
647-
648- if builder. config . llvm_thin_lto {
649- cargo_tails_args. push ( "--" . to_string ( ) ) ;
650-
651- let num_jobs = builder. jobs ( ) ;
652-
653- if !target. contains ( "msvc" ) {
654- // Here we assume that the linker is clang. If it's not, there'll
655- // be linker errors.
656- cargo_tails_args. push ( "-Clink-arg=-fuse-ld=lld" . to_string ( ) ) ;
657- cargo_tails_args. push ( "-Clink-arg=-flto=thin" . to_string ( ) ) ;
658-
659- if builder. config . llvm_optimize {
660- cargo_tails_args. push ( "-Clink-arg=-O2" . to_string ( ) ) ;
661- }
662-
663- // Let's make LLD respect the `-j` option.
664- let num_jobs_arg = format ! ( "-Clink-arg=-Wl,--thinlto-jobs={}" , num_jobs) ;
665- cargo_tails_args. push ( num_jobs_arg) ;
666- } else {
667- // Here we assume that the linker is lld-link.exe. lld-link.exe
668- // does not need the extra arguments except for num_jobs
669- let num_jobs_arg = format ! ( "-Clink-arg=/opt:lldltojobs={}" , num_jobs) ;
670- cargo_tails_args. push ( num_jobs_arg) ;
671- }
672- }
673-
674644 let tmp_stamp = out_dir. join ( ".tmp.stamp" ) ;
675645
676646 let _folder = builder. fold_output ( || format ! ( "stage{}-rustc_codegen_llvm" , compiler. stage) ) ;
677647 let files = run_cargo ( builder,
678648 cargo. arg ( "--features" ) . arg ( features) ,
679- cargo_tails_args,
680649 & tmp_stamp,
681650 false ) ;
682651 if builder. config . dry_run {
@@ -749,7 +718,9 @@ pub fn build_codegen_backend(builder: &Builder,
749718 "libstdc++.a" ) ;
750719 cargo. env ( "LLVM_STATIC_STDCPP" , file) ;
751720 }
752- if builder. config . llvm_link_shared {
721+ if builder. config . llvm_link_shared ||
722+ ( builder. config . llvm_thin_lto && backend != "emscripten" )
723+ {
753724 cargo. env ( "LLVM_LINK_SHARED" , "1" ) ;
754725 }
755726 }
@@ -989,6 +960,8 @@ impl Step for Assemble {
989960 copy_lld_to_sysroot ( builder, target_compiler, & lld_install) ;
990961 }
991962
963+ dist:: maybe_install_llvm_dylib ( builder, target_compiler. host , & sysroot) ;
964+
992965 // Link the compiler binary itself into place
993966 let out_dir = builder. cargo_out ( build_compiler, Mode :: Rustc , host) ;
994967 let rustc = out_dir. join ( exe ( "rustc_binary" , & * host) ) ;
@@ -1015,7 +988,6 @@ pub fn add_to_sysroot(builder: &Builder, sysroot_dst: &Path, stamp: &Path) {
1015988
1016989pub fn run_cargo ( builder : & Builder ,
1017990 cargo : & mut Command ,
1018- tail_args : Vec < String > ,
1019991 stamp : & Path ,
1020992 is_check : bool )
1021993 -> Vec < PathBuf >
@@ -1038,7 +1010,7 @@ pub fn run_cargo(builder: &Builder,
10381010 // files we need to probe for later.
10391011 let mut deps = Vec :: new ( ) ;
10401012 let mut toplevel = Vec :: new ( ) ;
1041- let ok = stream_cargo ( builder, cargo, tail_args , & mut |msg| {
1013+ let ok = stream_cargo ( builder, cargo, & mut |msg| {
10421014 let filenames = match msg {
10431015 CargoMessage :: CompilerArtifact { filenames, .. } => filenames,
10441016 _ => return ,
@@ -1163,7 +1135,6 @@ pub fn run_cargo(builder: &Builder,
11631135pub fn stream_cargo (
11641136 builder : & Builder ,
11651137 cargo : & mut Command ,
1166- tail_args : Vec < String > ,
11671138 cb : & mut dyn FnMut ( CargoMessage ) ,
11681139) -> bool {
11691140 if builder. config . dry_run {
@@ -1174,10 +1145,6 @@ pub fn stream_cargo(
11741145 cargo. arg ( "--message-format" ) . arg ( "json" )
11751146 . stdout ( Stdio :: piped ( ) ) ;
11761147
1177- for arg in tail_args {
1178- cargo. arg ( arg) ;
1179- }
1180-
11811148 builder. verbose ( & format ! ( "running: {:?}" , cargo) ) ;
11821149 let mut child = match cargo. spawn ( ) {
11831150 Ok ( child) => child,
0 commit comments