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