about summary refs log tree commit diff
path: root/src/bootstrap
diff options
context:
space:
mode:
authorPietro Albini <pietro@pietroalbini.org>2020-11-26 22:54:35 +0100
committerPietro Albini <pietro@pietroalbini.org>2020-12-23 19:35:22 +0100
commit79f60fbd0410d1cfcbc4ddc8cba7bb11e1dd65ba (patch)
tree0d1a055ca43fa722bfb6eae872444745803c870d /src/bootstrap
parentfd4515cb3f8a8e21d3640ffa8f2b3040a381b87c (diff)
downloadrust-79f60fbd0410d1cfcbc4ddc8cba7bb11e1dd65ba.tar.gz
rust-79f60fbd0410d1cfcbc4ddc8cba7bb11e1dd65ba.zip
bootstrap: convert rust-std to use Tarball
Diffstat (limited to 'src/bootstrap')
-rw-r--r--src/bootstrap/dist.rs38
-rw-r--r--src/bootstrap/tarball.rs10
2 files changed, 18 insertions, 30 deletions
diff --git a/src/bootstrap/dist.rs b/src/bootstrap/dist.rs
index 0e00649fc03..98f2b28918a 100644
--- a/src/bootstrap/dist.rs
+++ b/src/bootstrap/dist.rs
@@ -559,7 +559,7 @@ pub struct Std {
 }
 
 impl Step for Std {
-    type Output = PathBuf;
+    type Output = Option<PathBuf>;
     const DEFAULT: bool = true;
 
     fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> {
@@ -577,46 +577,24 @@ impl Step for Std {
         });
     }
 
-    fn run(self, builder: &Builder<'_>) -> PathBuf {
+    fn run(self, builder: &Builder<'_>) -> Option<PathBuf> {
         let compiler = self.compiler;
         let target = self.target;
 
-        let name = pkgname(builder, "rust-std");
-        let archive = distdir(builder).join(format!("{}-{}.tar.gz", name, target.triple));
         if skip_host_target_lib(builder, compiler) {
-            return archive;
+            return None;
         }
 
         builder.ensure(compile::Std { compiler, target });
 
-        let image = tmpdir(builder).join(format!("{}-{}-image", name, target.triple));
-        let _ = fs::remove_dir_all(&image);
+        let mut tarball = Tarball::new(builder, "rust-std", &target.triple);
+        tarball.include_target_in_component_name(true);
 
         let compiler_to_use = builder.compiler_for(compiler.stage, compiler.host, target);
         let stamp = compile::libstd_stamp(builder, compiler_to_use, target);
-        copy_target_libs(builder, target, &image, &stamp);
-
-        let mut cmd = rust_installer(builder);
-        cmd.arg("generate")
-            .arg("--product-name=Rust")
-            .arg("--rel-manifest-dir=rustlib")
-            .arg("--success-message=std-is-standing-at-the-ready.")
-            .arg("--image-dir")
-            .arg(&image)
-            .arg("--work-dir")
-            .arg(&tmpdir(builder))
-            .arg("--output-dir")
-            .arg(&distdir(builder))
-            .arg(format!("--package-name={}-{}", name, target.triple))
-            .arg(format!("--component-name=rust-std-{}", target.triple))
-            .arg("--legacy-manifest-dirs=rustlib,cargo");
+        copy_target_libs(builder, target, &tarball.image_dir(), &stamp);
 
-        builder
-            .info(&format!("Dist std stage{} ({} -> {})", compiler.stage, &compiler.host, target));
-        let _time = timeit(builder);
-        builder.run(&mut cmd);
-        builder.remove_dir(&image);
-        archive
+        Some(tarball.generate())
     }
 }
 
@@ -1699,7 +1677,7 @@ impl Step for Extended {
         tarballs.extend(rustfmt_installer.clone());
         tarballs.extend(llvm_tools_installer);
         tarballs.push(analysis_installer);
-        tarballs.push(std_installer);
+        tarballs.push(std_installer.expect("missing std"));
         if let Some(docs_installer) = docs_installer {
             tarballs.push(docs_installer);
         }
diff --git a/src/bootstrap/tarball.rs b/src/bootstrap/tarball.rs
index f99b6f30192..bde437723bb 100644
--- a/src/bootstrap/tarball.rs
+++ b/src/bootstrap/tarball.rs
@@ -35,6 +35,7 @@ pub(crate) struct Tarball<'a> {
     overlay_dir: PathBuf,
     work_dir: PathBuf,
 
+    include_target_in_component_name: bool,
     is_preview: bool,
 }
 
@@ -63,6 +64,7 @@ impl<'a> Tarball<'a> {
             overlay_dir,
             work_dir,
 
+            include_target_in_component_name: false,
             is_preview: false,
         }
     }
@@ -75,6 +77,10 @@ impl<'a> Tarball<'a> {
         self.product_name = name.into();
     }
 
+    pub(crate) fn include_target_in_component_name(&mut self, include: bool) {
+        self.include_target_in_component_name = include;
+    }
+
     pub(crate) fn is_preview(&mut self, is: bool) {
         self.is_preview = is;
     }
@@ -123,6 +129,10 @@ impl<'a> Tarball<'a> {
         if self.is_preview {
             component_name.push_str("-preview");
         }
+        if self.include_target_in_component_name {
+            component_name.push('-');
+            component_name.push_str(&self.target);
+        }
 
         let distdir = crate::dist::distdir(self.builder);
         cmd.arg("generate")