@@ -47,6 +47,8 @@ pub fn pkgname(builder: &Builder, component: &str) -> String {
47
47
format ! ( "{}-{}" , component, builder. rustfmt_package_vers( ) )
48
48
} else if component == "llvm-tools" {
49
49
format ! ( "{}-{}" , component, builder. llvm_tools_package_vers( ) )
50
+ } else if component == "lldb" {
51
+ format ! ( "{}-{}" , component, builder. lldb_package_vers( ) )
50
52
} else {
51
53
assert ! ( component. starts_with( "rust" ) ) ;
52
54
format ! ( "{}-{}" , component, builder. rust_package_vers( ) )
@@ -1396,6 +1398,7 @@ impl Step for Extended {
1396
1398
let rls_installer = builder. ensure ( Rls { stage, target } ) ;
1397
1399
let llvm_tools_installer = builder. ensure ( LlvmTools { stage, target } ) ;
1398
1400
let clippy_installer = builder. ensure ( Clippy { stage, target } ) ;
1401
+ let lldb_installer = builder. ensure ( Lldb { target } ) ;
1399
1402
let mingw_installer = builder. ensure ( Mingw { host : target } ) ;
1400
1403
let analysis_installer = builder. ensure ( Analysis {
1401
1404
compiler : builder. compiler ( stage, self . host ) ,
@@ -1435,6 +1438,7 @@ impl Step for Extended {
1435
1438
tarballs. extend ( clippy_installer. clone ( ) ) ;
1436
1439
tarballs. extend ( rustfmt_installer. clone ( ) ) ;
1437
1440
tarballs. extend ( llvm_tools_installer. clone ( ) ) ;
1441
+ tarballs. extend ( lldb_installer. clone ( ) ) ;
1438
1442
tarballs. push ( analysis_installer) ;
1439
1443
tarballs. push ( std_installer) ;
1440
1444
if builder. config . docs {
@@ -1869,6 +1873,7 @@ impl Step for HashSign {
1869
1873
cmd. arg ( builder. package_vers ( & builder. release_num ( "clippy" ) ) ) ;
1870
1874
cmd. arg ( builder. package_vers ( & builder. release_num ( "rustfmt" ) ) ) ;
1871
1875
cmd. arg ( builder. llvm_tools_package_vers ( ) ) ;
1876
+ cmd. arg ( builder. lldb_package_vers ( ) ) ;
1872
1877
cmd. arg ( addr) ;
1873
1878
1874
1879
builder. create_dir ( & distdir ( builder) ) ;
@@ -1963,3 +1968,121 @@ impl Step for LlvmTools {
1963
1968
Some ( distdir ( builder) . join ( format ! ( "{}-{}.tar.gz" , name, target) ) )
1964
1969
}
1965
1970
}
1971
+
1972
+ #[ derive( Clone , Debug , Eq , Hash , PartialEq ) ]
1973
+ pub struct Lldb {
1974
+ pub target : Interned < String > ,
1975
+ }
1976
+
1977
+ impl Step for Lldb {
1978
+ type Output = Option < PathBuf > ;
1979
+ const ONLY_HOSTS : bool = true ;
1980
+ const DEFAULT : bool = true ;
1981
+
1982
+ fn should_run ( run : ShouldRun ) -> ShouldRun {
1983
+ run. path ( "src/tools/lldb" )
1984
+ }
1985
+
1986
+ fn make_run ( run : RunConfig ) {
1987
+ run. builder . ensure ( Lldb {
1988
+ target : run. target ,
1989
+ } ) ;
1990
+ }
1991
+
1992
+ fn run ( self , builder : & Builder ) -> Option < PathBuf > {
1993
+ let target = self . target ;
1994
+
1995
+ if builder. config . dry_run {
1996
+ return None ;
1997
+ }
1998
+
1999
+ let bindir = builder
2000
+ . llvm_out ( target)
2001
+ . join ( "bin" ) ;
2002
+ let lldb_exe = bindir. join ( exe ( "lldb" , & target) ) ;
2003
+ if !lldb_exe. exists ( ) {
2004
+ return None ;
2005
+ }
2006
+
2007
+ builder. info ( & format ! ( "Dist Lldb ({})" , target) ) ;
2008
+ let src = builder. src . join ( "src/tools/lldb" ) ;
2009
+ let name = pkgname ( builder, "lldb" ) ;
2010
+
2011
+ let tmp = tmpdir ( builder) ;
2012
+ let image = tmp. join ( "lldb-image" ) ;
2013
+ drop ( fs:: remove_dir_all ( & image) ) ;
2014
+
2015
+ // Prepare the image directory
2016
+ let dst = image. join ( "bin" ) ;
2017
+ t ! ( fs:: create_dir_all( & dst) ) ;
2018
+ for program in & [ "lldb" , "lldb-argdumper" , "lldb-mi" , "lldb-server" ] {
2019
+ let exe = bindir. join ( exe ( program, & target) ) ;
2020
+ builder. install ( & exe, & dst, 0o755 ) ;
2021
+ }
2022
+
2023
+ // The libraries.
2024
+ let libdir = builder. llvm_out ( target) . join ( "lib" ) ;
2025
+ let dst = image. join ( "lib" ) ;
2026
+ t ! ( fs:: create_dir_all( & dst) ) ;
2027
+ for entry in t ! ( fs:: read_dir( & libdir) ) {
2028
+ // let entry = t!(entry);
2029
+ let entry = entry. unwrap ( ) ;
2030
+ if let Ok ( name) = entry. file_name ( ) . into_string ( ) {
2031
+ if name. starts_with ( "liblldb." ) && !name. ends_with ( ".a" ) {
2032
+ if t ! ( entry. file_type( ) ) . is_symlink ( ) {
2033
+ builder. copy_to_folder ( & entry. path ( ) , & dst) ;
2034
+ } else {
2035
+ builder. install ( & entry. path ( ) , & dst, 0o755 ) ;
2036
+ }
2037
+ }
2038
+ }
2039
+ }
2040
+
2041
+ // The lldb scripts might be installed in lib/python$version
2042
+ // or in lib64/python$version. If lib64 exists, use it;
2043
+ // otherwise lib.
2044
+ let libdir = builder. llvm_out ( target) . join ( "lib64" ) ;
2045
+ let ( libdir, libdir_name) = if libdir. exists ( ) {
2046
+ ( libdir, "lib64" )
2047
+ } else {
2048
+ ( builder. llvm_out ( target) . join ( "lib" ) , "lib" )
2049
+ } ;
2050
+ for entry in t ! ( fs:: read_dir( & libdir) ) {
2051
+ let entry = t ! ( entry) ;
2052
+ if let Ok ( name) = entry. file_name ( ) . into_string ( ) {
2053
+ if name. starts_with ( "python" ) {
2054
+ let dst = image. join ( libdir_name)
2055
+ . join ( entry. file_name ( ) ) ;
2056
+ t ! ( fs:: create_dir_all( & dst) ) ;
2057
+ builder. cp_r ( & entry. path ( ) , & dst) ;
2058
+ break ;
2059
+ }
2060
+ }
2061
+ }
2062
+
2063
+ // Prepare the overlay
2064
+ let overlay = tmp. join ( "lldb-overlay" ) ;
2065
+ drop ( fs:: remove_dir_all ( & overlay) ) ;
2066
+ builder. create_dir ( & overlay) ;
2067
+ builder. install ( & src. join ( "LICENSE.TXT" ) , & overlay, 0o644 ) ;
2068
+ builder. create ( & overlay. join ( "version" ) , & builder. lldb_vers ( ) ) ;
2069
+
2070
+ // Generate the installer tarball
2071
+ let mut cmd = rust_installer ( builder) ;
2072
+ cmd. arg ( "generate" )
2073
+ . arg ( "--product-name=Rust" )
2074
+ . arg ( "--rel-manifest-dir=rustlib" )
2075
+ . arg ( "--success-message=lldb-installed." )
2076
+ . arg ( "--image-dir" ) . arg ( & image)
2077
+ . arg ( "--work-dir" ) . arg ( & tmpdir ( builder) )
2078
+ . arg ( "--output-dir" ) . arg ( & distdir ( builder) )
2079
+ . arg ( "--non-installed-overlay" ) . arg ( & overlay)
2080
+ . arg ( format ! ( "--package-name={}-{}" , name, target) )
2081
+ . arg ( "--legacy-manifest-dirs=rustlib,cargo" )
2082
+ . arg ( "--component-name=lldb-preview" ) ;
2083
+
2084
+
2085
+ builder. run ( & mut cmd) ;
2086
+ Some ( distdir ( builder) . join ( format ! ( "{}-{}.tar.gz" , name, target) ) )
2087
+ }
2088
+ }
0 commit comments