@@ -314,41 +314,31 @@ pub fn prepare_compiler_for_check(
314314 }
315315}
316316
317- /// Checks a single codegen backend.
317+ /// Check the Cranelift codegen backend.
318318#[ derive( Debug , Clone , PartialEq , Eq , Hash ) ]
319- pub struct CodegenBackend {
320- pub build_compiler : Compiler ,
321- pub target : TargetSelection ,
322- pub backend : CodegenBackendKind ,
319+ pub struct CraneliftCodegenBackend {
320+ build_compiler : Compiler ,
321+ target : TargetSelection ,
323322}
324323
325- impl Step for CodegenBackend {
324+ impl Step for CraneliftCodegenBackend {
326325 type Output = ( ) ;
326+
327327 const IS_HOST : bool = true ;
328328 const DEFAULT : bool = true ;
329329
330330 fn should_run ( run : ShouldRun < ' _ > ) -> ShouldRun < ' _ > {
331- run. paths ( & [ "compiler/ rustc_codegen_cranelift", "compiler/rustc_codegen_gcc" ] )
331+ run. alias ( " rustc_codegen_cranelift") . alias ( "cg_clif" )
332332 }
333333
334334 fn make_run ( run : RunConfig < ' _ > ) {
335- // FIXME: only check the backend(s) that were actually selected in run.paths
336335 let build_compiler = prepare_compiler_for_check ( run. builder , run. target , Mode :: Codegen ) ;
337- for backend in [ CodegenBackendKind :: Cranelift , CodegenBackendKind :: Gcc ] {
338- run. builder . ensure ( CodegenBackend { build_compiler, target : run. target , backend } ) ;
339- }
336+ run. builder . ensure ( CraneliftCodegenBackend { build_compiler, target : run. target } ) ;
340337 }
341338
342339 fn run ( self , builder : & Builder < ' _ > ) {
343- // FIXME: remove once https://github.com/rust-lang/rust/issues/112393 is resolved
344- if builder. build . config . vendor && self . backend . is_gcc ( ) {
345- println ! ( "Skipping checking of `rustc_codegen_gcc` with vendoring enabled." ) ;
346- return ;
347- }
348-
349340 let build_compiler = self . build_compiler ;
350341 let target = self . target ;
351- let backend = self . backend ;
352342
353343 let mut cargo = builder:: Cargo :: new (
354344 builder,
@@ -361,31 +351,104 @@ impl Step for CodegenBackend {
361351
362352 cargo
363353 . arg ( "--manifest-path" )
364- . arg ( builder. src . join ( format ! ( "compiler/{} /Cargo.toml" , backend . crate_name ( ) ) ) ) ;
354+ . arg ( builder. src . join ( "compiler/rustc_codegen_cranelift /Cargo.toml" ) ) ;
365355 rustc_cargo_env ( builder, & mut cargo, target) ;
366356
367357 let _guard = builder. msg (
368358 Kind :: Check ,
369- backend . crate_name ( ) ,
359+ "rustc_codegen_cranelift" ,
370360 Mode :: Codegen ,
371361 self . build_compiler ,
372362 target,
373363 ) ;
374364
375- let stamp = build_stamp:: codegen_backend_stamp ( builder, build_compiler, target, & backend)
376- . with_prefix ( "check" ) ;
365+ let stamp = build_stamp:: codegen_backend_stamp (
366+ builder,
367+ build_compiler,
368+ target,
369+ & CodegenBackendKind :: Cranelift ,
370+ )
371+ . with_prefix ( "check" ) ;
377372
378373 run_cargo ( builder, cargo, builder. config . free_args . clone ( ) , & stamp, vec ! [ ] , true , false ) ;
379374 }
380375
381376 fn metadata ( & self ) -> Option < StepMetadata > {
382377 Some (
383- StepMetadata :: check ( & self . backend . crate_name ( ) , self . target )
378+ StepMetadata :: check ( "rustc_codegen_cranelift" , self . target )
384379 . built_by ( self . build_compiler ) ,
385380 )
386381 }
387382}
388383
384+ /// Check the GCC codegen backend.
385+ #[ derive( Debug , Clone , PartialEq , Eq , Hash ) ]
386+ pub struct GccCodegenBackend {
387+ build_compiler : Compiler ,
388+ target : TargetSelection ,
389+ }
390+
391+ impl Step for GccCodegenBackend {
392+ type Output = ( ) ;
393+
394+ const IS_HOST : bool = true ;
395+ const DEFAULT : bool = true ;
396+
397+ fn should_run ( run : ShouldRun < ' _ > ) -> ShouldRun < ' _ > {
398+ run. alias ( "rustc_codegen_gcc" ) . alias ( "cg_gcc" )
399+ }
400+
401+ fn make_run ( run : RunConfig < ' _ > ) {
402+ let build_compiler = prepare_compiler_for_check ( run. builder , run. target , Mode :: Codegen ) ;
403+ run. builder . ensure ( GccCodegenBackend { build_compiler, target : run. target } ) ;
404+ }
405+
406+ fn run ( self , builder : & Builder < ' _ > ) {
407+ // FIXME: remove once https://github.com/rust-lang/rust/issues/112393 is resolved
408+ if builder. build . config . vendor {
409+ println ! ( "Skipping checking of `rustc_codegen_gcc` with vendoring enabled." ) ;
410+ return ;
411+ }
412+
413+ let build_compiler = self . build_compiler ;
414+ let target = self . target ;
415+
416+ let mut cargo = builder:: Cargo :: new (
417+ builder,
418+ build_compiler,
419+ Mode :: Codegen ,
420+ SourceType :: InTree ,
421+ target,
422+ builder. kind ,
423+ ) ;
424+
425+ cargo. arg ( "--manifest-path" ) . arg ( builder. src . join ( "compiler/rustc_codegen_gcc/Cargo.toml" ) ) ;
426+ rustc_cargo_env ( builder, & mut cargo, target) ;
427+
428+ let _guard = builder. msg (
429+ Kind :: Check ,
430+ "rustc_codegen_gcc" ,
431+ Mode :: Codegen ,
432+ self . build_compiler ,
433+ target,
434+ ) ;
435+
436+ let stamp = build_stamp:: codegen_backend_stamp (
437+ builder,
438+ build_compiler,
439+ target,
440+ & CodegenBackendKind :: Gcc ,
441+ )
442+ . with_prefix ( "check" ) ;
443+
444+ run_cargo ( builder, cargo, builder. config . free_args . clone ( ) , & stamp, vec ! [ ] , true , false ) ;
445+ }
446+
447+ fn metadata ( & self ) -> Option < StepMetadata > {
448+ Some ( StepMetadata :: check ( "rustc_codegen_gcc" , self . target ) . built_by ( self . build_compiler ) )
449+ }
450+ }
451+
389452macro_rules! tool_check_step {
390453 (
391454 $name: ident {
0 commit comments