From a4a1c8beaf9b49bd3a76bbfc26432dbcabb32fd1 Mon Sep 17 00:00:00 2001 From: Jo Shields Date: Thu, 2 Apr 2020 04:29:42 -0400 Subject: [PATCH] Initial Mono Android CI (#34125) --- eng/pipelines/common/platform-matrix.yml | 88 ++++++++++++++++++++++ eng/pipelines/common/xplat-setup.yml | 4 + eng/pipelines/libraries/base-job.yml | 4 + eng/pipelines/mono/templates/build-job.yml | 3 + eng/pipelines/runtime-official.yml | 8 ++ eng/pipelines/runtime.yml | 16 ++++ src/libraries/Native/build-native.sh | 4 + src/mono/mono.proj | 2 +- 8 files changed, 128 insertions(+), 1 deletion(-) diff --git a/eng/pipelines/common/platform-matrix.yml b/eng/pipelines/common/platform-matrix.yml index bd5743482969b..79881b6e13433 100644 --- a/eng/pipelines/common/platform-matrix.yml +++ b/eng/pipelines/common/platform-matrix.yml @@ -198,6 +198,94 @@ jobs: # asArray: [] # ${{ insert }}: ${{ parameters.jobParameters }} +# Android x64 + +- ${{ if containsValue(parameters.platforms, 'Android_x64') }}: + - template: xplat-setup.yml + parameters: + jobTemplate: ${{ parameters.jobTemplate }} + helixQueuesTemplate: ${{ parameters.helixQueuesTemplate }} + osGroup: Android + archType: x64 + platform: Android_x64 + container: + image: ubuntu-18.04-android-20200401093035-1517ea2 + registry: mcr + jobParameters: + runtimeFlavor: mono + stagedBuild: ${{ parameters.stagedBuild }} + buildConfig: ${{ parameters.buildConfig }} + ${{ if eq(parameters.passPlatforms, true) }}: + platforms: ${{ parameters.platforms }} + helixQueueGroup: ${{ parameters.helixQueueGroup }} + ${{ insert }}: ${{ parameters.jobParameters }} + +# Android x86 + +- ${{ if containsValue(parameters.platforms, 'Android_x86') }}: + - template: xplat-setup.yml + parameters: + jobTemplate: ${{ parameters.jobTemplate }} + helixQueuesTemplate: ${{ parameters.helixQueuesTemplate }} + osGroup: Android + archType: x86 + platform: Android_x86 + container: + image: ubuntu-18.04-android-20200401093035-1517ea2 + registry: mcr + jobParameters: + runtimeFlavor: mono + stagedBuild: ${{ parameters.stagedBuild }} + buildConfig: ${{ parameters.buildConfig }} + ${{ if eq(parameters.passPlatforms, true) }}: + platforms: ${{ parameters.platforms }} + helixQueueGroup: ${{ parameters.helixQueueGroup }} + ${{ insert }}: ${{ parameters.jobParameters }} + +# Android arm + +- ${{ if containsValue(parameters.platforms, 'Android_arm') }}: + - template: xplat-setup.yml + parameters: + jobTemplate: ${{ parameters.jobTemplate }} + helixQueuesTemplate: ${{ parameters.helixQueuesTemplate }} + osGroup: Android + archType: arm + platform: Android_arm + container: + image: ubuntu-18.04-android-20200401093035-1517ea2 + registry: mcr + jobParameters: + runtimeFlavor: mono + stagedBuild: ${{ parameters.stagedBuild }} + buildConfig: ${{ parameters.buildConfig }} + ${{ if eq(parameters.passPlatforms, true) }}: + platforms: ${{ parameters.platforms }} + helixQueueGroup: ${{ parameters.helixQueueGroup }} + ${{ insert }}: ${{ parameters.jobParameters }} + +# Android arm64 + +- ${{ if containsValue(parameters.platforms, 'Android_arm64') }}: + - template: xplat-setup.yml + parameters: + jobTemplate: ${{ parameters.jobTemplate }} + helixQueuesTemplate: ${{ parameters.helixQueuesTemplate }} + osGroup: Android + archType: arm64 + platform: Android_arm64 + container: + image: ubuntu-18.04-android-20200401093035-1517ea2 + registry: mcr + jobParameters: + runtimeFlavor: mono + stagedBuild: ${{ parameters.stagedBuild }} + buildConfig: ${{ parameters.buildConfig }} + ${{ if eq(parameters.passPlatforms, true) }}: + platforms: ${{ parameters.platforms }} + helixQueueGroup: ${{ parameters.helixQueueGroup }} + ${{ insert }}: ${{ parameters.jobParameters }} + # iOS x64 - ${{ if containsValue(parameters.platforms, 'iOS_x64') }}: diff --git a/eng/pipelines/common/xplat-setup.yml b/eng/pipelines/common/xplat-setup.yml index ed938717dd602..326d96638c731 100644 --- a/eng/pipelines/common/xplat-setup.yml +++ b/eng/pipelines/common/xplat-setup.yml @@ -64,6 +64,10 @@ jobs: - name: ROOTFS_DIR value: ${{ parameters.jobParameters.crossrootfsDir }} + - ${{ if eq(parameters.osGroup, 'Android') }}: + - name: ANDROID_NDK_HOME + value: /usr/local/ndk + - name: runtimeFlavorName ${{ if eq(parameters.jobParameters.runtimeFlavor, 'mono') }}: value: Mono diff --git a/eng/pipelines/libraries/base-job.yml b/eng/pipelines/libraries/base-job.yml index c39cdd4042737..70e9fc1b20cef 100644 --- a/eng/pipelines/libraries/base-job.yml +++ b/eng/pipelines/libraries/base-job.yml @@ -74,6 +74,10 @@ jobs: - ${{ if eq(parameters.osGroup, 'iOS') }}: - _runtimeOSArg: -os ${{ parameters.osGroup }} + # force a value for OS when cross-building Android on Linux + - ${{ if eq(parameters.osGroup, 'Android') }}: + - _runtimeOSArg: -os ${{ parameters.osGroup }} + - ${{ if ne(parameters.framework, '') }}: - _finalFrameworkArg: -framework ${{ parameters.framework }} - _extraHelixArguments: /p:BuildTargetFramework=${{ parameters.framework }} diff --git a/eng/pipelines/mono/templates/build-job.yml b/eng/pipelines/mono/templates/build-job.yml index 08e7d3c62374a..cae511090c792 100644 --- a/eng/pipelines/mono/templates/build-job.yml +++ b/eng/pipelines/mono/templates/build-job.yml @@ -68,6 +68,9 @@ jobs: - ${{ if eq(parameters.osGroup, 'iOS') }}: - name: osOverride value: -os iOS + - ${{ if eq(parameters.osGroup, 'Android') }}: + - name: osOverride + value: -os Android - ${{ parameters.variables }} steps: diff --git a/eng/pipelines/runtime-official.yml b/eng/pipelines/runtime-official.yml index a49a4b1bbda73..1674541a94a75 100644 --- a/eng/pipelines/runtime-official.yml +++ b/eng/pipelines/runtime-official.yml @@ -69,6 +69,10 @@ stages: runtimeFlavor: mono buildConfig: release platforms: + - Android_x64 + - Android_x86 + - Android_arm + - Android_arm64 - iOS_x64 - iOS_arm - iOS_arm64 @@ -116,6 +120,10 @@ stages: buildConfig: Release runtimeFlavor: mono platforms: + - Android_x64 + - Android_x86 + - Android_arm + - Android_arm64 - iOS_x64 - iOS_arm - iOS_arm64 diff --git a/eng/pipelines/runtime.yml b/eng/pipelines/runtime.yml index 8f909825a4311..9a6db846433ec 100644 --- a/eng/pipelines/runtime.yml +++ b/eng/pipelines/runtime.yml @@ -231,6 +231,10 @@ jobs: runtimeFlavor: mono buildConfig: debug platforms: + - Android_x64 + - Android_x86 + - Android_arm + - Android_arm64 - iOS_x64 - iOS_arm - iOS_arm64 @@ -261,6 +265,10 @@ jobs: runtimeFlavor: mono buildConfig: release platforms: + - Android_x64 + - Android_x86 + - Android_arm + - Android_arm64 - iOS_x64 - iOS_arm - iOS_arm64 @@ -378,6 +386,10 @@ jobs: buildConfig: Release runtimeFlavor: mono platforms: + - Android_x64 + - Android_x86 + - Android_arm + - Android_arm64 - iOS_arm - iOS_arm64 - iOS_x64 @@ -390,6 +402,10 @@ jobs: buildConfig: Debug runtimeFlavor: mono platforms: + - Android_x64 + - Android_x86 + - Android_arm + - Android_arm64 - iOS_arm - iOS_arm64 - iOS_x64 diff --git a/src/libraries/Native/build-native.sh b/src/libraries/Native/build-native.sh index ec5fea05f0731..1cf9339629960 100755 --- a/src/libraries/Native/build-native.sh +++ b/src/libraries/Native/build-native.sh @@ -81,6 +81,10 @@ elif [[ "$__TargetOS" == Android && -z "$ROOTFS_DIR" ]]; then # keep ANDROID_NATIVE_API_LEVEL in sync with src/mono/Directory.Build.props __CMakeArgs="-DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake -DANDROID_STL=none -DANDROID_NATIVE_API_LEVEL=21 $__CMakeArgs" + # workaround init-compiler.sh trying to detect clang, it's handled in android.toolchain.cmake already + export CLR_CC=$(which false) + export CLR_CXX=$(which false) + if [[ "$__BuildArch" == x64 ]]; then __CMakeArgs="-DANDROID_ABI=x86_64 $__CMakeArgs" elif [[ "$__BuildArch" == x86 ]]; then diff --git a/src/mono/mono.proj b/src/mono/mono.proj index 9bdcc3ebb311c..3f3f04da931ec 100644 --- a/src/mono/mono.proj +++ b/src/mono/mono.proj @@ -416,7 +416,7 @@ - + <_MonoCFLAGS Include="-Wl,--build-id" /> <_MonoCXXFLAGS Include="-Wl,--build-id" />