@@ -1246,6 +1246,56 @@ impl Step for Rustfmt {
12461246 }
12471247}
12481248
1249+ #[ derive( Debug , PartialOrd , Ord , Copy , Clone , Hash , PartialEq , Eq ) ]
1250+ pub struct RustDemangler {
1251+ pub compiler : Compiler ,
1252+ pub target : TargetSelection ,
1253+ }
1254+
1255+ impl Step for RustDemangler {
1256+ type Output = Option < GeneratedTarball > ;
1257+ const ONLY_HOSTS : bool = true ;
1258+
1259+ fn should_run ( run : ShouldRun < ' _ > ) -> ShouldRun < ' _ > {
1260+ run. path ( "rust-demangler" )
1261+ }
1262+
1263+ fn make_run ( run : RunConfig < ' _ > ) {
1264+ run. builder . ensure ( RustDemangler {
1265+ compiler : run. builder . compiler_for (
1266+ run. builder . top_stage ,
1267+ run. builder . config . build ,
1268+ run. target ,
1269+ ) ,
1270+ target : run. target ,
1271+ } ) ;
1272+ }
1273+
1274+ fn run ( self , builder : & Builder < ' _ > ) -> Option < GeneratedTarball > {
1275+ let compiler = self . compiler ;
1276+ let target = self . target ;
1277+ assert ! ( builder. config. extended) ;
1278+
1279+ // Only build this extended tool if explicitly included in `tools`, or if `profiler = true`
1280+ let profiler = builder. config . profiler_enabled ( target) ;
1281+ if !builder. config . tools . as_ref ( ) . map_or ( profiler, |t| t. contains ( "rust-demangler" ) ) {
1282+ return None ;
1283+ }
1284+
1285+ let rust_demangler = builder
1286+ . ensure ( tool:: RustDemangler { compiler, target, extra_features : Vec :: new ( ) } )
1287+ . expect ( "rust-demangler expected to build - in-tree tool" ) ;
1288+
1289+ // Prepare the image directory
1290+ let mut tarball = Tarball :: new ( builder, "rust-demangler" , & target. triple ) ;
1291+ tarball. set_overlay ( OverlayKind :: RustDemangler ) ;
1292+ tarball. is_preview ( true ) ;
1293+ tarball. add_file ( & rust_demangler, "bin" , 0o755 ) ;
1294+ tarball. add_legal_and_readme_to ( "share/doc/rust-demangler" ) ;
1295+ Some ( tarball. generate ( ) )
1296+ }
1297+ }
1298+
12491299#[ derive( Debug , PartialOrd , Ord , Copy , Clone , Hash , PartialEq , Eq ) ]
12501300pub struct Extended {
12511301 stage : u32 ,
@@ -1282,6 +1332,7 @@ impl Step for Extended {
12821332 let rustc_installer = builder. ensure ( Rustc { compiler : builder. compiler ( stage, target) } ) ;
12831333 let cargo_installer = builder. ensure ( Cargo { compiler, target } ) ;
12841334 let rustfmt_installer = builder. ensure ( Rustfmt { compiler, target } ) ;
1335+ let rust_demangler_installer = builder. ensure ( RustDemangler { compiler, target } ) ;
12851336 let rls_installer = builder. ensure ( Rls { compiler, target } ) ;
12861337 let rust_analyzer_installer = builder. ensure ( RustAnalyzer { compiler, target } ) ;
12871338 let llvm_tools_installer = builder. ensure ( LlvmTools { target } ) ;
@@ -1307,9 +1358,10 @@ impl Step for Extended {
13071358 let mut tarballs = Vec :: new ( ) ;
13081359 tarballs. push ( rustc_installer) ;
13091360 tarballs. push ( cargo_installer) ;
1361+ tarballs. push ( clippy_installer) ;
1362+ tarballs. extend ( rust_demangler_installer. clone ( ) ) ;
13101363 tarballs. extend ( rls_installer. clone ( ) ) ;
13111364 tarballs. extend ( rust_analyzer_installer. clone ( ) ) ;
1312- tarballs. push ( clippy_installer) ;
13131365 tarballs. extend ( miri_installer. clone ( ) ) ;
13141366 tarballs. extend ( rustfmt_installer. clone ( ) ) ;
13151367 tarballs. extend ( llvm_tools_installer) ;
@@ -1366,6 +1418,9 @@ impl Step for Extended {
13661418
13671419 let xform = |p : & Path | {
13681420 let mut contents = t ! ( fs:: read_to_string( p) ) ;
1421+ if rust_demangler_installer. is_none ( ) {
1422+ contents = filter ( & contents, "rust-demangler" ) ;
1423+ }
13691424 if rls_installer. is_none ( ) {
13701425 contents = filter ( & contents, "rls" ) ;
13711426 }
@@ -1414,7 +1469,9 @@ impl Step for Extended {
14141469 prepare ( "rust-std" ) ;
14151470 prepare ( "rust-analysis" ) ;
14161471 prepare ( "clippy" ) ;
1417-
1472+ if rust_demangler_installer. is_some ( ) {
1473+ prepare ( "rust-demangler" ) ;
1474+ }
14181475 if rls_installer. is_some ( ) {
14191476 prepare ( "rls" ) ;
14201477 }
@@ -1462,6 +1519,8 @@ impl Step for Extended {
14621519 "rust-analyzer-preview" . to_string ( )
14631520 } else if name == "clippy" {
14641521 "clippy-preview" . to_string ( )
1522+ } else if name == "rust-demangler" {
1523+ "rust-demangler-preview" . to_string ( )
14651524 } else if name == "miri" {
14661525 "miri-preview" . to_string ( )
14671526 } else {
@@ -1479,6 +1538,9 @@ impl Step for Extended {
14791538 prepare ( "rust-docs" ) ;
14801539 prepare ( "rust-std" ) ;
14811540 prepare ( "clippy" ) ;
1541+ if rust_demangler_installer. is_some ( ) {
1542+ prepare ( "rust-demangler" ) ;
1543+ }
14821544 if rls_installer. is_some ( ) {
14831545 prepare ( "rls" ) ;
14841546 }
@@ -1620,6 +1682,25 @@ impl Step for Extended {
16201682 . arg ( "-t" )
16211683 . arg ( etc. join ( "msi/remove-duplicates.xsl" ) ) ,
16221684 ) ;
1685+ if rust_demangler_installer. is_some ( ) {
1686+ builder. run (
1687+ Command :: new ( & heat)
1688+ . current_dir ( & exe)
1689+ . arg ( "dir" )
1690+ . arg ( "rust-demangler" )
1691+ . args ( & heat_flags)
1692+ . arg ( "-cg" )
1693+ . arg ( "RustDemanglerGroup" )
1694+ . arg ( "-dr" )
1695+ . arg ( "RustDemangler" )
1696+ . arg ( "-var" )
1697+ . arg ( "var.RustDemanglerDir" )
1698+ . arg ( "-out" )
1699+ . arg ( exe. join ( "RustDemanglerGroup.wxs" ) )
1700+ . arg ( "-t" )
1701+ . arg ( etc. join ( "msi/remove-duplicates.xsl" ) ) ,
1702+ ) ;
1703+ }
16231704 if miri_installer. is_some ( ) {
16241705 builder. run (
16251706 Command :: new ( & heat)
@@ -1693,6 +1774,9 @@ impl Step for Extended {
16931774 . arg ( & input) ;
16941775 add_env ( builder, & mut cmd, target) ;
16951776
1777+ if rust_demangler_installer. is_some ( ) {
1778+ cmd. arg ( "-dRustDemanglerDir=rust-demangler" ) ;
1779+ }
16961780 if rls_installer. is_some ( ) {
16971781 cmd. arg ( "-dRlsDir=rls" ) ;
16981782 }
@@ -1715,6 +1799,9 @@ impl Step for Extended {
17151799 candle ( "CargoGroup.wxs" . as_ref ( ) ) ;
17161800 candle ( "StdGroup.wxs" . as_ref ( ) ) ;
17171801 candle ( "ClippyGroup.wxs" . as_ref ( ) ) ;
1802+ if rust_demangler_installer. is_some ( ) {
1803+ candle ( "RustDemanglerGroup.wxs" . as_ref ( ) ) ;
1804+ }
17181805 if rls_installer. is_some ( ) {
17191806 candle ( "RlsGroup.wxs" . as_ref ( ) ) ;
17201807 }
@@ -1761,6 +1848,9 @@ impl Step for Extended {
17611848 if rust_analyzer_installer. is_some ( ) {
17621849 cmd. arg ( "RustAnalyzerGroup.wixobj" ) ;
17631850 }
1851+ if rust_demangler_installer. is_some ( ) {
1852+ cmd. arg ( "RustDemanglerGroup.wixobj" ) ;
1853+ }
17641854 if miri_installer. is_some ( ) {
17651855 cmd. arg ( "MiriGroup.wixobj" ) ;
17661856 }
0 commit comments