@@ -696,7 +696,7 @@ impl Step for Rustc {
696
696
) ) ;
697
697
698
698
let mut cargo = builder. cargo ( compiler, Mode :: Rustc , SourceType :: InTree , target, "build" ) ;
699
- rustc_cargo ( builder, & mut cargo, target) ;
699
+ rustc_cargo ( builder, & mut cargo, target, compiler . stage ) ;
700
700
701
701
if builder. config . rust_profile_use . is_some ( )
702
702
&& builder. config . rust_profile_generate . is_some ( )
@@ -813,16 +813,21 @@ impl Step for Rustc {
813
813
}
814
814
}
815
815
816
- pub fn rustc_cargo ( builder : & Builder < ' _ > , cargo : & mut Cargo , target : TargetSelection ) {
816
+ pub fn rustc_cargo ( builder : & Builder < ' _ > , cargo : & mut Cargo , target : TargetSelection , stage : u32 ) {
817
817
cargo
818
818
. arg ( "--features" )
819
819
. arg ( builder. rustc_features ( builder. kind ) )
820
820
. arg ( "--manifest-path" )
821
821
. arg ( builder. src . join ( "compiler/rustc/Cargo.toml" ) ) ;
822
- rustc_cargo_env ( builder, cargo, target) ;
822
+ rustc_cargo_env ( builder, cargo, target, stage ) ;
823
823
}
824
824
825
- pub fn rustc_cargo_env ( builder : & Builder < ' _ > , cargo : & mut Cargo , target : TargetSelection ) {
825
+ pub fn rustc_cargo_env (
826
+ builder : & Builder < ' _ > ,
827
+ cargo : & mut Cargo ,
828
+ target : TargetSelection ,
829
+ stage : u32 ,
830
+ ) {
826
831
// Set some configuration variables picked up by build scripts and
827
832
// the compiler alike
828
833
cargo
@@ -867,16 +872,18 @@ pub fn rustc_cargo_env(builder: &Builder<'_>, cargo: &mut Cargo, target: TargetS
867
872
cargo. env ( "RUSTC_VERIFY_LLVM_IR" , "1" ) ;
868
873
}
869
874
870
- //
871
875
// Note that this is disabled if LLVM itself is disabled or we're in a check
872
876
// build. If we are in a check build we still go ahead here presuming we've
873
877
// detected that LLVM is already built and good to go which helps prevent
874
878
// busting caches (e.g. like #71152).
875
- if builder. config . llvm_enabled ( )
876
- && ( builder. kind != Kind :: Check
877
- || crate :: llvm:: prebuilt_llvm_config ( builder, target) . is_ok ( ) )
878
- {
879
- rustc_llvm_env ( builder, cargo, target)
879
+ if builder. config . llvm_enabled ( ) {
880
+ let building_is_expensive = crate :: llvm:: prebuilt_llvm_config ( builder, target) . is_err ( ) ;
881
+ // `top_stage == stage` might be false for `check --stage 1`, if we are building the stage 1 compiler
882
+ let can_skip_build = builder. kind == Kind :: Check && builder. top_stage == stage;
883
+ let should_skip_build = building_is_expensive && can_skip_build;
884
+ if !should_skip_build {
885
+ rustc_llvm_env ( builder, cargo, target)
886
+ }
880
887
}
881
888
}
882
889
@@ -933,13 +940,8 @@ fn rustc_llvm_env(builder: &Builder<'_>, cargo: &mut Cargo, target: TargetSelect
933
940
&& !target. contains ( "apple" )
934
941
&& !target. contains ( "solaris" )
935
942
{
936
- let file = compiler_file (
937
- builder,
938
- builder. cxx ( target) . unwrap ( ) ,
939
- target,
940
- CLang :: Cxx ,
941
- "libstdc++.a" ,
942
- ) ;
943
+ let file =
944
+ compiler_file ( builder, builder. cxx ( target) . unwrap ( ) , target, CLang :: Cxx , "libstdc++.a" ) ;
943
945
cargo. env ( "LLVM_STATIC_STDCPP" , file) ;
944
946
}
945
947
if builder. llvm_link_shared ( ) {
@@ -1054,7 +1056,7 @@ impl Step for CodegenBackend {
1054
1056
cargo
1055
1057
. arg ( "--manifest-path" )
1056
1058
. arg ( builder. src . join ( format ! ( "compiler/rustc_codegen_{}/Cargo.toml" , backend) ) ) ;
1057
- rustc_cargo_env ( builder, & mut cargo, target) ;
1059
+ rustc_cargo_env ( builder, & mut cargo, target, compiler . stage ) ;
1058
1060
1059
1061
let tmp_stamp = out_dir. join ( ".tmp.stamp" ) ;
1060
1062
0 commit comments