diff --git a/eng/pipelines/coreclr/perf-non-wasm-jobs.yml b/eng/pipelines/coreclr/perf-non-wasm-jobs.yml
index cd8f01bf1652c2..e926a63f532da3 100644
--- a/eng/pipelines/coreclr/perf-non-wasm-jobs.yml
+++ b/eng/pipelines/coreclr/perf-non-wasm-jobs.yml
@@ -102,6 +102,27 @@ jobs:
archiveType: tar
tarCompression: gz
+ # build NativeAOT iOS scenarios
+ - template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/common/global-build-job.yml
+ buildConfig: release
+ runtimeFlavor: mono
+ platforms:
+ - ios_arm64
+ jobParameters:
+ nameSuffix: iOSNativeAOT
+ isOfficialBuild: false
+ extraStepsTemplate: /eng/pipelines/coreclr/templates/build-perf-sample-apps.yml
+ extraStepsParameters:
+ rootFolder: '$(Build.SourcesDirectory)/artifacts/'
+ includeRootFolder: true
+ displayName: iOS NativeAOT Artifacts
+ artifactName: iOSNativeAOTarm64
+ archiveExtension: '.tar.gz'
+ archiveType: tar
+ tarCompression: gz
+
# build mono
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
@@ -143,6 +164,24 @@ jobs:
runJobTemplate: /eng/pipelines/coreclr/templates/run-scenarios-job.yml
logicalmachine: 'perfiphone12mini'
iOSLlvmBuild: False
+ iOSStripSymbols: False
+
+ - template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/coreclr/templates/perf-job.yml
+ buildConfig: release
+ runtimeFlavor: mono
+ platforms:
+ - osx_x64
+ jobParameters:
+ testGroup: perf
+ runtimeType: iOSMono
+ projectFile: ios_scenarios.proj
+ runKind: ios_scenarios
+ runJobTemplate: /eng/pipelines/coreclr/templates/run-scenarios-job.yml
+ logicalmachine: 'perfiphone12mini'
+ iOSLlvmBuild: False
+ iOSStripSymbols: True
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
@@ -159,6 +198,57 @@ jobs:
runJobTemplate: /eng/pipelines/coreclr/templates/run-scenarios-job.yml
logicalmachine: 'perfiphone12mini'
iOSLlvmBuild: True
+ iOSStripSymbols: False
+
+ - template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/coreclr/templates/perf-job.yml
+ buildConfig: release
+ runtimeFlavor: mono
+ platforms:
+ - osx_x64
+ jobParameters:
+ testGroup: perf
+ runtimeType: iOSMono
+ projectFile: ios_scenarios.proj
+ runKind: ios_scenarios
+ runJobTemplate: /eng/pipelines/coreclr/templates/run-scenarios-job.yml
+ logicalmachine: 'perfiphone12mini'
+ iOSLlvmBuild: True
+ iOSStripSymbols: True
+
+ # run NativeAOT iOS scenarios
+ - template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/coreclr/templates/perf-job.yml
+ buildConfig: release
+ runtimeFlavor: mono
+ platforms:
+ - osx_x64
+ jobParameters:
+ testGroup: perf
+ runtimeType: iOSNativeAOT
+ projectFile: ios_nativeaot_scenarios.proj
+ runKind: ios_scenarios
+ runJobTemplate: /eng/pipelines/coreclr/templates/run-scenarios-job.yml
+ logicalmachine: 'perfiphone12mini'
+ iOSStripSymbols: False
+
+ - template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/coreclr/templates/perf-job.yml
+ buildConfig: release
+ runtimeFlavor: mono
+ platforms:
+ - osx_x64
+ jobParameters:
+ testGroup: perf
+ runtimeType: iOSNativeAOT
+ projectFile: ios_nativeaot_scenarios.proj
+ runKind: ios_scenarios
+ runJobTemplate: /eng/pipelines/coreclr/templates/run-scenarios-job.yml
+ logicalmachine: 'perfiphone12mini'
+ iOSStripSymbols: True
# run mono microbenchmarks perf job
- template: /eng/pipelines/common/platform-matrix.yml
diff --git a/eng/pipelines/coreclr/templates/build-perf-sample-apps.yml b/eng/pipelines/coreclr/templates/build-perf-sample-apps.yml
index bdc0475fb5da84..89604f865c4ae8 100644
--- a/eng/pipelines/coreclr/templates/build-perf-sample-apps.yml
+++ b/eng/pipelines/coreclr/templates/build-perf-sample-apps.yml
@@ -35,13 +35,13 @@ steps:
- script: rm -r -f $(Build.SourcesDirectory)/artifacts/bin/AndroidSampleApp
workingDirectory: $(Build.SourcesDirectory)/artifacts/bin
displayName: clean bindir
-
- - ${{ if eq(parameters.osGroup, 'ios') }}:
- - script: make build-appbundle TARGET=ios MONO_ARCH=arm64 MONO_CONFIG=Release AOT=True USE_LLVM=False DEPLOY_AND_RUN=false
+
+ - ${{ if and(eq(parameters.osGroup, 'ios'), eq(parameters.nameSuffix, 'iOSMono')) }}:
+ - script: make build-appbundle TARGET=ios MONO_ARCH=arm64 MONO_CONFIG=Release AOT=True USE_LLVM=False DEPLOY_AND_RUN=false STRIP_DEBUG_SYMBOLS=false
env:
DevTeamProvisioning: '-'
workingDirectory: $(Build.SourcesDirectory)/src/mono/sample/iOS
- displayName: Build HelloiOS AOT sample app LLVM=False
+ displayName: Build HelloiOS AOT sample app LLVM=False STRIP_SYMBOLS=False
- task: PublishBuildArtifacts@1
condition: succeededOrFailed()
displayName: 'Publish binlog'
@@ -53,17 +53,39 @@ steps:
rootFolder: $(Build.SourcesDirectory)/src/mono/sample/iOS/bin/ios-arm64/publish/app/HelloiOS/Release-iphoneos/HelloiOS.app
includeRootFolder: true
displayName: iOS Sample App NoLLVM
- artifactName: iOSSampleAppNoLLVM
+ artifactName: iOSSampleAppNoLLVMSymbols
archiveExtension: '.zip'
archiveType: zip
- script: rm -r -f $(Build.SourcesDirectory)/src/mono/sample/iOS/bin
workingDirectory: $(Build.SourcesDirectory)/src/mono/sample/iOS
displayName: Clean bindir
- - script: make build-appbundle TARGET=ios MONO_ARCH=arm64 MONO_CONFIG=Release AOT=True USE_LLVM=True DEPLOY_AND_RUN=false
+ - script: make build-appbundle TARGET=ios MONO_ARCH=arm64 MONO_CONFIG=Release AOT=True USE_LLVM=False DEPLOY_AND_RUN=false STRIP_DEBUG_SYMBOLS=true
env:
DevTeamProvisioning: '-'
workingDirectory: $(Build.SourcesDirectory)/src/mono/sample/iOS
- displayName: Build HelloiOS AOT sample app LLVM=True
+ displayName: Build HelloiOS AOT sample app LLVM=False STRIP_SYMBOLS=True
+ - task: PublishBuildArtifacts@1
+ condition: succeededOrFailed()
+ displayName: 'Publish binlog'
+ inputs:
+ pathtoPublish: $(Build.SourcesDirectory)/src/mono/sample/iOS/msbuild.binlog
+ artifactName: ${{ parameters.artifactName }}
+ - template: /eng/pipelines/common/upload-artifact-step.yml
+ parameters:
+ rootFolder: $(Build.SourcesDirectory)/src/mono/sample/iOS/bin/ios-arm64/publish/app/HelloiOS/Release-iphoneos/HelloiOS.app
+ includeRootFolder: true
+ displayName: iOS Sample App NoLLVM NoSymbols
+ artifactName: iOSSampleAppNoLLVMNoSymbols
+ archiveExtension: '.zip'
+ archiveType: zip
+ - script: rm -r -f $(Build.SourcesDirectory)/src/mono/sample/iOS/bin
+ workingDirectory: $(Build.SourcesDirectory)/src/mono/sample/iOS
+ displayName: Clean bindir
+ - script: make build-appbundle TARGET=ios MONO_ARCH=arm64 MONO_CONFIG=Release AOT=True USE_LLVM=True DEPLOY_AND_RUN=false STRIP_DEBUG_SYMBOLS=false
+ env:
+ DevTeamProvisioning: '-'
+ workingDirectory: $(Build.SourcesDirectory)/src/mono/sample/iOS
+ displayName: Build HelloiOS AOT sample app LLVM=True STRIP_SYMBOLS=False
- task: PublishBuildArtifacts@1
condition: succeededOrFailed()
displayName: 'Publish binlog'
@@ -75,6 +97,71 @@ steps:
rootFolder: $(Build.SourcesDirectory)/src/mono/sample/iOS/bin/ios-arm64/publish/app/HelloiOS/Release-iphoneos/HelloiOS.app
includeRootFolder: true
displayName: iOS Sample App LLVM
- artifactName: iOSSampleAppLLVM
+ artifactName: iOSSampleAppLLVMSymbols
+ archiveExtension: '.zip'
+ archiveType: zip
+ - script: rm -r -f $(Build.SourcesDirectory)/src/mono/sample/iOS/bin
+ workingDirectory: $(Build.SourcesDirectory)/src/mono/sample/iOS
+ displayName: Clean bindir
+ - script: make build-appbundle TARGET=ios MONO_ARCH=arm64 MONO_CONFIG=Release AOT=True USE_LLVM=True DEPLOY_AND_RUN=false STRIP_DEBUG_SYMBOLS=true
+ env:
+ DevTeamProvisioning: '-'
+ workingDirectory: $(Build.SourcesDirectory)/src/mono/sample/iOS
+ displayName: Build HelloiOS AOT sample app LLVM=True STRIP_SYMBOLS=True
+ - task: PublishBuildArtifacts@1
+ condition: succeededOrFailed()
+ displayName: 'Publish binlog'
+ inputs:
+ pathtoPublish: $(Build.SourcesDirectory)/src/mono/sample/iOS/msbuild.binlog
+ artifactName: ${{ parameters.artifactName }}
+ - template: /eng/pipelines/common/upload-artifact-step.yml
+ parameters:
+ rootFolder: $(Build.SourcesDirectory)/src/mono/sample/iOS/bin/ios-arm64/publish/app/HelloiOS/Release-iphoneos/HelloiOS.app
+ includeRootFolder: true
+ displayName: iOS Sample App LLVM NoSymbols
+ artifactName: iOSSampleAppLLVMNoSymbols
archiveExtension: '.zip'
archiveType: zip
+
+ - ${{ if and(eq(parameters.osGroup, 'ios'), eq(parameters.nameSuffix, 'iOSNativeAOT')) }}:
+ - script: make world TARGET_OS=ios TARGET_ARCH=arm64 BUILD_CONFIG=Release DEPLOY_AND_RUN=false STRIP_DEBUG_SYMBOLS=false
+ env:
+ DevTeamProvisioning: '-'
+ workingDirectory: $(Build.SourcesDirectory)/src/mono/sample/iOS-NativeAOT
+ displayName: Build HelloiOS Native AOT sample app STRIP_SYMBOLS=False
+ - task: PublishBuildArtifacts@1
+ condition: succeededOrFailed()
+ displayName: 'Publish binlog'
+ inputs:
+ pathtoPublish: $(Build.SourcesDirectory)/src/mono/sample/iOS-NativeAOT/msbuild.binlog
+ artifactName: ${{ parameters.artifactName }}
+ - template: /eng/pipelines/common/upload-artifact-step.yml
+ parameters:
+ rootFolder: $(Build.SourcesDirectory)/src/mono/sample/iOS-NativeAOT/bin/publish/app/HelloiOS/Release-iphoneos/HelloiOS.app
+ includeRootFolder: true
+ displayName: iOS Sample App Symbols
+ artifactName: iOSSampleAppSymbols
+ archiveExtension: '.zip'
+ archiveType: zip
+ - script: rm -r -f $(Build.SourcesDirectory)/src/mono/sample/iOS-NativeAOT/bin
+ workingDirectory: $(Build.SourcesDirectory)/src/mono/sample/iOS-NativeAOT
+ displayName: Clean bindir
+ - script: make world TARGET_OS=ios TARGET_ARCH=arm64 BUILD_CONFIG=Release DEPLOY_AND_RUN=false STRIP_DEBUG_SYMBOLS=true
+ env:
+ DevTeamProvisioning: '-'
+ workingDirectory: $(Build.SourcesDirectory)/src/mono/sample/iOS-NativeAOT
+ displayName: Build HelloiOS Native AOT sample app STRIP_SYMBOLS=True
+ - task: PublishBuildArtifacts@1
+ condition: succeededOrFailed()
+ displayName: 'Publish binlog'
+ inputs:
+ pathtoPublish: $(Build.SourcesDirectory)/src/mono/sample/iOS-NativeAOT/msbuild.binlog
+ artifactName: ${{ parameters.artifactName }}
+ - template: /eng/pipelines/common/upload-artifact-step.yml
+ parameters:
+ rootFolder: $(Build.SourcesDirectory)/src/mono/sample/iOS-NativeAOT/bin/publish/app/HelloiOS/Release-iphoneos/HelloiOS.app
+ includeRootFolder: true
+ displayName: iOS Sample App NoSymbols
+ artifactName: iOSSampleAppNoSymbols
+ archiveExtension: '.zip'
+ archiveType: zip
\ No newline at end of file
diff --git a/eng/pipelines/coreclr/templates/perf-job.yml b/eng/pipelines/coreclr/templates/perf-job.yml
index e61e6761a89d7f..e6590143cf5ed0 100644
--- a/eng/pipelines/coreclr/templates/perf-job.yml
+++ b/eng/pipelines/coreclr/templates/perf-job.yml
@@ -19,6 +19,7 @@ parameters:
pgoRunType: ''
javascriptEngine: 'NoJS'
iOSLlvmBuild: 'False'
+ iOSStripSymbols: 'False'
skipLiveLibrariesDownload: false
collectHelixLogsScript: ''
timeoutInMinutes: 320
@@ -37,8 +38,8 @@ jobs:
- template: ${{ parameters.runJobTemplate }}
parameters:
# Compute job name from template parameters
- jobName: ${{ format('perfbuild_{0}{1}_{2}_{3}_{4}_{5}_{6}_{7}_{8}_{9}_{10}', parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig, parameters.runtimeType, parameters.codeGenType, parameters.runKind, parameters.logicalMachine, parameters.javascriptEngine, parameters.pgoRunType, parameters.iosLlvmBuild) }}
- displayName: ${{ format('Performance {0}{1} {2} {3} {4} {5} {6} {7} {8} {9} {10}', parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig, parameters.runtimeType, parameters.codeGenType, parameters.runKind, parameters.logicalMachine, parameters.javascriptEngine, parameters.pgoRunType, parameters.iosLlvmBuild) }}
+ jobName: ${{ format('perfbuild_{0}{1}_{2}_{3}_{4}_{5}_{6}_{7}_{8}_{9}_{10}_{11}', parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig, parameters.runtimeType, parameters.codeGenType, parameters.runKind, parameters.logicalMachine, parameters.javascriptEngine, parameters.pgoRunType, parameters.iosLlvmBuild, parameters.iosStripSymbols) }}
+ displayName: ${{ format('Performance {0}{1} {2} {3} {4} {5} {6} {7} {8} {9} {10} {11}', parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig, parameters.runtimeType, parameters.codeGenType, parameters.runKind, parameters.logicalMachine, parameters.javascriptEngine, parameters.pgoRunType, parameters.iosLlvmBuild, parameters.iosStripSymbols) }}
pool: ${{ parameters.pool }}
buildConfig: ${{ parameters.buildConfig }}
archType: ${{ parameters.archType }}
@@ -56,6 +57,7 @@ jobs:
pgoRunType: ${{ parameters.pgoRunType }}
javascriptEngine: ${{ parameters.javascriptEngine }}
iosLlvmBuild: ${{ parameters.iosLlvmBuild }}
+ iosStripSymbols: ${{ parameters.iosStripSymbols }}
timeoutInMinutes: ${{ parameters.timeoutInMinutes }}
${{ if and(eq(parameters.runtimeType, 'wasm'), eq(parameters.codeGenType, 'aot')) }}:
@@ -68,7 +70,7 @@ jobs:
# Test job depends on the corresponding build job
${{ if eq(parameters.downloadSpecificBuild.buildId, '') }}:
dependsOn:
- - ${{ if not(in(parameters.runtimeType, 'AndroidMono', 'iOSMono', 'wasm')) }}:
+ - ${{ if not(in(parameters.runtimeType, 'AndroidMono', 'iOSMono', 'iOSNativeAOT', 'wasm')) }}:
- ${{ format('coreclr_{0}_product_build_{1}{2}_{3}_{4}', parameters.runtimeVariant, parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig) }}
- ${{ if and(ne(parameters.liveLibrariesBuildConfig, ''), eq(parameters.skipLiveLibrariesDownload, 'false')) }}:
- ${{ format('libraries_build_{0}{1}_{2}_{3}', parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.liveLibrariesBuildConfig) }}
@@ -83,13 +85,15 @@ jobs:
- ${{ 'Build_ios_arm64_release_PerfBDNApp' }}
- ${{ if eq(parameters.runtimeType, 'iOSMono')}}:
- ${{ 'build_ios_arm64_release_iOSMono' }}
+ - ${{ if eq(parameters.runtimeType, 'iOSNativeAOT')}}:
+ - ${{ 'build_ios_arm64_release_iOSNativeAOT' }}
- ${{ if and(eq(parameters.osGroup, 'windows'), not(in(parameters.runtimeType, 'AndroidMono', 'iOSMono'))) }}:
+ ${{ if and(eq(parameters.osGroup, 'windows'), not(in(parameters.runtimeType, 'AndroidMono', 'iOSMono', 'iOSNativeAOT'))) }}:
${{ if eq(parameters.runtimeType, 'mono') }}:
extraSetupParameters: -Architecture ${{ parameters.archType }} -MonoDotnet $(Build.SourcesDirectory)\.dotnet-mono
${{ if eq(parameters.runtimeType, 'coreclr') }}:
extraSetupParameters: -CoreRootDirectory $(Build.SourcesDirectory)\artifacts\tests\coreclr\${{ parameters.osGroup }}.${{ parameters.archType }}.Release\Tests\Core_Root -Architecture ${{ parameters.archType }}
- ${{ if and(ne(parameters.osGroup, 'windows'), not(in(parameters.runtimeType, 'AndroidMono', 'iOSMono'))) }}:
+ ${{ if and(ne(parameters.osGroup, 'windows'), not(in(parameters.runtimeType, 'AndroidMono', 'iOSMono', 'iOSNativeAOT'))) }}:
${{ if and(eq(parameters.runtimeType, 'mono'), ne(parameters.codeGenType, 'AOT')) }}:
extraSetupParameters: --architecture ${{ parameters.archType }} --monodotnet $(Build.SourcesDirectory)/.dotnet-mono
${{ if and(eq(parameters.runtimeType, 'wasm'), ne(parameters.codeGenType, 'AOT')) }}:
@@ -104,8 +108,10 @@ jobs:
extraSetupParameters: --corerootdirectory $(Build.SourcesDirectory)/artifacts/tests/coreclr/${{ parameters.osGroup }}.${{ parameters.archType }}.Release/Tests/Core_Root --architecture ${{ parameters.archType }} --alpine
${{ if in(parameters.runtimeType, 'AndroidMono') }}:
extraSetupParameters: -Architecture ${{ parameters.archType }} -AndroidMono
- ${{ if in(parameters.runtimeType, 'iosMono') }}:
- extraSetupParameters: --architecture ${{ parameters.archType }} --iosmono --iosllvmbuild ${{ parameters.iOSLlvmBuild }}
+ ${{ if in(parameters.runtimeType, 'iOSMono') }}:
+ extraSetupParameters: --architecture ${{ parameters.archType }} --iosmono --iosllvmbuild ${{ parameters.iOSLlvmBuild }} --iosstripsymbols ${{ parameters.iOSStripSymbols }}
+ ${{ if in(parameters.runtimeType, 'iOSNativeAOT') }}:
+ extraSetupParameters: --architecture ${{ parameters.archType }} --iosnativeaot --iosllvmbuild ${{ parameters.iOSLlvmBuild }} --iosstripsymbols ${{ parameters.iOSStripSymbols }}
variables:
- ${{ each variable in parameters.variables }}:
@@ -147,7 +153,7 @@ jobs:
displayName: 'live-built libraries'
# Download coreclr
- - ${{ if not(in(parameters.runtimeType, 'AndroidMono', 'iOSMono', 'wasm')) }}:
+ - ${{ if not(in(parameters.runtimeType, 'AndroidMono', 'iOSMono', 'iOSNativeAOT', 'wasm')) }}:
- template: /eng/pipelines/common/download-artifact-step.yml
parameters:
unpackFolder: $(buildProductRootFolderPath)
@@ -223,39 +229,112 @@ jobs:
displayName: 'Mono Android BDN Apk'
# Download iOSMono tests
- - ${{ if eq(parameters.runtimeType, 'iOSMono') }}:
- - template: /eng/pipelines/common/download-artifact-step.yml
- parameters:
- unpackFolder: $(Build.SourcesDirectory)/iosHelloWorld/nollvm
- cleanUnpackFolder: false
- artifactFileName: 'iOSSampleAppNoLLVM.zip'
- artifactName: 'iOSSampleAppNoLLVM'
- displayName: 'iOS Sample App NoLLVM'
- - template: /eng/pipelines/common/download-artifact-step.yml
- parameters:
- unpackFolder: $(Build.SourcesDirectory)/iosHelloWorld/llvm
- cleanUnpackFolder: false
- artifactFileName: 'iOSSampleAppLLVM.zip'
- artifactName: 'iOSSampleAppLLVM'
- displayName: 'iOS Sample App LLVM'
- # same artifact as above but don't extract .zip
- - task: DownloadBuildArtifacts@0
- displayName: 'Download iOS Sample App NoLLVM'
- inputs:
- buildType: current
- downloadType: single
- downloadPath: '$(Build.SourcesDirectory)/iosHelloWorldZip/nollvmzip'
- artifactName: 'iOSSampleAppNoLLVM'
- checkDownloadedFiles: true
+ - ${{ if eq(parameters.runtimeType, 'iOSMono') }}:
+ - ${{ if and(eq(parameters.iOSLlvmBuild, 'False'), eq(parameters.iOSStripSymbols, 'False')) }}:
+ - template: /eng/pipelines/common/download-artifact-step.yml
+ parameters:
+ unpackFolder: $(Build.SourcesDirectory)/iosHelloWorld/nollvmsymbols
+ cleanUnpackFolder: false
+ artifactFileName: 'iOSSampleAppNoLLVMSymbols.zip'
+ artifactName: 'iOSSampleAppNoLLVMSymbols'
+ displayName: 'iOS Sample App NoLLVM Symbols'
+ # same artifact as above but don't extract .zip
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download iOS Sample App NoLLVM Symbols'
+ inputs:
+ buildType: current
+ downloadType: single
+ downloadPath: '$(Build.SourcesDirectory)/iosHelloWorldZip/nollvmsymbolszip'
+ artifactName: 'iOSSampleAppNoLLVMSymbols'
+ checkDownloadedFiles: true
+ - ${{ if and(eq(parameters.iOSLlvmBuild, 'True'), eq(parameters.iOSStripSymbols, 'False')) }}:
+ - template: /eng/pipelines/common/download-artifact-step.yml
+ parameters:
+ unpackFolder: $(Build.SourcesDirectory)/iosHelloWorld/llvmsymbols
+ cleanUnpackFolder: false
+ artifactFileName: 'iOSSampleAppLLVMSymbols.zip'
+ artifactName: 'iOSSampleAppLLVMSymbols'
+ displayName: 'iOS Sample App LLVM Symbols'
+ # same artifact as above but don't extract .zip
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download iOS Sample App LLVM Symbols'
+ inputs:
+ buildType: current
+ downloadType: single
+ downloadPath: '$(Build.SourcesDirectory)/iosHelloWorldZip/llvmsymbolszip'
+ artifactName: 'iOSSampleAppLLVMSymbols'
+ checkDownloadedFiles: true
+ - ${{ if and(eq(parameters.iOSLlvmBuild, 'False'), eq(parameters.iOSStripSymbols, 'True')) }}:
+ - template: /eng/pipelines/common/download-artifact-step.yml
+ parameters:
+ unpackFolder: $(Build.SourcesDirectory)/iosHelloWorld/nollvmnosymbols
+ cleanUnpackFolder: false
+ artifactFileName: 'iOSSampleAppNoLLVMNoSymbols.zip'
+ artifactName: 'iOSSampleAppNoLLVMNoSymbols'
+ displayName: 'iOS Sample App NoLLVM NoSymbols'
+ # same artifact as above but don't extract .zip
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download iOS Sample App NoLLVM NoSymbols'
+ inputs:
+ buildType: current
+ downloadType: single
+ downloadPath: '$(Build.SourcesDirectory)/iosHelloWorldZip/nollvmnosymbolszip'
+ artifactName: 'iOSSampleAppNoLLVMNoSymbols'
+ checkDownloadedFiles: true
+ - ${{ if and(eq(parameters.iOSLlvmBuild, 'True'), eq(parameters.iOSStripSymbols, 'True')) }}:
+ - template: /eng/pipelines/common/download-artifact-step.yml
+ parameters:
+ unpackFolder: $(Build.SourcesDirectory)/iosHelloWorld/llvmnosymbols
+ cleanUnpackFolder: false
+ artifactFileName: 'iOSSampleAppLLVMNoSymbols.zip'
+ artifactName: 'iOSSampleAppLLVMNoSymbols'
+ displayName: 'iOS Sample App LLVM NoSymbols'
+ # same artifact as above but don't extract .zip
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download iOS Sample App LLVM NoSymbols'
+ inputs:
+ buildType: current
+ downloadType: single
+ downloadPath: '$(Build.SourcesDirectory)/iosHelloWorldZip/llvmnosymbolszip'
+ artifactName: 'iOSSampleAppLLVMNoSymbols'
+ checkDownloadedFiles: true
+
+ # Download iOSNativeAOT tests
+ - ${{ if eq(parameters.runtimeType, 'iOSNativeAOT') }}:
+ - ${{ if eq(parameters.iOSStripSymbols, 'False') }}:
+ - template: /eng/pipelines/common/download-artifact-step.yml
+ parameters:
+ unpackFolder: $(Build.SourcesDirectory)/iosHelloWorld/symbols
+ cleanUnpackFolder: false
+ artifactFileName: 'iOSSampleAppSymbols.zip'
+ artifactName: 'iOSSampleAppSymbols'
+ displayName: 'iOS Sample App Symbols'
# same artifact as above but don't extract .zip
- task: DownloadBuildArtifacts@0
- displayName: 'Download iOS Sample App LLVM'
+ displayName: 'Download iOS Sample App Symbols'
inputs:
buildType: current
downloadType: single
- downloadPath: '$(Build.SourcesDirectory)/iosHelloWorldZip/llvmzip'
- artifactName: 'iOSSampleAppLLVM'
+ downloadPath: '$(Build.SourcesDirectory)/iosHelloWorldZip/symbols'
+ artifactName: 'iOSSampleAppSymbols'
checkDownloadedFiles: true
+ - ${{ if eq(parameters.iOSStripSymbols, 'True') }}:
+ - template: /eng/pipelines/common/download-artifact-step.yml
+ parameters:
+ unpackFolder: $(Build.SourcesDirectory)/iosHelloWorld/nosymbols
+ cleanUnpackFolder: false
+ artifactFileName: 'iOSSampleAppNoSymbols.zip'
+ artifactName: 'iOSSampleAppNoSymbols'
+ displayName: 'iOS Sample App NoSymbols'
+ # same artifact as above but don't extract .zip
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download iOS Sample App NoSymbols'
+ inputs:
+ buildType: current
+ downloadType: single
+ downloadPath: '$(Build.SourcesDirectory)/iosHelloWorldZip/nosymbols'
+ artifactName: 'iOSSampleAppNoSymbols'
+ checkDownloadedFiles: true
# Create Core_Root
- script: $(Build.SourcesDirectory)/src/tests/build$(scriptExt) $(buildConfig) $(archType) generatelayoutonly $(librariesOverrideArg) $(_crossBuildPropertyArg)
@@ -265,8 +344,8 @@ jobs:
# Copy the runtime directory into the testhost folder to include OOBs.
- 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"
displayName: "Create mono dotnet (Windows)"
- condition: and(and(succeeded(), eq(variables.runtimeFlavorName, 'Mono')), eq(variables.osGroup, 'windows'), not(in('${{ parameters.runtimeType }}', 'AndroidMono', 'iOSMono')))
+ condition: and(and(succeeded(), eq(variables.runtimeFlavorName, 'Mono')), eq(variables.osGroup, 'windows'), not(in('${{ parameters.runtimeType }}', 'AndroidMono', 'iOSMono', 'iOSNativeAOT')))
- script: "mkdir $(Build.SourcesDirectory)/.dotnet-mono;./build.sh -subset libs.pretest -configuration release -ci -arch $(archType) -testscope innerloop /p:RuntimeArtifactsPath=$(librariesDownloadDir)/bin/mono/$(osGroup).$(archType).$(buildConfigUpper) /p:RuntimeFlavor=mono;cp $(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) -rf;cp $(Build.SourcesDirectory)/artifacts/bin/testhost/net8.0-$(osGroup)-$(buildConfigUpper)-$(archType)/* $(Build.SourcesDirectory)/.dotnet-mono -r;cp $(Build.SourcesDirectory)/artifacts/bin/coreclr/$(osGroup).$(archType).$(buildConfigUpper)/corerun $(Build.SourcesDirectory)/.dotnet-mono/shared/Microsoft.NETCore.App/$(productVersion)/corerun"
displayName: "Create mono dotnet (Linux)"
- condition: and(and(succeeded(), eq(variables.runtimeFlavorName, 'Mono')), ne(variables.osGroup, 'windows'), not(in('${{ parameters.runtimeType }}', 'AndroidMono', 'iOSMono')))
+ condition: and(and(succeeded(), eq(variables.runtimeFlavorName, 'Mono')), ne(variables.osGroup, 'windows'), not(in('${{ parameters.runtimeType }}', 'AndroidMono', 'iOSMono', 'iOSNativeAOT')))
diff --git a/eng/pipelines/coreclr/templates/run-scenarios-job.yml b/eng/pipelines/coreclr/templates/run-scenarios-job.yml
index c8267446e516d8..b911aa627d71d3 100644
--- a/eng/pipelines/coreclr/templates/run-scenarios-job.yml
+++ b/eng/pipelines/coreclr/templates/run-scenarios-job.yml
@@ -215,6 +215,6 @@ jobs:
displayName: Publish Logs
inputs:
targetPath: $(Build.SourcesDirectory)/artifacts/log
- artifactName: 'Performance_Run_$(osGroup)$(osSubgroup)_$(archType)_$(buildConfig)_${{ parameters.runtimeType }}_${{ parameters.codeGenType }}_${{ parameters.runKind }}_$(iOSLlvmBuild)'
+ artifactName: 'Performance_Run_$(osGroup)$(osSubgroup)_$(archType)_$(buildConfig)_${{ parameters.runtimeType }}_${{ parameters.codeGenType }}_${{ parameters.runKind }}_$(iOSLlvmBuild)_$(iOSStripSymbols)'
continueOnError: true
condition: always()
diff --git a/eng/testing/performance/ios_nativeaot_scenarios.proj b/eng/testing/performance/ios_nativeaot_scenarios.proj
new file mode 100644
index 00000000000000..a63547110a999f
--- /dev/null
+++ b/eng/testing/performance/ios_nativeaot_scenarios.proj
@@ -0,0 +1,70 @@
+
+
+ true
+
+
+ python3
+ $(HelixPreCommands);chmod +x $HELIX_WORKITEM_PAYLOAD/SOD/SizeOnDisk
+ $(HelixPreCommands);chmod +x $HELIX_WORKITEM_PAYLOAD/startup/Startup
+
+
+
+
+ %(Identity)
+
+
+
+
+ symbols
+ nosymbols
+
+
+
+ %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\
+
+
+
+ $HELIX_CORRELATION_PAYLOAD/performance/src/scenarios/
+
+
+
+
+ $(WorkItemDirectory)
+ cd $(ScenarioDirectory)helloios;cp -rf $HELIX_CORRELATION_PAYLOAD/iosHelloWorld/$(SymbolsPath) ./app;$(Python) pre.py --name app
+ $(Python) test.py sod --scenario-name "%(Identity)"
+ $(Python) post.py
+
+
+ $(WorkItemDirectory)
+ cd $(ScenarioDirectory)helloios;cp -v $HELIX_CORRELATION_PAYLOAD/iosHelloWorldZip/$(SymbolsPath)zip/iOSSampleApp$(SymbolsPath)/iOSSampleApp$(SymbolsPath).zip .;$(Python) pre.py --name iOSSampleApp$(SymbolsPath).zip
+ $(Python) test.py sod --scenario-name "%(Identity)"
+ $(Python) post.py
+
+
+ $(WorkItemDirectory).zip
+ 00:15:00
+ ios-device
+
+
+
+
+
+
diff --git a/eng/testing/performance/ios_scenarios.proj b/eng/testing/performance/ios_scenarios.proj
index 6b30417fdff479..a7af7348bc1930 100644
--- a/eng/testing/performance/ios_scenarios.proj
+++ b/eng/testing/performance/ios_scenarios.proj
@@ -17,6 +17,8 @@
nollvm
llvm
+ symbols
+ nosymbols
@@ -28,19 +30,19 @@
-
+
$(WorkItemDirectory)
- cd $(ScenarioDirectory)helloios;cp -rf $HELIX_CORRELATION_PAYLOAD/iosHelloWorld/$(LlvmPath) ./app;$(Python) pre.py --name app
+ cd $(ScenarioDirectory)helloios;cp -rf $HELIX_CORRELATION_PAYLOAD/iosHelloWorld/$(LlvmPath)$(SymbolsPath) ./app;$(Python) pre.py --name app
$(Python) test.py sod --scenario-name "%(Identity)"
$(Python) post.py
-
+
$(WorkItemDirectory)
- cd $(ScenarioDirectory)helloios;cp -v $HELIX_CORRELATION_PAYLOAD/iosHelloWorldZip/$(LlvmPath)zip/iOSSampleApp$(LlvmPath)/iOSSampleApp$(LlvmPath).zip .;$(Python) pre.py --name iOSSampleApp$(LlvmPath).zip
+ cd $(ScenarioDirectory)helloios;cp -v $HELIX_CORRELATION_PAYLOAD/iosHelloWorldZip/$(LlvmPath)$(SymbolsPath)zip/iOSSampleApp$(LlvmPath)$(SymbolsPath)/iOSSampleApp$(LlvmPath)$(SymbolsPath).zip .;$(Python) pre.py --name iOSSampleApp$(LlvmPath)$(SymbolsPath).zip
$(Python) test.py sod --scenario-name "%(Identity)"
$(Python) post.py
-
+
$(WorkItemDirectory).zip
00:15:00
ios-device
@@ -49,7 +51,7 @@
# PreCommands
export XHARNESSPATH=$XHARNESS_CLI_PATH
- cp -r $HELIX_CORRELATION_PAYLOAD/iosHelloWorld/$(LlvmPath)/HelloiOS.app $(ScenarioDirectory)helloios/HelloiOS.app
+ cp -r $HELIX_CORRELATION_PAYLOAD/iosHelloWorld/$(LlvmPath)$(SymbolsPath)/HelloiOS.app $(ScenarioDirectory)helloios/HelloiOS.app
cp -f embedded.mobileprovision $(ScenarioDirectory)helloios/HelloiOS.app
cd $(ScenarioDirectory)helloios
sign HelloiOS.app
diff --git a/eng/testing/performance/performance-setup.ps1 b/eng/testing/performance/performance-setup.ps1
index 29e3d6199cb788..86a04401179b63 100644
--- a/eng/testing/performance/performance-setup.ps1
+++ b/eng/testing/performance/performance-setup.ps1
@@ -22,10 +22,12 @@ Param(
[string] $LogicalMachine="",
[switch] $AndroidMono,
[switch] $iOSMono,
+ [switch] $iOSNativeAOT,
[switch] $NoPGO,
[switch] $DynamicPGO,
[switch] $FullPGO,
[switch] $iOSLlvmBuild,
+ [switch] $iOSStripSymbols,
[string] $MauiVersion,
[switch] $UseLocalCommitTime
)
@@ -98,6 +100,11 @@ elseif($FullPGO)
if ($iOSMono) {
$Configurations += " iOSLlvmBuild=$iOSLlvmBuild"
+ $Configurations += " iOSStripSymbols=$iOSStripSymbols"
+}
+
+if ($iOSNativeAOT) {
+ $Configurations += " iOSStripSymbols=$iOSStripSymbols"
}
# FIX ME: This is a workaround until we get this from the actual pipeline
@@ -196,6 +203,7 @@ Write-PipelineSetVariable -Name 'RunFromPerfRepo' -Value "$RunFromPerformanceRep
Write-PipelineSetVariable -Name 'Compare' -Value "$Compare" -IsMultiJobVariable $false
Write-PipelineSetVariable -Name 'MonoDotnet' -Value "$UsingMono" -IsMultiJobVariable $false
Write-PipelineSetVariable -Name 'iOSLlvmBuild' -Value "$iOSLlvmBuild" -IsMultiJobVariable $false
+Write-PipelineSetVariable -Name 'iOSStripSymbols' -Value "$iOSStripSymbols" -IsMultiJobVariable $false
# Helix Arguments
Write-PipelineSetVariable -Name 'Creator' -Value "$Creator" -IsMultiJobVariable $false
diff --git a/eng/testing/performance/performance-setup.sh b/eng/testing/performance/performance-setup.sh
index 871a745c3375d5..3c64e65aa7a3a5 100755
--- a/eng/testing/performance/performance-setup.sh
+++ b/eng/testing/performance/performance-setup.sh
@@ -37,6 +37,8 @@ logical_machine=
javascript_engine="v8"
iosmono=false
iosllvmbuild=""
+iosstripsymbols=""
+iosnativeaot=false
maui_version=""
use_local_commit_time=false
only_sanity=false
@@ -171,10 +173,18 @@ while (($# > 0)); do
iosmono=true
shift 1
;;
+ --iosnativeaot)
+ iosnativeaot=true
+ shift 1
+ ;;
--iosllvmbuild)
iosllvmbuild=$2
shift 2
;;
+ --iosstripsymbols)
+ iosstripsymbols=$2
+ shift 2
+ ;;
--mauiversion)
maui_version=$2
shift 2
@@ -222,7 +232,9 @@ while (($# > 0)); do
echo " --dotnetversions Passed as '--dotnet-versions ' to the setup script"
echo " --alpine Set for runs on Alpine"
echo " --iosmono Set for ios Mono/Maui runs"
+ echo " --iosnativeaot Set for ios Native AOT runs"
echo " --iosllvmbuild Set LLVM for iOS Mono/Maui runs"
+ echo " --iosstripsymbols Set STRIP_DEBUG_SYMBOLS for iOS Mono/Maui runs"
echo " --mauiversion Set the maui version for Mono/Maui runs"
echo " --uselocalcommittime Pass local runtime commit time to the setup script"
echo " --nopgo Set for No PGO runs"
@@ -329,16 +341,23 @@ if [[ "$monoaot" == "true" ]]; then
fi
if [[ "$iosmono" == "true" ]]; then
- configurations="$configurations iOSLlvmBuild=$iosllvmbuild"
+ configurations="$configurations iOSLlvmBuild=$iosllvmbuild iOSStripSymbols=$iosstripsymbols"
+ extra_benchmark_dotnet_arguments="$extra_benchmark_dotnet_arguments"
+fi
+
+if [[ "$iosnativeaot" == "true" ]]; then
+ configurations="$configurations iOSStripSymbols=$iosstripsymbols"
extra_benchmark_dotnet_arguments="$extra_benchmark_dotnet_arguments"
fi
if [[ "$nopgo" == "true" ]]; then
configurations="$configurations PGOType=nopgo"
fi
+
if [[ "$dynamicpgo" == "true" ]]; then
configurations="$configurations PGOType=dynamicpgo"
fi
+
if [[ "$fullpgo" == "true" ]]; then
configurations="$configurations PGOType=fullpgo"
extra_benchmark_dotnet_arguments="$extra_benchmark_dotnet_arguments --category-exclusion-filter NoAOT"
@@ -436,16 +455,40 @@ fi
if [[ "$iosmono" == "true" ]]; then
if [[ "$iosllvmbuild" == "True" ]]; then
- # LLVM Mono .app
- mkdir -p $payload_directory/iosHelloWorld && cp -rv $source_directory/iosHelloWorld/llvm $payload_directory/iosHelloWorld
- mkdir -p $payload_directory/iosHelloWorldZip/llvmzip && cp -rv $source_directory/iosHelloWorldZip/llvmzip $payload_directory/iosHelloWorldZip
+ if [[ "$iosstripsymbols" == "True" ]]; then
+ # LLVM NoSymbols Mono .app
+ mkdir -p $payload_directory/iosHelloWorld && cp -rv $source_directory/iosHelloWorld/llvmnosymbols $payload_directory/iosHelloWorld
+ mkdir -p $payload_directory/iosHelloWorldZip/llvmnosymbolszip && cp -rv $source_directory/iosHelloWorldZip/llvmnosymbolszip $payload_directory/iosHelloWorldZip
+ else
+ # LLVM Symbols Mono .app
+ mkdir -p $payload_directory/iosHelloWorld && cp -rv $source_directory/iosHelloWorld/llvmsymbols $payload_directory/iosHelloWorld
+ mkdir -p $payload_directory/iosHelloWorldZip/llvmsymbolszip && cp -rv $source_directory/iosHelloWorldZip/llvmsymbolszip $payload_directory/iosHelloWorldZip
+ fi
else
- # NoLLVM Mono .app
- mkdir -p $payload_directory/iosHelloWorld && cp -rv $source_directory/iosHelloWorld/nollvm $payload_directory/iosHelloWorld
- mkdir -p $payload_directory/iosHelloWorldZip/nollvmzip && cp -rv $source_directory/iosHelloWorldZip/nollvmzip $payload_directory/iosHelloWorldZip
+ if [[ "$iosstripsymbols" == "True" ]]; then
+ # NoLLVM NoSymbols Mono .app
+ mkdir -p $payload_directory/iosHelloWorld && cp -rv $source_directory/iosHelloWorld/nollvmnosymbols $payload_directory/iosHelloWorld
+ mkdir -p $payload_directory/iosHelloWorldZip/nollvmnosymbolszip && cp -rv $source_directory/iosHelloWorldZip/nollvmnosymbolszip $payload_directory/iosHelloWorldZip
+ else
+ # NoLLVM Symbols Mono .app
+ mkdir -p $payload_directory/iosHelloWorld && cp -rv $source_directory/iosHelloWorld/nollvmsymbols $payload_directory/iosHelloWorld
+ mkdir -p $payload_directory/iosHelloWorldZip/nollvmsymbolszip && cp -rv $source_directory/iosHelloWorldZip/nollvmsymbolszip $payload_directory/iosHelloWorldZip
+ fi
fi
fi
+if [[ "$iosnativeaot" == "true" ]]; then
+ if [[ "$iosstripsymbols" == "True" ]]; then
+ # NoSymbols Mono .app
+ mkdir -p $payload_directory/iosHelloWorld && cp -rv $source_directory/iosHelloWorld/nosymbols $payload_directory/iosHelloWorld
+ mkdir -p $payload_directory/iosHelloWorldZip/nosymbolszip && cp -rv $source_directory/iosHelloWorldZip/nosymbolszip $payload_directory/iosHelloWorldZip
+ else
+ # NoSymbols Mono .app
+ mkdir -p $payload_directory/iosHelloWorld && cp -rv $source_directory/iosHelloWorld/symbols $payload_directory/iosHelloWorld
+ mkdir -p $payload_directory/iosHelloWorldZip/symbolszip && cp -rv $source_directory/iosHelloWorldZip/symbolszip $payload_directory/iosHelloWorldZip
+ fi
+fi
+
ci=true
_script_dir=$(pwd)/eng/common
@@ -477,6 +520,7 @@ Write-PipelineSetVariable -name "Compare" -value "$compare" -is_multi_job_variab
Write-PipelineSetVariable -name "MonoDotnet" -value "$using_mono" -is_multi_job_variable false
Write-PipelineSetVariable -name "WasmDotnet" -value "$using_wasm" -is_multi_job_variable false
Write-PipelineSetVariable -Name 'iOSLlvmBuild' -Value "$iosllvmbuild" -is_multi_job_variable false
+Write-PipelineSetVariable -Name 'iOSStripSymbols' -Value "$iosstripsymbols" -is_multi_job_variable false
Write-PipelineSetVariable -name "OnlySanityCheck" -value "$only_sanity" -is_multi_job_variable false
# Put it back to what was set on top of this script
diff --git a/src/mono/sample/iOS-NativeAOT/Program.csproj b/src/mono/sample/iOS-NativeAOT/Program.csproj
index aa08743cddbab8..c76b6530d811d3 100644
--- a/src/mono/sample/iOS-NativeAOT/Program.csproj
+++ b/src/mono/sample/iOS-NativeAOT/Program.csproj
@@ -29,8 +29,8 @@
adhoc
false
-
-
+
+
diff --git a/src/tasks/AppleAppBuilder/Templates/CMakeLists.txt.template b/src/tasks/AppleAppBuilder/Templates/CMakeLists.txt.template
index a95bf1da9a550c..29f0b6eae626ca 100644
--- a/src/tasks/AppleAppBuilder/Templates/CMakeLists.txt.template
+++ b/src/tasks/AppleAppBuilder/Templates/CMakeLists.txt.template
@@ -82,6 +82,8 @@ target_link_libraries(
if(%UseNativeAOTRuntime%)
target_link_libraries(
%ProjectName%
+ PRIVATE
"-Wl,-u,_NativeAOT_StaticInitialization"
+ "-Wl,-segprot,__THUNKS,rx,rx"
)
endif()
\ No newline at end of file