@@ -17,6 +17,7 @@ use std::{env, fs, str};
1717
1818use serde_derive:: Deserialize ;
1919
20+ use crate :: core:: build_steps:: gcc:: { Gcc , add_cg_gcc_cargo_flags} ;
2021use crate :: core:: build_steps:: tool:: SourceType ;
2122use crate :: core:: build_steps:: { dist, llvm} ;
2223use crate :: core:: builder;
@@ -30,7 +31,7 @@ use crate::utils::exec::command;
3031use crate :: utils:: helpers:: {
3132 exe, get_clang_cl_resource_dir, is_debug_info, is_dylib, symlink_dir, t, up_to_date,
3233} ;
33- use crate :: { CLang , Compiler , DependencyType , GitRepo , LLVM_TOOLS , Mode } ;
34+ use crate :: { CLang , Compiler , DependencyType , GitRepo , LLVM_TOOLS , Mode , trace } ;
3435
3536#[ derive( Debug , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ]
3637pub struct Std {
@@ -107,7 +108,11 @@ impl Step for Std {
107108 // the `rust.download-rustc=true` option.
108109 let force_recompile = builder. rust_info ( ) . is_managed_git_subrepository ( )
109110 && builder. download_rustc ( )
110- && builder. config . last_modified_commit ( & [ "library" ] , "download-rustc" , true ) . is_none ( ) ;
111+ && builder. config . has_changes_from_upstream ( & [ "library" ] ) ;
112+
113+ trace ! ( "is managed git repo: {}" , builder. rust_info( ) . is_managed_git_subrepository( ) ) ;
114+ trace ! ( "download_rustc: {}" , builder. download_rustc( ) ) ;
115+ trace ! ( force_recompile) ;
111116
112117 run. builder . ensure ( Std {
113118 compiler : run. builder . compiler ( run. builder . top_stage , run. build_triple ( ) ) ,
@@ -1500,6 +1505,14 @@ impl Step for CodegenBackend {
15001505 . arg ( builder. src . join ( format ! ( "compiler/rustc_codegen_{backend}/Cargo.toml" ) ) ) ;
15011506 rustc_cargo_env ( builder, & mut cargo, target, compiler. stage ) ;
15021507
1508+ // Ideally, we'd have a separate step for the individual codegen backends,
1509+ // like we have in tests (test::CodegenGCC) but that would require a lot of restructuring.
1510+ // If the logic gets more complicated, it should probably be done.
1511+ if backend == "gcc" {
1512+ let gcc = builder. ensure ( Gcc { target } ) ;
1513+ add_cg_gcc_cargo_flags ( & mut cargo, & gcc) ;
1514+ }
1515+
15031516 let tmp_stamp = BuildStamp :: new ( & out_dir) . with_prefix ( "tmp" ) ;
15041517
15051518 let _guard = builder. msg_build ( compiler, format_args ! ( "codegen backend {backend}" ) , target) ;
0 commit comments