@@ -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" {
@@ -1267,6 +1269,90 @@ impl Step for Clippy {
1267
1269
}
1268
1270
}
1269
1271
1272
+ #[ derive( Debug , PartialOrd , Ord , Copy , Clone , Hash , PartialEq , Eq ) ]
1273
+ pub struct Miri {
1274
+ pub stage : u32 ,
1275
+ pub target : Interned < String > ,
1276
+ }
1277
+
1278
+ impl Step for Miri {
1279
+ type Output = Option < PathBuf > ;
1280
+ const ONLY_HOSTS : bool = true ;
1281
+
1282
+ fn should_run ( run : ShouldRun ) -> ShouldRun {
1283
+ run. path ( "miri" )
1284
+ }
1285
+
1286
+ fn make_run ( run : RunConfig ) {
1287
+ run. builder . ensure ( Miri {
1288
+ stage : run. builder . top_stage ,
1289
+ target : run. target ,
1290
+ } ) ;
1291
+ }
1292
+
1293
+ fn run ( self , builder : & Builder ) -> Option < PathBuf > {
1294
+ let stage = self . stage ;
1295
+ let target = self . target ;
1296
+ assert ! ( builder. config. extended) ;
1297
+
1298
+ builder. info ( & format ! ( "Dist miri stage{} ({})" , stage, target) ) ;
1299
+ let src = builder. src . join ( "src/tools/miri" ) ;
1300
+ let release_num = builder. release_num ( "miri" ) ;
1301
+ let name = pkgname ( builder, "miri" ) ;
1302
+ let version = builder. miri_info . version ( builder, & release_num) ;
1303
+
1304
+ let tmp = tmpdir ( builder) ;
1305
+ let image = tmp. join ( "miri-image" ) ;
1306
+ drop ( fs:: remove_dir_all ( & image) ) ;
1307
+ builder. create_dir ( & image) ;
1308
+
1309
+ // Prepare the image directory
1310
+ // We expect miri to build, because we've exited this step above if tool
1311
+ // state for miri isn't testing.
1312
+ let miri = builder. ensure ( tool:: Miri {
1313
+ compiler : builder. compiler ( stage, builder. config . build ) ,
1314
+ target, extra_features : Vec :: new ( )
1315
+ } ) . or_else ( || { missing_tool ( "miri" , builder. build . config . missing_tools ) ; None } ) ?;
1316
+ let cargomiri = builder. ensure ( tool:: CargoMiri {
1317
+ compiler : builder. compiler ( stage, builder. config . build ) ,
1318
+ target, extra_features : Vec :: new ( )
1319
+ } ) . or_else ( || { missing_tool ( "cargo miri" , builder. build . config . missing_tools ) ; None } ) ?;
1320
+
1321
+ builder. install ( & miri, & image. join ( "bin" ) , 0o755 ) ;
1322
+ builder. install ( & cargomiri, & image. join ( "bin" ) , 0o755 ) ;
1323
+ let doc = image. join ( "share/doc/miri" ) ;
1324
+ builder. install ( & src. join ( "README.md" ) , & doc, 0o644 ) ;
1325
+ builder. install ( & src. join ( "LICENSE-APACHE" ) , & doc, 0o644 ) ;
1326
+ builder. install ( & src. join ( "LICENSE-MIT" ) , & doc, 0o644 ) ;
1327
+
1328
+ // Prepare the overlay
1329
+ let overlay = tmp. join ( "miri-overlay" ) ;
1330
+ drop ( fs:: remove_dir_all ( & overlay) ) ;
1331
+ t ! ( fs:: create_dir_all( & overlay) ) ;
1332
+ builder. install ( & src. join ( "README.md" ) , & overlay, 0o644 ) ;
1333
+ builder. install ( & src. join ( "LICENSE-APACHE" ) , & doc, 0o644 ) ;
1334
+ builder. install ( & src. join ( "LICENSE-MIT" ) , & doc, 0o644 ) ;
1335
+ builder. create ( & overlay. join ( "version" ) , & version) ;
1336
+
1337
+ // Generate the installer tarball
1338
+ let mut cmd = rust_installer ( builder) ;
1339
+ cmd. arg ( "generate" )
1340
+ . arg ( "--product-name=Rust" )
1341
+ . arg ( "--rel-manifest-dir=rustlib" )
1342
+ . arg ( "--success-message=miri-ready-to-serve." )
1343
+ . arg ( "--image-dir" ) . arg ( & image)
1344
+ . arg ( "--work-dir" ) . arg ( & tmpdir ( builder) )
1345
+ . arg ( "--output-dir" ) . arg ( & distdir ( builder) )
1346
+ . arg ( "--non-installed-overlay" ) . arg ( & overlay)
1347
+ . arg ( format ! ( "--package-name={}-{}" , name, target) )
1348
+ . arg ( "--legacy-manifest-dirs=rustlib,cargo" )
1349
+ . arg ( "--component-name=miri-preview" ) ;
1350
+
1351
+ builder. run ( & mut cmd) ;
1352
+ Some ( distdir ( builder) . join ( format ! ( "{}-{}.tar.gz" , name, target) ) )
1353
+ }
1354
+ }
1355
+
1270
1356
#[ derive( Debug , PartialOrd , Ord , Copy , Clone , Hash , PartialEq , Eq ) ]
1271
1357
pub struct Rustfmt {
1272
1358
pub stage : u32 ,
@@ -1388,6 +1474,7 @@ impl Step for Extended {
1388
1474
let rls_installer = builder. ensure ( Rls { stage, target } ) ;
1389
1475
let llvm_tools_installer = builder. ensure ( LlvmTools { stage, target } ) ;
1390
1476
let clippy_installer = builder. ensure ( Clippy { stage, target } ) ;
1477
+ let miri_installer = builder. ensure ( Miri { stage, target } ) ;
1391
1478
let lldb_installer = builder. ensure ( Lldb { target } ) ;
1392
1479
let mingw_installer = builder. ensure ( Mingw { host : target } ) ;
1393
1480
let analysis_installer = builder. ensure ( Analysis {
@@ -1426,6 +1513,7 @@ impl Step for Extended {
1426
1513
tarballs. push ( cargo_installer) ;
1427
1514
tarballs. extend ( rls_installer. clone ( ) ) ;
1428
1515
tarballs. extend ( clippy_installer. clone ( ) ) ;
1516
+ tarballs. extend ( miri_installer. clone ( ) ) ;
1429
1517
tarballs. extend ( rustfmt_installer. clone ( ) ) ;
1430
1518
tarballs. extend ( llvm_tools_installer) ;
1431
1519
tarballs. extend ( lldb_installer) ;
@@ -1498,6 +1586,9 @@ impl Step for Extended {
1498
1586
if clippy_installer. is_none ( ) {
1499
1587
contents = filter ( & contents, "clippy" ) ;
1500
1588
}
1589
+ if miri_installer. is_none ( ) {
1590
+ contents = filter ( & contents, "miri" ) ;
1591
+ }
1501
1592
if rustfmt_installer. is_none ( ) {
1502
1593
contents = filter ( & contents, "rustfmt" ) ;
1503
1594
}
@@ -1538,6 +1629,9 @@ impl Step for Extended {
1538
1629
if clippy_installer. is_some ( ) {
1539
1630
prepare ( "clippy" ) ;
1540
1631
}
1632
+ if miri_installer. is_some ( ) {
1633
+ prepare ( "miri" ) ;
1634
+ }
1541
1635
1542
1636
// create an 'uninstall' package
1543
1637
builder. install ( & etc. join ( "pkg/postinstall" ) , & pkg. join ( "uninstall" ) , 0o755 ) ;
@@ -1568,6 +1662,8 @@ impl Step for Extended {
1568
1662
"rls-preview" . to_string ( )
1569
1663
} else if name == "clippy" {
1570
1664
"clippy-preview" . to_string ( )
1665
+ } else if name == "miri" {
1666
+ "miri-preview" . to_string ( )
1571
1667
} else {
1572
1668
name. to_string ( )
1573
1669
} ;
@@ -1587,6 +1683,9 @@ impl Step for Extended {
1587
1683
if clippy_installer. is_some ( ) {
1588
1684
prepare ( "clippy" ) ;
1589
1685
}
1686
+ if miri_installer. is_some ( ) {
1687
+ prepare ( "miri" ) ;
1688
+ }
1590
1689
if target. contains ( "windows-gnu" ) {
1591
1690
prepare ( "rust-mingw" ) ;
1592
1691
}
@@ -1679,6 +1778,18 @@ impl Step for Extended {
1679
1778
. arg ( "-out" ) . arg ( exe. join ( "ClippyGroup.wxs" ) )
1680
1779
. arg ( "-t" ) . arg ( etc. join ( "msi/remove-duplicates.xsl" ) ) ) ;
1681
1780
}
1781
+ if miri_installer. is_some ( ) {
1782
+ builder. run ( Command :: new ( & heat)
1783
+ . current_dir ( & exe)
1784
+ . arg ( "dir" )
1785
+ . arg ( "miri" )
1786
+ . args ( & heat_flags)
1787
+ . arg ( "-cg" ) . arg ( "MiriGroup" )
1788
+ . arg ( "-dr" ) . arg ( "Miri" )
1789
+ . arg ( "-var" ) . arg ( "var.MiriDir" )
1790
+ . arg ( "-out" ) . arg ( exe. join ( "MiriGroup.wxs" ) )
1791
+ . arg ( "-t" ) . arg ( etc. join ( "msi/remove-duplicates.xsl" ) ) ) ;
1792
+ }
1682
1793
builder. run ( Command :: new ( & heat)
1683
1794
. current_dir ( & exe)
1684
1795
. arg ( "dir" )
@@ -1724,6 +1835,9 @@ impl Step for Extended {
1724
1835
if clippy_installer. is_some ( ) {
1725
1836
cmd. arg ( "-dClippyDir=clippy" ) ;
1726
1837
}
1838
+ if miri_installer. is_some ( ) {
1839
+ cmd. arg ( "-dMiriDir=miri" ) ;
1840
+ }
1727
1841
if target. contains ( "windows-gnu" ) {
1728
1842
cmd. arg ( "-dGccDir=rust-mingw" ) ;
1729
1843
}
@@ -1742,6 +1856,9 @@ impl Step for Extended {
1742
1856
if clippy_installer. is_some ( ) {
1743
1857
candle ( "ClippyGroup.wxs" . as_ref ( ) ) ;
1744
1858
}
1859
+ if miri_installer. is_some ( ) {
1860
+ candle ( "MiriGroup.wxs" . as_ref ( ) ) ;
1861
+ }
1745
1862
candle ( "AnalysisGroup.wxs" . as_ref ( ) ) ;
1746
1863
1747
1864
if target. contains ( "windows-gnu" ) {
@@ -1774,6 +1891,9 @@ impl Step for Extended {
1774
1891
if clippy_installer. is_some ( ) {
1775
1892
cmd. arg ( "ClippyGroup.wixobj" ) ;
1776
1893
}
1894
+ if miri_installer. is_some ( ) {
1895
+ cmd. arg ( "MiriGroup.wixobj" ) ;
1896
+ }
1777
1897
1778
1898
if target. contains ( "windows-gnu" ) {
1779
1899
cmd. arg ( "GccGroup.wixobj" ) ;
@@ -1859,6 +1979,7 @@ impl Step for HashSign {
1859
1979
cmd. arg ( builder. package_vers ( & builder. release_num ( "cargo" ) ) ) ;
1860
1980
cmd. arg ( builder. package_vers ( & builder. release_num ( "rls" ) ) ) ;
1861
1981
cmd. arg ( builder. package_vers ( & builder. release_num ( "clippy" ) ) ) ;
1982
+ cmd. arg ( builder. package_vers ( & builder. release_num ( "miri" ) ) ) ;
1862
1983
cmd. arg ( builder. package_vers ( & builder. release_num ( "rustfmt" ) ) ) ;
1863
1984
cmd. arg ( builder. llvm_tools_package_vers ( ) ) ;
1864
1985
cmd. arg ( builder. lldb_package_vers ( ) ) ;
0 commit comments