@@ -675,6 +675,81 @@ impl Step for Std {
675
675
return distdir ( builder) . join ( format ! ( "{}-{}.tar.gz" , name, target) ) ;
676
676
}
677
677
678
+ builder. ensure ( compile:: Std { compiler, target } ) ;
679
+
680
+ let image = tmpdir ( builder) . join ( format ! ( "{}-{}-image" , name, target) ) ;
681
+ let _ = fs:: remove_dir_all ( & image) ;
682
+
683
+
684
+ let dst = image. join ( "lib/rustlib" ) . join ( target) . join ( "lib" ) ;
685
+ t ! ( fs:: create_dir_all( & dst) ) ;
686
+
687
+ let stamp = dbg ! ( compile:: libstd_stamp( builder, compiler, target) ) ;
688
+ for ( path, host) in builder. read_stamp_file ( & stamp) {
689
+ if !host {
690
+ builder. copy ( & path, & dst. join ( path. file_name ( ) . unwrap ( ) ) ) ;
691
+ }
692
+ }
693
+
694
+ let mut cmd = rust_installer ( builder) ;
695
+ cmd. arg ( "generate" )
696
+ . arg ( "--product-name=Rust" )
697
+ . arg ( "--rel-manifest-dir=rustlib" )
698
+ . arg ( "--success-message=std-is-standing-at-the-ready." )
699
+ . arg ( "--image-dir" ) . arg ( & image)
700
+ . arg ( "--work-dir" ) . arg ( & tmpdir ( builder) )
701
+ . arg ( "--output-dir" ) . arg ( & distdir ( builder) )
702
+ . arg ( format ! ( "--package-name={}-{}" , name, target) )
703
+ . arg ( format ! ( "--component-name=rust-std-{}" , target) )
704
+ . arg ( "--legacy-manifest-dirs=rustlib,cargo" ) ;
705
+
706
+ builder. info ( & format ! ( "Dist std stage{} ({} -> {})" ,
707
+ compiler. stage, & compiler. host, target) ) ;
708
+ let _time = timeit ( builder) ;
709
+ builder. run ( & mut cmd) ;
710
+ builder. remove_dir ( & image) ;
711
+ distdir ( builder) . join ( format ! ( "{}-{}.tar.gz" , name, target) )
712
+ }
713
+ }
714
+
715
+ #[ derive( Debug , PartialOrd , Ord , Copy , Clone , Hash , PartialEq , Eq ) ]
716
+ pub struct StdZ {
717
+ pub compiler : Compiler ,
718
+ pub target : Interned < String > ,
719
+ }
720
+
721
+ impl Step for StdZ {
722
+ type Output = PathBuf ;
723
+ const DEFAULT : bool = true ;
724
+
725
+ fn should_run ( run : ShouldRun < ' _ > ) -> ShouldRun < ' _ > {
726
+ run. path ( "src/libstdZ" )
727
+ }
728
+
729
+ fn make_run ( run : RunConfig < ' _ > ) {
730
+ run. builder . ensure ( StdZ {
731
+ compiler : run. builder . compiler_for (
732
+ run. builder . top_stage ,
733
+ run. builder . config . build ,
734
+ run. target ,
735
+ ) ,
736
+ target : run. target ,
737
+ } ) ;
738
+ }
739
+
740
+ fn run ( self , builder : & Builder < ' _ > ) -> PathBuf {
741
+ let compiler = self . compiler ;
742
+ let target = self . target ;
743
+
744
+ let name = pkgname ( builder, "rust-stdZ" ) ;
745
+
746
+ // The only true set of target libraries came from the build triple, so
747
+ // let's reduce redundant work by only producing archives from that host.
748
+ if compiler. host != builder. config . build {
749
+ builder. info ( "\t skipping, not a build host" ) ;
750
+ return distdir ( builder) . join ( format ! ( "{}-{}.tar.gz" , name, target) ) ;
751
+ }
752
+
678
753
// We want to package up as many target libraries as possible
679
754
// for the `rust-std` package, so if this is a host target we
680
755
// depend on librustc and otherwise we just depend on libtest.
@@ -710,12 +785,12 @@ impl Step for Std {
710
785
cmd. arg ( "generate" )
711
786
. arg ( "--product-name=Rust" )
712
787
. arg ( "--rel-manifest-dir=rustlib" )
713
- . arg ( "--success-message=std -is-standing-at-the-ready." )
788
+ . arg ( "--success-message=stdZ -is-standing-at-the-ready." )
714
789
. arg ( "--image-dir" ) . arg ( & image)
715
790
. arg ( "--work-dir" ) . arg ( & tmpdir ( builder) )
716
791
. arg ( "--output-dir" ) . arg ( & distdir ( builder) )
717
792
. arg ( format ! ( "--package-name={}-{}" , name, target) )
718
- . arg ( format ! ( "--component-name=rust-std -{}" , target) )
793
+ . arg ( format ! ( "--component-name=rust-stdZ -{}" , target) )
719
794
. arg ( "--legacy-manifest-dirs=rustlib,cargo" ) ;
720
795
721
796
builder. info ( & format ! ( "Dist std stage{} ({} -> {})" ,
0 commit comments