@@ -656,8 +656,11 @@ impl Step for CodegenBackend {
656
656
let mut files = files. into_iter ( )
657
657
. filter ( |f| {
658
658
let filename = f. file_name ( ) . unwrap ( ) . to_str ( ) . unwrap ( ) ;
659
- is_dylib ( filename) && filename. contains ( "rustc_codegen_llvm-" )
659
+ is_dylib ( filename) && ( filename. contains ( "rustc_codegen_llvm-" ) ||
660
+ filename. contains ( "rustc_llvm-" ) )
660
661
} ) ;
662
+ let llvm_crate = files. next ( )
663
+ . unwrap_or_else ( || panic ! ( "need the rustc_trans llvm dylib" ) ) ;
661
664
let codegen_backend = match files. next ( ) {
662
665
Some ( f) => f,
663
666
None => panic ! ( "no dylibs built for codegen backend?" ) ,
@@ -668,8 +671,13 @@ impl Step for CodegenBackend {
668
671
f. display( ) ) ;
669
672
}
670
673
let stamp = codegen_backend_stamp ( builder, compiler, target, backend) ;
674
+
675
+ let llvm_crate = llvm_crate. to_str ( ) . unwrap ( ) ;
671
676
let codegen_backend = codegen_backend. to_str ( ) . unwrap ( ) ;
672
- t ! ( t!( File :: create( & stamp) ) . write_all( codegen_backend. as_bytes( ) ) ) ;
677
+ let mut stamp = t ! ( File :: create( & stamp) ) ;
678
+ t ! ( stamp. write_all( codegen_backend. as_bytes( ) ) ) ;
679
+ t ! ( stamp. write_all( & [ 0 ] ) ) ;
680
+ t ! ( stamp. write_all( llvm_crate. as_bytes( ) ) ) ;
673
681
}
674
682
}
675
683
@@ -750,28 +758,32 @@ fn copy_codegen_backends_to_sysroot(builder: &Builder,
750
758
// Here we're looking for the output dylib of the `CodegenBackend` step and
751
759
// we're copying that into the `codegen-backends` folder.
752
760
let dst = builder. sysroot_codegen_backends ( target_compiler) ;
761
+ let sysroot_dst = builder. sysroot_libdir ( target_compiler, target) ;
753
762
t ! ( fs:: create_dir_all( & dst) ) ;
754
-
763
+ t ! ( fs :: create_dir_all ( & sysroot_dst ) ) ;
755
764
if builder. config . dry_run {
756
765
return ;
757
766
}
758
767
759
768
for backend in builder. config . rust_codegen_backends . iter ( ) {
760
769
let stamp = codegen_backend_stamp ( builder, compiler, target, * backend) ;
761
- let mut dylib = String :: new ( ) ;
762
- t ! ( t!( File :: open( & stamp) ) . read_to_string( & mut dylib) ) ;
763
- let file = Path :: new ( & dylib) ;
764
- let filename = file. file_name ( ) . unwrap ( ) . to_str ( ) . unwrap ( ) ;
765
- // change `librustc_codegen_llvm-xxxxxx.so` to `librustc_codegen_llvm-llvm.so`
766
- let target_filename = {
767
- let dash = filename. find ( "-" ) . unwrap ( ) ;
768
- let dot = filename. find ( "." ) . unwrap ( ) ;
769
- format ! ( "{}-{}{}" ,
770
- & filename[ ..dash] ,
771
- backend,
772
- & filename[ dot..] )
773
- } ;
774
- builder. copy ( & file, & dst. join ( target_filename) ) ;
770
+ for file in builder. read_stamp_file ( & stamp) {
771
+ let filename = file. file_name ( ) . unwrap ( ) . to_str ( ) . unwrap ( ) ;
772
+ if filename. contains ( "rustc_llvm" ) {
773
+ builder. copy ( & file, & sysroot_dst. join ( filename) ) ;
774
+ } else {
775
+ // change `librustc_codegen_llvm-xxxxxx.so` to `librustc_codegen_llvm-llvm.so`
776
+ let target_filename = {
777
+ let dash = filename. find ( "-" ) . unwrap ( ) ;
778
+ let dot = filename. find ( "." ) . unwrap ( ) ;
779
+ format ! ( "{}-{}{}" ,
780
+ & filename[ ..dash] ,
781
+ backend,
782
+ & filename[ dot..] )
783
+ } ;
784
+ builder. copy ( & file, & dst. join ( target_filename) ) ;
785
+ }
786
+ }
775
787
}
776
788
}
777
789
0 commit comments