diff --git a/eng/Subsets.props b/eng/Subsets.props
index f7ee9dc16d5dbe..692812a9f7651a 100644
--- a/eng/Subsets.props
+++ b/eng/Subsets.props
@@ -45,6 +45,7 @@
mono.llvm+
mono.llvm+
$(DefaultMonoSubsets)mono.wasmruntime+
+ $(DefaultMonoSubsets)mono.aotcross+
$(DefaultMonoSubsets)mono.runtime+mono.corelib+mono.packages
libs.native+libs.ref+libs.src+libs.pretest+libs.packages
@@ -92,6 +93,7 @@
+
@@ -201,7 +203,7 @@
-
+
@@ -213,6 +215,10 @@
+
+
+
+
@@ -282,6 +288,7 @@
+
diff --git a/eng/liveBuilds.targets b/eng/liveBuilds.targets
index 96181b33cfc2db..ade6e32134fb40 100644
--- a/eng/liveBuilds.targets
+++ b/eng/liveBuilds.targets
@@ -25,6 +25,8 @@
$([MSBuild]::NormalizeDirectory('$(CoreCLRArtifactsPath)', 'sharedFramework'))
$([MSBuild]::NormalizeDirectory('$(CoreCLRArtifactsPath)', 'crossgen2'))
+ $([MSBuild]::NormalizeDirectory('$(MonoArtifactsPath)', 'cross'))
+
$([MSBuild]::NormalizeDirectory('$(LibrariesArtifactsPath)', 'packages', '$(LibrariesConfiguration)'))
$([MSBuild]::NormalizeDirectory('$(LibrariesPackagesDir)', 'Shipping'))
$([MSBuild]::NormalizeDirectory('$(LibrariesPackagesDir)', 'NonShipping'))
@@ -105,7 +107,7 @@
+ Include="$(MonoArtifactsPath)\cross\**\*.*" />
diff --git a/eng/pipelines/common/global-build-job.yml b/eng/pipelines/common/global-build-job.yml
index c197d33b16500f..ba0775f9c22c70 100644
--- a/eng/pipelines/common/global-build-job.yml
+++ b/eng/pipelines/common/global-build-job.yml
@@ -11,6 +11,7 @@ parameters:
variables: []
targetRid: ''
timeoutInMinutes: ''
+ dependsOn: ''
pool: ''
platform: ''
condition: true
@@ -40,8 +41,14 @@ jobs:
workspace:
clean: all
+ ${{ if and(ne(parameters.useCheckoutBundle, true),ne(parameters.dependsOn,'')) }}:
+ dependsOn: ${{ parameters.dependsOn }}
+
${{ if eq(parameters.useCheckoutBundle, true) }}:
- dependsOn: checkout
+ dependsOn:
+ - checkout
+ - ${{ if ne(parameters.dependsOn,'') }}:
+ - ${{ parameters.dependsOn }}
variables:
- name: _osParameter
@@ -82,6 +89,13 @@ jobs:
- ${{ if eq(parameters.isOfficialBuild, true) }}:
- template: /eng/pipelines/common/restore-internal-tools.yml
+ - ${{ if eq(parameters.monoCrossAOTTargetOS, 'Android') }}:
+ - task: DownloadPipelineArtifact@2
+ displayName: Download AOT offset files
+ inputs:
+ artifact: Mono_Offsets_Android
+ path: '$(Build.SourcesDirectory)/artifacts/obj/mono/offsetfiles'
+
- ${{ if in(parameters.osGroup, 'OSX', 'iOS', 'tvOS', 'Android') }}:
- script: $(Build.SourcesDirectory)/eng/install-native-dependencies.sh ${{ parameters.osGroup }} ${{ parameters.archType }} azDO
displayName: Install Build Dependencies
diff --git a/eng/pipelines/mono/templates/build-job.yml b/eng/pipelines/mono/templates/build-job.yml
index c9cf9a6c1c4709..2d91e4b26ebac8 100644
--- a/eng/pipelines/mono/templates/build-job.yml
+++ b/eng/pipelines/mono/templates/build-job.yml
@@ -13,6 +13,8 @@ parameters:
isOfficialBuild: false
crossBuild: false
crossrootfsDir: ''
+ dependsOn: ''
+ monoCrossAOTTargetOS: ''
useCheckoutBundle: false
### Product build
@@ -28,6 +30,7 @@ jobs:
pool: ${{ parameters.pool }}
runtimeVariant: ${{ parameters.runtimeVariant }}
crossBuild: ${{ parameters.crossBuild }}
+ monoCrossAOTTargetOS: ${{ parameters.monoCrossAOTTargetOS }}
crossrootfsDir: ${{ parameters.crossroofsDir }}
condition: ${{ parameters.condition }}
useCheckoutBundle: ${{ parameters.useCheckoutBundle }}
@@ -40,6 +43,7 @@ jobs:
# Note that the containers are defined in platform-matrix.yml
container: ${{ parameters.container }}
+ dependsOn: ${{ parameters.dependsOn }}
timeoutInMinutes: ${{ parameters.timeoutInMinutes }}
gatherAssetManifests: true
@@ -52,6 +56,10 @@ jobs:
value: ''
- name: osOverride
value: ''
+ - name: aotCrossParameter
+ value: ''
+ - name: llvmParameter
+ value: ''
- ${{ if and(eq(variables['System.TeamProject'], 'internal'), ne(variables['Build.Reason'], 'PullRequest')) }}:
- name: officialBuildIdArg
value: '/p:officialBuildId=$(Build.BuildNumber)'
@@ -85,6 +93,9 @@ jobs:
- ${{ if eq(parameters.runtimeVariant, 'llvmaot') }}:
- name: llvmParameter
value: /p:MonoEnableLLVM=true /p:MonoBundleLLVMOptimizer=true $(llvmCxxAbi)
+ - ${{ if eq(parameters.monoCrossAOTTargetOS, 'Android') }}:
+ - name: aotCrossParameter
+ value: /p:BuildMonoCrossAOT=true /p:SkipMonoCrossJitConfigure=true /p:BuildMonoAOTCrossCompilerOnly=true
- ${{ parameters.variables }}
steps:
@@ -101,6 +112,13 @@ jobs:
- script: $(Build.SourcesDirectory)\eng\common\init-tools-native.cmd -InstallDirectory $(Build.SourcesDirectory)\native-tools -Force
displayName: Install native dependencies
+ - ${{ if eq(parameters.monoCrossAOTTargetOS, 'Android') }}:
+ - task: DownloadPipelineArtifact@2
+ displayName: Download AOT offset files
+ inputs:
+ artifact: Mono_Offsets_Android
+ path: '$(Build.SourcesDirectory)/artifacts/obj/mono/offsetfiles'
+
- ${{ if in(parameters.osGroup, 'OSX', 'iOS','tvOS') }}:
- script: |
du -sh $(Build.SourcesDirectory)/*
@@ -109,10 +127,10 @@ jobs:
# Build
- ${{ if ne(parameters.osGroup, 'windows') }}:
- - script: ./build$(scriptExt) -subset mono -c $(buildConfig) -arch $(archType) $(osOverride) -ci $(officialBuildIdArg) $(llvmParameter)
+ - script: ./build$(scriptExt) -subset mono -c $(buildConfig) -arch $(archType) $(osOverride) -ci $(officialBuildIdArg) $(aotCrossParameter) $(llvmParameter)
displayName: Build product
- ${{ if eq(parameters.osGroup, 'windows') }}:
- - script: build$(scriptExt) -subset mono -c $(buildConfig) -arch $(archType) $(osOverride) -ci $(officialBuildIdArg) $(llvmParameter)
+ - script: build$(scriptExt) -subset mono -c $(buildConfig) -arch $(archType) $(osOverride) -ci $(officialBuildIdArg) $(aotCrossParameter) $(llvmParameter)
displayName: Build product
- ${{ if in(parameters.osGroup, 'OSX', 'iOS','tvOS') }}:
@@ -134,10 +152,10 @@ jobs:
# Build packages
- ${{ if ne(parameters.osGroup, 'windows') }}:
- - script: ./build$(scriptExt) -subset mono -c $(buildConfig) -arch $(archType) $(osOverride) -ci $(officialBuildIdArg) $(llvmParameter) -pack $(OutputRidArg)
+ - script: ./build$(scriptExt) -subset mono -c $(buildConfig) -arch $(archType) $(osOverride) -ci $(officialBuildIdArg) $(aotCrossParameter) $(llvmParameter) -pack $(OutputRidArg)
displayName: Build nupkg
- ${{ if eq(parameters.osGroup, 'windows') }}:
- - script: build$(scriptExt) -subset mono -c $(buildConfig) -arch $(archType) $(osOverride) -ci $(officialBuildIdArg) $(llvmParameter) -pack $(OutputRidArg)
+ - script: build$(scriptExt) -subset mono -c $(buildConfig) -arch $(archType) $(osOverride) -ci $(officialBuildIdArg) $(aotCrossParameter) $(llvmParameter) -pack $(OutputRidArg)
displayName: Build nupkg
# Publish official build
diff --git a/eng/pipelines/mono/templates/generate-offsets.yml b/eng/pipelines/mono/templates/generate-offsets.yml
new file mode 100644
index 00000000000000..d271e3d3b1c3fc
--- /dev/null
+++ b/eng/pipelines/mono/templates/generate-offsets.yml
@@ -0,0 +1,94 @@
+parameters:
+ buildConfig: 'Debug'
+ osGroup: ''
+ platform: ''
+ container: ''
+ timeoutInMinutes: ''
+ variables: {}
+ pool: ''
+ condition: true
+ isOfficialBuild: false
+
+### Product build
+jobs:
+- template: xplat-pipeline-job.yml
+ parameters:
+ buildConfig: ${{ parameters.buildConfig }}
+ osGroup: ${{ parameters.osGroup }}
+ helixType: 'build/product/'
+ enableMicrobuild: true
+ pool: ${{ parameters.pool }}
+ condition: ${{ parameters.condition }}
+
+ ${{ if eq(parameters.useCheckoutBundle, true) }}:
+ dependsOn: checkout
+
+ # Compute job name from template parameters
+ name: ${{ format('mono_{0}_offsets', parameters.osGroup) }}
+ displayName: ${{ format('Mono {0} AOT offsets', parameters.osGroup) }}
+
+ # Run all steps in the container.
+ # Note that the containers are defined in platform-matrix.yml
+ container: ${{ parameters.container }}
+
+ timeoutInMinutes: ${{ parameters.timeoutInMinutes }}
+
+ gatherAssetManifests: true
+ variables:
+ - name: osGroup
+ value: ${{ parameters.osGroup }}
+ - name: officialBuildIdArg
+ value: ''
+ - ${{ if and(eq(variables['System.TeamProject'], 'internal'), ne(variables['Build.Reason'], 'PullRequest')) }}:
+ - name: officialBuildIdArg
+ value: '/p:officialBuildId=$(Build.BuildNumber)'
+ - name: osOverride
+ value: -os Linux
+ - name: archType
+ value: x64
+ - ${{ parameters.variables }}
+
+ steps:
+
+ # Install native dependencies
+ # Linux builds use docker images with dependencies preinstalled,
+ # and FreeBSD builds use a build agent with dependencies
+ # preinstalled, so we only need this step for OSX and Windows.
+ - ${{ if in(parameters.osGroup, 'OSX', 'iOS', 'tvOS') }}:
+ - script: $(Build.SourcesDirectory)/eng/install-native-dependencies.sh $(osGroup) ${{ parameters.archType }} azDO
+ displayName: Install native dependencies
+ - ${{ if eq(parameters.osGroup, 'windows') }}:
+ # Necessary to install python
+ - script: $(Build.SourcesDirectory)\eng\common\init-tools-native.cmd -InstallDirectory $(Build.SourcesDirectory)\native-tools -Force
+ displayName: Install native dependencies
+
+ # Build
+ - ${{ if ne(parameters.osGroup, 'windows') }}:
+ - script: ./build$(scriptExt) -subset mono.aotcross -c $(buildConfig) -arch $(archType) $(osOverride) -ci $(officialBuildIdArg) /p:MonoGenerateOffsetsOnly=true
+ displayName: Generate AOT offsets
+ - ${{ if eq(parameters.osGroup, 'windows') }}:
+ - script: build$(scriptExt) -subset mono.aotcross -c $(buildConfig) -arch $(archType) $(osOverride) -ci $(officialBuildIdArg) /p:MonoGenerateOffsetsOnly=true
+ displayName: Generate AOT offsets
+
+ # Upload offset files
+ - task: CopyFiles@2
+ displayName: Collect offset files
+ inputs:
+ sourceFolder: '$(Build.SourcesDirectory)/artifacts/obj/mono/'
+ contents: '**/offsets-*.h'
+ targetFolder: '$(Build.SourcesDirectory)/artifacts/obj/mono/offsetfiles/'
+
+ - task: PublishPipelineArtifact@1
+ displayName: Upload offset files
+ inputs:
+ targetPath: '$(Build.SourcesDirectory)/artifacts/obj/mono/offsetfiles'
+ artifactName: 'Mono_Offsets_$(osGroup)'
+
+ # Publish Logs
+ - task: PublishPipelineArtifact@1
+ displayName: Publish Logs
+ inputs:
+ targetPath: $(Build.SourcesDirectory)/artifacts/log
+ artifactName: 'BuildLogs_Mono_Offsets_$(osGroup)'
+ continueOnError: true
+ condition: always()
diff --git a/eng/pipelines/runtime-official.yml b/eng/pipelines/runtime-official.yml
index 0c07ccf7a2f0bd..1b08cf4c002730 100644
--- a/eng/pipelines/runtime-official.yml
+++ b/eng/pipelines/runtime-official.yml
@@ -122,6 +122,37 @@ stages:
extraStepsParameters:
name: MonoRuntimePacks
+ # Build Mono AOT offset headers once, for consumption elsewhere
+ #
+ - template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/mono/templates/generate-offsets.yml
+ buildConfig: release
+ platforms:
+ - Android_x64
+
+ #
+ # Build Mono release Android AOT cross-compiler
+ #
+ - template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/common/global-build-job.yml
+ runtimeFlavor: mono
+ buildConfig: release
+ platforms:
+ - OSX_x64
+ - Linux_x64
+ jobParameters:
+ buildArgs: -s mono+libs+host+packs -c $(_BuildConfig)
+ /p:BuildMonoCrossAOT=true /p:SkipMonoCrossJitConfigure=true /p:BuildMonoAOTCrossCompilerOnly=true
+ nameSuffix: AndroidAOT_Mono
+ runtimeVariant: crossandroid
+ dependsOn: mono_android_offsets
+ monoCrossAOTTargetOS: Android
+ isOfficialBuild: ${{ variables.isOfficialBuild }}
+ extraStepsTemplate: /eng/pipelines/common/upload-intermediate-artifacts-step.yml
+ extraStepsParameters:
+ name: MonoRuntimePacks
#
# Build Mono LLVM runtime packs
#
diff --git a/eng/pipelines/runtime.yml b/eng/pipelines/runtime.yml
index 8f86bb560ade0a..31f3d18157e5be 100644
--- a/eng/pipelines/runtime.yml
+++ b/eng/pipelines/runtime.yml
@@ -183,6 +183,22 @@ jobs:
eq(dependencies.checkout.outputs['SetPathVars_coreclr.containsChange'], true),
eq(variables['isFullMatrix'], true))
+# Build Mono AOT offset headers once, for consumption elsewhere
+# Only when mono changed
+#
+- template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/mono/templates/generate-offsets.yml
+ buildConfig: release
+ platforms:
+ - Android_x64
+ jobParameters:
+ condition: >-
+ or(
+ eq(dependencies.checkout.outputs['SetPathVars_mono.containsChange'], true),
+ eq(dependencies.checkout.outputs['SetPathVars_installer.containsChange'], true),
+ eq(variables['isFullMatrix'], true))
+
# Build the whole product using Mono runtime
# Only when libraries, mono or installer are changed
#
@@ -459,6 +475,34 @@ jobs:
eq(dependencies.checkout.outputs['SetPathVars_mono.containsChange'], true),
eq(variables['isFullMatrix'], true))
+#
+# Build Mono release Android AOT cross-compiler
+# Only when mono changed
+#
+- template: /eng/pipelines/common/platform-matrix.yml
+ parameters:
+ jobTemplate: /eng/pipelines/mono/templates/build-job.yml
+ runtimeFlavor: mono
+ buildConfig: release
+ platforms:
+ - OSX_x64
+ - Linux_x64
+ # - Linux_arm64
+ # - Linux_musl_arm64
+ # - windows_x64
+ # - windows_x86
+ # - windows_arm
+ # - windows_arm64
+ jobParameters:
+ runtimeVariant: crossandroid
+ dependsOn: mono_android_offsets
+ monoCrossAOTTargetOS: Android
+ condition: >-
+ or(
+ eq(dependencies.checkout.outputs['SetPathVars_mono.containsChange'], true),
+ eq(dependencies.checkout.outputs['SetPathVars_installer.containsChange'], true),
+ eq(variables['isFullMatrix'], true))
+
#
# Build Mono release
# Only when libraries or mono changed
diff --git a/eng/testing/tests.mobile.targets b/eng/testing/tests.mobile.targets
index 57f83ce970377d..4d85fef2068050 100644
--- a/eng/testing/tests.mobile.targets
+++ b/eng/testing/tests.mobile.targets
@@ -102,14 +102,14 @@
+ LLVMPath="$(MicrosoftNetCoreAppRuntimePackNativeDir)cross\$(PackageRID)">
diff --git a/src/installer/pkg/sfx/Microsoft.NETCore.App/Microsoft.NETCore.App.MonoCrossAOT.sfxproj b/src/installer/pkg/sfx/Microsoft.NETCore.App/Microsoft.NETCore.App.MonoCrossAOT.sfxproj
new file mode 100644
index 00000000000000..a344c212d2f845
--- /dev/null
+++ b/src/installer/pkg/sfx/Microsoft.NETCore.App/Microsoft.NETCore.App.MonoCrossAOT.sfxproj
@@ -0,0 +1,25 @@
+
+
+
+
+ true
+ RuntimePack
+ Microsoft.NETCore.App.MonoCrossAOT
+ Microsoft.NETCore.App.Runtime.AOT.$(RuntimeIdentifier).Cross.$(TargetCrossRid)
+ dotnet-monocrossaot
+ monocrossaot
+ linux-x64;osx-x64
+ false
+ false
+ tools/
+ true
+
+
+
+
+
+
+
+
+
+
diff --git a/src/installer/pkg/sfx/Microsoft.NETCore.App/Microsoft.NETCore.App.Runtime.sfxproj b/src/installer/pkg/sfx/Microsoft.NETCore.App/Microsoft.NETCore.App.Runtime.sfxproj
index 5f189fdf23c3d2..da316816cddb1d 100644
--- a/src/installer/pkg/sfx/Microsoft.NETCore.App/Microsoft.NETCore.App.Runtime.sfxproj
+++ b/src/installer/pkg/sfx/Microsoft.NETCore.App/Microsoft.NETCore.App.Runtime.sfxproj
@@ -77,7 +77,7 @@
- runtimes/$(RuntimeIdentifier)/native/cross
+ runtimes/$(RuntimeIdentifier)/native/cross/%(RecursiveDir)
+
+
+ android-x64;android-arm64;android-x86;android-arm
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/libraries/externals.csproj b/src/libraries/externals.csproj
index 1fece622cdb550..daf84fb3ae2d39 100644
--- a/src/libraries/externals.csproj
+++ b/src/libraries/externals.csproj
@@ -85,7 +85,7 @@
+ DestinationSubDirectory="cross/%(RecursiveDir)" />
diff --git a/src/mono/CMakeLists.txt b/src/mono/CMakeLists.txt
index 2498840b8b69e7..48efffb1db2589 100644
--- a/src/mono/CMakeLists.txt
+++ b/src/mono/CMakeLists.txt
@@ -151,6 +151,18 @@ if(NOT AOT_TARGET_TRIPLE STREQUAL "")
elseif(AOT_TARGET_TRIPLE STREQUAL "wasm32-unknown-none")
set(TARGET_SYSTEM_NAME "Emscripten")
set(TARGET_ARCH "wasm")
+ elseif(AOT_TARGET_TRIPLE STREQUAL "x86_64-none-linux-android")
+ set(TARGET_SYSTEM_NAME "Android")
+ set(TARGET_ARCH "x86_64")
+ elseif(AOT_TARGET_TRIPLE STREQUAL "i686-none-linux-android")
+ set(TARGET_SYSTEM_NAME "Android")
+ set(TARGET_ARCH "x86")
+ elseif(AOT_TARGET_TRIPLE STREQUAL "aarch64-v8a-linux-android")
+ set(TARGET_SYSTEM_NAME "Android")
+ set(TARGET_ARCH "arm64")
+ elseif(AOT_TARGET_TRIPLE STREQUAL "armv7-none-linux-androideabi")
+ set(TARGET_SYSTEM_NAME "Android")
+ set(TARGET_ARCH "arm")
elseif(AOT_TARGET_TRIPLE STREQUAL "aarch64-linux-gnu")
set(TARGET_SYSTEM_NAME "Linux")
set(TARGET_ARCH "arm64")
@@ -219,6 +231,7 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
set(HAVE_SYS_RANDOM_H 1)
elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
set(HOST_WIN32 1)
+ set(EXE_SUFFIX ".exe")
set(DISABLE_CRASH_REPORTING 1)
set(DISABLE_PORTABILITY 1)
set(HOST_NO_SYMLINKS 1)
@@ -466,7 +479,7 @@ if(LLVM_PREFIX)
set(llvm_libs ${llvm_core_libs} ${llvm_extra})
else()
- set(LLVM_CONFIG ${LLVM_PREFIX}/bin/llvm-config)
+ set(LLVM_CONFIG ${LLVM_PREFIX}/bin/llvm-config${EXE_SUFFIX})
if (NOT EXISTS ${LLVM_CONFIG})
message(FATAL_ERROR "LLVM executable '${LLVM_CONFIG}' not found.")
endif()
diff --git a/src/mono/llvm/llvm-init.proj b/src/mono/llvm/llvm-init.proj
index 3012500d0ca7ef..67af4a2e1947b6 100644
--- a/src/mono/llvm/llvm-init.proj
+++ b/src/mono/llvm/llvm-init.proj
@@ -22,8 +22,8 @@
-
-
+
+
diff --git a/src/mono/mono.proj b/src/mono/mono.proj
index c460c4515dafc2..608070fa3f42b7 100644
--- a/src/mono/mono.proj
+++ b/src/mono/mono.proj
@@ -33,9 +33,11 @@
true
true
true
+ true
true
true
true
+ true
$([MSBuild]::NormalizePath('$(MonoObjDir)', 'cross', 'config.h'))
true
true
@@ -63,7 +65,7 @@
-
+
@@ -334,8 +336,8 @@
-
-
+
+
@@ -378,8 +380,20 @@
$(EMSDK_PATH)/upstream/lib/libclang.so
+
+
+ true
+ $(ANDROID_NDK_ROOT)/sysroot
+ aarch64-v8a-linux-android
+ armv7-none-linux-androideabi
+ i686-none-linux-android
+ x86_64-none-linux-android
+ $(MonoObjDir)cross/offsets-$(Platform)-android.h
+
+
- $(XcodeDir)/Toolchains/XcodeDefault.xctoolchain/usr/lib/libclang.dylib
+ $(XcodeDir)/Toolchains/XcodeDefault.xctoolchain/usr/lib/libclang.dylib
+ $(ANDROID_NDK_ROOT)/toolchains/llvm/prebuilt/linux-x86_64/lib64/libclang.so.9svn
$(MonoCrossDir)
@@ -427,18 +441,21 @@
<_MonoAotCMakeBuildCommand>cmake --build . --target install --config $(Configuration)
<_MonoAotCMakeBuildCommand Condition="'$(MonoVerboseBuild)' == 'true'">$(_MonoAotCMakeBuildCommand) --verbose
<_MonoAotCMakeBuildCommand Condition="'$(_MonoUseNinja)' != 'true'">$(_MonoAotCMakeBuildCommand) --parallel $([System.Environment]::ProcessorCount)
+ <_MonoAotPrebuiltOffsetsFile>$(ArtifactsObjDir)\mono\offsetfiles\$(PlatformConfigPathPart)\cross\$([System.IO.Path]::GetFileName('$(MonoAotOffsetsFile)'))
+
+
-
+
-
+
$(RuntimeBinDir)$(MonoStaticFileName)
<_MonoRuntimeArtifacts Include="$(_MonoAotCrossFilePath)">
- $(RuntimeBinDir)cross\mono-aot-cross
+ $(RuntimeBinDir)cross\$(PackageRID)\mono-aot-cross
<_MonoRuntimeArtifacts Condition="'$(MonoBundleLLVMOptimizer)' == 'true'" Include="$(MonoLLVMDir)\bin\llc">
$(RuntimeBinDir)\llc
@@ -491,10 +508,10 @@
$(RuntimeBinDir)\opt
<_MonoRuntimeArtifacts Condition="'$(MonoAOTBundleLLVMOptimizer)' == 'true'" Include="$(MonoAOTLLVMDir)\bin\llc">
- $(RuntimeBinDir)cross\llc
+ $(RuntimeBinDir)cross\$(PackageRID)\llc
<_MonoRuntimeArtifacts Condition="'$(MonoAOTBundleLLVMOptimizer)' == 'true'" Include="$(MonoAOTLLVMDir)\bin\opt">
- $(RuntimeBinDir)cross\opt
+ $(RuntimeBinDir)cross\$(PackageRID)\opt
<_MonoIncludeArtifacts Include="$(MonoObjDir)out\include\**" />
<_MonoRuntimeArtifacts Condition="'$(_MonoIncludeInterpStaticFiles)' == 'true'" Include="$(MonoObjDir)out\lib\libmono-ee-interp.a">
@@ -513,14 +530,15 @@
+ Condition="'$(MonoGenerateOffsetsOnly)' != 'true' and ('$(TargetsiOS)' == 'true' or '$(TargetstvOS)' == 'true' or '$(TargetsAndroid)' == 'true' or '$(TargetsBrowser)' == 'true')"/>
-
+
diff --git a/src/mono/monoaotcross.proj b/src/mono/monoaotcross.proj
new file mode 100644
index 00000000000000..d14d6632bd2e35
--- /dev/null
+++ b/src/mono/monoaotcross.proj
@@ -0,0 +1,46 @@
+
+
+ $(NetCoreAppToolCurrent)
+
+
+
+
+ Android-x64;Android-arm64;Android-x86;Android-arm
+
+
+
+
+
+
+
+
+
+
+
+
+ $(MonoAotTargetRid.Split('-')[0])
+ $(MonoAotTargetRid.Split('-')[1])
+
+
+
+
+
+
+
+ <_MonoAOTCrossFiles Include="$(ArtifactsBinDir)mono\$(MonoAotTargetOS).$(MonoAotTargetArchitecture).$(Configuration)\cross\$(MonoAotTargetRid.ToLower())\**" />
+
+
+
+
+
+
+
+
+
diff --git a/src/mono/netcore/sample/Android/AndroidSampleApp.csproj b/src/mono/netcore/sample/Android/AndroidSampleApp.csproj
index 20806f771f6b23..d096cac023ebac 100644
--- a/src/mono/netcore/sample/Android/AndroidSampleApp.csproj
+++ b/src/mono/netcore/sample/Android/AndroidSampleApp.csproj
@@ -20,7 +20,9 @@
+
+
@@ -30,6 +32,13 @@
$(PublishDir)apk\
+
+
+ @(MonoAOTCompilerDefaultAotArguments, ';')
+ @(MonoAOTCompilerDefaultProcessArguments, ';')
+
+
+
@@ -47,6 +56,20 @@
SourceFiles="$(ANDROID_OPENSSL_AAR)\prefab\modules\ssl\libs\android.$(AndroidAbi)\libssl.so"
DestinationFolder="$(PublishDir)" SkipUnchangedFiles="true"/>
+
+
+
+
+
+
+
+ LLVMPath="$(MicrosoftNetCoreAppRuntimePackDir)native\cross\$(PackageRID)">
diff --git a/src/mono/wasm/build/WasmApp.targets b/src/mono/wasm/build/WasmApp.targets
index 5d532cad3740b3..35e84f8ed378a0 100644
--- a/src/mono/wasm/build/WasmApp.targets
+++ b/src/mono/wasm/build/WasmApp.targets
@@ -45,7 +45,7 @@
-
\ No newline at end of file
+
diff --git a/src/tests/FunctionalTests/iOS/Simulator/AOT/iOS.Simulator.Aot.Test.csproj b/src/tests/FunctionalTests/iOS/Simulator/AOT/iOS.Simulator.Aot.Test.csproj
index 9cc1038feec304..8082073239fc50 100644
--- a/src/tests/FunctionalTests/iOS/Simulator/AOT/iOS.Simulator.Aot.Test.csproj
+++ b/src/tests/FunctionalTests/iOS/Simulator/AOT/iOS.Simulator.Aot.Test.csproj
@@ -28,14 +28,14 @@
+ LLVMPath="$(MicrosoftNetCoreAppRuntimePackDir)native\cross\$(PackageRID)">
diff --git a/src/tests/run.proj b/src/tests/run.proj
index 93f290e2e48f30..73450c6344bbe8 100644
--- a/src/tests/run.proj
+++ b/src/tests/run.proj
@@ -379,8 +379,8 @@ namespace $([System.String]::Copy($(Category)).Replace(".","_").Replace("\","").
$(MonoBinDir)
- $(MonoBinDir)/cross/mono-aot-cross
- $(MonoBinDir)/cross
+ $(MonoBinDir)/cross/$(PackageRID)/mono-aot-cross
+ $(MonoBinDir)/cross/$(PackageRID)