@@ -1278,6 +1278,90 @@ impl Step for Clippy {
1278
1278
}
1279
1279
}
1280
1280
1281
+ #[ derive( Debug , PartialOrd , Ord , Copy , Clone , Hash , PartialEq , Eq ) ]
1282
+ pub struct Miri {
1283
+ pub stage : u32 ,
1284
+ pub target : Interned < String > ,
1285
+ }
1286
+
1287
+ impl Step for Miri {
1288
+ type Output = Option < PathBuf > ;
1289
+ const ONLY_HOSTS : bool = true ;
1290
+
1291
+ fn should_run ( run : ShouldRun ) -> ShouldRun {
1292
+ run. path ( "miri" )
1293
+ }
1294
+
1295
+ fn make_run ( run : RunConfig ) {
1296
+ run. builder . ensure ( Miri {
1297
+ stage : run. builder . top_stage ,
1298
+ target : run. target ,
1299
+ } ) ;
1300
+ }
1301
+
1302
+ fn run ( self , builder : & Builder ) -> Option < PathBuf > {
1303
+ let stage = self . stage ;
1304
+ let target = self . target ;
1305
+ assert ! ( builder. config. extended) ;
1306
+
1307
+ builder. info ( & format ! ( "Dist miri stage{} ({})" , stage, target) ) ;
1308
+ let src = builder. src . join ( "src/tools/miri" ) ;
1309
+ let release_num = builder. release_num ( "miri" ) ;
1310
+ let name = pkgname ( builder, "miri" ) ;
1311
+ let version = builder. miri_info . version ( builder, & release_num) ;
1312
+
1313
+ let tmp = tmpdir ( builder) ;
1314
+ let image = tmp. join ( "miri-image" ) ;
1315
+ drop ( fs:: remove_dir_all ( & image) ) ;
1316
+ builder. create_dir ( & image) ;
1317
+
1318
+ // Prepare the image directory
1319
+ // We expect miri to build, because we've exited this step above if tool
1320
+ // state for miri isn't testing.
1321
+ let miri = builder. ensure ( tool:: Miri {
1322
+ compiler : builder. compiler ( stage, builder. config . build ) ,
1323
+ target, extra_features : Vec :: new ( )
1324
+ } ) . or_else ( || { missing_tool ( "miri" , builder. build . config . missing_tools ) ; None } ) ?;
1325
+ let cargomiri = builder. ensure ( tool:: CargoMiri {
1326
+ compiler : builder. compiler ( stage, builder. config . build ) ,
1327
+ target, extra_features : Vec :: new ( )
1328
+ } ) . or_else ( || { missing_tool ( "cargo miri" , builder. build . config . missing_tools ) ; None } ) ?;
1329
+
1330
+ builder. install ( & miri, & image. join ( "bin" ) , 0o755 ) ;
1331
+ builder. install ( & cargomiri, & image. join ( "bin" ) , 0o755 ) ;
1332
+ let doc = image. join ( "share/doc/miri" ) ;
1333
+ builder. install ( & src. join ( "README.md" ) , & doc, 0o644 ) ;
1334
+ builder. install ( & src. join ( "LICENSE-APACHE" ) , & doc, 0o644 ) ;
1335
+ builder. install ( & src. join ( "LICENSE-MIT" ) , & doc, 0o644 ) ;
1336
+
1337
+ // Prepare the overlay
1338
+ let overlay = tmp. join ( "miri-overlay" ) ;
1339
+ drop ( fs:: remove_dir_all ( & overlay) ) ;
1340
+ t ! ( fs:: create_dir_all( & overlay) ) ;
1341
+ builder. install ( & src. join ( "README.md" ) , & overlay, 0o644 ) ;
1342
+ builder. install ( & src. join ( "LICENSE-APACHE" ) , & doc, 0o644 ) ;
1343
+ builder. install ( & src. join ( "LICENSE-MIT" ) , & doc, 0o644 ) ;
1344
+ builder. create ( & overlay. join ( "version" ) , & version) ;
1345
+
1346
+ // Generate the installer tarball
1347
+ let mut cmd = rust_installer ( builder) ;
1348
+ cmd. arg ( "generate" )
1349
+ . arg ( "--product-name=Rust" )
1350
+ . arg ( "--rel-manifest-dir=rustlib" )
1351
+ . arg ( "--success-message=miri-ready-to-serve." )
1352
+ . arg ( "--image-dir" ) . arg ( & image)
1353
+ . arg ( "--work-dir" ) . arg ( & tmpdir ( builder) )
1354
+ . arg ( "--output-dir" ) . arg ( & distdir ( builder) )
1355
+ . arg ( "--non-installed-overlay" ) . arg ( & overlay)
1356
+ . arg ( format ! ( "--package-name={}-{}" , name, target) )
1357
+ . arg ( "--legacy-manifest-dirs=rustlib,cargo" )
1358
+ . arg ( "--component-name=miri-preview" ) ;
1359
+
1360
+ builder. run ( & mut cmd) ;
1361
+ Some ( distdir ( builder) . join ( format ! ( "{}-{}.tar.gz" , name, target) ) )
1362
+ }
1363
+ }
1364
+
1281
1365
#[ derive( Debug , PartialOrd , Ord , Copy , Clone , Hash , PartialEq , Eq ) ]
1282
1366
pub struct Rustfmt {
1283
1367
pub stage : u32 ,
0 commit comments