1111use std:: collections:: { HashMap , HashSet } ;
1212use std:: mem;
1313
14- use check;
14+ use check:: { self , TestKind } ;
1515use compile;
1616use dist;
1717use doc;
@@ -268,37 +268,55 @@ pub fn build_rules(build: &Build) -> Rules {
268268 rules. test ( & krate. test_step , path)
269269 . dep ( |s| s. name ( "libtest" ) )
270270 . run ( move |s| check:: krate ( build, & s. compiler ( ) , s. target ,
271- Mode :: Libstd , Some ( & krate. name ) ) ) ;
271+ Mode :: Libstd , TestKind :: Test ,
272+ Some ( & krate. name ) ) ) ;
272273 }
273274 rules. test ( "check-std-all" , "path/to/nowhere" )
274275 . dep ( |s| s. name ( "libtest" ) )
275276 . default ( true )
276- . run ( move |s| check:: krate ( build, & s. compiler ( ) , s. target , Mode :: Libstd ,
277- None ) ) ;
277+ . run ( move |s| check:: krate ( build, & s. compiler ( ) , s. target ,
278+ Mode :: Libstd , TestKind :: Test , None ) ) ;
279+
280+ // std benchmarks
281+ for ( krate, path, _default) in krates ( "std_shim" ) {
282+ rules. bench ( & krate. bench_step , path)
283+ . dep ( |s| s. name ( "libtest" ) )
284+ . run ( move |s| check:: krate ( build, & s. compiler ( ) , s. target ,
285+ Mode :: Libstd , TestKind :: Bench ,
286+ Some ( & krate. name ) ) ) ;
287+ }
288+ rules. bench ( "bench-std-all" , "path/to/nowhere" )
289+ . dep ( |s| s. name ( "libtest" ) )
290+ . default ( true )
291+ . run ( move |s| check:: krate ( build, & s. compiler ( ) , s. target ,
292+ Mode :: Libstd , TestKind :: Bench , None ) ) ;
293+
278294 for ( krate, path, _default) in krates ( "test_shim" ) {
279295 rules. test ( & krate. test_step , path)
280296 . dep ( |s| s. name ( "libtest" ) )
281297 . run ( move |s| check:: krate ( build, & s. compiler ( ) , s. target ,
282- Mode :: Libtest , Some ( & krate. name ) ) ) ;
298+ Mode :: Libtest , TestKind :: Test ,
299+ Some ( & krate. name ) ) ) ;
283300 }
284301 rules. test ( "check-test-all" , "path/to/nowhere" )
285302 . dep ( |s| s. name ( "libtest" ) )
286303 . default ( true )
287- . run ( move |s| check:: krate ( build, & s. compiler ( ) , s. target , Mode :: Libtest ,
288- None ) ) ;
304+ . run ( move |s| check:: krate ( build, & s. compiler ( ) , s. target ,
305+ Mode :: Libtest , TestKind :: Test , None ) ) ;
289306 for ( krate, path, _default) in krates ( "rustc-main" ) {
290307 rules. test ( & krate. test_step , path)
291308 . dep ( |s| s. name ( "librustc" ) )
292309 . host ( true )
293310 . run ( move |s| check:: krate ( build, & s. compiler ( ) , s. target ,
294- Mode :: Librustc , Some ( & krate. name ) ) ) ;
311+ Mode :: Librustc , TestKind :: Test ,
312+ Some ( & krate. name ) ) ) ;
295313 }
296314 rules. test ( "check-rustc-all" , "path/to/nowhere" )
297315 . dep ( |s| s. name ( "librustc" ) )
298316 . default ( true )
299317 . host ( true )
300- . run ( move |s| check:: krate ( build, & s. compiler ( ) , s. target , Mode :: Librustc ,
301- None ) ) ;
318+ . run ( move |s| check:: krate ( build, & s. compiler ( ) , s. target ,
319+ Mode :: Librustc , TestKind :: Test , None ) ) ;
302320
303321 rules. test ( "check-linkchecker" , "src/tools/linkchecker" )
304322 . dep ( |s| s. name ( "tool-linkchecker" ) )
@@ -449,6 +467,7 @@ struct Rule<'a> {
449467enum Kind {
450468 Build ,
451469 Test ,
470+ Bench ,
452471 Dist ,
453472 Doc ,
454473}
@@ -538,6 +557,11 @@ impl<'a> Rules<'a> {
538557 self . rule ( name, path, Kind :: Test )
539558 }
540559
560+ fn bench < ' b > ( & ' b mut self , name : & ' a str , path : & ' a str )
561+ -> RuleBuilder < ' a , ' b > {
562+ self . rule ( name, path, Kind :: Bench )
563+ }
564+
541565 fn doc < ' b > ( & ' b mut self , name : & ' a str , path : & ' a str )
542566 -> RuleBuilder < ' a , ' b > {
543567 self . rule ( name, path, Kind :: Doc )
@@ -583,6 +607,7 @@ invalid rule dependency graph detected, was a rule added and maybe typo'd?
583607 "build" => Kind :: Build ,
584608 "doc" => Kind :: Doc ,
585609 "test" => Kind :: Test ,
610+ "bench" => Kind :: Bench ,
586611 "dist" => Kind :: Dist ,
587612 _ => return ,
588613 } ;
@@ -606,6 +631,7 @@ invalid rule dependency graph detected, was a rule added and maybe typo'd?
606631 Subcommand :: Build { ref paths } => ( Kind :: Build , & paths[ ..] ) ,
607632 Subcommand :: Doc { ref paths } => ( Kind :: Doc , & paths[ ..] ) ,
608633 Subcommand :: Test { ref paths, test_args : _ } => ( Kind :: Test , & paths[ ..] ) ,
634+ Subcommand :: Bench { ref paths, test_args : _ } => ( Kind :: Bench , & paths[ ..] ) ,
609635 Subcommand :: Dist { install } => {
610636 if install {
611637 return vec ! [ self . sbuild. name( "install" ) ]
0 commit comments