@@ -1246,6 +1246,50 @@ impl Step for Rustfmt {
1246
1246
}
1247
1247
}
1248
1248
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
+
1249
1293
#[ derive( Debug , PartialOrd , Ord , Copy , Clone , Hash , PartialEq , Eq ) ]
1250
1294
pub struct Extended {
1251
1295
stage : u32 ,
@@ -1282,6 +1326,14 @@ impl Step for Extended {
1282
1326
let rustc_installer = builder. ensure ( Rustc { compiler : builder. compiler ( stage, target) } ) ;
1283
1327
let cargo_installer = builder. ensure ( Cargo { compiler, target } ) ;
1284
1328
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
+ } ;
1285
1337
let rls_installer = builder. ensure ( Rls { compiler, target } ) ;
1286
1338
let rust_analyzer_installer = builder. ensure ( RustAnalyzer { compiler, target } ) ;
1287
1339
let llvm_tools_installer = builder. ensure ( LlvmTools { target } ) ;
@@ -1312,6 +1364,9 @@ impl Step for Extended {
1312
1364
tarballs. push ( clippy_installer) ;
1313
1365
tarballs. extend ( miri_installer. clone ( ) ) ;
1314
1366
tarballs. extend ( rustfmt_installer. clone ( ) ) ;
1367
+ if let Some ( rust_demangler_installer) = rust_demangler_installer {
1368
+ tarballs. push ( rust_demangler_installer) ;
1369
+ }
1315
1370
tarballs. extend ( llvm_tools_installer) ;
1316
1371
if let Some ( analysis_installer) = analysis_installer {
1317
1372
tarballs. push ( analysis_installer) ;
@@ -1413,6 +1468,9 @@ impl Step for Extended {
1413
1468
prepare ( "rust-docs" ) ;
1414
1469
prepare ( "rust-std" ) ;
1415
1470
prepare ( "rust-analysis" ) ;
1471
+ if install_rust_demangler {
1472
+ prepare ( "rust-demangler" ) ;
1473
+ }
1416
1474
prepare ( "clippy" ) ;
1417
1475
1418
1476
if rls_installer. is_some ( ) {
@@ -1476,6 +1534,9 @@ impl Step for Extended {
1476
1534
prepare ( "rustc" ) ;
1477
1535
prepare ( "cargo" ) ;
1478
1536
prepare ( "rust-analysis" ) ;
1537
+ if install_rust_demangler {
1538
+ prepare ( "rust-demangler" ) ;
1539
+ }
1479
1540
prepare ( "rust-docs" ) ;
1480
1541
prepare ( "rust-std" ) ;
1481
1542
prepare ( "clippy" ) ;
@@ -1620,6 +1681,25 @@ impl Step for Extended {
1620
1681
. arg ( "-t" )
1621
1682
. arg ( etc. join ( "msi/remove-duplicates.xsl" ) ) ,
1622
1683
) ;
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
+ }
1623
1703
if miri_installer. is_some ( ) {
1624
1704
builder. run (
1625
1705
Command :: new ( & heat)
@@ -1715,6 +1795,9 @@ impl Step for Extended {
1715
1795
candle ( "CargoGroup.wxs" . as_ref ( ) ) ;
1716
1796
candle ( "StdGroup.wxs" . as_ref ( ) ) ;
1717
1797
candle ( "ClippyGroup.wxs" . as_ref ( ) ) ;
1798
+ if install_rust_demangler {
1799
+ candle ( "RustDemanglerGroup.wxs" . as_ref ( ) ) ;
1800
+ }
1718
1801
if rls_installer. is_some ( ) {
1719
1802
candle ( "RlsGroup.wxs" . as_ref ( ) ) ;
1720
1803
}
@@ -1761,6 +1844,9 @@ impl Step for Extended {
1761
1844
if rust_analyzer_installer. is_some ( ) {
1762
1845
cmd. arg ( "RustAnalyzerGroup.wixobj" ) ;
1763
1846
}
1847
+ if install_rust_demangler {
1848
+ cmd. arg ( "RustDemanglerGroup.wixobj" ) ;
1849
+ }
1764
1850
if miri_installer. is_some ( ) {
1765
1851
cmd. arg ( "MiriGroup.wixobj" ) ;
1766
1852
}
0 commit comments