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())\**" /> + + ++ ++ + + +