From c00654af820af4661c2d766a9d747332afc5d468 Mon Sep 17 00:00:00 2001 From: Jeffrey Stedfast Date: Thu, 10 May 2018 08:57:33 -0400 Subject: [PATCH] [msbuild] Updated MetalTaskBase to use the new -m{os}-version-min argument (#4049) Fixes issue #4019 --- msbuild/Xamarin.Mac.Tasks/Tasks/Metal.cs | 7 +++++- .../Xamarin.Mac.Common.targets | 2 ++ .../Tasks/MetalTaskBase.cs | 25 ++++++++++++++++++- .../Tasks/MetalTaskBase.cs | 6 +++++ .../Xamarin.iOS.Common.targets | 2 ++ 5 files changed, 40 insertions(+), 2 deletions(-) diff --git a/msbuild/Xamarin.Mac.Tasks/Tasks/Metal.cs b/msbuild/Xamarin.Mac.Tasks/Tasks/Metal.cs index 60965ebd36..4f2baa08a6 100644 --- a/msbuild/Xamarin.Mac.Tasks/Tasks/Metal.cs +++ b/msbuild/Xamarin.Mac.Tasks/Tasks/Metal.cs @@ -1,5 +1,6 @@ using System.IO; +using Xamarin.MacDev; using Xamarin.MacDev.Tasks; namespace Xamarin.Mac.Tasks @@ -7,7 +8,11 @@ namespace Xamarin.Mac.Tasks public class Metal : MetalTaskBase { protected override string OperatingSystem { - get { return "osx"; } + get { return "macosx"; } + } + + protected override string MinimumDeploymentTargetKey { + get { return ManifestKeys.LSMinimumSystemVersion; } } protected override string DevicePlatformBinDir { diff --git a/msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.targets b/msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.targets index 00260e4987..b9f436d984 100644 --- a/msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.targets +++ b/msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.targets @@ -305,9 +305,11 @@ Copyright (C) 2014 Xamarin. All rights reserved. Condition="'$(IsMacEnabled)' == 'true' and '%(Metal.Identity)' != ''" SessionId="$(BuildSessionId)" IntermediateOutputPath="$(IntermediateOutputPath)" + AppManifest="$(_AppManifest)" ProjectDir="$(MSBuildProjectDirectory)" ResourcePrefix="$(XamMacResourcePrefix)" SdkDevPath="$(_SdkDevPath)" + SdkVersion="$(MacOSXSdkVersion)" SourceFile="@(Metal)"> diff --git a/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/MetalTaskBase.cs b/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/MetalTaskBase.cs index 407667cdab..5e3b484f09 100644 --- a/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/MetalTaskBase.cs +++ b/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/MetalTaskBase.cs @@ -15,6 +15,8 @@ namespace Xamarin.MacDev.Tasks public string SessionId { get; set; } + public ITaskItem AppManifest { get; set; } + [Required] public string IntermediateOutputPath { get; set; } @@ -27,6 +29,9 @@ namespace Xamarin.MacDev.Tasks [Required] public string SdkDevPath { get; set; } + [Required] + public string SdkVersion { get; set; } + [Required] public ITaskItem SourceFile { get; set; } @@ -35,6 +40,10 @@ namespace Xamarin.MacDev.Tasks [Output] public ITaskItem OutputFile { get; set; } + protected abstract string MinimumDeploymentTargetKey { + get; + } + protected abstract string OperatingSystem { get; } @@ -65,10 +74,23 @@ namespace Xamarin.MacDev.Tasks var path = Path.Combine (intermediate, logicalName); var args = new CommandLineArgumentBuilder (); var dir = Path.GetDirectoryName (path); + string minimumDeploymentTarget; if (!Directory.Exists (dir)) Directory.CreateDirectory (dir); + if (AppManifest != null) { + var plist = PDictionary.FromFile (AppManifest.ItemSpec); + PString value; + + if (!plist.TryGetValue (MinimumDeploymentTargetKey, out value) || string.IsNullOrEmpty (value.Value)) + minimumDeploymentTarget = SdkVersion; + else + minimumDeploymentTarget = value.Value; + } else { + minimumDeploymentTarget = SdkVersion; + } + OutputFile = new TaskItem (Path.ChangeExtension (path, ".air")); OutputFile.SetMetadata ("LogicalName", Path.ChangeExtension (logicalName, ".air")); @@ -77,7 +99,6 @@ namespace Xamarin.MacDev.Tasks args.Add ("-c"); args.Add ("-gline-tables-only"); args.Add ("-ffast-math"); - args.Add (string.Format ("-std={0}-metal1.0", OperatingSystem)); args.Add ("-serialize-diagnostics"); args.AddQuoted (Path.ChangeExtension (path, ".dia")); @@ -85,6 +106,8 @@ namespace Xamarin.MacDev.Tasks args.Add ("-o"); args.AddQuoted (Path.ChangeExtension (path, ".air")); + args.Add (string.Format ("-m{0}-version-min={1}", OperatingSystem, minimumDeploymentTarget)); + args.AddQuoted (SourceFile.ItemSpec); return args.ToString (); diff --git a/msbuild/Xamarin.iOS.Tasks.Core/Tasks/MetalTaskBase.cs b/msbuild/Xamarin.iOS.Tasks.Core/Tasks/MetalTaskBase.cs index 7d643c5d85..e8c3dfe855 100644 --- a/msbuild/Xamarin.iOS.Tasks.Core/Tasks/MetalTaskBase.cs +++ b/msbuild/Xamarin.iOS.Tasks.Core/Tasks/MetalTaskBase.cs @@ -1,5 +1,7 @@ using System.IO; +using Xamarin.MacDev; + namespace Xamarin.iOS.Tasks { public abstract class MetalTaskBase : Xamarin.MacDev.Tasks.MetalTaskBase @@ -8,6 +10,10 @@ namespace Xamarin.iOS.Tasks get { return "ios"; } } + protected override string MinimumDeploymentTargetKey { + get { return ManifestKeys.MinimumOSVersion; } + } + protected override string DevicePlatformBinDir { get { return Path.Combine (SdkDevPath, "Platforms", "iPhoneOS.platform", "usr", "bin"); } } diff --git a/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.iOS.Common.targets b/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.iOS.Common.targets index 8ffb18b605..6e262031e3 100644 --- a/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.iOS.Common.targets +++ b/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.iOS.Common.targets @@ -556,9 +556,11 @@ Copyright (C) 2013-2016 Xamarin. All rights reserved. SessionId="$(BuildSessionId)" Condition="'$(IsMacEnabled)' == 'true' and '%(Metal.Identity)' != ''" IntermediateOutputPath="$(DeviceSpecificIntermediateOutputPath)" + AppManifest="$(_AppManifest)" ProjectDir="$(MSBuildProjectDirectory)" ResourcePrefix="$(IPhoneResourcePrefix)" SdkDevPath="$(_SdkDevPath)" + SdkVersion="$(MtouchSdkVersion)" SourceFile="@(Metal)">