@@ -692,6 +692,79 @@ impl Step for RustAnalyzerProcMacroSrv {
692
692
}
693
693
}
694
694
695
+ #[ derive( Debug , Clone , Hash , PartialEq , Eq ) ]
696
+ pub struct LlvmBitcodeLinker {
697
+ pub compiler : Compiler ,
698
+ pub target : TargetSelection ,
699
+ pub extra_features : Vec < String > ,
700
+ }
701
+
702
+ impl Step for LlvmBitcodeLinker {
703
+ type Output = PathBuf ;
704
+ const DEFAULT : bool = true ;
705
+ const ONLY_HOSTS : bool = true ;
706
+
707
+ fn should_run ( run : ShouldRun < ' _ > ) -> ShouldRun < ' _ > {
708
+ let builder = run. builder ;
709
+ run. path ( "src/tools/llvm-bitcode-linker" ) . default_condition (
710
+ builder. config . extended
711
+ && builder
712
+ . config
713
+ . tools
714
+ . as_ref ( )
715
+ . map_or ( builder. build . unstable_features ( ) , |tools| {
716
+ tools. iter ( ) . any ( |tool| tool == "llvm-bitcode-linker" )
717
+ } ) ,
718
+ )
719
+ }
720
+
721
+ fn make_run ( run : RunConfig < ' _ > ) {
722
+ run. builder . ensure ( LlvmBitcodeLinker {
723
+ compiler : run. builder . compiler ( run. builder . top_stage , run. builder . config . build ) ,
724
+ extra_features : Vec :: new ( ) ,
725
+ target : run. target ,
726
+ } ) ;
727
+ }
728
+
729
+ fn run ( self , builder : & Builder < ' _ > ) -> PathBuf {
730
+ let bin_name = "llvm-bitcode-linker" ;
731
+
732
+ builder. ensure ( compile:: Std :: new ( self . compiler , self . compiler . host ) ) ;
733
+ builder. ensure ( compile:: Rustc :: new ( self . compiler , self . target ) ) ;
734
+
735
+ let mut cargo = prepare_tool_cargo (
736
+ builder,
737
+ self . compiler ,
738
+ Mode :: ToolRustc ,
739
+ self . target ,
740
+ "build" ,
741
+ "src/tools/llvm-bitcode-linker" ,
742
+ SourceType :: InTree ,
743
+ & self . extra_features ,
744
+ ) ;
745
+
746
+ if builder. config . rustc_parallel {
747
+ cargo. rustflag ( "--cfg=parallel_compiler" ) ;
748
+ }
749
+
750
+ builder. run ( & mut cargo. into ( ) ) ;
751
+
752
+ let tool_out = builder
753
+ . cargo_out ( self . compiler , Mode :: ToolRustc , self . target )
754
+ . join ( exe ( bin_name, self . compiler . host ) ) ;
755
+
756
+ if self . compiler . stage > 0 {
757
+ let bindir = builder. sysroot ( self . compiler ) . join ( "bin" ) ;
758
+ t ! ( fs:: create_dir_all( & bindir) ) ;
759
+ let bin_destination = bindir. join ( exe ( bin_name, self . compiler . host ) ) ;
760
+ builder. copy_link ( & tool_out, & bin_destination) ;
761
+ bin_destination
762
+ } else {
763
+ tool_out
764
+ }
765
+ }
766
+ }
767
+
695
768
macro_rules! tool_extended {
696
769
( ( $sel: ident, $builder: ident) ,
697
770
$( $name: ident,
@@ -795,7 +868,6 @@ tool_extended!((self, builder),
795
868
Rls , "src/tools/rls" , "rls" , stable=true , tool_std=true ;
796
869
RustDemangler , "src/tools/rust-demangler" , "rust-demangler" , stable=false , tool_std=true ;
797
870
Rustfmt , "src/tools/rustfmt" , "rustfmt" , stable=true , add_bins_to_sysroot = [ "rustfmt" , "cargo-fmt" ] ;
798
- LlvmBitcodeLinker , "src/tools/llvm-bitcode-linker" , "llvm-bitcode-linker" , stable=false , add_bins_to_sysroot = [ "llvm-bitcode-linker" ] ;
799
871
) ;
800
872
801
873
impl < ' a > Builder < ' a > {
0 commit comments