@@ -32,6 +32,8 @@ pub fn pkgname(builder: &Builder, component: &str) -> String {
32
32
format ! ( "{}-{}" , component, builder. rls_package_vers( ) )
33
33
} else if component == "clippy" {
34
34
format ! ( "{}-{}" , component, builder. clippy_package_vers( ) )
35
+ } else if component == "miri" {
36
+ format ! ( "{}-{}" , component, builder. miri_package_vers( ) )
35
37
} else if component == "rustfmt" {
36
38
format ! ( "{}-{}" , component, builder. rustfmt_package_vers( ) )
37
39
} else if component == "llvm-tools" {
@@ -1275,6 +1277,90 @@ impl Step for Clippy {
1275
1277
}
1276
1278
}
1277
1279
1280
+ #[ derive( Debug , PartialOrd , Ord , Copy , Clone , Hash , PartialEq , Eq ) ]
1281
+ pub struct Miri {
1282
+ pub stage : u32 ,
1283
+ pub target : Interned < String > ,
1284
+ }
1285
+
1286
+ impl Step for Miri {
1287
+ type Output = Option < PathBuf > ;
1288
+ const ONLY_HOSTS : bool = true ;
1289
+
1290
+ fn should_run ( run : ShouldRun ) -> ShouldRun {
1291
+ run. path ( "miri" )
1292
+ }
1293
+
1294
+ fn make_run ( run : RunConfig ) {
1295
+ run. builder . ensure ( Miri {
1296
+ stage : run. builder . top_stage ,
1297
+ target : run. target ,
1298
+ } ) ;
1299
+ }
1300
+
1301
+ fn run ( self , builder : & Builder ) -> Option < PathBuf > {
1302
+ let stage = self . stage ;
1303
+ let target = self . target ;
1304
+ assert ! ( builder. config. extended) ;
1305
+
1306
+ builder. info ( & format ! ( "Dist miri stage{} ({})" , stage, target) ) ;
1307
+ let src = builder. src . join ( "src/tools/miri" ) ;
1308
+ let release_num = builder. release_num ( "miri" ) ;
1309
+ let name = pkgname ( builder, "miri" ) ;
1310
+ let version = builder. miri_info . version ( builder, & release_num) ;
1311
+
1312
+ let tmp = tmpdir ( builder) ;
1313
+ let image = tmp. join ( "miri-image" ) ;
1314
+ drop ( fs:: remove_dir_all ( & image) ) ;
1315
+ builder. create_dir ( & image) ;
1316
+
1317
+ // Prepare the image directory
1318
+ // We expect miri to build, because we've exited this step above if tool
1319
+ // state for miri isn't testing.
1320
+ let miri = builder. ensure ( tool:: Miri {
1321
+ compiler : builder. compiler ( stage, builder. config . build ) ,
1322
+ target, extra_features : Vec :: new ( )
1323
+ } ) . or_else ( || { missing_tool ( "miri" , builder. build . config . missing_tools ) ; None } ) ?;
1324
+ let cargomiri = builder. ensure ( tool:: CargoMiri {
1325
+ compiler : builder. compiler ( stage, builder. config . build ) ,
1326
+ target, extra_features : Vec :: new ( )
1327
+ } ) . or_else ( || { missing_tool ( "cargo miri" , builder. build . config . missing_tools ) ; None } ) ?;
1328
+
1329
+ builder. install ( & miri, & image. join ( "bin" ) , 0o755 ) ;
1330
+ builder. install ( & cargomiri, & image. join ( "bin" ) , 0o755 ) ;
1331
+ let doc = image. join ( "share/doc/miri" ) ;
1332
+ builder. install ( & src. join ( "README.md" ) , & doc, 0o644 ) ;
1333
+ builder. install ( & src. join ( "LICENSE-APACHE" ) , & doc, 0o644 ) ;
1334
+ builder. install ( & src. join ( "LICENSE-MIT" ) , & doc, 0o644 ) ;
1335
+
1336
+ // Prepare the overlay
1337
+ let overlay = tmp. join ( "miri-overlay" ) ;
1338
+ drop ( fs:: remove_dir_all ( & overlay) ) ;
1339
+ t ! ( fs:: create_dir_all( & overlay) ) ;
1340
+ builder. install ( & src. join ( "README.md" ) , & overlay, 0o644 ) ;
1341
+ builder. install ( & src. join ( "LICENSE-APACHE" ) , & doc, 0o644 ) ;
1342
+ builder. install ( & src. join ( "LICENSE-MIT" ) , & doc, 0o644 ) ;
1343
+ builder. create ( & overlay. join ( "version" ) , & version) ;
1344
+
1345
+ // Generate the installer tarball
1346
+ let mut cmd = rust_installer ( builder) ;
1347
+ cmd. arg ( "generate" )
1348
+ . arg ( "--product-name=Rust" )
1349
+ . arg ( "--rel-manifest-dir=rustlib" )
1350
+ . arg ( "--success-message=miri-ready-to-serve." )
1351
+ . arg ( "--image-dir" ) . arg ( & image)
1352
+ . arg ( "--work-dir" ) . arg ( & tmpdir ( builder) )
1353
+ . arg ( "--output-dir" ) . arg ( & distdir ( builder) )
1354
+ . arg ( "--non-installed-overlay" ) . arg ( & overlay)
1355
+ . arg ( format ! ( "--package-name={}-{}" , name, target) )
1356
+ . arg ( "--legacy-manifest-dirs=rustlib,cargo" )
1357
+ . arg ( "--component-name=miri-preview" ) ;
1358
+
1359
+ builder. run ( & mut cmd) ;
1360
+ Some ( distdir ( builder) . join ( format ! ( "{}-{}.tar.gz" , name, target) ) )
1361
+ }
1362
+ }
1363
+
1278
1364
#[ derive( Debug , PartialOrd , Ord , Copy , Clone , Hash , PartialEq , Eq ) ]
1279
1365
pub struct Rustfmt {
1280
1366
pub stage : u32 ,
@@ -1396,6 +1482,7 @@ impl Step for Extended {
1396
1482
let rls_installer = builder. ensure ( Rls { stage, target } ) ;
1397
1483
let llvm_tools_installer = builder. ensure ( LlvmTools { stage, target } ) ;
1398
1484
let clippy_installer = builder. ensure ( Clippy { stage, target } ) ;
1485
+ let miri_installer = builder. ensure ( Miri { stage, target } ) ;
1399
1486
let lldb_installer = builder. ensure ( Lldb { target } ) ;
1400
1487
let mingw_installer = builder. ensure ( Mingw { host : target } ) ;
1401
1488
let analysis_installer = builder. ensure ( Analysis {
@@ -1434,6 +1521,7 @@ impl Step for Extended {
1434
1521
tarballs. push ( cargo_installer) ;
1435
1522
tarballs. extend ( rls_installer. clone ( ) ) ;
1436
1523
tarballs. extend ( clippy_installer. clone ( ) ) ;
1524
+ tarballs. extend ( miri_installer. clone ( ) ) ;
1437
1525
tarballs. extend ( rustfmt_installer. clone ( ) ) ;
1438
1526
tarballs. extend ( llvm_tools_installer) ;
1439
1527
tarballs. extend ( lldb_installer) ;
@@ -1506,6 +1594,9 @@ impl Step for Extended {
1506
1594
if clippy_installer. is_none ( ) {
1507
1595
contents = filter ( & contents, "clippy" ) ;
1508
1596
}
1597
+ if miri_installer. is_none ( ) {
1598
+ contents = filter ( & contents, "miri" ) ;
1599
+ }
1509
1600
if rustfmt_installer. is_none ( ) {
1510
1601
contents = filter ( & contents, "rustfmt" ) ;
1511
1602
}
@@ -1546,6 +1637,9 @@ impl Step for Extended {
1546
1637
if clippy_installer. is_some ( ) {
1547
1638
prepare ( "clippy" ) ;
1548
1639
}
1640
+ if miri_installer. is_some ( ) {
1641
+ prepare ( "miri" ) ;
1642
+ }
1549
1643
1550
1644
// create an 'uninstall' package
1551
1645
builder. install ( & etc. join ( "pkg/postinstall" ) , & pkg. join ( "uninstall" ) , 0o755 ) ;
@@ -1576,6 +1670,8 @@ impl Step for Extended {
1576
1670
"rls-preview" . to_string ( )
1577
1671
} else if name == "clippy" {
1578
1672
"clippy-preview" . to_string ( )
1673
+ } else if name == "miri" {
1674
+ "miri-preview" . to_string ( )
1579
1675
} else {
1580
1676
name. to_string ( )
1581
1677
} ;
@@ -1595,6 +1691,9 @@ impl Step for Extended {
1595
1691
if clippy_installer. is_some ( ) {
1596
1692
prepare ( "clippy" ) ;
1597
1693
}
1694
+ if miri_installer. is_some ( ) {
1695
+ prepare ( "miri" ) ;
1696
+ }
1598
1697
if target. contains ( "windows-gnu" ) {
1599
1698
prepare ( "rust-mingw" ) ;
1600
1699
}
@@ -1687,6 +1786,18 @@ impl Step for Extended {
1687
1786
. arg ( "-out" ) . arg ( exe. join ( "ClippyGroup.wxs" ) )
1688
1787
. arg ( "-t" ) . arg ( etc. join ( "msi/remove-duplicates.xsl" ) ) ) ;
1689
1788
}
1789
+ if miri_installer. is_some ( ) {
1790
+ builder. run ( Command :: new ( & heat)
1791
+ . current_dir ( & exe)
1792
+ . arg ( "dir" )
1793
+ . arg ( "miri" )
1794
+ . args ( & heat_flags)
1795
+ . arg ( "-cg" ) . arg ( "MiriGroup" )
1796
+ . arg ( "-dr" ) . arg ( "Miri" )
1797
+ . arg ( "-var" ) . arg ( "var.MiriDir" )
1798
+ . arg ( "-out" ) . arg ( exe. join ( "MiriGroup.wxs" ) )
1799
+ . arg ( "-t" ) . arg ( etc. join ( "msi/remove-duplicates.xsl" ) ) ) ;
1800
+ }
1690
1801
builder. run ( Command :: new ( & heat)
1691
1802
. current_dir ( & exe)
1692
1803
. arg ( "dir" )
@@ -1732,6 +1843,9 @@ impl Step for Extended {
1732
1843
if clippy_installer. is_some ( ) {
1733
1844
cmd. arg ( "-dClippyDir=clippy" ) ;
1734
1845
}
1846
+ if miri_installer. is_some ( ) {
1847
+ cmd. arg ( "-dMiriDir=miri" ) ;
1848
+ }
1735
1849
if target. contains ( "windows-gnu" ) {
1736
1850
cmd. arg ( "-dGccDir=rust-mingw" ) ;
1737
1851
}
@@ -1750,6 +1864,9 @@ impl Step for Extended {
1750
1864
if clippy_installer. is_some ( ) {
1751
1865
candle ( "ClippyGroup.wxs" . as_ref ( ) ) ;
1752
1866
}
1867
+ if miri_installer. is_some ( ) {
1868
+ candle ( "MiriGroup.wxs" . as_ref ( ) ) ;
1869
+ }
1753
1870
candle ( "AnalysisGroup.wxs" . as_ref ( ) ) ;
1754
1871
1755
1872
if target. contains ( "windows-gnu" ) {
@@ -1782,6 +1899,9 @@ impl Step for Extended {
1782
1899
if clippy_installer. is_some ( ) {
1783
1900
cmd. arg ( "ClippyGroup.wixobj" ) ;
1784
1901
}
1902
+ if miri_installer. is_some ( ) {
1903
+ cmd. arg ( "MiriGroup.wixobj" ) ;
1904
+ }
1785
1905
1786
1906
if target. contains ( "windows-gnu" ) {
1787
1907
cmd. arg ( "GccGroup.wixobj" ) ;
@@ -1867,6 +1987,7 @@ impl Step for HashSign {
1867
1987
cmd. arg ( builder. package_vers ( & builder. release_num ( "cargo" ) ) ) ;
1868
1988
cmd. arg ( builder. package_vers ( & builder. release_num ( "rls" ) ) ) ;
1869
1989
cmd. arg ( builder. package_vers ( & builder. release_num ( "clippy" ) ) ) ;
1990
+ cmd. arg ( builder. package_vers ( & builder. release_num ( "miri" ) ) ) ;
1870
1991
cmd. arg ( builder. package_vers ( & builder. release_num ( "rustfmt" ) ) ) ;
1871
1992
cmd. arg ( builder. llvm_tools_package_vers ( ) ) ;
1872
1993
cmd. arg ( builder. lldb_package_vers ( ) ) ;
0 commit comments