Skip to content

Commit fc22ee9

Browse files
authored
Support building a mono-based .NET Runtime on x64 (#68424)
We now have some architectures (eg, s390x and ppc64le) that produce a .NET runtime that looks and feels like any other .NET runtime, except it's using Mono instead of CoreCLR under the hood. However, it's only possible to produce this Mono-based .NET runtime on s390x/ppc64le. That makes it hard to test this set up on other architectures. Issues that affect the mono build on all architectures - such as #66594 become harder to fix and verify because of this unnecessary architecture requirement. Fix that by adding a flag to the top-level build.sh (and also to the msbuild projects) to make it possible to produce a .NET runtime with Mono on any platform. The default configuration is unchanged: we still produced CoreCLR-based .NET runtime on x64 and a Mono-based runtime on s390x/ppc64le. Fixes: #62440
1 parent e15f073 commit fc22ee9

File tree

4 files changed

+16
-3
lines changed

4 files changed

+16
-3
lines changed

eng/SourceBuild.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
<InnerBuildArgs>$(InnerBuildArgs) /p:AdditionalRuntimeIdentifierParent=$(BaseOS)</InnerBuildArgs>
4040
<InnerBuildArgs Condition="'$(OfficialBuildId)' != ''">$(InnerBuildArgs) /p:OfficialBuildId=$(OfficialBuildId)</InnerBuildArgs>
4141
<InnerBuildArgs Condition="'$(ContinuousIntegrationBuild)' != ''">$(InnerBuildArgs) /p:ContinuousIntegrationBuild=$(ContinuousIntegrationBuild)</InnerBuildArgs>
42-
<InnerBuildArgs Condition="'$(SourceBuildUseMonoRuntime)' == 'true'">$(InnerBuildArgs) /p:PrimaryRuntimeFlavor=Mono /p:RuntimeFlavor=Mono</InnerBuildArgs>
42+
<InnerBuildArgs Condition="'$(SourceBuildUseMonoRuntime)' == 'true'">$(InnerBuildArgs) --usemonoruntime</InnerBuildArgs>
4343
</PropertyGroup>
4444
</Target>
4545

eng/Subsets.props

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,12 @@
2626
platforms (like s390x) where only Mono is supported. The primary runtime
2727
flavor is used to decide when to build the hosts and installers. -->
2828
<PropertyGroup>
29-
<PrimaryRuntimeFlavor>CoreCLR</PrimaryRuntimeFlavor>
30-
<PrimaryRuntimeFlavor Condition="'$(TargetArchitecture)' == 's390x' or '$(TargetArchitecture)' == 'ppc64le' or '$(TargetArchitecture)' == 'armv6' or '$(TargetsLinuxBionic)' == 'true'">Mono</PrimaryRuntimeFlavor>
29+
<DefaultPrimaryRuntimeFlavor>CoreCLR</DefaultPrimaryRuntimeFlavor>
30+
<DefaultPrimaryRuntimeFlavor Condition="'$(TargetArchitecture)' == 'armv6'">Mono</DefaultPrimaryRuntimeFlavor>
31+
<DefaultPrimaryRuntimeFlavor Condition="'$(TargetArchitecture)' == 'ppc64le'">Mono</DefaultPrimaryRuntimeFlavor>
32+
<DefaultPrimaryRuntimeFlavor Condition="'$(TargetArchitecture)' == 's390x'">Mono</DefaultPrimaryRuntimeFlavor>
33+
<DefaultPrimaryRuntimeFlavor Condition="'$(TargetsLinuxBionic)' == 'true'">Mono</DefaultPrimaryRuntimeFlavor>
34+
<PrimaryRuntimeFlavor Condition="'$(PrimaryRuntimeFlavor)' == ''">$(DefaultPrimaryRuntimeFlavor)</PrimaryRuntimeFlavor>
3135
</PropertyGroup>
3236

3337
<PropertyGroup>

eng/build.ps1

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ Param(
1717
[ValidateSet("Debug","Release")][string][Alias('lc')]$librariesConfiguration,
1818
[ValidateSet("CoreCLR","Mono")][string][Alias('rf')]$runtimeFlavor,
1919
[ValidateSet("Debug","Release","Checked")][string][Alias('hc')]$hostConfiguration,
20+
[switch]$usemonoruntime = $false,
2021
[switch]$ninja,
2122
[switch]$msbuild,
2223
[string]$cmakeargs,
@@ -51,6 +52,7 @@ function Get-Help() {
5152
Write-Host " -subset (-s) Build a subset, print available subsets with -subset help."
5253
Write-Host " '-subset' can be omitted if the subset is given as the first argument."
5354
Write-Host " [Default: Builds the entire repo.]"
55+
Write-Host " -usemonoruntime Product a .NET runtime with Mono as the underlying runtime."
5456
Write-Host " -verbosity (-v) MSBuild verbosity: q[uiet], m[inimal], n[ormal], d[etailed], and diag[nostic]."
5557
Write-Host " [Default: Minimal]"
5658
Write-Host " -vs Open the solution with Visual Studio using the locally acquired SDK."
@@ -251,6 +253,7 @@ foreach ($argument in $PSBoundParameters.Keys)
251253
{
252254
"runtimeConfiguration" { $arguments += " /p:RuntimeConfiguration=$((Get-Culture).TextInfo.ToTitleCase($($PSBoundParameters[$argument])))" }
253255
"runtimeFlavor" { $arguments += " /p:RuntimeFlavor=$($PSBoundParameters[$argument].ToLowerInvariant())" }
256+
"usemonoruntime" { $arguments += " /p:PrimaryRuntimeFlavor=Mono" }
254257
"librariesConfiguration" { $arguments += " /p:LibrariesConfiguration=$((Get-Culture).TextInfo.ToTitleCase($($PSBoundParameters[$argument])))" }
255258
"hostConfiguration" { $arguments += " /p:HostConfiguration=$((Get-Culture).TextInfo.ToTitleCase($($PSBoundParameters[$argument])))" }
256259
"framework" { $arguments += " /p:BuildTargetFramework=$($PSBoundParameters[$argument].ToLowerInvariant())" }

eng/build.sh

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ usage()
4545
echo " --subset (-s) Build a subset, print available subsets with -subset help."
4646
echo " '--subset' can be omitted if the subset is given as the first argument."
4747
echo " [Default: Builds the entire repo.]"
48+
echo " --usemonoruntime Product a .NET runtime with Mono as the underlying runtime."
4849
echo " --verbosity (-v) MSBuild verbosity: q[uiet], m[inimal], n[ormal], d[etailed], and diag[nostic]."
4950
echo " [Default: Minimal]"
5051
echo ""
@@ -369,6 +370,11 @@ while [[ $# > 0 ]]; do
369370
shift 2
370371
;;
371372

373+
-usemonoruntime)
374+
arguments="$arguments /p:PrimaryRuntimeFlavor=Mono"
375+
shift 1
376+
;;
377+
372378
-librariesconfiguration|-lc)
373379
if [ -z ${2+x} ]; then
374380
echo "No libraries configuration supplied. See help (--help) for supported libraries configurations." 1>&2

0 commit comments

Comments
 (0)