diff --git a/eng/pipelines/templates/stages/vmr-build.yml b/eng/pipelines/templates/stages/vmr-build.yml
index 33a4bdae80b6..1d2083389922 100644
--- a/eng/pipelines/templates/stages/vmr-build.yml
+++ b/eng/pipelines/templates/stages/vmr-build.yml
@@ -942,6 +942,64 @@ stages:
targetArchitecture: arm64
targetRid: ${{ variables.linuxMuslArm64Rid }}
+ - template: ../jobs/vmr-build.yml
+ parameters:
+ buildName: AzureLinux_x64_Cross_ShortStack_Alpine_Mono_CrossAOT
+ isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
+ vmrBranch: ${{ variables.VmrBranch }}
+ architecture: x64
+ pool: ${{ parameters.pool_Linux }}
+ container: ${{ variables.azurelinuxX64AlpineCrossContainer }}
+ crossRootFs: '/crossrootfs/x64'
+ targetOS: linux-musl
+ targetArchitecture: x64
+ targetRid: ${{ variables.linuxMuslX64Rid }}
+ extraProperties: /p:DotNetBuildMonoCrossAOT=true
+ runTests: false
+
+ - template: ../jobs/vmr-build.yml
+ parameters:
+ buildName: AzureLinux_x64_Cross_ShortStack_Alpine_Mono_CrossAOT
+ isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
+ vmrBranch: ${{ variables.VmrBranch }}
+ architecture: arm64
+ pool: ${{ parameters.pool_Linux }}
+ container: ${{ variables.azurelinuxArm64AlpineCrossContainer }}
+ crossRootFs: '/crossrootfs/arm64'
+ targetOS: linux-musl
+ targetArchitecture: arm64
+ targetRid: ${{ variables.linuxMuslX64Rid }}
+ extraProperties: /p:DotNetBuildMonoCrossAOT=true
+ runTests: false
+
+ - template: ../jobs/vmr-build.yml
+ parameters:
+ buildName: AzureLinux_x64_Cross_ShortStack_Mono_CrossAOT
+ isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
+ vmrBranch: ${{ variables.VmrBranch }}
+ architecture: x64
+ pool: ${{ parameters.pool_Linux_Shortstack }}
+ container: ${{ variables.azurelinuxX64CrossContainer }}
+ crossRootFs: '/crossrootfs/x64'
+ targetOS: linux
+ targetArchitecture: x64
+ extraProperties: /p:DotNetBuildMonoCrossAOT=true
+ runTests: false
+
+ - template: ../jobs/vmr-build.yml
+ parameters:
+ buildName: AzureLinux_x64_Cross_ShortStack_Mono_CrossAOT
+ isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
+ vmrBranch: ${{ variables.VmrBranch }}
+ architecture: arm64
+ pool: ${{ parameters.pool_Linux_Shortstack }}
+ container: ${{ variables.azurelinuxArm64CrossContainer }}
+ crossRootFs: '/crossrootfs/arm64'
+ targetOS: linux
+ targetArchitecture: arm64
+ extraProperties: /p:DotNetBuildMonoCrossAOT=true
+ runTests: false
+
- template: ../jobs/vmr-build.yml
parameters:
buildName: AzureLinux_x64_Cross_ShortStack_Mono_LLVMAOT
@@ -993,6 +1051,30 @@ stages:
targetOS: osx
targetArchitecture: arm64
+ - template: ../jobs/vmr-build.yml
+ parameters:
+ buildName: OSX_ShortStack_Mono_CrossAOT
+ isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
+ vmrBranch: ${{ variables.VmrBranch }}
+ architecture: x64
+ pool: ${{ parameters.pool_Mac }}
+ targetOS: osx
+ targetArchitecture: x64
+ extraProperties: /p:DotNetBuildMonoCrossAOT=true
+ runTests: false
+
+ - template: ../jobs/vmr-build.yml
+ parameters:
+ buildName: OSX_ShortStack_Mono_CrossAOT
+ isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
+ vmrBranch: ${{ variables.VmrBranch }}
+ architecture: arm64
+ pool: ${{ parameters.pool_Mac }}
+ targetOS: osx
+ targetArchitecture: arm64
+ extraProperties: /p:DotNetBuildMonoCrossAOT=true
+ runTests: false
+
- template: ../jobs/vmr-build.yml
parameters:
buildName: OSX_ShortStack_Mono_LLVMJIT
@@ -1051,6 +1133,30 @@ stages:
targetOS: windows
targetArchitecture: x64
+ - template: ../jobs/vmr-build.yml
+ parameters:
+ buildName: Windows_ShortStack_Mono_CrossAOT
+ isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
+ vmrBranch: ${{ variables.VmrBranch }}
+ architecture: x64
+ pool: ${{ parameters.pool_Windows }}
+ targetOS: windows
+ targetArchitecture: x64
+ extraProperties: /p:DotNetBuildMonoCrossAOT=true
+ runTests: false
+
+ - template: ../jobs/vmr-build.yml
+ parameters:
+ buildName: Windows_ShortStack_Mono_CrossAOT
+ isBuiltFromVmr: ${{ parameters.isBuiltFromVmr }}
+ vmrBranch: ${{ variables.VmrBranch }}
+ architecture: arm64
+ pool: ${{ parameters.pool_Windows }}
+ targetOS: windows
+ targetArchitecture: arm64
+ extraProperties: /p:DotNetBuildMonoCrossAOT=true
+ runTests: false
+
- template: ../jobs/vmr-build.yml
parameters:
buildName: Windows
diff --git a/src/SourceBuild/content/Directory.Build.props b/src/SourceBuild/content/Directory.Build.props
index f088f0499d2e..2de080d8f33e 100644
--- a/src/SourceBuild/content/Directory.Build.props
+++ b/src/SourceBuild/content/Directory.Build.props
@@ -19,7 +19,7 @@
$(TargetOS)
-
+
true
true
@@ -34,6 +34,8 @@
true
true
+
+ true
runtime
diff --git a/src/SourceBuild/content/repo-projects/runtime.proj b/src/SourceBuild/content/repo-projects/runtime.proj
index 6ece535e2a89..5c187068e132 100644
--- a/src/SourceBuild/content/repo-projects/runtime.proj
+++ b/src/SourceBuild/content/repo-projects/runtime.proj
@@ -14,6 +14,7 @@
$(BuildArgs) /p:DotNetBuildMonoEnableLLVM=$(DotNetBuildMonoEnableLLVM)
$(BuildArgs) /p:DotNetBuildMonoAOTEnableLLVM=$(DotNetBuildMonoAOTEnableLLVM)
$(BuildArgs) /p:DotNetBuildMonoBundleLLVMOptimizer=$(DotNetBuildMonoBundleLLVMOptimizer)
+ $(BuildArgs) /p:DotNetBuildMonoCrossAOT=$(DotNetBuildMonoCrossAOT)
$(BuildArgs) $(FlagParameterPrefix)pgoinstrument
$(BuildArgs) /p:UseSystemLibs=$(UseSystemLibs)
diff --git a/src/SourceBuild/patches/runtime/0001-mono-Fix-output-directory-for-cross-compilers-if-Out.patch b/src/SourceBuild/patches/runtime/0001-mono-Fix-output-directory-for-cross-compilers-if-Out.patch
new file mode 100644
index 000000000000..76d5f11a5849
--- /dev/null
+++ b/src/SourceBuild/patches/runtime/0001-mono-Fix-output-directory-for-cross-compilers-if-Out.patch
@@ -0,0 +1,108 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Alexander=20K=C3=B6plinger?=
+Date: Mon, 18 Nov 2024 22:38:56 +0100
+Subject: [PATCH] [mono] Fix output directory for cross compilers if OutputRID
+ is overridden
+
+This happens e.g. in the VMR where OutputRID is set globally. We assumed in monoaotcross.proj that the inner mono cross compiler runtime build would put files into a path that matches the target RID but we were using OutputRID in the inner build.
+
+Instead use the preexisting MonoAotCrossDir property.
+---
+ eng/DotNetBuild.props | 1 +
+ src/mono/mono.proj | 16 ++++++++--------
+ src/mono/monoaotcross.proj | 7 +++++--
+ 3 files changed, 14 insertions(+), 10 deletions(-)
+
+diff --git a/eng/DotNetBuild.props b/eng/DotNetBuild.props
+index 49f7bdaf9cf..fb0e235841f 100644
+--- a/eng/DotNetBuild.props
++++ b/eng/DotNetBuild.props
+@@ -33,6 +33,7 @@
+ true
+ true
+ true
++ true
+
+
+ $(RuntimeBinDir)$(MonoStaticLibFileName)
+
+ <_MonoRuntimeArtifacts Include="$(_MonoAotCrossFilePath)" Condition="Exists($(_MonoAotCrossFilePath))">
+- $(RuntimeBinDir)cross\$(OutputRID)\$(MonoAotCrossName)$(ExeSuffix)
++ $(MonoAotCrossDir)$(MonoAotCrossName)$(ExeSuffix)
+
+ <_MonoRuntimeArtifacts Include="$(_MonoAotCrossFilePath).dbg" Condition="Exists('$(_MonoAotCrossFilePath).dbg')">
+- $(RuntimeBinDir)cross\$(OutputRID)\$(MonoAotCrossName).dbg
++ $(MonoAotCrossDir)$(MonoAotCrossName).dbg
+
+ <_MonoRuntimeArtifacts Include="$(_MonoAotCrossFilePath).dwarf" Condition="Exists('$(_MonoAotCrossFilePath).dwarf')">
+- $(RuntimeBinDir)cross\$(OutputRID)\$(MonoAotCrossName).dwarf
++ $(MonoAotCrossDir)$(MonoAotCrossName).dwarf
+
+ <_MonoRuntimeArtifacts Include="$(MonoObjCrossDir)out\bin\PDB\$(MonoAotCrossName).pdb" Condition="Exists('$(MonoObjCrossDir)out\bin\PDB\$(MonoAotCrossName).pdb')">
+- $(RuntimeBinDir)cross\$(OutputRID)\$(MonoAotCrossName).pdb
++ $(MonoAotCrossDir)$(MonoAotCrossName).pdb
+
+
+ <_MonoRuntimeArtifacts Include="@(_MonoRuntimeComponentsStaticFilePath)">
+@@ -1119,10 +1119,10 @@ JS_ENGINES = [NODE_JS]
+ $(RuntimeBinDir)libc++abi.so.1
+
+ <_MonoRuntimeArtifacts Condition="'$(HostOS)' == 'Linux' and ((('$(MonoAOTBundleLLVMOptimizer)' == 'true' or '$(MonoAOTEnableLLVM)' == 'true') and '$(MonoUseLibCxx)' == 'true') or '$(TargetArchitecture)' == 'wasm')" Include="$(MonoLLVMDir)\$(_MonoLLVMHostArchitecture)\lib\libc++.so.1">
+- $(RuntimeBinDir)cross\$(OutputRID)\libc++.so.1
++ $(MonoAotCrossDir)libc++.so.1
+
+ <_MonoRuntimeArtifacts Condition="'$(HostOS)' == 'Linux' and ((('$(MonoAOTBundleLLVMOptimizer)' == 'true' or '$(MonoAOTEnableLLVM)' == 'true') and '$(MonoUseLibCxx)' == 'true') or '$(TargetArchitecture)' == 'wasm')" Include="$(MonoLLVMDir)\$(_MonoLLVMHostArchitecture)\lib\libc++abi.so.1">
+- $(RuntimeBinDir)cross\$(OutputRID)\libc++abi.so.1
++ $(MonoAotCrossDir)libc++abi.so.1
+
+ <_MonoRuntimeArtifacts Condition="'$(MonoBundleLLVMOptimizer)' == 'true'" Include="$(MonoLLVMDir)\$(_MonoLLVMHostArchitecture)\bin\llc$(ExeSuffix)">
+ $(RuntimeBinDir)\llc$(ExeSuffix)
+@@ -1131,10 +1131,10 @@ JS_ENGINES = [NODE_JS]
+ $(RuntimeBinDir)\opt$(ExeSuffix)
+
+ <_MonoRuntimeArtifacts Condition="'$(MonoAOTBundleLLVMOptimizer)' == 'true'" Include="$(MonoLLVMDir)\$(_MonoLLVMHostArchitecture)\bin\llc$(ExeSuffix)">
+- $(RuntimeBinDir)cross\$(OutputRID)\llc$(ExeSuffix)
++ $(MonoAotCrossDir)llc$(ExeSuffix)
+
+ <_MonoRuntimeArtifacts Condition="'$(MonoAOTBundleLLVMOptimizer)' == 'true'" Include="$(MonoLLVMDir)\$(_MonoLLVMHostArchitecture)\bin\opt$(ExeSuffix)">
+- $(RuntimeBinDir)cross\$(OutputRID)\opt$(ExeSuffix)
++ $(MonoAotCrossDir)opt$(ExeSuffix)
+
+ <_MonoIncludeArtifacts Include="$(MonoObjDir)out\include\**" />
+ <_MonoRuntimeArtifacts Condition="'$(MonoComponentsStatic)' != 'true' and Exists('$(MonoObjDir)out\lib\Mono.release.framework')" Include="@(_MonoRuntimeComponentsSharedFilePath)">
+diff --git a/src/mono/monoaotcross.proj b/src/mono/monoaotcross.proj
+index c747e87f763..d5969fb48fd 100644
+--- a/src/mono/monoaotcross.proj
++++ b/src/mono/monoaotcross.proj
+@@ -43,20 +43,23 @@
+ $(MonoAotTargetRid.Substring($([MSBuild]::Add(1, $(MonoAotTargetRid.LastIndexOf('-'))))))
+ $(TargetOS)
+ linux-musl
++ $(TargetArchitecture)
+
+
+
++ Properties="TargetArchitecture=$(MonoAotTargetArchitecture);TargetOS=$(MonoAotTargetOS);AotHostOS=$(MonoAotHostOS);AotHostArchitecture=$(MonoAotHostArchitecture)" />
+
+
++ Properties="AotHostOS=$(MonoAotHostOS);AotHostArchitecture=$(MonoAotHostArchitecture);BuildMonoAOTCrossCompilerOnly=true;TargetArchitecture=$(MonoAotTargetArchitecture);TargetOS=$(MonoAotTargetOS)" />
+
+
+ <_MonoAOTCrossFiles Include="$(ArtifactsBinDir)mono\$(MonoAotTargetOS).$(MonoAotTargetArchitecture).$(Configuration)\cross\$(MonoAotTargetRid.ToLower())\**" />
+
+
++
++
+
+
+