@@ -1246,6 +1246,56 @@ 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 = 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
+
1249
1299
#[ derive( Debug , PartialOrd , Ord , Copy , Clone , Hash , PartialEq , Eq ) ]
1250
1300
pub struct Extended {
1251
1301
stage : u32 ,
@@ -1282,6 +1332,7 @@ impl Step for Extended {
1282
1332
let rustc_installer = builder. ensure ( Rustc { compiler : builder. compiler ( stage, target) } ) ;
1283
1333
let cargo_installer = builder. ensure ( Cargo { compiler, target } ) ;
1284
1334
let rustfmt_installer = builder. ensure ( Rustfmt { compiler, target } ) ;
1335
+ let rust_demangler_installer = builder. ensure ( RustDemangler { compiler, target } ) ;
1285
1336
let rls_installer = builder. ensure ( Rls { compiler, target } ) ;
1286
1337
let rust_analyzer_installer = builder. ensure ( RustAnalyzer { compiler, target } ) ;
1287
1338
let llvm_tools_installer = builder. ensure ( LlvmTools { target } ) ;
@@ -1307,9 +1358,10 @@ impl Step for Extended {
1307
1358
let mut tarballs = Vec :: new ( ) ;
1308
1359
tarballs. push ( rustc_installer) ;
1309
1360
tarballs. push ( cargo_installer) ;
1361
+ tarballs. push ( clippy_installer) ;
1362
+ tarballs. extend ( rust_demangler_installer. clone ( ) ) ;
1310
1363
tarballs. extend ( rls_installer. clone ( ) ) ;
1311
1364
tarballs. extend ( rust_analyzer_installer. clone ( ) ) ;
1312
- tarballs. push ( clippy_installer) ;
1313
1365
tarballs. extend ( miri_installer. clone ( ) ) ;
1314
1366
tarballs. extend ( rustfmt_installer. clone ( ) ) ;
1315
1367
tarballs. extend ( llvm_tools_installer) ;
@@ -1366,6 +1418,9 @@ impl Step for Extended {
1366
1418
1367
1419
let xform = |p : & Path | {
1368
1420
let mut contents = t ! ( fs:: read_to_string( p) ) ;
1421
+ if rust_demangler_installer. is_none ( ) {
1422
+ contents = filter ( & contents, "rust-demangler" ) ;
1423
+ }
1369
1424
if rls_installer. is_none ( ) {
1370
1425
contents = filter ( & contents, "rls" ) ;
1371
1426
}
@@ -1414,7 +1469,9 @@ impl Step for Extended {
1414
1469
prepare ( "rust-std" ) ;
1415
1470
prepare ( "rust-analysis" ) ;
1416
1471
prepare ( "clippy" ) ;
1417
-
1472
+ if rust_demangler_installer. is_some ( ) {
1473
+ prepare ( "rust-demangler" ) ;
1474
+ }
1418
1475
if rls_installer. is_some ( ) {
1419
1476
prepare ( "rls" ) ;
1420
1477
}
@@ -1462,6 +1519,8 @@ impl Step for Extended {
1462
1519
"rust-analyzer-preview" . to_string ( )
1463
1520
} else if name == "clippy" {
1464
1521
"clippy-preview" . to_string ( )
1522
+ } else if name == "rust-demangler" {
1523
+ "rust-demangler-preview" . to_string ( )
1465
1524
} else if name == "miri" {
1466
1525
"miri-preview" . to_string ( )
1467
1526
} else {
@@ -1479,6 +1538,9 @@ impl Step for Extended {
1479
1538
prepare ( "rust-docs" ) ;
1480
1539
prepare ( "rust-std" ) ;
1481
1540
prepare ( "clippy" ) ;
1541
+ if rust_demangler_installer. is_some ( ) {
1542
+ prepare ( "rust-demangler" ) ;
1543
+ }
1482
1544
if rls_installer. is_some ( ) {
1483
1545
prepare ( "rls" ) ;
1484
1546
}
@@ -1620,6 +1682,25 @@ impl Step for Extended {
1620
1682
. arg ( "-t" )
1621
1683
. arg ( etc. join ( "msi/remove-duplicates.xsl" ) ) ,
1622
1684
) ;
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
+ }
1623
1704
if miri_installer. is_some ( ) {
1624
1705
builder. run (
1625
1706
Command :: new ( & heat)
@@ -1693,6 +1774,9 @@ impl Step for Extended {
1693
1774
. arg ( & input) ;
1694
1775
add_env ( builder, & mut cmd, target) ;
1695
1776
1777
+ if rust_demangler_installer. is_some ( ) {
1778
+ cmd. arg ( "-dRustDemanglerDir=rust-demangler" ) ;
1779
+ }
1696
1780
if rls_installer. is_some ( ) {
1697
1781
cmd. arg ( "-dRlsDir=rls" ) ;
1698
1782
}
@@ -1715,6 +1799,9 @@ impl Step for Extended {
1715
1799
candle ( "CargoGroup.wxs" . as_ref ( ) ) ;
1716
1800
candle ( "StdGroup.wxs" . as_ref ( ) ) ;
1717
1801
candle ( "ClippyGroup.wxs" . as_ref ( ) ) ;
1802
+ if rust_demangler_installer. is_some ( ) {
1803
+ candle ( "RustDemanglerGroup.wxs" . as_ref ( ) ) ;
1804
+ }
1718
1805
if rls_installer. is_some ( ) {
1719
1806
candle ( "RlsGroup.wxs" . as_ref ( ) ) ;
1720
1807
}
@@ -1761,6 +1848,9 @@ impl Step for Extended {
1761
1848
if rust_analyzer_installer. is_some ( ) {
1762
1849
cmd. arg ( "RustAnalyzerGroup.wixobj" ) ;
1763
1850
}
1851
+ if rust_demangler_installer. is_some ( ) {
1852
+ cmd. arg ( "RustDemanglerGroup.wixobj" ) ;
1853
+ }
1764
1854
if miri_installer. is_some ( ) {
1765
1855
cmd. arg ( "MiriGroup.wixobj" ) ;
1766
1856
}
0 commit comments