@@ -26,7 +26,7 @@ use std::process::{Command, Stdio};
2626
2727use build_helper:: output;
2828
29- use { Compiler , Mode } ;
29+ use { Compiler , Mode , LLVM_TOOLS } ;
3030use channel;
3131use util:: { libdir, is_dylib, exe} ;
3232use builder:: { Builder , RunConfig , ShouldRun , Step } ;
@@ -43,6 +43,8 @@ pub fn pkgname(builder: &Builder, component: &str) -> String {
4343 format ! ( "{}-{}" , component, builder. rls_package_vers( ) )
4444 } else if component == "rustfmt" {
4545 format ! ( "{}-{}" , component, builder. rustfmt_package_vers( ) )
46+ } else if component == "llvm-tools" {
47+ format ! ( "{}-{}" , component, builder. llvm_tools_vers( ) )
4648 } else {
4749 assert ! ( component. starts_with( "rust" ) ) ;
4850 format ! ( "{}-{}" , component, builder. rust_package_vers( ) )
@@ -394,7 +396,7 @@ impl Step for Rustc {
394396 let compiler = self . compiler ;
395397 let host = self . compiler . host ;
396398
397- builder. info ( & format ! ( "Dist rustc stage{} ({})" , compiler. stage, compiler . host) ) ;
399+ builder. info ( & format ! ( "Dist rustc stage{} ({})" , compiler. stage, host) ) ;
398400 let name = pkgname ( builder, "rustc" ) ;
399401 let image = tmpdir ( builder) . join ( format ! ( "{}-{}-image" , name, host) ) ;
400402 let _ = fs:: remove_dir_all ( & image) ;
@@ -1738,6 +1740,7 @@ impl Step for HashSign {
17381740 cmd. arg ( builder. package_vers ( & builder. release_num ( "cargo" ) ) ) ;
17391741 cmd. arg ( builder. package_vers ( & builder. release_num ( "rls" ) ) ) ;
17401742 cmd. arg ( builder. package_vers ( & builder. release_num ( "rustfmt" ) ) ) ;
1743+ cmd. arg ( builder. llvm_tools_vers ( ) ) ;
17411744 cmd. arg ( addr) ;
17421745
17431746 builder. create_dir ( & distdir ( builder) ) ;
@@ -1748,3 +1751,78 @@ impl Step for HashSign {
17481751 assert ! ( status. success( ) ) ;
17491752 }
17501753}
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