Skip to content

Commit

Permalink
[dotnet] Use a different min OS version when building with NativeAOT.
Browse files Browse the repository at this point in the history
This is because NativeAOT contains swift code, and we'd have to add code to
embed the Swift libraries in any apps that target early OS versions. We could
eventually implement this, but let's wait and see if there's a demand first.
  • Loading branch information
rolfbjarne committed Jun 5, 2023
1 parent deeeca5 commit ee16c73
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 4 deletions.
6 changes: 6 additions & 0 deletions Make.config
Original file line number Diff line number Diff line change
Expand Up @@ -273,6 +273,12 @@ DOTNET_MIN_TVOS_SDK_VERSION=11.0
DOTNET_MIN_MACCATALYST_SDK_VERSION=13.1
DOTNET_MIN_MACOS_SDK_VERSION=10.15

# Minimum OS versions when using NativeOAT - these at least the general min versions above (but may be higher).
DOTNET_MIN_NATIVEAOT_IOS_SDK_VERSION=12.2
DOTNET_MIN_NATIVEAOT_TVOS_SDK_VERSION=12.2
DOTNET_MIN_NATIVEAOT_MACCATALYST_SDK_VERSION=13.1
DOTNET_MIN_NATIVEAOT_MACOS_SDK_VERSION=$(DOTNET_MIN_MACOS_SDK_VERSION)

# The min simulator version available in the Xcode we're using
MIN_IOS_SIMULATOR_VERSION=13.7
MIN_WATCHOS_SIMULATOR_VERSION=7.0
Expand Down
20 changes: 16 additions & 4 deletions dotnet/generate-target-platforms.csharp
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,16 @@ var doc = new XmlDocument ();
doc.Load (plistPath);
var nodes = doc.SelectNodes ($"/plist/dict/key[text()='KnownVersions']/following-sibling::dict[1]/key[text()='{platform}']/following-sibling::array[1]/string");

var allLines = File.ReadAllLines ("../Make.config");

var minSdkVersionName = $"DOTNET_MIN_{platform.ToUpper ()}_SDK_VERSION";
var minSdkVersionString = File.ReadAllLines ("../Make.config").Single (v => v.StartsWith (minSdkVersionName + "=", StringComparison.Ordinal)).Substring (minSdkVersionName.Length + 1);
var minSdkVersionString = allLines.Single (v => v.StartsWith (minSdkVersionName + "=", StringComparison.Ordinal)).Substring (minSdkVersionName.Length + 1);
var minSdkVersion = Version.Parse (minSdkVersionString);

var minNativeAotSdkVersionName = $"DOTNET_MIN_NATIVEAOT_{platform.ToUpper ()}_SDK_VERSION";
var minNativeAotSdkVersionString = allLines.Single (v => v.StartsWith (minNativeAotSdkVersionName + "=", StringComparison.Ordinal)).Substring (minNativeAotSdkVersionName.Length + 1);
var minNativeAotSdkVersion = Version.Parse (minNativeAotSdkVersionString);

using (TextWriter writer = new StreamWriter (outputPath)) {
writer.WriteLine ($"<!-- This file contains a generated list of the {platform} platform versions that are supported for this SDK -->");
writer.WriteLine ($"<!-- Generation script: https://github.com/xamarin/xamarin-macios/blob/main/dotnet/generate-target-platforms.csharp -->");
Expand All @@ -36,17 +42,23 @@ using (TextWriter writer = new StreamWriter (outputPath)) {

foreach (XmlNode n in nodes) {
var version = n.InnerText;
if (Version.Parse (version) < minSdkVersion)
var parsedVersion = Version.Parse (version);
if (parsedVersion < minSdkVersion)
continue;
writer.WriteLine ($"\t\t<{platform}SdkSupportedTargetPlatformVersion Include=\"{n.InnerText}\" />");
if (parsedVersion < minNativeAotSdkVersion) {
writer.WriteLine ($"\t\t<{platform}SdkSupportedTargetPlatformVersion Include=\"{n.InnerText}\" Condition=\"'$(PublishAot)' != 'true'\" />");
} else {
writer.WriteLine ($"\t\t<{platform}SdkSupportedTargetPlatformVersion Include=\"{n.InnerText}\" />");
}
}

writer.WriteLine ("\t</ItemGroup>");
writer.WriteLine ("\t<ItemGroup>");
writer.WriteLine ($"\t\t<SdkSupportedTargetPlatformVersion Condition=\"'$(TargetPlatformIdentifier)' == '{platform}'\" Include=\"@({platform}SdkSupportedTargetPlatformVersion)\" />");
writer.WriteLine ("\t</ItemGroup>");
writer.WriteLine ("\t<PropertyGroup>");
writer.WriteLine ($"\t\t<{platform}MinSupportedOSPlatformVersion>{minSdkVersionString}</{platform}MinSupportedOSPlatformVersion>");
writer.WriteLine ($"\t\t<{platform}MinSupportedOSPlatformVersion Condition=\"'$(PublishAot)' != 'true'\">{minSdkVersionString}</{platform}MinSupportedOSPlatformVersion>");
writer.WriteLine ($"\t\t<{platform}MinSupportedOSPlatformVersion Condition=\"'$(PublishAot)' == 'true'\">{minNativeAotSdkVersionString}</{platform}MinSupportedOSPlatformVersion>");
writer.WriteLine ("\t</PropertyGroup>");
writer.WriteLine ("</Project>");
}
Expand Down

0 comments on commit ee16c73

Please sign in to comment.