@@ -65,17 +65,14 @@ fn is_dir_writable_for_user(dir: &Path) -> bool {
65
65
fn install_sh (
66
66
builder : & Builder < ' _ > ,
67
67
package : & str ,
68
- stage : u32 ,
69
- host : Option < TargetSelection > ,
68
+ build_compiler : impl Into < Option < Compiler > > ,
69
+ target : Option < TargetSelection > ,
70
70
tarball : & GeneratedTarball ,
71
71
) {
72
- let _guard = builder. msg (
73
- Kind :: Install ,
74
- package,
75
- None ,
76
- ( host. unwrap_or ( builder. host_target ) , stage) ,
77
- host,
78
- ) ;
72
+ let _guard = match build_compiler. into ( ) {
73
+ Some ( build_compiler) => builder. msg ( Kind :: Install , package, None , build_compiler, target) ,
74
+ None => builder. msg_unstaged ( Kind :: Install , package, target. unwrap_or ( builder. host_target ) ) ,
75
+ } ;
79
76
80
77
let prefix = default_path ( & builder. config . prefix , "/usr/local" ) ;
81
78
let sysconfdir = prefix. join ( default_path ( & builder. config . sysconfdir , "/etc" ) ) ;
@@ -167,10 +164,10 @@ macro_rules! install {
167
164
IS_HOST : $IS_HOST: expr,
168
165
$run_item: block $( , $c: ident) * ; ) +) => {
169
166
$(
170
- #[ derive( Debug , Clone , Hash , PartialEq , Eq ) ]
167
+ #[ derive( Debug , Clone , Hash , PartialEq , Eq ) ]
171
168
pub struct $name {
172
- pub compiler : Compiler ,
173
- pub target: TargetSelection ,
169
+ build_compiler : Compiler ,
170
+ target: TargetSelection ,
174
171
}
175
172
176
173
impl $name {
@@ -194,7 +191,7 @@ macro_rules! install {
194
191
195
192
fn make_run( run: RunConfig <' _>) {
196
193
run. builder. ensure( $name {
197
- compiler : run. builder. compiler( run. builder. top_stage, run. builder. config. host_target) ,
194
+ build_compiler : run. builder. compiler( run. builder. top_stage - 1 , run. builder. config. host_target) ,
198
195
target: run. target,
199
196
} ) ;
200
197
}
@@ -209,104 +206,103 @@ macro_rules! install {
209
206
install ! ( ( self , builder, _config) ,
210
207
Docs , path = "src/doc" , _config. docs, IS_HOST : false , {
211
208
let tarball = builder. ensure( dist:: Docs { host: self . target } ) . expect( "missing docs" ) ;
212
- install_sh( builder, "docs" , self . compiler . stage , Some ( self . target) , & tarball) ;
209
+ install_sh( builder, "docs" , self . build_compiler , Some ( self . target) , & tarball) ;
213
210
} ;
214
211
Std , path = "library/std" , true , IS_HOST : false , {
215
212
// `expect` should be safe, only None when host != build, but this
216
213
// only runs when host == build
217
- let tarball = builder. ensure( dist:: Std {
218
- build_compiler: self . compiler,
219
- target: self . target
220
- } ) . expect( "missing std" ) ;
221
- install_sh( builder, "std" , self . compiler. stage, Some ( self . target) , & tarball) ;
214
+ let std = dist:: Std :: new( builder, self . target) ;
215
+ let build_compiler = std. build_compiler;
216
+ let tarball = builder. ensure( std) . expect( "missing std" ) ;
217
+ install_sh( builder, "std" , build_compiler, Some ( self . target) , & tarball) ;
222
218
} ;
223
219
Cargo , alias = "cargo" , Self :: should_build( _config) , IS_HOST : true , {
224
220
let tarball = builder
225
- . ensure( dist:: Cargo { build_compiler: self . compiler , target: self . target } )
221
+ . ensure( dist:: Cargo { build_compiler: self . build_compiler , target: self . target } )
226
222
. expect( "missing cargo" ) ;
227
- install_sh( builder, "cargo" , self . compiler . stage , Some ( self . target) , & tarball) ;
223
+ install_sh( builder, "cargo" , self . build_compiler , Some ( self . target) , & tarball) ;
228
224
} ;
229
225
RustAnalyzer , alias = "rust-analyzer" , Self :: should_build( _config) , IS_HOST : true , {
230
226
if let Some ( tarball) =
231
- builder. ensure( dist:: RustAnalyzer { compilers: RustcPrivateCompilers :: from_build_compiler( builder, self . compiler , self . target) , target: self . target } )
227
+ builder. ensure( dist:: RustAnalyzer { compilers: RustcPrivateCompilers :: from_build_compiler( builder, self . build_compiler , self . target) , target: self . target } )
232
228
{
233
- install_sh( builder, "rust-analyzer" , self . compiler . stage , Some ( self . target) , & tarball) ;
229
+ install_sh( builder, "rust-analyzer" , self . build_compiler , Some ( self . target) , & tarball) ;
234
230
} else {
235
231
builder. info(
236
- & format!( "skipping Install rust-analyzer stage{} ({})" , self . compiler . stage, self . target) ,
232
+ & format!( "skipping Install rust-analyzer stage{} ({})" , self . build_compiler . stage + 1 , self . target) ,
237
233
) ;
238
234
}
239
235
} ;
240
236
Clippy , alias = "clippy" , Self :: should_build( _config) , IS_HOST : true , {
241
237
let tarball = builder
242
- . ensure( dist:: Clippy { compilers: RustcPrivateCompilers :: from_build_compiler( builder, self . compiler , self . target) , target: self . target } )
238
+ . ensure( dist:: Clippy { compilers: RustcPrivateCompilers :: from_build_compiler( builder, self . build_compiler , self . target) , target: self . target } )
243
239
. expect( "missing clippy" ) ;
244
- install_sh( builder, "clippy" , self . compiler . stage , Some ( self . target) , & tarball) ;
240
+ install_sh( builder, "clippy" , self . build_compiler , Some ( self . target) , & tarball) ;
245
241
} ;
246
242
Miri , alias = "miri" , Self :: should_build( _config) , IS_HOST : true , {
247
- if let Some ( tarball) = builder. ensure( dist:: Miri { compilers: RustcPrivateCompilers :: from_build_compiler( builder, self . compiler , self . target) , target: self . target } ) {
248
- install_sh( builder, "miri" , self . compiler . stage , Some ( self . target) , & tarball) ;
243
+ if let Some ( tarball) = builder. ensure( dist:: Miri { compilers: RustcPrivateCompilers :: from_build_compiler( builder, self . build_compiler , self . target) , target: self . target } ) {
244
+ install_sh( builder, "miri" , self . build_compiler , Some ( self . target) , & tarball) ;
249
245
} else {
250
246
// Miri is only available on nightly
251
247
builder. info(
252
- & format!( "skipping Install miri stage{} ({})" , self . compiler . stage, self . target) ,
248
+ & format!( "skipping Install miri stage{} ({})" , self . build_compiler . stage + 1 , self . target) ,
253
249
) ;
254
250
}
255
251
} ;
256
252
LlvmTools , alias = "llvm-tools" , _config. llvm_tools_enabled && _config. llvm_enabled( _config. host_target) , IS_HOST : true , {
257
253
if let Some ( tarball) = builder. ensure( dist:: LlvmTools { target: self . target } ) {
258
- install_sh( builder, "llvm-tools" , self . compiler . stage , Some ( self . target) , & tarball) ;
254
+ install_sh( builder, "llvm-tools" , None , Some ( self . target) , & tarball) ;
259
255
} else {
260
256
builder. info(
261
- & format!( "skipping llvm-tools stage{} ({}): external LLVM" , self . compiler . stage , self . target) ,
257
+ & format!( "skipping llvm-tools ({}): external LLVM" , self . target) ,
262
258
) ;
263
259
}
264
260
} ;
265
261
Rustfmt , alias = "rustfmt" , Self :: should_build( _config) , IS_HOST : true , {
266
262
if let Some ( tarball) = builder. ensure( dist:: Rustfmt {
267
- compilers: RustcPrivateCompilers :: from_build_compiler( builder, self . compiler , self . target) ,
263
+ compilers: RustcPrivateCompilers :: from_build_compiler( builder, self . build_compiler , self . target) ,
268
264
target: self . target
269
265
} ) {
270
- install_sh( builder, "rustfmt" , self . compiler . stage , Some ( self . target) , & tarball) ;
266
+ install_sh( builder, "rustfmt" , self . build_compiler , Some ( self . target) , & tarball) ;
271
267
} else {
272
268
builder. info(
273
- & format!( "skipping Install Rustfmt stage{} ({})" , self . compiler . stage, self . target) ,
269
+ & format!( "skipping Install Rustfmt stage{} ({})" , self . build_compiler . stage + 1 , self . target) ,
274
270
) ;
275
271
}
276
272
} ;
277
273
Rustc , path = "compiler/rustc" , true , IS_HOST : true , {
278
274
let tarball = builder. ensure( dist:: Rustc {
279
- target_compiler: builder. compiler( builder . top_stage , self . target) ,
275
+ target_compiler: builder. compiler( self . build_compiler . stage + 1 , self . target) ,
280
276
} ) ;
281
- install_sh( builder, "rustc" , self . compiler . stage , Some ( self . target) , & tarball) ;
277
+ install_sh( builder, "rustc" , self . build_compiler , Some ( self . target) , & tarball) ;
282
278
} ;
283
279
RustcCodegenCranelift , alias = "rustc-codegen-cranelift" , Self :: should_build( _config) , IS_HOST : true , {
284
280
if let Some ( tarball) = builder. ensure( dist:: CraneliftCodegenBackend {
285
- compilers: RustcPrivateCompilers :: new ( builder, builder . top_stage , self . target) ,
281
+ compilers: RustcPrivateCompilers :: from_build_compiler ( builder, self . build_compiler , self . target) ,
286
282
target: self . target
287
283
} ) {
288
- install_sh( builder, "rustc-codegen-cranelift" , self . compiler . stage , Some ( self . target) , & tarball) ;
284
+ install_sh( builder, "rustc-codegen-cranelift" , self . build_compiler , Some ( self . target) , & tarball) ;
289
285
} else {
290
286
builder. info(
291
287
& format!( "skipping Install CodegenBackend(\" cranelift\" ) stage{} ({})" ,
292
- self . compiler . stage, self . target) ,
288
+ self . build_compiler . stage + 1 , self . target) ,
293
289
) ;
294
290
}
295
291
} ;
296
292
LlvmBitcodeLinker , alias = "llvm-bitcode-linker" , Self :: should_build( _config) , IS_HOST : true , {
297
- if let Some ( tarball) = builder. ensure( dist:: LlvmBitcodeLinker { build_compiler: self . compiler , target: self . target } ) {
298
- install_sh( builder, "llvm-bitcode-linker" , self . compiler . stage , Some ( self . target) , & tarball) ;
293
+ if let Some ( tarball) = builder. ensure( dist:: LlvmBitcodeLinker { build_compiler: self . build_compiler , target: self . target } ) {
294
+ install_sh( builder, "llvm-bitcode-linker" , self . build_compiler , Some ( self . target) , & tarball) ;
299
295
} else {
300
296
builder. info(
301
- & format!( "skipping llvm-bitcode-linker stage{} ({})" , self . compiler . stage, self . target) ,
297
+ & format!( "skipping llvm-bitcode-linker stage{} ({})" , self . build_compiler . stage + 1 , self . target) ,
302
298
) ;
303
299
}
304
300
} ;
305
301
) ;
306
302
307
303
#[ derive( Debug , Clone , Hash , PartialEq , Eq ) ]
308
304
pub struct Src {
309
- pub stage : u32 ,
305
+ stage : u32 ,
310
306
}
311
307
312
308
impl Step for Src {
@@ -326,6 +322,6 @@ impl Step for Src {
326
322
327
323
fn run ( self , builder : & Builder < ' _ > ) {
328
324
let tarball = builder. ensure ( dist:: Src ) ;
329
- install_sh ( builder, "src" , self . stage , None , & tarball) ;
325
+ install_sh ( builder, "src" , None , None , & tarball) ;
330
326
}
331
327
}
0 commit comments