@@ -1367,85 +1367,79 @@ impl Step for Miri {
13671367}
13681368
13691369#[ derive( Debug , Clone , Hash , PartialEq , Eq ) ]
1370- pub struct CodegenBackend {
1371- pub compiler : Compiler ,
1372- pub backend : CodegenBackendKind ,
1370+ pub struct CraneliftCodegenBackend {
1371+ pub build_compiler : Compiler ,
13731372}
13741373
1375- impl Step for CodegenBackend {
1374+ impl Step for CraneliftCodegenBackend {
13761375 type Output = Option < GeneratedTarball > ;
13771376 const DEFAULT : bool = true ;
13781377 const ONLY_HOSTS : bool = true ;
13791378
13801379 fn should_run ( run : ShouldRun < ' _ > ) -> ShouldRun < ' _ > {
1381- run. path ( "compiler/rustc_codegen_cranelift" )
1380+ // We only want to build the cranelift backend in `x dist` if the backend was enabled
1381+ // in rust.codegen-backends.
1382+ // Sadly, we don't have access to the actual for which we're disting clif here..
1383+ // So we just use the host target.
1384+ let clif_enabled_by_default = run
1385+ . builder
1386+ . config
1387+ . codegen_backends ( run. builder . host_target )
1388+ . contains ( & CodegenBackendKind :: Cranelift ) ;
1389+ run. alias ( "rustc_codegen_cranelift" ) . default_condition ( clif_enabled_by_default)
13821390 }
13831391
13841392 fn make_run ( run : RunConfig < ' _ > ) {
1385- for backend in run. builder . config . codegen_backends ( run. target ) {
1386- if backend. is_llvm ( ) {
1387- continue ; // Already built as part of rustc
1388- }
1389-
1390- run. builder . ensure ( CodegenBackend {
1391- compiler : run. builder . compiler ( run. builder . top_stage , run. target ) ,
1392- backend : backend. clone ( ) ,
1393- } ) ;
1394- }
1393+ run. builder . ensure ( CraneliftCodegenBackend {
1394+ build_compiler : run. builder . compiler_for (
1395+ run. builder . top_stage ,
1396+ run. builder . config . host_target ,
1397+ run. target ,
1398+ ) ,
1399+ } ) ;
13951400 }
13961401
13971402 fn run ( self , builder : & Builder < ' _ > ) -> Option < GeneratedTarball > {
1398- if builder. config . dry_run ( ) {
1399- return None ;
1400- }
1401-
14021403 // This prevents rustc_codegen_cranelift from being built for "dist"
14031404 // or "install" on the stable/beta channels. It is not yet stable and
14041405 // should not be included.
14051406 if !builder. build . unstable_features ( ) {
14061407 return None ;
14071408 }
14081409
1409- if !builder. config . codegen_backends ( self . compiler . host ) . contains ( & self . backend ) {
1410- return None ;
1411- }
1412-
1413- if self . backend . is_cranelift ( ) && !target_supports_cranelift_backend ( self . compiler . host ) {
1410+ let target = self . build_compiler . host ;
1411+ let compilers =
1412+ RustcPrivateCompilers :: from_build_compiler ( builder, self . build_compiler , target) ;
1413+ if !target_supports_cranelift_backend ( target) {
14141414 builder. info ( "target not supported by rustc_codegen_cranelift. skipping" ) ;
14151415 return None ;
14161416 }
14171417
1418- let compiler = self . compiler ;
1419- let backend = self . backend ;
1418+ let mut tarball = Tarball :: new ( builder, & "rustc-codegen-cranelift" , & target. triple ) ;
1419+ tarball. set_overlay ( OverlayKind :: RustcCodegenCranelift ) ;
1420+ tarball. is_preview ( true ) ;
1421+ tarball. add_legal_and_readme_to ( "share/doc/rustc_codegen_cranelift" ) ;
14201422
1421- let mut tarball = Tarball :: new (
1422- builder,
1423- & format ! ( "rustc-codegen-{}" , backend. name( ) ) ,
1424- & compiler. host . triple ,
1425- ) ;
1426- if backend. is_cranelift ( ) {
1427- tarball. set_overlay ( OverlayKind :: RustcCodegenCranelift ) ;
1428- } else {
1429- panic ! ( "Unknown codegen backend {}" , backend. name( ) ) ;
1423+ builder. ensure ( compile:: CraneliftCodegenBackend { compilers } ) ;
1424+
1425+ if builder. config . dry_run ( ) {
1426+ return None ;
14301427 }
1431- tarball. is_preview ( true ) ;
1432- tarball. add_legal_and_readme_to ( format ! ( "share/doc/{}" , backend. crate_name( ) ) ) ;
14331428
1434- let src = builder. sysroot ( compiler ) ;
1435- let backends_src = builder. sysroot_codegen_backends ( compiler ) ;
1429+ let src = builder. sysroot ( self . build_compiler ) ;
1430+ let backends_src = builder. sysroot_codegen_backends ( self . build_compiler ) ;
14361431 let backends_rel = backends_src
14371432 . strip_prefix ( src)
14381433 . unwrap ( )
1439- . strip_prefix ( builder. sysroot_libdir_relative ( compiler ) )
1434+ . strip_prefix ( builder. sysroot_libdir_relative ( self . build_compiler ) )
14401435 . unwrap ( ) ;
14411436 // Don't use custom libdir here because ^lib/ will be resolved again with installer
14421437 let backends_dst = PathBuf :: from ( "lib" ) . join ( backends_rel) ;
14431438
1444- let backend_name = backend. crate_name ( ) ;
14451439 let mut found_backend = false ;
14461440 for backend in fs:: read_dir ( & backends_src) . unwrap ( ) {
14471441 let file_name = backend. unwrap ( ) . file_name ( ) ;
1448- if file_name. to_str ( ) . unwrap ( ) . contains ( & backend_name ) {
1442+ if file_name. to_str ( ) . unwrap ( ) . contains ( "rustc_codegen_cranelift" ) {
14491443 tarball. add_file (
14501444 backends_src. join ( file_name) ,
14511445 & backends_dst,
@@ -1458,6 +1452,13 @@ impl Step for CodegenBackend {
14581452
14591453 Some ( tarball. generate ( ) )
14601454 }
1455+
1456+ fn metadata ( & self ) -> Option < StepMetadata > {
1457+ Some (
1458+ StepMetadata :: dist ( "rustc_codegen_cranelift" , self . build_compiler . host )
1459+ . built_by ( self . build_compiler ) ,
1460+ )
1461+ }
14611462}
14621463
14631464#[ derive( Debug , Clone , Hash , PartialEq , Eq ) ]
@@ -1568,9 +1569,8 @@ impl Step for Extended {
15681569 add_component ! ( "clippy" => Clippy { build_compiler: compiler, target } ) ;
15691570 add_component ! ( "miri" => Miri { build_compiler: compiler, target } ) ;
15701571 add_component ! ( "analysis" => Analysis { compiler, target } ) ;
1571- add_component ! ( "rustc-codegen-cranelift" => CodegenBackend {
1572- compiler: builder. compiler( stage, target) ,
1573- backend: CodegenBackendKind :: Cranelift ,
1572+ add_component ! ( "rustc-codegen-cranelift" => CraneliftCodegenBackend {
1573+ build_compiler: compiler,
15741574 } ) ;
15751575 add_component ! ( "llvm-bitcode-linker" => LlvmBitcodeLinker {
15761576 build_compiler: compiler,
0 commit comments