@@ -31,6 +31,8 @@ pub struct Std {
31
31
}
32
32
33
33
impl Std {
34
+ const CRATE_OR_DEPS : & [ & str ] = & [ "sysroot" , "coretests" , "alloctests" ] ;
35
+
34
36
pub fn new ( target : TargetSelection ) -> Self {
35
37
Self { target, crates : vec ! [ ] , override_build_kind : None }
36
38
}
@@ -46,12 +48,19 @@ impl Step for Std {
46
48
const DEFAULT : bool = true ;
47
49
48
50
fn should_run ( run : ShouldRun < ' _ > ) -> ShouldRun < ' _ > {
49
- let stage = run. builder . top_stage ;
50
- run. crate_or_deps ( "sysroot" )
51
- . crate_or_deps ( "coretests" )
52
- . crate_or_deps ( "alloctests" )
53
- . path ( "library" )
54
- . default_condition ( stage != 0 )
51
+ let builder = run. builder ;
52
+ let stage = if builder. config . is_explicit_stage ( ) || builder. top_stage >= 1 {
53
+ builder. top_stage
54
+ } else {
55
+ 1
56
+ } ;
57
+
58
+ let mut run = run;
59
+ for c in Std :: CRATE_OR_DEPS {
60
+ run = run. crate_or_deps ( c) ;
61
+ }
62
+
63
+ run. path ( "library" ) . default_condition ( stage != 0 )
55
64
}
56
65
57
66
fn make_run ( run : RunConfig < ' _ > ) {
@@ -62,10 +71,29 @@ impl Step for Std {
62
71
fn run ( self , builder : & Builder < ' _ > ) {
63
72
builder. require_submodule ( "library/stdarch" , None ) ;
64
73
74
+ let stage = if builder. config . is_explicit_stage ( ) || builder. top_stage >= 1 {
75
+ builder. top_stage
76
+ } else {
77
+ 1
78
+ } ;
79
+
65
80
let target = self . target ;
66
- let compiler = builder. compiler ( builder. top_stage , builder. config . build ) ;
81
+ let compiler = builder. compiler ( stage, builder. config . build ) ;
82
+
83
+ if stage == 0 {
84
+ let mut is_explicitly_called =
85
+ builder. paths . iter ( ) . any ( |p| p. starts_with ( "library" ) || p. starts_with ( "std" ) ) ;
86
+
87
+ if !is_explicitly_called {
88
+ for c in Std :: CRATE_OR_DEPS {
89
+ is_explicitly_called = builder. paths . iter ( ) . any ( |p| p. starts_with ( c) ) ;
90
+ }
91
+ }
92
+
93
+ if is_explicitly_called {
94
+ eprintln ! ( "WARNING: stage 0 std is precompiled and does nothing during `x check`." ) ;
95
+ }
67
96
68
- if builder. top_stage == 0 {
69
97
// Reuse the stage0 libstd
70
98
builder. ensure ( compile:: Std :: new ( compiler, target) ) ;
71
99
return ;
@@ -93,6 +121,7 @@ impl Step for Std {
93
121
let _guard = builder. msg_check (
94
122
format_args ! ( "library artifacts{}" , crate_description( & self . crates) ) ,
95
123
target,
124
+ Some ( stage) ,
96
125
) ;
97
126
98
127
let stamp = build_stamp:: libstd_stamp ( builder, compiler, target) . with_prefix ( "check" ) ;
@@ -145,7 +174,7 @@ impl Step for Std {
145
174
}
146
175
147
176
let stamp = build_stamp:: libstd_stamp ( builder, compiler, target) . with_prefix ( "check-test" ) ;
148
- let _guard = builder. msg_check ( "library test/bench/example targets" , target) ;
177
+ let _guard = builder. msg_check ( "library test/bench/example targets" , target, Some ( stage ) ) ;
149
178
run_cargo ( builder, cargo, builder. config . free_args . clone ( ) , & stamp, vec ! [ ] , true , false ) ;
150
179
}
151
180
}
@@ -246,6 +275,7 @@ impl Step for Rustc {
246
275
let _guard = builder. msg_check (
247
276
format_args ! ( "compiler artifacts{}" , crate_description( & self . crates) ) ,
248
277
target,
278
+ None ,
249
279
) ;
250
280
251
281
let stamp = build_stamp:: librustc_stamp ( builder, compiler, target) . with_prefix ( "check" ) ;
@@ -306,7 +336,7 @@ impl Step for CodegenBackend {
306
336
. arg ( builder. src . join ( format ! ( "compiler/rustc_codegen_{backend}/Cargo.toml" ) ) ) ;
307
337
rustc_cargo_env ( builder, & mut cargo, target, compiler. stage ) ;
308
338
309
- let _guard = builder. msg_check ( backend, target) ;
339
+ let _guard = builder. msg_check ( backend, target, None ) ;
310
340
311
341
let stamp = build_stamp:: codegen_backend_stamp ( builder, compiler, target, backend)
312
342
. with_prefix ( "check" ) ;
@@ -373,7 +403,7 @@ impl Step for RustAnalyzer {
373
403
let stamp = BuildStamp :: new ( & builder. cargo_out ( compiler, Mode :: ToolRustc , target) )
374
404
. with_prefix ( "rust-analyzer-check" ) ;
375
405
376
- let _guard = builder. msg_check ( "rust-analyzer artifacts" , target) ;
406
+ let _guard = builder. msg_check ( "rust-analyzer artifacts" , target, None ) ;
377
407
run_cargo ( builder, cargo, builder. config . free_args . clone ( ) , & stamp, vec ! [ ] , true , false ) ;
378
408
}
379
409
}
@@ -436,7 +466,7 @@ impl Step for Compiletest {
436
466
let stamp = BuildStamp :: new ( & builder. cargo_out ( compiler, mode, self . target ) )
437
467
. with_prefix ( "compiletest-check" ) ;
438
468
439
- let _guard = builder. msg_check ( "compiletest artifacts" , self . target ) ;
469
+ let _guard = builder. msg_check ( "compiletest artifacts" , self . target , None ) ;
440
470
run_cargo ( builder, cargo, builder. config . free_args . clone ( ) , & stamp, vec ! [ ] , true , false ) ;
441
471
}
442
472
}
@@ -514,7 +544,7 @@ fn run_tool_check_step(
514
544
let stamp = BuildStamp :: new ( & builder. cargo_out ( compiler, Mode :: ToolRustc , target) )
515
545
. with_prefix ( & format ! ( "{}-check" , step_type_name. to_lowercase( ) ) ) ;
516
546
517
- let _guard = builder. msg_check ( format ! ( "{display_name} artifacts" ) , target) ;
547
+ let _guard = builder. msg_check ( format ! ( "{display_name} artifacts" ) , target, None ) ;
518
548
run_cargo ( builder, cargo, builder. config . free_args . clone ( ) , & stamp, vec ! [ ] , true , false ) ;
519
549
}
520
550
0 commit comments