@@ -957,6 +957,12 @@ impl Step for StdarchVerify {
957957 }
958958}
959959
960+ /// Runs stdarch's intrinsic-test binary crate to verify that Rust's `core::arch`
961+ /// SIMD intrinsics produce the same results as their C counterparts.
962+ ///
963+ /// First runs the `intrinsic-test` binary, which generates C wrapper programs
964+ /// and a Rust Cargo workspace. Then runs `cargo test` on that workspace
965+ /// which compiles both versions and compares their outputs on random inputs.
960966#[ derive( Debug , Clone , PartialEq , Eq , Hash ) ]
961967pub struct IntrinsicTest {
962968 host : TargetSelection ,
@@ -970,12 +976,12 @@ impl Step for IntrinsicTest {
970976 run. path ( "library/stdarch/crates/intrinsic-test" ) . path ( "library/stdarch/crates/core_arch" )
971977 }
972978
973- fn is_default_step ( _builder : & Builder < ' _ > ) -> bool {
974- true
975- }
976-
977979 fn make_run ( run : RunConfig < ' _ > ) {
978- run. builder . ensure ( IntrinsicTest { host : run. target } ) ;
980+ let target = run. target ;
981+ if !target. contains ( "aarch64-unknown-linux" ) && !target. contains ( "x86_64-unknown-linux" ) {
982+ return ;
983+ }
984+ run. builder . ensure ( IntrinsicTest { host : target } ) ;
979985 }
980986
981987 fn run ( self , builder : & Builder < ' _ > ) {
@@ -1002,16 +1008,22 @@ impl Step for IntrinsicTest {
10021008 None ,
10031009 )
10041010 } else {
1005- return ;
1011+ panic ! ( "intrinsic-test only supports aarch64/x86_64 Linux, got {host}" ) ;
10061012 } ;
10071013
10081014 let out_dir = builder. out . join ( host) . join ( "intrinsic-test" ) ;
10091015 t ! ( fs:: create_dir_all( & out_dir) ) ;
10101016
10111017 let crates_link = out_dir. join ( "crates" ) ;
10121018 if !crates_link. exists ( ) {
1013- std:: os:: unix:: fs:: symlink ( builder. src . join ( "library/stdarch/crates" ) , & crates_link)
1014- . unwrap ( ) ;
1019+ t ! (
1020+ helpers:: symlink_dir(
1021+ & builder. config,
1022+ & builder. src. join( "library/stdarch/crates" ) ,
1023+ & crates_link
1024+ ) ,
1025+ format!( "failed to symlink stdarch crates into {}" , crates_link. display( ) )
1026+ ) ;
10151027 }
10161028
10171029 let mut cmd = builder. tool_cmd ( Tool :: IntrinsicTest ) ;
@@ -1020,7 +1032,7 @@ impl Step for IntrinsicTest {
10201032 cmd. arg ( "--target" ) . arg ( & * host. triple ) ;
10211033 cmd. arg ( "--skip" ) . arg ( & skip_file) ;
10221034 cmd. arg ( "--sample-percentage" ) . arg ( "10" ) ;
1023- cmd. env ( "CC" , "clang" ) ;
1035+ cmd. env ( "CC" , builder . cc ( host ) ) ;
10241036 cmd. env ( "CFLAGS" , cflags) ;
10251037 cmd. run ( builder) ;
10261038
@@ -1031,7 +1043,7 @@ impl Step for IntrinsicTest {
10311043 cargo. arg ( "--manifest-path" ) . arg ( & manifest) ;
10321044 cargo. arg ( "--target" ) . arg ( & * host. triple ) ;
10331045 cargo. arg ( "--profile" ) . arg ( "release" ) ;
1034- cargo. env ( "CC" , "clang" ) ;
1046+ cargo. env ( "CC" , builder . cc ( host ) ) ;
10351047 cargo. env ( "CFLAGS" , cflags) ;
10361048 cargo. env ( "RUSTC" , & builder. initial_rustc ) ;
10371049 cargo. env ( "RUSTC_BOOTSTRAP" , "1" ) ;
0 commit comments