@@ -250,9 +250,9 @@ pub fn prepare_tool_cargo(
250
250
cargo
251
251
}
252
252
253
- macro_rules! tool {
253
+ macro_rules! bootstrap_tool {
254
254
( $(
255
- $name: ident, $path: expr, $tool_name: expr, $mode : expr
255
+ $name: ident, $path: expr, $tool_name: expr
256
256
$( , llvm_tools = $llvm: expr) *
257
257
$( , is_external_tool = $external: expr) *
258
258
;
@@ -266,10 +266,7 @@ macro_rules! tool {
266
266
267
267
impl Tool {
268
268
pub fn get_mode( & self ) -> Mode {
269
- let mode = match self {
270
- $( Tool :: $name => $mode, ) +
271
- } ;
272
- mode
269
+ Mode :: ToolBootstrap
273
270
}
274
271
275
272
/// Whether this tool requires LLVM to run
@@ -282,27 +279,15 @@ macro_rules! tool {
282
279
283
280
impl <' a> Builder <' a> {
284
281
pub fn tool_exe( & self , tool: Tool ) -> PathBuf {
285
- let stage = self . tool_default_stage( tool) ;
286
282
match tool {
287
283
$( Tool :: $name =>
288
284
self . ensure( $name {
289
- compiler: self . compiler( stage , self . config. build) ,
285
+ compiler: self . compiler( 0 , self . config. build) ,
290
286
target: self . config. build,
291
287
} ) ,
292
288
) +
293
289
}
294
290
}
295
-
296
- pub fn tool_default_stage( & self , tool: Tool ) -> u32 {
297
- // Compile the error-index in the same stage as rustdoc to avoid
298
- // recompiling rustdoc twice if we can. Otherwise compile
299
- // everything else in stage0 as there's no need to rebootstrap
300
- // everything.
301
- match tool {
302
- Tool :: ErrorIndex if self . top_stage >= 2 => self . top_stage,
303
- _ => 0 ,
304
- }
305
- }
306
291
}
307
292
308
293
$(
@@ -321,7 +306,8 @@ macro_rules! tool {
321
306
322
307
fn make_run( run: RunConfig <' _>) {
323
308
run. builder. ensure( $name {
324
- compiler: run. builder. compiler( run. builder. top_stage, run. builder. config. build) ,
309
+ // snapshot compiler
310
+ compiler: run. builder. compiler( 0 , run. builder. config. build) ,
325
311
target: run. target,
326
312
} ) ;
327
313
}
@@ -331,7 +317,7 @@ macro_rules! tool {
331
317
compiler: self . compiler,
332
318
target: self . target,
333
319
tool: $tool_name,
334
- mode: $mode ,
320
+ mode: Mode :: ToolBootstrap ,
335
321
path: $path,
336
322
is_optional_tool: false ,
337
323
source_type: if false $( || $external) * {
@@ -347,21 +333,67 @@ macro_rules! tool {
347
333
}
348
334
}
349
335
350
- tool ! (
351
- Rustbook , "src/tools/rustbook" , "rustbook" , Mode :: ToolBootstrap ;
352
- ErrorIndex , "src/tools/error_index_generator" , "error_index_generator" , Mode :: ToolRustc ;
353
- UnstableBookGen , "src/tools/unstable-book-gen" , "unstable-book-gen" , Mode :: ToolBootstrap ;
354
- Tidy , "src/tools/tidy" , "tidy" , Mode :: ToolBootstrap ;
355
- Linkchecker , "src/tools/linkchecker" , "linkchecker" , Mode :: ToolBootstrap ;
356
- CargoTest , "src/tools/cargotest" , "cargotest" , Mode :: ToolBootstrap ;
357
- Compiletest , "src/tools/compiletest" , "compiletest" , Mode :: ToolBootstrap , llvm_tools = true ;
358
- BuildManifest , "src/tools/build-manifest" , "build-manifest" , Mode :: ToolBootstrap ;
359
- RemoteTestClient , "src/tools/remote-test-client" , "remote-test-client" , Mode :: ToolBootstrap ;
360
- RustInstaller , "src/tools/rust-installer" , "fabricate" , Mode :: ToolBootstrap ,
361
- is_external_tool = true ;
362
- RustdocTheme , "src/tools/rustdoc-themes" , "rustdoc-themes" , Mode :: ToolBootstrap ;
336
+ bootstrap_tool ! (
337
+ Rustbook , "src/tools/rustbook" , "rustbook" ;
338
+ UnstableBookGen , "src/tools/unstable-book-gen" , "unstable-book-gen" ;
339
+ Tidy , "src/tools/tidy" , "tidy" ;
340
+ Linkchecker , "src/tools/linkchecker" , "linkchecker" ;
341
+ CargoTest , "src/tools/cargotest" , "cargotest" ;
342
+ Compiletest , "src/tools/compiletest" , "compiletest" , llvm_tools = true ;
343
+ BuildManifest , "src/tools/build-manifest" , "build-manifest" ;
344
+ RemoteTestClient , "src/tools/remote-test-client" , "remote-test-client" ;
345
+ RustInstaller , "src/tools/rust-installer" , "fabricate" , is_external_tool = true ;
346
+ RustdocTheme , "src/tools/rustdoc-themes" , "rustdoc-themes" ;
363
347
) ;
364
348
349
+ #[ derive( Debug , Copy , Clone , Hash , PartialEq , Eq ) ]
350
+ pub struct ErrorIndex {
351
+ pub compiler : Compiler ,
352
+ }
353
+
354
+ impl ErrorIndex {
355
+ pub fn command ( builder : & Builder < ' _ > , compiler : Compiler ) -> Command {
356
+ let mut cmd = Command :: new ( builder. ensure ( ErrorIndex {
357
+ compiler
358
+ } ) ) ;
359
+ add_lib_path (
360
+ vec ! [ PathBuf :: from( & builder. sysroot_libdir( compiler, compiler. host) ) ] ,
361
+ & mut cmd,
362
+ ) ;
363
+ cmd
364
+ }
365
+ }
366
+
367
+ impl Step for ErrorIndex {
368
+ type Output = PathBuf ;
369
+
370
+ fn should_run ( run : ShouldRun < ' _ > ) -> ShouldRun < ' _ > {
371
+ run. path ( "src/tools/error_index_generator" )
372
+ }
373
+
374
+ fn make_run ( run : RunConfig < ' _ > ) {
375
+ // Compile the error-index in the same stage as rustdoc to avoid
376
+ // recompiling rustdoc twice if we can.
377
+ let stage = if run. builder . top_stage >= 2 { run. builder . top_stage } else { 0 } ;
378
+ run. builder . ensure ( ErrorIndex {
379
+ compiler : run. builder . compiler ( stage, run. builder . config . build ) ,
380
+ } ) ;
381
+ }
382
+
383
+ fn run ( self , builder : & Builder < ' _ > ) -> PathBuf {
384
+ builder. ensure ( ToolBuild {
385
+ compiler : self . compiler ,
386
+ target : self . compiler . host ,
387
+ tool : "error_index_generator" ,
388
+ mode : Mode :: ToolRustc ,
389
+ path : "src/tools/error_index_generator" ,
390
+ is_optional_tool : false ,
391
+ source_type : SourceType :: InTree ,
392
+ extra_features : Vec :: new ( ) ,
393
+ } ) . expect ( "expected to build -- essential tool" )
394
+ }
395
+ }
396
+
365
397
#[ derive( Debug , Copy , Clone , Hash , PartialEq , Eq ) ]
366
398
pub struct RemoteTestServer {
367
399
pub compiler : Compiler ,
@@ -625,7 +657,7 @@ impl<'a> Builder<'a> {
625
657
/// `host`.
626
658
pub fn tool_cmd ( & self , tool : Tool ) -> Command {
627
659
let mut cmd = Command :: new ( self . tool_exe ( tool) ) ;
628
- let compiler = self . compiler ( self . tool_default_stage ( tool ) , self . config . build ) ;
660
+ let compiler = self . compiler ( 0 , self . config . build ) ;
629
661
self . prepare_tool_cmd ( compiler, tool, & mut cmd) ;
630
662
cmd
631
663
}
@@ -637,7 +669,7 @@ impl<'a> Builder<'a> {
637
669
fn prepare_tool_cmd ( & self , compiler : Compiler , tool : Tool , cmd : & mut Command ) {
638
670
let host = & compiler. host ;
639
671
let mut lib_paths: Vec < PathBuf > = vec ! [
640
- if compiler. stage == 0 && tool != Tool :: ErrorIndex {
672
+ if compiler. stage == 0 {
641
673
self . build. rustc_snapshot_libdir( )
642
674
} else {
643
675
PathBuf :: from( & self . sysroot_libdir( compiler, compiler. host) )
0 commit comments