@@ -692,6 +692,80 @@ 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. config . tools . as_ref ( ) . map_or (
712
+ false || builder. build . unstable_features ( ) ,
713
+ |tools| {
714
+ tools. iter ( ) . any ( |tool| match tool. as_ref ( ) {
715
+ "clippy" => "llvm-bitcode-linker" == "clippy-driver" ,
716
+ x => "llvm-bitcode-linker" == x,
717
+ } )
718
+ } ,
719
+ ) ,
720
+ )
721
+ }
722
+ fn make_run ( run : RunConfig < ' _ > ) {
723
+ run. builder . ensure ( LlvmBitcodeLinker {
724
+ compiler : run. builder . compiler ( run. builder . top_stage , run. builder . config . build ) ,
725
+ extra_features : Vec :: new ( ) ,
726
+ target : run. target ,
727
+ } ) ;
728
+ }
729
+
730
+ fn run ( self , builder : & Builder < ' _ > ) -> PathBuf {
731
+ let bin_name = "llvm-bitcode-linker" ;
732
+
733
+ builder. ensure ( compile:: Std :: new ( self . compiler , self . compiler . host ) ) ;
734
+ builder. ensure ( compile:: Rustc :: new ( self . compiler , self . target ) ) ;
735
+
736
+ let mut cargo = prepare_tool_cargo (
737
+ builder,
738
+ self . compiler ,
739
+ Mode :: ToolRustc ,
740
+ self . target ,
741
+ "build" ,
742
+ "src/tools/llvm-bitcode-linker" ,
743
+ SourceType :: InTree ,
744
+ & self . extra_features ,
745
+ ) ;
746
+
747
+ if builder. config . rustc_parallel {
748
+ cargo. rustflag ( "--cfg=parallel_compiler" ) ;
749
+ }
750
+
751
+ builder. run ( & mut cargo. into ( ) ) ;
752
+
753
+ let tool_out = builder
754
+ . cargo_out ( self . compiler , Mode :: ToolRustc , self . target )
755
+ . join ( exe ( bin_name, self . compiler . host ) ) ;
756
+
757
+ if self . compiler . stage > 0 {
758
+ let bindir = builder. sysroot ( self . compiler ) . join ( "bin" ) ;
759
+ t ! ( fs:: create_dir_all( & bindir) ) ;
760
+ let bin_destination = bindir. join ( exe ( bin_name, self . compiler . host ) ) ;
761
+ builder. copy ( & tool_out, & bin_destination) ;
762
+ bin_destination
763
+ } else {
764
+ tool_out
765
+ }
766
+ }
767
+ }
768
+
695
769
macro_rules! tool_extended {
696
770
( ( $sel: ident, $builder: ident) ,
697
771
$( $name: ident,
@@ -795,7 +869,6 @@ tool_extended!((self, builder),
795
869
Rls , "src/tools/rls" , "rls" , stable=true , tool_std=true ;
796
870
RustDemangler , "src/tools/rust-demangler" , "rust-demangler" , stable=false , tool_std=true ;
797
871
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
872
) ;
800
873
801
874
impl < ' a > Builder < ' a > {
0 commit comments