diff options
author | Ankit Jain <radical@gmail.com> | 2022-09-08 20:16:04 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-08 20:16:04 +0300 |
commit | f8b6128b57c5c41974fb70677f99c6ab6e74e1fe (patch) | |
tree | c2c3778458c77b741de98b056a4af2db312b2a3a | |
parent | f85d3708b12eff11820c97194ff9bc1a7a5d2796 (diff) |
[release/7.0][wasm] Add CI job for AOT+SIMD to `runtime-wasm` for PRs (#75064)
* [wasm] Add support for running `System.Runtime.Intrinsics` tests with
.. SIMD enabled, as part of smoke tests.
* [wasm] Add a new `runtime-wasm-features` pipeline
.. which has only a SIMD_AOT job for now.
* [wasm] Add SIMD_AOT job to runtime-wasm for now, as we can't add new pipelines
* Fix browser-simd run
* [wasm] Mark simd job as unstable for now
Issues:
https://github.com/dotnet/runtime/issues/75044
and https://github.com/dotnet/runtime/issues/75098
-rw-r--r-- | eng/pipelines/runtime-wasm-features.yml | 27 | ||||
-rw-r--r-- | eng/pipelines/runtime-wasm.yml | 19 | ||||
-rw-r--r-- | eng/testing/tests.wasm.targets | 2 | ||||
-rw-r--r-- | src/libraries/System.Runtime.Intrinsics/tests/System.Runtime.Intrinsics.Tests.csproj | 4 | ||||
-rw-r--r-- | src/libraries/System.Runtime.Intrinsics/tests/wasm.helix.targets | 49 | ||||
-rw-r--r-- | src/libraries/sendtohelix-wasm.targets | 4 | ||||
-rw-r--r-- | src/libraries/tests.proj | 8 |
7 files changed, 111 insertions, 2 deletions
diff --git a/eng/pipelines/runtime-wasm-features.yml b/eng/pipelines/runtime-wasm-features.yml new file mode 100644 index 00000000000..940b59c800a --- /dev/null +++ b/eng/pipelines/runtime-wasm-features.yml @@ -0,0 +1,27 @@ +# This pipeline is meant to be run manually. It contains +# jobs that exercise extra/optional features for wasm, eg. SIMD + +trigger: none + +variables: + - template: /eng/pipelines/common/variables.yml + +jobs: + +# Evaluate paths +- template: /eng/pipelines/common/evaluate-default-paths.yml + +# Run AOT tests with SIMD enabled +- template: /eng/pipelines/common/templates/wasm-library-tests.yml + parameters: + platforms: + - Browser_wasm + nameSuffix: _SIMD_AOT + isExtraPlatformsBuild: false + isWasmOnlyBuild: true + extraBuildArgs: /p:EnableAggressiveTrimming=true /p:BuildAOTTestsOnHelix=true /p:RunAOTCompilation=true + extraHelixArgs: /p:NeedsToBuildWasmAppsOnHelix=true /p:WasmEnableSIMD=true + runSmokeOnlyArg: '' + alwaysRun: true + scenarios: + - WasmTestOnNodeJS diff --git a/eng/pipelines/runtime-wasm.yml b/eng/pipelines/runtime-wasm.yml index 62de930be9d..04eac67a939 100644 --- a/eng/pipelines/runtime-wasm.yml +++ b/eng/pipelines/runtime-wasm.yml @@ -19,3 +19,22 @@ jobs: parameters: isWasmOnlyBuild: ${{ variables.isWasmOnlyBuild }} isRollingBuild: ${{ variables.isRollingBuild }} + +# Run AOT tests with SIMD enabled +- template: /eng/pipelines/common/templates/wasm-library-tests.yml + parameters: + platforms: + - Browser_wasm + nameSuffix: _SIMD_AOT + isExtraPlatformsBuild: false + isWasmOnlyBuild: true + extraBuildArgs: /p:EnableAggressiveTrimming=true /p:BuildAOTTestsOnHelix=true /p:RunAOTCompilation=true + extraHelixArgs: /p:NeedsToBuildWasmAppsOnHelix=true /p:WasmEnableSIMD=true + runSmokeOnlyArg: '' + alwaysRun: true + # failures due to + # https://github.com/dotnet/runtime/issues/75044 + # and https://github.com/dotnet/runtime/issues/75098 + shouldContinueOnError: true + scenarios: + - WasmTestOnNodeJS diff --git a/eng/testing/tests.wasm.targets b/eng/testing/tests.wasm.targets index b4187faf8f6..b85acb34fb6 100644 --- a/eng/testing/tests.wasm.targets +++ b/eng/testing/tests.wasm.targets @@ -105,6 +105,8 @@ <_AOTBuildCommand Condition="'$(ContinuousIntegrationBuild)' != 'true'">$(_AOTBuildCommand) /p:RuntimeSrcDir=$(RepoRoot) /p:RuntimeConfig=$(Configuration)</_AOTBuildCommand> <_AOTBuildCommand>$(_AOTBuildCommand) /p:RunAOTCompilation=$(RunAOTCompilation)</_AOTBuildCommand> + <_AOTBuildCommand Condition="'$(BrowserHost)' == 'windows'">$(_AOTBuildCommand) %AOT_BUILD_ARGS%</_AOTBuildCommand> + <_AOTBuildCommand Condition="'$(BrowserHost)' != 'windows'">$(_AOTBuildCommand) %24AOT_BUILD_ARGS</_AOTBuildCommand> <_AOTBuildCommand>$(_AOTBuildCommand) $(_ShellCommandSeparator) cd wasm_build/AppBundle</_AOTBuildCommand> <RunScriptCommand Condition="'$(RunScriptCommand)' == ''">$(_AOTBuildCommand)</RunScriptCommand> diff --git a/src/libraries/System.Runtime.Intrinsics/tests/System.Runtime.Intrinsics.Tests.csproj b/src/libraries/System.Runtime.Intrinsics/tests/System.Runtime.Intrinsics.Tests.csproj index 3009539cc05..6c0187cf21f 100644 --- a/src/libraries/System.Runtime.Intrinsics/tests/System.Runtime.Intrinsics.Tests.csproj +++ b/src/libraries/System.Runtime.Intrinsics/tests/System.Runtime.Intrinsics.Tests.csproj @@ -7,6 +7,10 @@ <TargetFrameworks>$(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser</TargetFrameworks> <!-- Disable nullability public only feature for NullabilityInfoContextTests --> <Features>$(Features.Replace('nullablePublicOnly', '')</Features> + + <HelixTargetsFile Condition="'$(TargetOS)' == 'Browser'">wasm.helix.targets</HelixTargetsFile> + <WasmXHarnessArgs Condition="'$(WasmEnableSIMD)' == 'true' and '$(Scenario)' == 'WasmTestOnNodeJs' and + '$(ContinuousIntegrationBuild)' != 'true'">$(WasmXHarnessArgs) --engine-arg=--experimental-wasm-simd</WasmXHarnessArgs> </PropertyGroup> <ItemGroup> <Compile Include="Vectors\Vector128Tests.cs" /> diff --git a/src/libraries/System.Runtime.Intrinsics/tests/wasm.helix.targets b/src/libraries/System.Runtime.Intrinsics/tests/wasm.helix.targets new file mode 100644 index 00000000000..65123620588 --- /dev/null +++ b/src/libraries/System.Runtime.Intrinsics/tests/wasm.helix.targets @@ -0,0 +1,49 @@ +<Project> + <PropertyGroup Condition="'$(IsRunningLibraryTests)' == 'true'"> + <HelixExtensionTargets>$(HelixExtensionTargets);_AddHelixRuntimeIntrinsicsItems</HelixExtensionTargets> + <_RuntimeIntrinsicsProjectName>System.Runtime.Intrinsics.Tests</_RuntimeIntrinsicsProjectName> + </PropertyGroup> + + <!-- Only add simd/non-simd jobs for nodejs --> + <Target Name="_AddHelixRuntimeIntrinsicsItems" + Condition="'$(NeedsToBuildWasmAppsOnHelix)' == 'true' and ('$(Scenario)' == 'WasmTestOnNodeJs' or '$(Scenario)' == 'WasmTestOnBrowser')"> + + <PropertyGroup Condition="'$(Scenario)' == 'WasmTestOnNodeJs'"> + <_AOTBuildArgsSIMD Condition="'$(OS)' != 'Windows_NT'">"WasmXHarnessArgs=$WasmXHarnessArgs --engine-arg=--experimental-wasm-simd"</_AOTBuildArgsSIMD> + <_AOTBuildArgsSIMD Condition="'$(OS)' == 'Windows_NT'">"WasmXHarnessArgs=%WasmXHarnessArgs% --engine-arg=--experimental-wasm-simd"</_AOTBuildArgsSIMD> + </PropertyGroup> + + <PropertyGroup> + <_AOTBuildArgsSIMD Condition="'$(OS)' != 'Windows_NT'">$(_AOTBuildArgsSIMD) "AOT_BUILD_ARGS=-p:WasmEnableSIMD=true"</_AOTBuildArgsSIMD> + + <_AOTBuildArgsSIMD Condition="'$(OS)' != 'Windows_NT'">export $(_AOTBuildArgsSIMD)</_AOTBuildArgsSIMD> + <_AOTBuildArgsSIMD Condition="'$(OS)' == 'Windows_NT'">set $(_AOTBuildArgsSIMD)</_AOTBuildArgsSIMD> + </PropertyGroup> + + <ItemGroup> + <!-- remove the existing item --> + <HelixWorkItem Remove="@(HelixWorkItem)" Condition="'%(HelixWorkItem.Identity)' == '$(Scenario)-$(_RuntimeIntrinsicsProjectName)'" /> + + <HelixWorkItem Include="$(WorkItemPrefix)non-simd-$(_RuntimeIntrinsicsProjectName)"> + <PayloadArchive>$(TestArchiveTestsDir)$(_RuntimeIntrinsicsProjectName).zip</PayloadArchive> + <Command>$(HelixCommand)</Command> + <Timeout>$(_workItemTimeout)</Timeout> + </HelixWorkItem> + + <HelixWorkItem Include="$(WorkItemPrefix)simd-$(_RuntimeIntrinsicsProjectName)"> + <PayloadArchive>$(TestArchiveTestsDir)$(_RuntimeIntrinsicsProjectName).zip</PayloadArchive> + <Command>$(HelixCommand)</Command> + <Timeout>$(_workItemTimeout)</Timeout> + + <PreCommands>$(_AOTBuildArgsSIMD)</PreCommands> + </HelixWorkItem> + + <_RuntimeIntrinsicsHelixItem + Include="@(HelixWorkItem)" + Condition="$([System.String]::new('%(HelixWorkItem.Identity)').EndsWith('-$(_RuntimeIntrinsicsProjectName)'))" /> + </ItemGroup> + + <Error Text="Something went wrong. Expected to have only two work items for $(_RuntimeIntrinsicsProjectName). But got @(_RuntimeIntrinsicsHelixItem)" + Condition="@(_RuntimeIntrinsicsHelixItem->Count()) != 2" /> + </Target> +</Project> diff --git a/src/libraries/sendtohelix-wasm.targets b/src/libraries/sendtohelix-wasm.targets index 82b14495dd5..ed76264134f 100644 --- a/src/libraries/sendtohelix-wasm.targets +++ b/src/libraries/sendtohelix-wasm.targets @@ -305,7 +305,9 @@ <_EmSdkFiles Include="$(EMSDK_PATH)\**\*" Exclude="$(EMSDK_PATH)\.git\**\*" /> </ItemGroup> - <Copy SourceFiles="@(_EmSdkFiles)" DestinationFolder="$(EmSdkDirForHelixPayload)\%(RecursiveDir)" /> + <Copy SourceFiles="@(_EmSdkFiles)" + DestinationFiles="@(_EmSdkFiles -> '$(EmSdkDirForHelixPayload)\%(RecursiveDir)%(FileName)%(Extension)')" + SkipUnchangedFiles="true" /> </Target> <Target Name="DownloadFirefoxToSendToHelix" Condition="!Exists($(FirefoxForHelixPayload)) and '$(DebuggerHost)' == 'firefox'"> diff --git a/src/libraries/tests.proj b/src/libraries/tests.proj index 8e6d4712fee..07349a0d3d4 100644 --- a/src/libraries/tests.proj +++ b/src/libraries/tests.proj @@ -19,6 +19,7 @@ <TestPackages Condition="'$(TestPackages)' == ''">false</TestPackages> <TestTrimming Condition="'$(TestTrimming)' == ''">false</TestTrimming> + <RunWasmSIMDSmokeTests Condition="'$(TargetOS)' == 'browser' and '$(BuildAOTTestsOnHelix)' == 'true' and '$(ContinuousIntegrationBuild)' == 'true'">true</RunWasmSIMDSmokeTests> <RunHighAOTResourceRequiringTestsOnly Condition="'$(RunHighAOTResourceRequiringTestsOnly)' == ''">false</RunHighAOTResourceRequiringTestsOnly> <!-- Don't build samples, and functional tests on EAT, AOT, WBT, and Debugger lanes --> @@ -545,7 +546,12 @@ </ItemGroup> <ItemGroup> - <SmokeTestProject Include="$(MSBuildThisFileDirectory)System.Runtime\tests\System.Runtime.Tests.csproj" /> + <SmokeTestProject Include="$(MSBuildThisFileDirectory)System.Runtime\tests\System.Runtime.Tests.csproj" /> + + <!-- Test SIMD too --> + <SmokeTestProject + Condition="'$(RunWasmSIMDSmokeTests)' == 'true'" + Include="$(MSBuildThisFileDirectory)System.Runtime.Intrinsics\tests\System.Runtime.Intrinsics.Tests.csproj" /> </ItemGroup> <ItemGroup Condition="'$(TestNativeAot)' == 'true'"> |