@@ -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