@@ -1367,85 +1367,79 @@ impl Step for Miri {
1367
1367
}
1368
1368
1369
1369
#[ 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 ,
1373
1372
}
1374
1373
1375
- impl Step for CodegenBackend {
1374
+ impl Step for CraneliftCodegenBackend {
1376
1375
type Output = Option < GeneratedTarball > ;
1377
1376
const DEFAULT : bool = true ;
1378
1377
const ONLY_HOSTS : bool = true ;
1379
1378
1380
1379
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)
1382
1390
}
1383
1391
1384
1392
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
+ } ) ;
1395
1400
}
1396
1401
1397
1402
fn run ( self , builder : & Builder < ' _ > ) -> Option < GeneratedTarball > {
1398
- if builder. config . dry_run ( ) {
1399
- return None ;
1400
- }
1401
-
1402
1403
// This prevents rustc_codegen_cranelift from being built for "dist"
1403
1404
// or "install" on the stable/beta channels. It is not yet stable and
1404
1405
// should not be included.
1405
1406
if !builder. build . unstable_features ( ) {
1406
1407
return None ;
1407
1408
}
1408
1409
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) {
1414
1414
builder. info ( "target not supported by rustc_codegen_cranelift. skipping" ) ;
1415
1415
return None ;
1416
1416
}
1417
1417
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" ) ;
1420
1422
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 ;
1430
1427
}
1431
- tarball. is_preview ( true ) ;
1432
- tarball. add_legal_and_readme_to ( format ! ( "share/doc/{}" , backend. crate_name( ) ) ) ;
1433
1428
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 ) ;
1436
1431
let backends_rel = backends_src
1437
1432
. strip_prefix ( src)
1438
1433
. unwrap ( )
1439
- . strip_prefix ( builder. sysroot_libdir_relative ( compiler ) )
1434
+ . strip_prefix ( builder. sysroot_libdir_relative ( self . build_compiler ) )
1440
1435
. unwrap ( ) ;
1441
1436
// Don't use custom libdir here because ^lib/ will be resolved again with installer
1442
1437
let backends_dst = PathBuf :: from ( "lib" ) . join ( backends_rel) ;
1443
1438
1444
- let backend_name = backend. crate_name ( ) ;
1445
1439
let mut found_backend = false ;
1446
1440
for backend in fs:: read_dir ( & backends_src) . unwrap ( ) {
1447
1441
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" ) {
1449
1443
tarball. add_file (
1450
1444
backends_src. join ( file_name) ,
1451
1445
& backends_dst,
@@ -1458,6 +1452,13 @@ impl Step for CodegenBackend {
1458
1452
1459
1453
Some ( tarball. generate ( ) )
1460
1454
}
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
+ }
1461
1462
}
1462
1463
1463
1464
#[ derive( Debug , Clone , Hash , PartialEq , Eq ) ]
@@ -1568,9 +1569,8 @@ impl Step for Extended {
1568
1569
add_component ! ( "clippy" => Clippy { build_compiler: compiler, target } ) ;
1569
1570
add_component ! ( "miri" => Miri { build_compiler: compiler, target } ) ;
1570
1571
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,
1574
1574
} ) ;
1575
1575
add_component ! ( "llvm-bitcode-linker" => LlvmBitcodeLinker {
1576
1576
build_compiler: compiler,
0 commit comments