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)">