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