@@ -1246,6 +1246,50 @@ 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 = 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 < ' _ > ) -> GeneratedTarball {
1275+ let compiler = self . compiler ;
1276+ let target = self . target ;
1277+ assert ! ( builder. config. extended) ;
1278+
1279+ let rust_demangler = builder
1280+ . ensure ( tool:: RustDemangler { compiler, target, extra_features : Vec :: new ( ) } )
1281+ . expect ( "rust-demangler expected to build - in-tree tool" ) ;
1282+
1283+ // Prepare the image directory
1284+ let mut tarball = Tarball :: new ( builder, "rust-demangler" , & target. triple ) ;
1285+ tarball. set_overlay ( OverlayKind :: RustDemangler ) ;
1286+ tarball. is_preview ( true ) ;
1287+ tarball. add_file ( & rust_demangler, "bin" , 0o755 ) ;
1288+ tarball. add_legal_and_readme_to ( "share/doc/rust-demangler" ) ;
1289+ tarball. generate ( )
1290+ }
1291+ }
1292+
12491293#[ derive( Debug , PartialOrd , Ord , Copy , Clone , Hash , PartialEq , Eq ) ]
12501294pub struct Extended {
12511295 stage : u32 ,
@@ -1282,6 +1326,14 @@ impl Step for Extended {
12821326 let rustc_installer = builder. ensure ( Rustc { compiler : builder. compiler ( stage, target) } ) ;
12831327 let cargo_installer = builder. ensure ( Cargo { compiler, target } ) ;
12841328 let rustfmt_installer = builder. ensure ( Rustfmt { compiler, target } ) ;
1329+ let profiler = builder. config . profiler_enabled ( target) ;
1330+ let install_rust_demangler =
1331+ builder. config . tools . as_ref ( ) . map_or ( profiler, |t| t. contains ( "rust-demangler" ) ) ;
1332+ let rust_demangler_installer = if install_rust_demangler {
1333+ Some ( builder. ensure ( RustDemangler { compiler, target } ) )
1334+ } else {
1335+ None
1336+ } ;
12851337 let rls_installer = builder. ensure ( Rls { compiler, target } ) ;
12861338 let rust_analyzer_installer = builder. ensure ( RustAnalyzer { compiler, target } ) ;
12871339 let llvm_tools_installer = builder. ensure ( LlvmTools { target } ) ;
@@ -1312,6 +1364,9 @@ impl Step for Extended {
13121364 tarballs. push ( clippy_installer) ;
13131365 tarballs. extend ( miri_installer. clone ( ) ) ;
13141366 tarballs. extend ( rustfmt_installer. clone ( ) ) ;
1367+ if let Some ( rust_demangler_installer) = rust_demangler_installer {
1368+ tarballs. push ( rust_demangler_installer) ;
1369+ }
13151370 tarballs. extend ( llvm_tools_installer) ;
13161371 if let Some ( analysis_installer) = analysis_installer {
13171372 tarballs. push ( analysis_installer) ;
@@ -1413,6 +1468,9 @@ impl Step for Extended {
14131468 prepare ( "rust-docs" ) ;
14141469 prepare ( "rust-std" ) ;
14151470 prepare ( "rust-analysis" ) ;
1471+ if install_rust_demangler {
1472+ prepare ( "rust-demangler" ) ;
1473+ }
14161474 prepare ( "clippy" ) ;
14171475
14181476 if rls_installer. is_some ( ) {
@@ -1476,6 +1534,9 @@ impl Step for Extended {
14761534 prepare ( "rustc" ) ;
14771535 prepare ( "cargo" ) ;
14781536 prepare ( "rust-analysis" ) ;
1537+ if install_rust_demangler {
1538+ prepare ( "rust-demangler" ) ;
1539+ }
14791540 prepare ( "rust-docs" ) ;
14801541 prepare ( "rust-std" ) ;
14811542 prepare ( "clippy" ) ;
@@ -1620,6 +1681,25 @@ impl Step for Extended {
16201681 . arg ( "-t" )
16211682 . arg ( etc. join ( "msi/remove-duplicates.xsl" ) ) ,
16221683 ) ;
1684+ if install_rust_demangler {
1685+ builder. run (
1686+ Command :: new ( & heat)
1687+ . current_dir ( & exe)
1688+ . arg ( "dir" )
1689+ . arg ( "rust-demangler" )
1690+ . args ( & heat_flags)
1691+ . arg ( "-cg" )
1692+ . arg ( "RustDemanglerGroup" )
1693+ . arg ( "-dr" )
1694+ . arg ( "RustDemangler" )
1695+ . arg ( "-var" )
1696+ . arg ( "var.RustDemanglerDir" )
1697+ . arg ( "-out" )
1698+ . arg ( exe. join ( "RustDemanglerGroup.wxs" ) )
1699+ . arg ( "-t" )
1700+ . arg ( etc. join ( "msi/remove-duplicates.xsl" ) ) ,
1701+ ) ;
1702+ }
16231703 if miri_installer. is_some ( ) {
16241704 builder. run (
16251705 Command :: new ( & heat)
@@ -1715,6 +1795,9 @@ impl Step for Extended {
17151795 candle ( "CargoGroup.wxs" . as_ref ( ) ) ;
17161796 candle ( "StdGroup.wxs" . as_ref ( ) ) ;
17171797 candle ( "ClippyGroup.wxs" . as_ref ( ) ) ;
1798+ if install_rust_demangler {
1799+ candle ( "RustDemanglerGroup.wxs" . as_ref ( ) ) ;
1800+ }
17181801 if rls_installer. is_some ( ) {
17191802 candle ( "RlsGroup.wxs" . as_ref ( ) ) ;
17201803 }
@@ -1761,6 +1844,9 @@ impl Step for Extended {
17611844 if rust_analyzer_installer. is_some ( ) {
17621845 cmd. arg ( "RustAnalyzerGroup.wixobj" ) ;
17631846 }
1847+ if install_rust_demangler {
1848+ cmd. arg ( "RustDemanglerGroup.wixobj" ) ;
1849+ }
17641850 if miri_installer. is_some ( ) {
17651851 cmd. arg ( "MiriGroup.wixobj" ) ;
17661852 }
0 commit comments