@@ -1389,85 +1389,79 @@ impl Step for Miri {
1389
1389
}
1390
1390
1391
1391
#[ derive( Debug , Clone , Hash , PartialEq , Eq ) ]
1392
- pub struct CodegenBackend {
1393
- pub compiler : Compiler ,
1394
- pub backend : CodegenBackendKind ,
1392
+ pub struct CraneliftCodegenBackend {
1393
+ pub build_compiler : Compiler ,
1395
1394
}
1396
1395
1397
- impl Step for CodegenBackend {
1396
+ impl Step for CraneliftCodegenBackend {
1398
1397
type Output = Option < GeneratedTarball > ;
1399
1398
const DEFAULT : bool = true ;
1400
1399
const ONLY_HOSTS : bool = true ;
1401
1400
1402
1401
fn should_run ( run : ShouldRun < ' _ > ) -> ShouldRun < ' _ > {
1403
- run. path ( "compiler/rustc_codegen_cranelift" )
1402
+ // We only want to build the cranelift backend in `x dist` if the backend was enabled
1403
+ // in rust.codegen-backends.
1404
+ // Sadly, we don't have access to the actual for which we're disting clif here..
1405
+ // So we just use the host target.
1406
+ let clif_enabled_by_default = run
1407
+ . builder
1408
+ . config
1409
+ . codegen_backends ( run. builder . host_target )
1410
+ . contains ( & CodegenBackendKind :: Cranelift ) ;
1411
+ run. alias ( "rustc_codegen_cranelift" ) . default_condition ( clif_enabled_by_default)
1404
1412
}
1405
1413
1406
1414
fn make_run ( run : RunConfig < ' _ > ) {
1407
- for backend in run. builder . config . codegen_backends ( run. target ) {
1408
- if backend. is_llvm ( ) {
1409
- continue ; // Already built as part of rustc
1410
- }
1411
-
1412
- run. builder . ensure ( CodegenBackend {
1413
- compiler : run. builder . compiler ( run. builder . top_stage , run. target ) ,
1414
- backend : backend. clone ( ) ,
1415
- } ) ;
1416
- }
1415
+ run. builder . ensure ( CraneliftCodegenBackend {
1416
+ build_compiler : run. builder . compiler_for (
1417
+ run. builder . top_stage ,
1418
+ run. builder . config . host_target ,
1419
+ run. target ,
1420
+ ) ,
1421
+ } ) ;
1417
1422
}
1418
1423
1419
1424
fn run ( self , builder : & Builder < ' _ > ) -> Option < GeneratedTarball > {
1420
- if builder. config . dry_run ( ) {
1421
- return None ;
1422
- }
1423
-
1424
1425
// This prevents rustc_codegen_cranelift from being built for "dist"
1425
1426
// or "install" on the stable/beta channels. It is not yet stable and
1426
1427
// should not be included.
1427
1428
if !builder. build . unstable_features ( ) {
1428
1429
return None ;
1429
1430
}
1430
1431
1431
- if !builder. config . codegen_backends ( self . compiler . host ) . contains ( & self . backend ) {
1432
- return None ;
1433
- }
1434
-
1435
- if self . backend . is_cranelift ( ) && !target_supports_cranelift_backend ( self . compiler . host ) {
1432
+ let target = self . build_compiler . host ;
1433
+ let compilers =
1434
+ RustcPrivateCompilers :: from_build_compiler ( builder, self . build_compiler , target) ;
1435
+ if !target_supports_cranelift_backend ( target) {
1436
1436
builder. info ( "target not supported by rustc_codegen_cranelift. skipping" ) ;
1437
1437
return None ;
1438
1438
}
1439
1439
1440
- let compiler = self . compiler ;
1441
- let backend = self . backend ;
1440
+ let mut tarball = Tarball :: new ( builder, & "rustc-codegen-cranelift" , & target. triple ) ;
1441
+ tarball. set_overlay ( OverlayKind :: RustcCodegenCranelift ) ;
1442
+ tarball. is_preview ( true ) ;
1443
+ tarball. add_legal_and_readme_to ( "share/doc/rustc_codegen_cranelift" ) ;
1442
1444
1443
- let mut tarball = Tarball :: new (
1444
- builder,
1445
- & format ! ( "rustc-codegen-{}" , backend. name( ) ) ,
1446
- & compiler. host . triple ,
1447
- ) ;
1448
- if backend. is_cranelift ( ) {
1449
- tarball. set_overlay ( OverlayKind :: RustcCodegenCranelift ) ;
1450
- } else {
1451
- panic ! ( "Unknown codegen backend {}" , backend. name( ) ) ;
1445
+ builder. ensure ( compile:: CraneliftCodegenBackend { compilers } ) ;
1446
+
1447
+ if builder. config . dry_run ( ) {
1448
+ return None ;
1452
1449
}
1453
- tarball. is_preview ( true ) ;
1454
- tarball. add_legal_and_readme_to ( format ! ( "share/doc/{}" , backend. crate_name( ) ) ) ;
1455
1450
1456
- let src = builder. sysroot ( compiler ) ;
1457
- let backends_src = builder. sysroot_codegen_backends ( compiler ) ;
1451
+ let src = builder. sysroot ( self . build_compiler ) ;
1452
+ let backends_src = builder. sysroot_codegen_backends ( self . build_compiler ) ;
1458
1453
let backends_rel = backends_src
1459
1454
. strip_prefix ( src)
1460
1455
. unwrap ( )
1461
- . strip_prefix ( builder. sysroot_libdir_relative ( compiler ) )
1456
+ . strip_prefix ( builder. sysroot_libdir_relative ( self . build_compiler ) )
1462
1457
. unwrap ( ) ;
1463
1458
// Don't use custom libdir here because ^lib/ will be resolved again with installer
1464
1459
let backends_dst = PathBuf :: from ( "lib" ) . join ( backends_rel) ;
1465
1460
1466
- let backend_name = backend. crate_name ( ) ;
1467
1461
let mut found_backend = false ;
1468
1462
for backend in fs:: read_dir ( & backends_src) . unwrap ( ) {
1469
1463
let file_name = backend. unwrap ( ) . file_name ( ) ;
1470
- if file_name. to_str ( ) . unwrap ( ) . contains ( & backend_name ) {
1464
+ if file_name. to_str ( ) . unwrap ( ) . contains ( "rustc_codegen_cranelift" ) {
1471
1465
tarball. add_file (
1472
1466
backends_src. join ( file_name) ,
1473
1467
& backends_dst,
@@ -1480,6 +1474,13 @@ impl Step for CodegenBackend {
1480
1474
1481
1475
Some ( tarball. generate ( ) )
1482
1476
}
1477
+
1478
+ fn metadata ( & self ) -> Option < StepMetadata > {
1479
+ Some (
1480
+ StepMetadata :: dist ( "rustc_codegen_cranelift" , self . build_compiler . host )
1481
+ . built_by ( self . build_compiler ) ,
1482
+ )
1483
+ }
1483
1484
}
1484
1485
1485
1486
#[ derive( Debug , Clone , Hash , PartialEq , Eq ) ]
@@ -1590,9 +1591,8 @@ impl Step for Extended {
1590
1591
add_component ! ( "clippy" => Clippy { build_compiler: compiler, target } ) ;
1591
1592
add_component ! ( "miri" => Miri { build_compiler: compiler, target } ) ;
1592
1593
add_component ! ( "analysis" => Analysis { compiler, target } ) ;
1593
- add_component ! ( "rustc-codegen-cranelift" => CodegenBackend {
1594
- compiler: builder. compiler( stage, target) ,
1595
- backend: CodegenBackendKind :: Cranelift ,
1594
+ add_component ! ( "rustc-codegen-cranelift" => CraneliftCodegenBackend {
1595
+ build_compiler: compiler,
1596
1596
} ) ;
1597
1597
add_component ! ( "llvm-bitcode-linker" => LlvmBitcodeLinker {
1598
1598
build_compiler: compiler,
0 commit comments