@@ -1548,6 +1548,7 @@ impl Step for Extended {
15481548 compiler: builder. compiler( stage, target) ,
15491549 backend: "cranelift" . to_string( ) ,
15501550 } ) ;
1551+ add_component ! ( "llvm-bitcode-linker" => LlvmBitcodeLinker { compiler, target} ) ;
15511552
15521553 let etc = builder. src . join ( "src/etc/installer" ) ;
15531554
@@ -2224,6 +2225,53 @@ impl Step for LlvmTools {
22242225 }
22252226}
22262227
2228+ #[ derive( Debug , PartialOrd , Ord , Clone , Hash , PartialEq , Eq ) ]
2229+ pub struct LlvmBitcodeLinker {
2230+ pub compiler : Compiler ,
2231+ pub target : TargetSelection ,
2232+ }
2233+
2234+ impl Step for LlvmBitcodeLinker {
2235+ type Output = Option < GeneratedTarball > ;
2236+ const DEFAULT : bool = true ;
2237+ const ONLY_HOSTS : bool = true ;
2238+
2239+ fn should_run ( run : ShouldRun < ' _ > ) -> ShouldRun < ' _ > {
2240+ let default = should_build_extended_tool ( run. builder , "llvm-bitcode-linker" ) ;
2241+ run. alias ( "llvm-bitcode-linker" ) . default_condition ( default)
2242+ }
2243+
2244+ fn make_run ( run : RunConfig < ' _ > ) {
2245+ run. builder . ensure ( LlvmBitcodeLinker {
2246+ compiler : run. builder . compiler_for (
2247+ run. builder . top_stage ,
2248+ run. builder . config . build ,
2249+ run. target ,
2250+ ) ,
2251+ target : run. target ,
2252+ } ) ;
2253+ }
2254+
2255+ fn run ( self , builder : & Builder < ' _ > ) -> Option < GeneratedTarball > {
2256+ let compiler = self . compiler ;
2257+ let target = self . target ;
2258+
2259+ let llbc_linker =
2260+ builder. ensure ( tool:: LlvmBitcodeLinker { compiler, target, extra_features : vec ! [ ] } ) ;
2261+
2262+ let self_contained_bin_dir = format ! ( "lib/rustlib/{}/bin/self-contained" , target. triple) ;
2263+
2264+ // Prepare the image directory
2265+ let mut tarball = Tarball :: new ( builder, "llvm-bitcode-linker" , & target. triple ) ;
2266+ tarball. set_overlay ( OverlayKind :: LlvmBitcodeLinker ) ;
2267+ tarball. is_preview ( true ) ;
2268+
2269+ tarball. add_file ( llbc_linker, self_contained_bin_dir, 0o755 ) ;
2270+
2271+ Some ( tarball. generate ( ) )
2272+ }
2273+ }
2274+
22272275// Tarball intended for internal consumption to ease rustc/std development.
22282276//
22292277// Should not be considered stable by end users.
0 commit comments