Skip to content

Commit 2a52f75

Browse files
authored
Enable building .NET Core osx-arm64 in CI (#43187)
* Enable building .NET Core osx-arm64 in CI * For osx-arm64 xcode-select xcode_12.2 * Use vmImage macOS-10.15 for all platforms
1 parent faf91e0 commit 2a52f75

16 files changed

+76
-14
lines changed

eng/install-native-dependencies.sh

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,24 @@
11
#!/usr/bin/env bash
22

3+
# This is a simple script primarily used for CI to install necessary dependencies
4+
#
5+
# For CI typical usage is
6+
#
7+
# ./install-native-dependencies.sh <OS> <arch> azDO
8+
#
9+
# For developer use it is not recommended to include the azDO final argument as that
10+
# makes installation and configuration setting only required for azDO
11+
#
12+
# So simple developer usage would currently be
13+
#
14+
# ./install-native-dependencies.sh <OS>
15+
16+
if [ "$1" = "OSX" ] && [ "$2" = "arm64" ] && [ "$3" = "azDO" ]; then
17+
# On AzDO macOS-10.15 build agents the Xcode currently defaults to Xcode 11.7
18+
# Cross compilation for osx-arm64 requires xcode 12.2 or greater
19+
sudo xcode-select -s /Applications/Xcode_12.2.app/Contents/Developer
20+
fi
21+
322
if [ "$1" = "Linux" ]; then
423
sudo apt update
524
if [ "$?" != "0" ]; then

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ jobs:
4242

4343
# Do not rename as it clashes with MSBuild property in libraries/build-native.proj
4444
- name: _crossBuildPropertyArg
45-
value: /p:CrossBuild=${{ ne(parameters.crossrootfsDir, '') }}
45+
value: /p:CrossBuild=${{ or(ne(parameters.crossrootfsDir, ''), and(eq(parameters.osGroup, 'OSX'), eq(parameters.archType, 'arm64'))) }}
4646

4747
- name: _cxx11Parameter
4848
${{ if and(eq(parameters.osGroup, 'Linux'), eq(parameters.archType, 'arm64')) }}:
@@ -66,7 +66,7 @@ jobs:
6666
- template: /eng/pipelines/common/restore-internal-tools.yml
6767

6868
- ${{ if in(parameters.osGroup, 'OSX', 'iOS', 'tvOS') }}:
69-
- script: $(Build.SourcesDirectory)/eng/install-native-dependencies.sh ${{ parameters.osGroup }}
69+
- script: $(Build.SourcesDirectory)/eng/install-native-dependencies.sh ${{ parameters.osGroup }} ${{ parameters.archType }} azDO
7070
displayName: Install Build Dependencies
7171

7272
- script: |

eng/pipelines/common/platform-matrix.yml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -445,6 +445,27 @@ jobs:
445445
helixQueueGroup: ${{ parameters.helixQueueGroup }}
446446
${{ insert }}: ${{ parameters.jobParameters }}
447447

448+
# macOS arm64
449+
450+
- ${{ if or(containsValue(parameters.platforms, 'OSX_arm64'), eq(parameters.platformGroup, 'all')) }}:
451+
- template: xplat-setup.yml
452+
parameters:
453+
jobTemplate: ${{ parameters.jobTemplate }}
454+
helixQueuesTemplate: ${{ parameters.helixQueuesTemplate }}
455+
variables: ${{ parameters.variables }}
456+
osGroup: OSX
457+
archType: arm64
458+
targetRid: osx-arm64
459+
platform: OSX_arm64
460+
jobParameters:
461+
runtimeFlavor: ${{ parameters.runtimeFlavor }}
462+
stagedBuild: ${{ parameters.stagedBuild }}
463+
buildConfig: ${{ parameters.buildConfig }}
464+
${{ if eq(parameters.passPlatforms, true) }}:
465+
platforms: ${{ parameters.platforms }}
466+
helixQueueGroup: ${{ parameters.helixQueueGroup }}
467+
${{ insert }}: ${{ parameters.jobParameters }}
468+
448469
# macOS x64
449470

450471
- ${{ if or(containsValue(parameters.platforms, 'OSX_x64'), eq(parameters.platformGroup, 'all')) }}:

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ jobs:
8787

8888
# Install test build dependencies
8989
- ${{ if eq(parameters.osGroup, 'OSX') }}:
90-
- script: $(Build.SourcesDirectory)/eng/install-native-dependencies.sh $(osGroup)
90+
- script: $(Build.SourcesDirectory)/eng/install-native-dependencies.sh $(osGroup) ${{ parameters.archType }} azDO
9191
displayName: Install native dependencies
9292
- ${{ if eq(parameters.osGroup, 'Windows_NT') }}:
9393
# Necessary to install correct cmake version

eng/pipelines/common/xplat-setup.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ jobs:
116116

117117
# OSX Build Pool (we don't have on-prem OSX BuildPool
118118
${{ if in(parameters.osGroup, 'OSX', 'iOS', 'tvOS') }}:
119-
vmImage: 'macOS-10.14'
119+
vmImage: 'macOS-10.15'
120120

121121
${{ if eq(parameters.osGroup, 'Browser') }}:
122122
vmImage: 'ubuntu-latest'

eng/pipelines/coreclr/ci.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ jobs:
4444
- Linux_musl_arm64
4545
- Linux_musl_x64
4646
- Linux_x64
47+
- OSX_arm64
4748
- OSX_x64
4849
- Windows_NT_arm
4950
- Windows_NT_arm64
@@ -72,6 +73,7 @@ jobs:
7273
- Linux_arm
7374
- Linux_musl_arm64
7475
- Linux_x64
76+
- OSX_arm64
7577
- OSX_x64
7678
- Windows_NT_x86
7779
jobParameters:

eng/pipelines/coreclr/templates/build-jit-job.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ jobs:
8080
# and FreeBSD builds use a build agent with dependencies
8181
# preinstalled, so we only need this step for OSX and Windows.
8282
- ${{ if eq(parameters.osGroup, 'OSX') }}:
83-
- script: $(Build.SourcesDirectory)/eng/install-native-dependencies.sh $(osGroup)
83+
- script: $(Build.SourcesDirectory)/eng/install-native-dependencies.sh $(osGroup) ${{ parameters.archType }} azDO
8484
displayName: Install native dependencies
8585
- ${{ if eq(parameters.osGroup, 'Windows_NT') }}:
8686
# Necessary to install python

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ jobs:
125125
# and FreeBSD builds use a build agent with dependencies
126126
# preinstalled, so we only need this step for OSX and Windows.
127127
- ${{ if eq(parameters.osGroup, 'OSX') }}:
128-
- script: $(Build.SourcesDirectory)/eng/install-native-dependencies.sh $(osGroup)
128+
- script: $(Build.SourcesDirectory)/eng/install-native-dependencies.sh $(osGroup) ${{ parameters.archType }} azDO
129129
displayName: Install native dependencies
130130
- ${{ if eq(parameters.osGroup, 'Windows_NT') }}:
131131
# Necessary to install python

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,12 +91,14 @@ jobs:
9191
- name: _HelixSource
9292
value: ci/dotnet/runtime/$(Build.SourceBranch)
9393

94+
- name: crossArg
95+
value: ''
9496
- ${{ if ne(parameters.crossrootfsDir, '') }}:
9597
- name: crossArg
9698
value: '-cross'
97-
- ${{ if eq(parameters.crossrootfsDir, '') }}:
99+
- ${{ if and(eq(parameters.osGroup, 'OSX'), eq(parameters.archType, 'arm64')) }}:
98100
- name: crossArg
99-
value: ''
101+
value: '-cross'
100102

101103
- ${{ each variable in parameters.variables }}:
102104
- ${{insert}}: ${{ variable }}

eng/pipelines/installer/jobs/base-job.yml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,8 @@ jobs:
6767
not(in(parameters.archType, 'x64', 'x86')),
6868
eq(parameters.runtimeFlavor, 'mono'),
6969
eq(parameters.isOfficialBuild, true),
70-
ne(parameters.crossrootfsDir, '')) }}
70+
ne(parameters.crossrootfsDir, ''),
71+
and(eq(parameters.osGroup, 'OSX'), eq(parameters.archType, 'arm64'))) }}
7172

7273
- name: BuildAction
7374
value: -test
@@ -130,13 +131,16 @@ jobs:
130131
/p:PortableBuild=true
131132
/p:SkipTests=$(SkipTests)
132133
/p:RuntimeFlavor=${{ parameters.runtimeFlavor }}
134+
/p:TargetArchitecture=${{ parameters.archType }}
135+
/p:CrossBuild=${{ eq(parameters.archType, 'arm64') }}
133136
$(llvmParameter)
134137
135138
- name: BaseJobBuildCommand
136139
value: >-
137140
$(Build.SourcesDirectory)/build.sh -ci
138141
$(BuildAction)
139142
-configuration $(_BuildConfig)
143+
-arch ${{ parameters.archType }}
140144
$(LiveOverridePathArgs)
141145
$(CommonMSBuildArgs)
142146
$(OfficialBuildArg)
@@ -462,7 +466,7 @@ jobs:
462466
cleanUnpackFolder: false
463467

464468
- ${{ if in(parameters.osGroup, 'OSX', 'iOS', 'tvOS') }}:
465-
- script: $(Build.SourcesDirectory)/eng/install-native-dependencies.sh ${{ parameters.osGroup }}
469+
- script: $(Build.SourcesDirectory)/eng/install-native-dependencies.sh ${{ parameters.osGroup }} ${{ parameters.archType }} azDO
466470
displayName: Install Build Dependencies
467471

468472
- script: |

eng/pipelines/libraries/base-job.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,11 @@ jobs:
5757
- _testScopeArg: -testscope ${{ parameters.testScope }}
5858

5959
- ${{ if in(parameters.osGroup, 'Linux', 'FreeBSD') }}:
60-
- _crossBuildPropertyArg: /p:CrossBuild=${{ ne(parameters.crossrootfsDir, '') }}
60+
- _crossBuildPropertyArg: /p:CrossBuild=${{ or(ne(parameters.crossrootfsDir, ''), and(eq(parameters.osGroup, 'OSX'), eq(parameters.archType, 'arm64'))) }}
61+
62+
- ${{ if eq(parameters.osGroup, 'OSX') }}:
63+
# OSX is currently building on x64, anything else is a cross build
64+
- _crossBuildPropertyArg: /p:CrossBuild=${{ ne(parameters.archType, 'x64') }}
6165

6266
- ${{ if and(eq(parameters.osGroup, 'Linux'), eq(parameters.osSubGroup, '_musl')) }}:
6367
- _runtimeOSArg: /p:RuntimeOS=linux-musl

eng/pipelines/libraries/build-job.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ jobs:
7777
- template: /eng/pipelines/common/restore-internal-tools.yml
7878

7979
- ${{ if in(parameters.osGroup, 'OSX', 'iOS', 'tvOS') }}:
80-
- script: $(Build.SourcesDirectory)/eng/install-native-dependencies.sh ${{ parameters.osGroup }}
80+
- script: $(Build.SourcesDirectory)/eng/install-native-dependencies.sh ${{ parameters.osGroup }} ${{ parameters.archType }} azDO
8181
displayName: Install Build Dependencies
8282

8383
- script: |

eng/pipelines/libraries/outerloop.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ jobs:
3333
- Linux_arm64
3434
- Linux_musl_arm64
3535
- ${{ if eq(variables['includeOsxOuterloop'], true) }}:
36+
- OSX_arm64
3637
- OSX_x64
3738
jobParameters:
3839
testGroup: innerloop
@@ -56,6 +57,7 @@ jobs:
5657
- Linux_musl_x64
5758
- Linux_musl_arm64
5859
- ${{ if and(eq(variables['includeOsxOuterloop'], true), eq(variables['isFullMatrix'], true)) }}:
60+
- OSX_arm64
5961
- OSX_x64
6062
helixQueuesTemplate: /eng/pipelines/libraries/helix-queues-setup.yml
6163
jobParameters:
@@ -77,6 +79,7 @@ jobs:
7779
- Linux_x64
7880
- Linux_musl_x64
7981
- ${{ if eq(variables['includeOsxOuterloop'], true) }}:
82+
- OSX_arm64
8083
- OSX_x64
8184
helixQueuesTemplate: /eng/pipelines/libraries/helix-queues-setup.yml
8285
jobParameters:
@@ -101,4 +104,4 @@ jobs:
101104
isFullMatrix: ${{ variables['isFullMatrix'] }}
102105
framework: net48
103106
runTests: true
104-
testScope: outerloop
107+
testScope: outerloop

eng/pipelines/mono/templates/build-job.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ jobs:
8787
# and FreeBSD builds use a build agent with dependencies
8888
# preinstalled, so we only need this step for OSX and Windows.
8989
- ${{ if in(parameters.osGroup, 'OSX', 'iOS', 'tvOS') }}:
90-
- script: $(Build.SourcesDirectory)/eng/install-native-dependencies.sh $(osGroup)
90+
- script: $(Build.SourcesDirectory)/eng/install-native-dependencies.sh $(osGroup) ${{ parameters.archType }} azDO
9191
displayName: Install native dependencies
9292
- ${{ if eq(parameters.osGroup, 'Windows_NT') }}:
9393
# Necessary to install python

eng/pipelines/runtime-official.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ stages:
4949
jobTemplate: /eng/pipelines/coreclr/templates/build-job.yml
5050
buildConfig: release
5151
platforms:
52+
- OSX_arm64
5253
- OSX_x64
5354
- Linux_x64
5455
- Linux_arm
@@ -172,6 +173,7 @@ stages:
172173
jobTemplate: /eng/pipelines/libraries/build-job.yml
173174
buildConfig: Release
174175
platforms:
176+
- OSX_arm64
175177
- OSX_x64
176178
- Linux_x64
177179
- Linux_arm
@@ -214,6 +216,7 @@ stages:
214216
useOfficialAllConfigurations: true
215217
buildFullPlatformManifest: true
216218
platforms:
219+
- OSX_arm64
217220
- OSX_x64
218221
- Linux_x64
219222
- Linux_arm

eng/pipelines/runtime.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ jobs:
143143
- Linux_musl_arm
144144
- Linux_musl_arm64
145145
- Linux_musl_x64
146+
- OSX_arm64
146147
- Windows_NT_x86
147148
- Windows_NT_x64
148149
- Windows_NT_arm
@@ -201,6 +202,7 @@ jobs:
201202
jobTemplate: /eng/pipelines/coreclr/templates/build-job.yml
202203
buildConfig: release
203204
platforms:
205+
- OSX_arm64
204206
- OSX_x64
205207
- Linux_x64
206208
- Linux_arm
@@ -619,6 +621,7 @@ jobs:
619621
- Linux_arm64
620622
- Linux_musl_x64
621623
- Linux_x64
624+
- OSX_arm64
622625
- OSX_x64
623626
- Windows_NT_x64
624627
- FreeBSD_x64
@@ -705,6 +708,7 @@ jobs:
705708
parameters:
706709
buildConfig: Release
707710
platforms:
711+
- OSX_arm64
708712
- OSX_x64
709713
- Linux_x64
710714
- Linux_arm64

0 commit comments

Comments
 (0)