@@ -26,7 +26,7 @@ use std::process::{Command, Stdio};
26
26
27
27
use build_helper:: output;
28
28
29
- use { Compiler , Mode } ;
29
+ use { Compiler , Mode , LLVM_TOOLS } ;
30
30
use channel;
31
31
use util:: { libdir, is_dylib, exe} ;
32
32
use builder:: { Builder , RunConfig , ShouldRun , Step } ;
@@ -43,6 +43,8 @@ pub fn pkgname(builder: &Builder, component: &str) -> String {
43
43
format ! ( "{}-{}" , component, builder. rls_package_vers( ) )
44
44
} else if component == "rustfmt" {
45
45
format ! ( "{}-{}" , component, builder. rustfmt_package_vers( ) )
46
+ } else if component == "llvm-tools" {
47
+ format ! ( "{}-{}" , component, builder. llvm_tools_vers( ) )
46
48
} else {
47
49
assert ! ( component. starts_with( "rust" ) ) ;
48
50
format ! ( "{}-{}" , component, builder. rust_package_vers( ) )
@@ -394,7 +396,7 @@ impl Step for Rustc {
394
396
let compiler = self . compiler ;
395
397
let host = self . compiler . host ;
396
398
397
- builder. info ( & format ! ( "Dist rustc stage{} ({})" , compiler. stage, compiler . host) ) ;
399
+ builder. info ( & format ! ( "Dist rustc stage{} ({})" , compiler. stage, host) ) ;
398
400
let name = pkgname ( builder, "rustc" ) ;
399
401
let image = tmpdir ( builder) . join ( format ! ( "{}-{}-image" , name, host) ) ;
400
402
let _ = fs:: remove_dir_all ( & image) ;
@@ -1738,6 +1740,7 @@ impl Step for HashSign {
1738
1740
cmd. arg ( builder. package_vers ( & builder. release_num ( "cargo" ) ) ) ;
1739
1741
cmd. arg ( builder. package_vers ( & builder. release_num ( "rls" ) ) ) ;
1740
1742
cmd. arg ( builder. package_vers ( & builder. release_num ( "rustfmt" ) ) ) ;
1743
+ cmd. arg ( builder. llvm_tools_vers ( ) ) ;
1741
1744
cmd. arg ( addr) ;
1742
1745
1743
1746
builder. create_dir ( & distdir ( builder) ) ;
@@ -1748,3 +1751,78 @@ impl Step for HashSign {
1748
1751
assert ! ( status. success( ) ) ;
1749
1752
}
1750
1753
}
1754
+
1755
+ #[ derive( Clone , Debug , Eq , Hash , PartialEq ) ]
1756
+ pub struct LlvmTools {
1757
+ pub stage : u32 ,
1758
+ pub compiler : Compiler ,
1759
+ pub target : Interned < String > ,
1760
+ }
1761
+
1762
+ impl Step for LlvmTools {
1763
+ type Output = Option < PathBuf > ;
1764
+ const ONLY_HOSTS : bool = true ;
1765
+
1766
+ fn should_run ( run : ShouldRun ) -> ShouldRun {
1767
+ run. path ( "llvm-tools" )
1768
+ }
1769
+
1770
+ fn make_run ( run : RunConfig ) {
1771
+ run. builder . ensure ( LlvmTools {
1772
+ stage : run. builder . top_stage ,
1773
+ compiler : run. builder . compiler ( run. builder . top_stage , run. target ) ,
1774
+ target : run. target ,
1775
+ } ) ;
1776
+ }
1777
+
1778
+ fn run ( self , builder : & Builder ) -> Option < PathBuf > {
1779
+ let compiler = self . compiler ;
1780
+ let host = compiler. host ;
1781
+
1782
+ let stage = self . stage ;
1783
+ assert ! ( builder. config. extended) ;
1784
+
1785
+ builder. info ( & format ! ( "Dist LlvmTools stage{} ({})" , stage, host) ) ;
1786
+ let src = builder. src . join ( "src/llvm" ) ;
1787
+ let name = pkgname ( builder, "llvm-tools" ) ;
1788
+
1789
+ let tmp = tmpdir ( builder) ;
1790
+ let image = tmp. join ( "llvm-tools-image" ) ;
1791
+ drop ( fs:: remove_dir_all ( & image) ) ;
1792
+ t ! ( fs:: create_dir_all( & image. join( "bin" ) ) ) ;
1793
+
1794
+ // Prepare the image directory
1795
+ for tool in LLVM_TOOLS {
1796
+ let exe = builder
1797
+ . llvm_out ( host)
1798
+ . join ( "bin" )
1799
+ . join ( exe ( tool, & compiler. host ) ) ;
1800
+ builder. install ( & exe, & image. join ( "bin" ) , 0o755 ) ;
1801
+ }
1802
+
1803
+ // Prepare the overlay
1804
+ let overlay = tmp. join ( "llvm-tools-overlay" ) ;
1805
+ drop ( fs:: remove_dir_all ( & overlay) ) ;
1806
+ builder. create_dir ( & overlay) ;
1807
+ builder. install ( & src. join ( "README.txt" ) , & overlay, 0o644 ) ;
1808
+ builder. install ( & src. join ( "LICENSE.TXT" ) , & overlay, 0o644 ) ;
1809
+
1810
+ // Generate the installer tarball
1811
+ let mut cmd = rust_installer ( builder) ;
1812
+ cmd. arg ( "generate" )
1813
+ . arg ( "--product-name=Rust" )
1814
+ . arg ( "--rel-manifest-dir=rustlib" )
1815
+ . arg ( "--success-message=llvm-tools-installed." )
1816
+ . arg ( "--image-dir" ) . arg ( & image)
1817
+ . arg ( "--work-dir" ) . arg ( & tmpdir ( builder) )
1818
+ . arg ( "--output-dir" ) . arg ( & distdir ( builder) )
1819
+ . arg ( "--non-installed-overlay" ) . arg ( & overlay)
1820
+ . arg ( format ! ( "--package-name={}-{}" , name, host) )
1821
+ . arg ( "--legacy-manifest-dirs=rustlib,cargo" )
1822
+ . arg ( "--component-name=llvm-tools" ) ;
1823
+
1824
+
1825
+ builder. run ( & mut cmd) ;
1826
+ Some ( distdir ( builder) . join ( format ! ( "{}-{}.tar.gz" , name, host) ) )
1827
+ }
1828
+ }
0 commit comments