@@ -110,7 +110,7 @@ impl Step for ToolBuild {
110110 _ => panic ! ( "unexpected Mode for tool build" )
111111 }
112112
113- let mut cargo = prepare_tool_cargo ( builder, compiler, target, "build" , path) ;
113+ let mut cargo = prepare_tool_cargo ( builder, compiler, self . mode , target, "build" , path) ;
114114 cargo. arg ( "--features" ) . arg ( self . extra_features . join ( " " ) ) ;
115115
116116 let _folder = builder. fold_output ( || format ! ( "stage{}-{}" , compiler. stage, tool) ) ;
@@ -202,7 +202,7 @@ impl Step for ToolBuild {
202202 return None ;
203203 }
204204 } else {
205- let cargo_out = builder. cargo_out ( compiler, Mode :: ToolRustc , target)
205+ let cargo_out = builder. cargo_out ( compiler, self . mode , target)
206206 . join ( exe ( tool, & compiler. host ) ) ;
207207 let bin = builder. tools_dir ( compiler) . join ( exe ( tool, & compiler. host ) ) ;
208208 builder. copy ( & cargo_out, & bin) ;
@@ -214,11 +214,12 @@ impl Step for ToolBuild {
214214pub fn prepare_tool_cargo (
215215 builder : & Builder ,
216216 compiler : Compiler ,
217+ mode : Mode ,
217218 target : Interned < String > ,
218219 command : & ' static str ,
219220 path : & ' static str ,
220221) -> Command {
221- let mut cargo = builder. cargo ( compiler, Mode :: ToolRustc , target, command) ;
222+ let mut cargo = builder. cargo ( compiler, mode , target, command) ;
222223 let dir = builder. src . join ( path) ;
223224 cargo. arg ( "--manifest-path" ) . arg ( dir. join ( "Cargo.toml" ) ) ;
224225
@@ -261,6 +262,15 @@ macro_rules! tool {
261262 ) +
262263 }
263264
265+ impl Tool {
266+ pub fn get_mode( & self ) -> Mode {
267+ let mode = match self {
268+ $( Tool :: $name => $mode, ) +
269+ } ;
270+ mode
271+ }
272+ }
273+
264274 impl <' a> Builder <' a> {
265275 pub fn tool_exe( & self , tool: Tool ) -> PathBuf {
266276 let stage = self . tool_default_stage( tool) ;
@@ -414,6 +424,7 @@ impl Step for Rustdoc {
414424
415425 let mut cargo = prepare_tool_cargo ( builder,
416426 build_compiler,
427+ Mode :: ToolRustc ,
417428 target,
418429 "build" ,
419430 "src/tools/rustdoc" ) ;
@@ -575,19 +586,19 @@ impl<'a> Builder<'a> {
575586 pub fn tool_cmd ( & self , tool : Tool ) -> Command {
576587 let mut cmd = Command :: new ( self . tool_exe ( tool) ) ;
577588 let compiler = self . compiler ( self . tool_default_stage ( tool) , self . config . build ) ;
578- self . prepare_tool_cmd ( compiler, & mut cmd) ;
589+ self . prepare_tool_cmd ( compiler, tool . get_mode ( ) , & mut cmd) ;
579590 cmd
580591 }
581592
582593 /// Prepares the `cmd` provided to be able to run the `compiler` provided.
583594 ///
584595 /// Notably this munges the dynamic library lookup path to point to the
585596 /// right location to run `compiler`.
586- fn prepare_tool_cmd ( & self , compiler : Compiler , cmd : & mut Command ) {
597+ fn prepare_tool_cmd ( & self , compiler : Compiler , mode : Mode , cmd : & mut Command ) {
587598 let host = & compiler. host ;
588599 let mut lib_paths: Vec < PathBuf > = vec ! [
589600 PathBuf :: from( & self . sysroot_libdir( compiler, compiler. host) ) ,
590- self . cargo_out( compiler, Mode :: ToolRustc , * host) . join( "deps" ) ,
601+ self . cargo_out( compiler, mode , * host) . join( "deps" ) ,
591602 ] ;
592603
593604 // On MSVC a tool may invoke a C compiler (e.g. compiletest in run-make
0 commit comments