@@ -20,16 +20,13 @@ pub struct Std {
20
20
///
21
21
/// [`compile::Rustc`]: crate::core::build_steps::compile::Rustc
22
22
crates : Vec < String > ,
23
- /// Never use this from outside calls. It is intended for internal use only within `check::Std::make_run`
24
- /// and `check::Std::run`.
25
- custom_stage : Option < u32 > ,
26
23
}
27
24
28
25
impl Std {
29
26
const CRATE_OR_DEPS : & [ & str ] = & [ "sysroot" , "coretests" , "alloctests" ] ;
30
27
31
28
pub fn new ( target : TargetSelection ) -> Self {
32
- Self { target, crates : vec ! [ ] , custom_stage : None }
29
+ Self { target, crates : vec ! [ ] }
33
30
}
34
31
}
35
32
@@ -48,14 +45,7 @@ impl Step for Std {
48
45
49
46
fn make_run ( run : RunConfig < ' _ > ) {
50
47
let crates = std_crates_for_run_make ( & run) ;
51
-
52
- let stage = if run. builder . config . is_explicit_stage ( ) || run. builder . top_stage >= 1 {
53
- run. builder . top_stage
54
- } else {
55
- 1
56
- } ;
57
-
58
- run. builder . ensure ( Std { target : run. target , crates, custom_stage : Some ( stage) } ) ;
48
+ run. builder . ensure ( Std { target : run. target , crates } ) ;
59
49
}
60
50
61
51
fn run ( self , builder : & Builder < ' _ > ) {
@@ -66,40 +56,20 @@ impl Step for Std {
66
56
return ;
67
57
}
68
58
69
- let stage = self . custom_stage . unwrap_or ( builder. top_stage ) ;
70
-
59
+ let stage = builder. top_stage ;
71
60
let target = self . target ;
72
- let compiler = builder. compiler ( stage, builder. config . host_target ) ;
73
-
74
- if stage == 0 {
75
- let mut is_explicitly_called =
76
- builder. paths . iter ( ) . any ( |p| p. starts_with ( "library" ) || p. starts_with ( "std" ) ) ;
77
-
78
- if !is_explicitly_called {
79
- for c in Std :: CRATE_OR_DEPS {
80
- is_explicitly_called = builder. paths . iter ( ) . any ( |p| p. starts_with ( c) ) ;
81
- }
82
- }
83
-
84
- if is_explicitly_called {
85
- eprintln ! ( "WARNING: stage 0 std is precompiled and does nothing during `x check`." ) ;
86
- }
87
-
88
- // Reuse the stage0 libstd
89
- builder. std ( compiler, target) ;
90
- return ;
91
- }
61
+ let build_compiler = builder. compiler ( stage, builder. config . host_target ) ;
92
62
93
63
let mut cargo = builder:: Cargo :: new (
94
64
builder,
95
- compiler ,
65
+ build_compiler ,
96
66
Mode :: Std ,
97
67
SourceType :: InTree ,
98
68
target,
99
69
Kind :: Check ,
100
70
) ;
101
71
102
- std_cargo ( builder, target, compiler . stage , & mut cargo) ;
72
+ std_cargo ( builder, target, build_compiler . stage , & mut cargo) ;
103
73
if matches ! ( builder. config. cmd, Subcommand :: Fix ) {
104
74
// By default, cargo tries to fix all targets. Tell it not to fix tests until we've added `test` to the sysroot.
105
75
cargo. arg ( "--lib" ) ;
@@ -115,16 +85,9 @@ impl Step for Std {
115
85
Some ( stage) ,
116
86
) ;
117
87
118
- let stamp = build_stamp:: libstd_stamp ( builder, compiler , target) . with_prefix ( "check" ) ;
88
+ let stamp = build_stamp:: libstd_stamp ( builder, build_compiler , target) . with_prefix ( "check" ) ;
119
89
run_cargo ( builder, cargo, builder. config . free_args . clone ( ) , & stamp, vec ! [ ] , true , false ) ;
120
90
121
- // We skip populating the sysroot in non-zero stage because that'll lead
122
- // to rlib/rmeta conflicts if std gets built during this session.
123
- if compiler. stage == 0 {
124
- let libdir = builder. sysroot_target_libdir ( compiler, target) ;
125
- let hostdir = builder. sysroot_target_libdir ( compiler, compiler. host ) ;
126
- add_to_sysroot ( builder, & libdir, & hostdir, & stamp) ;
127
- }
128
91
drop ( _guard) ;
129
92
130
93
// don't check test dependencies if we haven't built libtest
@@ -140,21 +103,14 @@ impl Step for Std {
140
103
// Currently only the "libtest" tree of crates does this.
141
104
let mut cargo = builder:: Cargo :: new (
142
105
builder,
143
- compiler ,
106
+ build_compiler ,
144
107
Mode :: Std ,
145
108
SourceType :: InTree ,
146
109
target,
147
110
Kind :: Check ,
148
111
) ;
149
112
150
- // If we're not in stage 0, tests and examples will fail to compile
151
- // from `core` definitions being loaded from two different `libcore`
152
- // .rmeta and .rlib files.
153
- if compiler. stage == 0 {
154
- cargo. arg ( "--all-targets" ) ;
155
- }
156
-
157
- std_cargo ( builder, target, compiler. stage , & mut cargo) ;
113
+ std_cargo ( builder, target, build_compiler. stage , & mut cargo) ;
158
114
159
115
// Explicitly pass -p for all dependencies krates -- this will force cargo
160
116
// to also check the tests/benches/examples for these crates, rather
@@ -163,7 +119,8 @@ impl Step for Std {
163
119
cargo. arg ( "-p" ) . arg ( krate) ;
164
120
}
165
121
166
- let stamp = build_stamp:: libstd_stamp ( builder, compiler, target) . with_prefix ( "check-test" ) ;
122
+ let stamp =
123
+ build_stamp:: libstd_stamp ( builder, build_compiler, target) . with_prefix ( "check-test" ) ;
167
124
let _guard = builder. msg_check ( "library test/bench/example targets" , target, Some ( stage) ) ;
168
125
run_cargo ( builder, cargo, builder. config . free_args . clone ( ) , & stamp, vec ! [ ] , true , false ) ;
169
126
}
0 commit comments