about summary refs log tree commit diff
path: root/src/bootstrap
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2019-01-20 13:46:03 +0000
committerbors <bors@rust-lang.org>2019-01-20 13:46:03 +0000
commit4db2394156b408e7af5c595bf3c9cbff8ba21157 (patch)
treea65f676b190714a2f049df6549572f1b9fdbc2b7 /src/bootstrap
parentd38d6be336e87055d90375c981806d5d133f446a (diff)
parent9b8c3c4cff4302a50fc8c82a18f10fc97b0fb3b7 (diff)
downloadrust-4db2394156b408e7af5c595bf3c9cbff8ba21157.tar.gz
rust-4db2394156b408e7af5c595bf3c9cbff8ba21157.zip
Auto merge of #57680 - cuviper:codegen-rebuild, r=Mark-Simulacrum
[rustbuild] Rebuild std after changes to codegen backends

Use `clear_if_dirty` on std for backend changes, just as we do for
changes to rustc itself, so new codegen is correctly applied to all
later compiler stages.

Fixes #48298.
Diffstat (limited to 'src/bootstrap')
-rw-r--r--src/bootstrap/builder.rs12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/bootstrap/builder.rs b/src/bootstrap/builder.rs
index 9c58f5b179f..31adab64f60 100644
--- a/src/bootstrap/builder.rs
+++ b/src/bootstrap/builder.rs
@@ -660,6 +660,15 @@ impl<'a> Builder<'a> {
         }
     }
 
+    /// Get the paths to all of the compiler's codegen backends.
+    fn codegen_backends(&self, compiler: Compiler) -> impl Iterator<Item = PathBuf> {
+        fs::read_dir(self.sysroot_codegen_backends(compiler))
+            .into_iter()
+            .flatten()
+            .filter_map(Result::ok)
+            .map(|entry| entry.path())
+    }
+
     pub fn rustdoc(&self, host: Interned<String>) -> PathBuf {
         self.ensure(tool::Rustdoc { host })
     }
@@ -750,6 +759,9 @@ impl<'a> Builder<'a> {
             match mode {
                 Mode::Std => {
                     self.clear_if_dirty(&my_out, &self.rustc(compiler));
+                    for backend in self.codegen_backends(compiler) {
+                        self.clear_if_dirty(&my_out, &backend);
+                    }
                 },
                 Mode::Test => {
                     self.clear_if_dirty(&my_out, &libstd_stamp);