Skip to content

Commit 9c8c973

Browse files
authored
[nativeaot][tests] Add smoke unit runtime tests for Native AOT on iOS platforms (#87260)
* Initial commit * Add runtime-ioslike-coreclr and runtime-ioslike-mono azp runs * Add support for stripping debug symbols and enabling IL stripping during AOT compilation on iOS * Use the _AppleGenerateAppBundle target from AppleBuild.targets to build the app bundle * Update the CI to use cross-build * Update the sample app to use the cross-build * Disable failing tests with OperatingSystem.Is...(). * Update perf build command for Native AOT * Update IlcToolsPath to use cross-build ilc path * Use /p:BuildNativeAOTRuntimePack=true to pick up NativeAOT assets instead of CoreCLR
1 parent 9e21a91 commit 9c8c973

File tree

23 files changed

+346
-116
lines changed

23 files changed

+346
-116
lines changed

eng/pipelines/common/global-build-job.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@ jobs:
7070

7171
- name: _osParameter
7272
value: -os ${{ parameters.osGroup }}
73+
- name: _archParameter
74+
value: -arch ${{ parameters.archType }}
7375

7476
- ${{ if and(eq(parameters.osGroup, 'linux'), eq(parameters.osSubGroup, '_bionic')) }}:
7577
- name: _osParameter
@@ -184,7 +186,7 @@ jobs:
184186
- task: CodeQL3000Init@0
185187
displayName: Initialize CodeQL (manually-injected)
186188

187-
- script: $(Build.SourcesDirectory)$(dir)build$(scriptExt) -ci -arch ${{ parameters.archType }} $(_osParameter) $(crossArg) ${{ parameters.buildArgs }} $(_officialBuildParameter) $(_buildDarwinFrameworksParameter) $(_overrideTestScriptWindowsCmdParameter)
189+
- script: $(Build.SourcesDirectory)$(dir)build$(scriptExt) -ci $(_archParameter) $(_osParameter) $(crossArg) ${{ parameters.buildArgs }} $(_officialBuildParameter) $(_buildDarwinFrameworksParameter) $(_overrideTestScriptWindowsCmdParameter)
188190
displayName: Build product
189191
${{ if eq(parameters.useContinueOnErrorDuringBuild, true) }}:
190192
continueOnError: ${{ parameters.shouldContinueOnError }}

eng/pipelines/common/platform-matrix.yml

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -674,7 +674,10 @@ jobs:
674674
platform: maccatalyst_x64
675675
shouldContinueOnError: ${{ parameters.shouldContinueOnError }}
676676
jobParameters:
677-
runtimeFlavor: mono
677+
${{ if eq(parameters.runtimeFlavor, '') }}:
678+
runtimeFlavor: mono
679+
${{ else }}:
680+
runtimeFlavor: ${{ parameters.runtimeFlavor }}
678681
buildConfig: ${{ parameters.buildConfig }}
679682
helixQueueGroup: ${{ parameters.helixQueueGroup }}
680683
${{ insert }}: ${{ parameters.jobParameters }}
@@ -693,7 +696,10 @@ jobs:
693696
platform: maccatalyst_arm64
694697
shouldContinueOnError: ${{ parameters.shouldContinueOnError }}
695698
jobParameters:
696-
runtimeFlavor: mono
699+
${{ if eq(parameters.runtimeFlavor, '') }}:
700+
runtimeFlavor: mono
701+
${{ else }}:
702+
runtimeFlavor: ${{ parameters.runtimeFlavor }}
697703
buildConfig: ${{ parameters.buildConfig }}
698704
helixQueueGroup: ${{ parameters.helixQueueGroup }}
699705
${{ insert }}: ${{ parameters.jobParameters }}
@@ -712,7 +718,10 @@ jobs:
712718
platform: tvos_arm64
713719
shouldContinueOnError: ${{ parameters.shouldContinueOnError }}
714720
jobParameters:
715-
runtimeFlavor: mono
721+
${{ if eq(parameters.runtimeFlavor, '') }}:
722+
runtimeFlavor: mono
723+
${{ else }}:
724+
runtimeFlavor: ${{ parameters.runtimeFlavor }}
716725
buildConfig: ${{ parameters.buildConfig }}
717726
helixQueueGroup: ${{ parameters.helixQueueGroup }}
718727
${{ insert }}: ${{ parameters.jobParameters }}
@@ -731,7 +740,10 @@ jobs:
731740
platform: tvossimulator_x64
732741
shouldContinueOnError: ${{ parameters.shouldContinueOnError }}
733742
jobParameters:
734-
runtimeFlavor: mono
743+
${{ if eq(parameters.runtimeFlavor, '') }}:
744+
runtimeFlavor: mono
745+
${{ else }}:
746+
runtimeFlavor: ${{ parameters.runtimeFlavor }}
735747
buildConfig: ${{ parameters.buildConfig }}
736748
helixQueueGroup: ${{ parameters.helixQueueGroup }}
737749
${{ insert }}: ${{ parameters.jobParameters }}
@@ -750,7 +762,10 @@ jobs:
750762
platform: tvossimulator_arm64
751763
shouldContinueOnError: ${{ parameters.shouldContinueOnError }}
752764
jobParameters:
753-
runtimeFlavor: mono
765+
${{ if eq(parameters.runtimeFlavor, '') }}:
766+
runtimeFlavor: mono
767+
${{ else }}:
768+
runtimeFlavor: ${{ parameters.runtimeFlavor }}
754769
buildConfig: ${{ parameters.buildConfig }}
755770
helixQueueGroup: ${{ parameters.helixQueueGroup }}
756771
${{ insert }}: ${{ parameters.jobParameters }}
@@ -769,7 +784,10 @@ jobs:
769784
platform: ios_arm64
770785
shouldContinueOnError: ${{ parameters.shouldContinueOnError }}
771786
jobParameters:
772-
runtimeFlavor: mono
787+
${{ if eq(parameters.runtimeFlavor, '') }}:
788+
runtimeFlavor: mono
789+
${{ else }}:
790+
runtimeFlavor: ${{ parameters.runtimeFlavor }}
773791
buildConfig: ${{ parameters.buildConfig }}
774792
helixQueueGroup: ${{ parameters.helixQueueGroup }}
775793
${{ insert }}: ${{ parameters.jobParameters }}
@@ -788,7 +806,10 @@ jobs:
788806
platform: iossimulator_x64
789807
shouldContinueOnError: ${{ parameters.shouldContinueOnError }}
790808
jobParameters:
791-
runtimeFlavor: mono
809+
${{ if eq(parameters.runtimeFlavor, '') }}:
810+
runtimeFlavor: mono
811+
${{ else }}:
812+
runtimeFlavor: ${{ parameters.runtimeFlavor }}
792813
buildConfig: ${{ parameters.buildConfig }}
793814
helixQueueGroup: ${{ parameters.helixQueueGroup }}
794815
${{ insert }}: ${{ parameters.jobParameters }}
@@ -807,7 +828,10 @@ jobs:
807828
platform: iossimulator_arm64
808829
shouldContinueOnError: ${{ parameters.shouldContinueOnError }}
809830
jobParameters:
810-
runtimeFlavor: mono
831+
${{ if eq(parameters.runtimeFlavor, '') }}:
832+
runtimeFlavor: mono
833+
${{ else }}:
834+
runtimeFlavor: ${{ parameters.runtimeFlavor }}
811835
buildConfig: ${{ parameters.buildConfig }}
812836
helixQueueGroup: ${{ parameters.helixQueueGroup }}
813837
${{ insert }}: ${{ parameters.jobParameters }}

eng/pipelines/common/templates/runtimes/build-test-job.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,10 @@ jobs:
8080
- name: runtimeFlavorArgs
8181
value: '-mono'
8282

83+
- ${{ if and(eq(parameters.runtimeFlavor, 'coreclr'), in(parameters.osGroup, 'ios', 'iossimulator', 'tvos', 'tvossimulator', 'maccatalyst')) }}:
84+
- name: runtimeFlavorArgs
85+
value: '-nativeaot'
86+
8387
- name: testTreeFilterArg
8488
value: ''
8589

eng/pipelines/common/templates/runtimes/test-variables.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,10 @@ variables:
7979
- name: runtimeFlavorArgs
8080
value: '-mono'
8181

82+
- ${{ if and(eq(parameters.runtimeFlavor, 'coreclr'), in(parameters.osGroup, 'ios', 'iossimulator', 'tvos', 'tvossimulator', 'maccatalyst')) }}:
83+
- name: runtimeFlavorArgs
84+
value: '-nativeaot'
85+
8286
- name: runtimeVariantArg
8387
value: ''
8488

eng/pipelines/common/variables.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ variables:
2020
- name: isWasmOnlyBuild
2121
value: ${{ in(variables['Build.DefinitionName'], 'runtime-wasm', 'runtime-wasm-libtests', 'runtime-wasm-non-libtests', 'runtime-wasm-dbgtests', 'runtime-wasm-optional') }}
2222
- name: isiOSLikeOnlyBuild
23-
value: ${{ in(variables['Build.DefinitionName'], 'runtime-ioslike') }}
23+
value: ${{ in(variables['Build.DefinitionName'], 'runtime-ioslike', 'runtime-ioslike-mono', 'runtime-ioslike-coreclr') }}
2424
- name: isiOSLikeSimulatorOnlyBuild
2525
value: ${{ in(variables['Build.DefinitionName'], 'runtime-ioslikesimulator') }}
2626
- name: isAndroidOnlyBuild
@@ -32,14 +32,14 @@ variables:
3232
- name: isLinuxBionicOnlyBuild
3333
value: ${{ in(variables['Build.DefinitionName'], 'runtime-linuxbionic') }}
3434
- name: isRunSmokeTestsOnly
35-
value: ${{ notin(variables['Build.DefinitionName'], 'runtime-extra-platforms', 'runtime-wasm', 'runtime-wasm-libtests', 'runtime-wasm-non-libtests', 'runtime-ioslike', 'runtime-ioslikesimulator', 'runtime-android', 'runtime-androidemulator', 'runtime-maccatalyst', 'runtime-linuxbionic') }}
35+
value: ${{ notin(variables['Build.DefinitionName'], 'runtime-extra-platforms', 'runtime-wasm', 'runtime-wasm-libtests', 'runtime-wasm-non-libtests', 'runtime-ioslike', 'runtime-ioslike-mono', 'runtime-ioslike-coreclr', 'runtime-ioslikesimulator', 'runtime-android', 'runtime-androidemulator', 'runtime-maccatalyst', 'runtime-linuxbionic') }}
3636
- name: isNotSpecificPlatformOnlyBuild
37-
value: ${{ notin(variables['Build.DefinitionName'], 'runtime-wasm', 'runtime-wasm-libtests', 'runtime-wasm-non-libtests', 'runtime-ioslike', 'runtime-ioslikesimulator', 'runtime-android', 'runtime-androidemulator', 'runtime-maccatalyst', 'runtime-linuxbionic') }}
37+
value: ${{ notin(variables['Build.DefinitionName'], 'runtime-wasm', 'runtime-wasm-libtests', 'runtime-wasm-non-libtests', 'runtime-ioslike', 'runtime-ioslike-mono', 'runtime-ioslike-coreclr', 'runtime-ioslikesimulator', 'runtime-android', 'runtime-androidemulator', 'runtime-maccatalyst', 'runtime-linuxbionic') }}
3838

3939
# We only run evaluate paths on runtime and runtime-community pipelines on PRs
4040
# keep in sync with /eng/pipelines/common/xplat-setup.yml
4141
- name: dependOnEvaluatePaths
42-
value: ${{ and(eq(variables['Build.Reason'], 'PullRequest'), in(variables['Build.DefinitionName'], 'runtime', 'runtime-community', 'runtime-extra-platforms', 'runtime-wasm', 'runtime-wasm-libtests', 'runtime-wasm-non-libtests', 'runtime-ioslike', 'runtime-ioslikesimulator', 'runtime-android', 'runtime-androidemulator', 'runtime-maccatalyst', 'runtime-linuxbionic', 'dotnet-linker-tests', 'runtime-dev-innerloop', 'runtime-coreclr superpmi-replay', 'runtime-coreclr superpmi-diffs')) }}
42+
value: ${{ and(eq(variables['Build.Reason'], 'PullRequest'), in(variables['Build.DefinitionName'], 'runtime', 'runtime-community', 'runtime-extra-platforms', 'runtime-wasm', 'runtime-wasm-libtests', 'runtime-wasm-non-libtests', 'runtime-ioslike', 'runtime-ioslike-mono', 'runtime-ioslike-coreclr', 'runtime-ioslikesimulator', 'runtime-android', 'runtime-androidemulator', 'runtime-maccatalyst', 'runtime-linuxbionic', 'dotnet-linker-tests', 'runtime-dev-innerloop', 'runtime-coreclr superpmi-replay', 'runtime-coreclr superpmi-diffs')) }}
4343
- name: debugOnPrReleaseOnRolling
4444
${{ if ne(variables['Build.Reason'], 'PullRequest') }}:
4545
value: Release

eng/pipelines/common/xplat-setup.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
parameters:
22
jobTemplate: ''
33
hostedOs: ''
4+
hostedArch: ''
45
osGroup: ''
56
osSubgroup: ''
67
archType: ''

eng/pipelines/coreclr/perf-non-wasm-jobs.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -107,11 +107,11 @@ jobs:
107107
parameters:
108108
jobTemplate: /eng/pipelines/common/global-build-job.yml
109109
buildConfig: release
110-
runtimeFlavor: mono
110+
runtimeFlavor: coreclr
111111
platforms:
112112
- ios_arm64
113113
jobParameters:
114-
buildArgs: -s clr.nativeaotruntime+clr.nativeaotlibs+libs -c $(_BuildConfig)
114+
buildArgs: --cross -s clr.alljits+clr.tools+clr.nativeaotruntime+clr.nativeaotlibs+libs -c $(_BuildConfig)
115115
nameSuffix: iOSNativeAOT
116116
isOfficialBuild: false
117117
extraStepsTemplate: /eng/pipelines/coreclr/templates/build-perf-sample-apps.yml
@@ -223,7 +223,7 @@ jobs:
223223
parameters:
224224
jobTemplate: /eng/pipelines/coreclr/templates/perf-job.yml
225225
buildConfig: release
226-
runtimeFlavor: mono
226+
runtimeFlavor: coreclr
227227
platforms:
228228
- osx_x64
229229
jobParameters:
@@ -239,7 +239,7 @@ jobs:
239239
parameters:
240240
jobTemplate: /eng/pipelines/coreclr/templates/perf-job.yml
241241
buildConfig: release
242-
runtimeFlavor: mono
242+
runtimeFlavor: coreclr
243243
platforms:
244244
- osx_x64
245245
jobParameters:

eng/pipelines/coreclr/templates/build-perf-sample-apps.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ steps:
137137
artifactName: ${{ parameters.artifactName }}
138138
- template: /eng/pipelines/common/upload-artifact-step.yml
139139
parameters:
140-
rootFolder: $(Build.SourcesDirectory)/src/mono/sample/iOS-NativeAOT/bin/publish/app/HelloiOS/Release-iphoneos/HelloiOS.app
140+
rootFolder: $(Build.SourcesDirectory)/src/mono/sample/iOS-NativeAOT/bin/ios-arm64/Bundle/HelloiOS/Release-iphoneos/HelloiOS.app
141141
includeRootFolder: true
142142
displayName: iOS Sample App Symbols
143143
artifactName: iOSSampleAppSymbols
@@ -159,7 +159,7 @@ steps:
159159
artifactName: ${{ parameters.artifactName }}
160160
- template: /eng/pipelines/common/upload-artifact-step.yml
161161
parameters:
162-
rootFolder: $(Build.SourcesDirectory)/src/mono/sample/iOS-NativeAOT/bin/publish/app/HelloiOS/Release-iphoneos/HelloiOS.app
162+
rootFolder: $(Build.SourcesDirectory)/src/mono/sample/iOS-NativeAOT/bin/ios-arm64/Bundle/HelloiOS/Release-iphoneos/HelloiOS.app
163163
includeRootFolder: true
164164
displayName: iOS Sample App NoSymbols
165165
artifactName: iOSSampleAppNoSymbols

eng/pipelines/coreclr/templates/perf-job.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,7 @@ jobs:
279279
# Create Core_Root
280280
- script: $(Build.SourcesDirectory)/src/tests/build$(scriptExt) $(buildConfig) $(archType) generatelayoutonly $(librariesOverrideArg) $(_crossBuildPropertyArg)
281281
displayName: Create Core_Root
282-
condition: and(succeeded(), ne(variables.runtimeFlavorName, 'Mono'), ne('${{ parameters.runtimeType }}', 'wasm'))
282+
condition: and(succeeded(), ne(variables.runtimeFlavorName, 'Mono'), ne('${{ parameters.runtimeType }}', 'wasm'), not(in('${{ parameters.runtimeType }}', 'AndroidMono', 'iOSMono', 'iOSNativeAOT')))
283283

284284
# Copy the runtime directory into the testhost folder to include OOBs.
285285
- script: "build.cmd -subset libs.pretest -configuration release -ci -arch $(archType) -testscope innerloop /p:RuntimeArtifactsPath=$(librariesDownloadDir)\\bin\\mono\\$(osGroup).$(archType).$(buildConfigUpper) /p:RuntimeFlavor=mono;xcopy $(Build.SourcesDirectory)\\artifacts\\bin\\runtime\\net8.0-$(osGroup)-$(buildConfigUpper)-$(archType)\\* $(Build.SourcesDirectory)\\artifacts\\bin\\testhost\\net8.0-$(osGroup)-$(buildConfigUpper)-$(archType)\\shared\\Microsoft.NETCore.App\\$(productVersion) /E /I /Y;xcopy $(Build.SourcesDirectory)\\artifacts\\bin\\testhost\\net8.0-$(osGroup)-$(buildConfigUpper)-$(archType)\\* $(Build.SourcesDirectory)\\.dotnet-mono /E /I /Y;copy $(Build.SourcesDirectory)\\artifacts\\bin\\coreclr\\$(osGroup).$(archType).$(buildConfigUpper)\\corerun.exe $(Build.SourcesDirectory)\\.dotnet-mono\\shared\\Microsoft.NETCore.App\\$(productVersion)\\corerun.exe"

0 commit comments

Comments
 (0)