@@ -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 < ' _ > ) {
@@ -68,40 +58,20 @@ impl Step for Std {
68
58
69
59
builder. require_submodule ( "library/stdarch" , None ) ;
70
60
71
- let stage = self . custom_stage . unwrap_or ( builder. top_stage ) ;
72
-
61
+ let stage = builder. top_stage ;
73
62
let target = self . target ;
74
- let compiler = builder. compiler ( stage, builder. config . host_target ) ;
75
-
76
- if stage == 0 {
77
- let mut is_explicitly_called =
78
- builder. paths . iter ( ) . any ( |p| p. starts_with ( "library" ) || p. starts_with ( "std" ) ) ;
79
-
80
- if !is_explicitly_called {
81
- for c in Std :: CRATE_OR_DEPS {
82
- is_explicitly_called = builder. paths . iter ( ) . any ( |p| p. starts_with ( c) ) ;
83
- }
84
- }
85
-
86
- if is_explicitly_called {
87
- eprintln ! ( "WARNING: stage 0 std is precompiled and does nothing during `x check`." ) ;
88
- }
89
-
90
- // Reuse the stage0 libstd
91
- builder. std ( compiler, target) ;
92
- return ;
93
- }
63
+ let build_compiler = builder. compiler ( stage, builder. config . host_target ) ;
94
64
95
65
let mut cargo = builder:: Cargo :: new (
96
66
builder,
97
- compiler ,
67
+ build_compiler ,
98
68
Mode :: Std ,
99
69
SourceType :: InTree ,
100
70
target,
101
71
Kind :: Check ,
102
72
) ;
103
73
104
- std_cargo ( builder, target, compiler . stage , & mut cargo) ;
74
+ std_cargo ( builder, target, build_compiler . stage , & mut cargo) ;
105
75
if matches ! ( builder. config. cmd, Subcommand :: Fix ) {
106
76
// By default, cargo tries to fix all targets. Tell it not to fix tests until we've added `test` to the sysroot.
107
77
cargo. arg ( "--lib" ) ;
@@ -117,16 +87,9 @@ impl Step for Std {
117
87
Some ( stage) ,
118
88
) ;
119
89
120
- let stamp = build_stamp:: libstd_stamp ( builder, compiler , target) . with_prefix ( "check" ) ;
90
+ let stamp = build_stamp:: libstd_stamp ( builder, build_compiler , target) . with_prefix ( "check" ) ;
121
91
run_cargo ( builder, cargo, builder. config . free_args . clone ( ) , & stamp, vec ! [ ] , true , false ) ;
122
92
123
- // We skip populating the sysroot in non-zero stage because that'll lead
124
- // to rlib/rmeta conflicts if std gets built during this session.
125
- if compiler. stage == 0 {
126
- let libdir = builder. sysroot_target_libdir ( compiler, target) ;
127
- let hostdir = builder. sysroot_target_libdir ( compiler, compiler. host ) ;
128
- add_to_sysroot ( builder, & libdir, & hostdir, & stamp) ;
129
- }
130
93
drop ( _guard) ;
131
94
132
95
// don't check test dependencies if we haven't built libtest
@@ -142,21 +105,14 @@ impl Step for Std {
142
105
// Currently only the "libtest" tree of crates does this.
143
106
let mut cargo = builder:: Cargo :: new (
144
107
builder,
145
- compiler ,
108
+ build_compiler ,
146
109
Mode :: Std ,
147
110
SourceType :: InTree ,
148
111
target,
149
112
Kind :: Check ,
150
113
) ;
151
114
152
- // If we're not in stage 0, tests and examples will fail to compile
153
- // from `core` definitions being loaded from two different `libcore`
154
- // .rmeta and .rlib files.
155
- if compiler. stage == 0 {
156
- cargo. arg ( "--all-targets" ) ;
157
- }
158
-
159
- std_cargo ( builder, target, compiler. stage , & mut cargo) ;
115
+ std_cargo ( builder, target, build_compiler. stage , & mut cargo) ;
160
116
161
117
// Explicitly pass -p for all dependencies krates -- this will force cargo
162
118
// to also check the tests/benches/examples for these crates, rather
@@ -165,7 +121,8 @@ impl Step for Std {
165
121
cargo. arg ( "-p" ) . arg ( krate) ;
166
122
}
167
123
168
- let stamp = build_stamp:: libstd_stamp ( builder, compiler, target) . with_prefix ( "check-test" ) ;
124
+ let stamp =
125
+ build_stamp:: libstd_stamp ( builder, build_compiler, target) . with_prefix ( "check-test" ) ;
169
126
let _guard = builder. msg_check ( "library test/bench/example targets" , target, Some ( stage) ) ;
170
127
run_cargo ( builder, cargo, builder. config . free_args . clone ( ) , & stamp, vec ! [ ] , true , false ) ;
171
128
}
0 commit comments