@@ -2943,3 +2943,129 @@ impl Step for TestHelpers {
29432943 . compile ( "rust_test_helpers" ) ;
29442944 }
29452945}
2946+
2947+ #[ derive( Debug , Clone , PartialEq , Eq , Hash ) ]
2948+ pub struct CodegenCranelift {
2949+ compiler : Compiler ,
2950+ target : TargetSelection ,
2951+ }
2952+
2953+ impl Step for CodegenCranelift {
2954+ type Output = ( ) ;
2955+ const DEFAULT : bool = true ;
2956+ const ONLY_HOSTS : bool = true ;
2957+
2958+ fn should_run ( run : ShouldRun < ' _ > ) -> ShouldRun < ' _ > {
2959+ run. paths ( & [ "compiler/rustc_codegen_cranelift" ] )
2960+ }
2961+
2962+ fn make_run ( run : RunConfig < ' _ > ) {
2963+ let builder = run. builder ;
2964+ let host = run. build_triple ( ) ;
2965+ let compiler = run. builder . compiler_for ( run. builder . top_stage , host, host) ;
2966+
2967+ if builder. kind != Kind :: Test {
2968+ return ;
2969+ }
2970+
2971+ if builder. doc_tests == DocTests :: Only {
2972+ return ;
2973+ }
2974+
2975+ let triple = run. target . triple ;
2976+ let target_supported = if triple. contains ( "linux" ) {
2977+ triple. contains ( "x86_64" ) || triple. contains ( "aarch64" ) || triple. contains ( "s390x" )
2978+ } else if triple. contains ( "darwin" ) || triple. contains ( "windows" ) {
2979+ triple. contains ( "x86_64" )
2980+ } else {
2981+ false
2982+ } ;
2983+ if !target_supported {
2984+ builder. info ( "target not supported by rustc_codegen_cranelift. skipping" ) ;
2985+ return ;
2986+ }
2987+
2988+ if builder. remote_tested ( run. target ) {
2989+ builder. info ( "remote testing is not supported by rustc_codegen_cranelift. skipping" ) ;
2990+ return ;
2991+ }
2992+
2993+ if !builder. config . rust_codegen_backends . contains ( & INTERNER . intern_str ( "cranelift" ) ) {
2994+ builder. info ( "cranelift not in rust.codegen-backends. skipping" ) ;
2995+ return ;
2996+ }
2997+
2998+ builder. ensure ( CodegenCranelift { compiler, target : run. target } ) ;
2999+ }
3000+
3001+ fn run ( self , builder : & Builder < ' _ > ) {
3002+ let compiler = self . compiler ;
3003+ let target = self . target ;
3004+
3005+ builder. ensure ( compile:: Std :: new ( compiler, target) ) ;
3006+
3007+ // If we're not doing a full bootstrap but we're testing a stage2
3008+ // version of libstd, then what we're actually testing is the libstd
3009+ // produced in stage1. Reflect that here by updating the compiler that
3010+ // we're working with automatically.
3011+ let compiler = builder. compiler_for ( compiler. stage , compiler. host , target) ;
3012+
3013+ let build_cargo = || {
3014+ let mut cargo = builder. cargo (
3015+ compiler,
3016+ Mode :: Codegen , // Must be codegen to ensure dlopen on compiled dylibs works
3017+ SourceType :: InTree ,
3018+ target,
3019+ "run" ,
3020+ ) ;
3021+ cargo. current_dir ( & builder. src . join ( "compiler/rustc_codegen_cranelift" ) ) ;
3022+ cargo
3023+ . arg ( "--manifest-path" )
3024+ . arg ( builder. src . join ( "compiler/rustc_codegen_cranelift/build_system/Cargo.toml" ) ) ;
3025+ compile:: rustc_cargo_env ( builder, & mut cargo, target, compiler. stage ) ;
3026+
3027+ // Avoid incremental cache issues when changing rustc
3028+ cargo. env ( "CARGO_BUILD_INCREMENTAL" , "false" ) ;
3029+
3030+ cargo
3031+ } ;
3032+
3033+ builder. info ( & format ! (
3034+ "{} cranelift stage{} ({} -> {})" ,
3035+ Kind :: Test . description( ) ,
3036+ compiler. stage,
3037+ & compiler. host,
3038+ target
3039+ ) ) ;
3040+ let _time = util:: timeit ( & builder) ;
3041+
3042+ // FIXME handle vendoring for source tarballs before removing the --skip-test below
3043+ let download_dir = builder. out . join ( "cg_clif_download" ) ;
3044+
3045+ let mut prepare_cargo = build_cargo ( ) ;
3046+ prepare_cargo. arg ( "--" ) . arg ( "prepare" ) . arg ( "--download-dir" ) . arg ( & download_dir) ;
3047+ try_run ( builder, & mut prepare_cargo. into ( ) ) ;
3048+
3049+ let mut cargo = build_cargo ( ) ;
3050+ cargo
3051+ . arg ( "--" )
3052+ . arg ( "test" )
3053+ . arg ( "--download-dir" )
3054+ . arg ( & download_dir)
3055+ . arg ( "--out-dir" )
3056+ . arg ( builder. stage_out ( compiler, Mode :: ToolRustc ) . join ( "cg_clif" ) )
3057+ . arg ( "--no-unstable-features" )
3058+ . arg ( "--use-backend" )
3059+ . arg ( "cranelift" )
3060+ // Avoid having to vendor the standard library dependencies
3061+ . arg ( "--sysroot" )
3062+ . arg ( "llvm" )
3063+ // These tests depend on crates that are not yet vendored
3064+ // FIXME remove once vendoring is handled
3065+ . arg ( "--skip-test" )
3066+ . arg ( "testsuite.extended_sysroot" ) ;
3067+ cargo. args ( builder. config . test_args ( ) ) ;
3068+
3069+ try_run ( builder, & mut cargo. into ( ) ) ;
3070+ }
3071+ }
0 commit comments