@@ -1360,9 +1360,36 @@ impl Build {
13601360 /// An example of this would be a WebAssembly runtime when testing the wasm
13611361 /// targets.
13621362 fn runner ( & self , target : TargetSelection ) -> Option < String > {
1363- let target = self . config . target_config . get ( & target) ?;
1364- let runner = target. runner . as_ref ( ) ?;
1365- Some ( runner. to_owned ( ) )
1363+ let configured_runner =
1364+ self . config . target_config . get ( & target) . and_then ( |t| t. runner . as_ref ( ) ) . map ( |p| & * * p) ;
1365+ if let Some ( runner) = configured_runner {
1366+ return Some ( runner. to_owned ( ) ) ;
1367+ }
1368+
1369+ if target. starts_with ( "wasm" ) && target. contains ( "wasi" ) {
1370+ self . default_wasi_runner ( )
1371+ } else {
1372+ None
1373+ }
1374+ }
1375+
1376+ /// When a `runner` configuration is not provided and a WASI-looking target
1377+ /// is being tested this is consulted to prove the environment to see if
1378+ /// there's a runtime already lying around that seems reasonable to use.
1379+ fn default_wasi_runner ( & self ) -> Option < String > {
1380+ let mut finder = crate :: core:: sanity:: Finder :: new ( ) ;
1381+
1382+ // Look for Wasmtime, and for its default options be sure to disable
1383+ // its caching system since we're executing quite a lot of tests and
1384+ // ideally shouldn't pollute the cache too much.
1385+ if let Some ( path) = finder. maybe_have ( "wasmtime" ) {
1386+ if let Ok ( mut path) = path. into_os_string ( ) . into_string ( ) {
1387+ path. push_str ( " run -C cache=n --dir ." ) ;
1388+ return Some ( path) ;
1389+ }
1390+ }
1391+
1392+ None
13661393 }
13671394
13681395 /// Returns the root of the "rootfs" image that this target will be using,
0 commit comments