@@ -381,20 +381,26 @@ pub(crate) fn get_tool_target_compiler(
381381 builder : & Builder < ' _ > ,
382382 mode : ToolTargetBuildMode ,
383383) -> Compiler {
384- let ( target, min_build_compiler_stage ) = match mode {
384+ let ( target, build_compiler_stage ) = match mode {
385385 ToolTargetBuildMode :: Build ( target) => {
386386 assert ! ( builder. top_stage > 0 ) ;
387+ // If we want to build a stage N tool, we need to compile it with stage N-1 rustc
387388 ( target, builder. top_stage - 1 )
388389 }
389390 ToolTargetBuildMode :: Dist ( target_compiler) => {
390391 assert ! ( target_compiler. stage > 0 ) ;
392+ // If we want to dist a stage N rustc, we want to attach stage N tool to it.
393+ // And to build that tool, we need to compile it with stage N-1 rustc
391394 ( target_compiler. host , target_compiler. stage - 1 )
392395 }
393396 } ;
397+
394398 let compiler = if builder. host_target == target {
395- builder. compiler ( min_build_compiler_stage , builder. host_target )
399+ builder. compiler ( build_compiler_stage , builder. host_target )
396400 } else {
397- builder. compiler ( min_build_compiler_stage. max ( 1 ) , builder. host_target )
401+ // If we are cross-compiling a stage 1 tool, we cannot do that with a stage 0 compiler,
402+ // so we auto-bump the tool's stage to 2.
403+ builder. compiler ( build_compiler_stage. max ( 1 ) , builder. host_target )
398404 } ;
399405 builder. std ( compiler, target) ;
400406 compiler
0 commit comments