From 2ffe5fdbb22684ff49d7b0551e30970e3791b39f Mon Sep 17 00:00:00 2001 From: Vincent Dondain Date: Tue, 7 Mar 2017 15:30:31 -0500 Subject: [PATCH] [msbuild] Fix metal targets for Xcode8 (#1838) Fixes bug #52982: [iOS]Metal samples fail to build with Xcode8.3 (https://bugzilla.xamarin.com/show_bug.cgi?id=52982) Basically with Xcode8 Apple stopped using an intermediary step to generate the default.metallib. This was what our `_ForgeMetal` target was doing, generate a `default.metal-ar` file which was used as input for `_TemperMetal` and then generate the default.metallib. Instead with Xcode8 you can just give Shaders.air directly to the metallib tool. The fix in this commit is made in such a way that it still supports Xcode7. if !Xcode8 then don't change anything. if Xcode8+ then have `_ForgedMetal` output equal `@(_SmeltedMetal)` (basically skip the _ForgeMetal target). --- .../Tasks/DetectSdkLocationsTaskBase.cs | 7 +++++++ .../Xamarin.Mac.Tasks/Xamarin.Mac.Common.targets | 13 +++++++++++-- .../Tasks/DetectSdkLocationsTaskBase.cs | 7 +++++++ .../Xamarin.iOS.Common.targets | 13 +++++++++++-- 4 files changed, 36 insertions(+), 4 deletions(-) diff --git a/msbuild/Xamarin.Mac.Tasks.Core/Tasks/DetectSdkLocationsTaskBase.cs b/msbuild/Xamarin.Mac.Tasks.Core/Tasks/DetectSdkLocationsTaskBase.cs index b427629b9f80..f8fd5178e98e 100644 --- a/msbuild/Xamarin.Mac.Tasks.Core/Tasks/DetectSdkLocationsTaskBase.cs +++ b/msbuild/Xamarin.Mac.Tasks.Core/Tasks/DetectSdkLocationsTaskBase.cs @@ -49,6 +49,11 @@ public string SdkVersion { get; set; } + [Output] + public bool IsXcode8 { + get; set; + } + #endregion Outputs public override bool Execute () @@ -60,6 +65,8 @@ public override bool Execute () EnsureXamarinSdkRoot (); EnsureSdkPath (); + IsXcode8 = AppleSdkSettings.XcodeVersion.Major >= 8; + return !Log.HasLoggedErrors; } diff --git a/msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.targets b/msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.targets index 47213ce16bd4..4c968af55bf1 100644 --- a/msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.targets +++ b/msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.targets @@ -352,13 +352,21 @@ Copyright (C) 2014 Xamarin. All rights reserved. - + + + + + + + @@ -447,6 +455,7 @@ Copyright (C) 2014 Xamarin. All rights reserved. + diff --git a/msbuild/Xamarin.iOS.Tasks.Core/Tasks/DetectSdkLocationsTaskBase.cs b/msbuild/Xamarin.iOS.Tasks.Core/Tasks/DetectSdkLocationsTaskBase.cs index 886a2c55fe0a..dd8d7b257e06 100644 --- a/msbuild/Xamarin.iOS.Tasks.Core/Tasks/DetectSdkLocationsTaskBase.cs +++ b/msbuild/Xamarin.iOS.Tasks.Core/Tasks/DetectSdkLocationsTaskBase.cs @@ -69,6 +69,11 @@ public bool SdkIsSimulator { get; set; } + [Output] + public bool IsXcode8 { + get; set; + } + #endregion Outputs public PlatformFramework Framework { @@ -92,6 +97,8 @@ public override bool Execute () SdkIsSimulator = (architectures & (TargetArchitecture.i386 | TargetArchitecture.x86_64)) != 0; + IsXcode8 = AppleSdkSettings.XcodeVersion.Major >= 8; + EnsureAppleSdkRoot (); EnsureXamarinSdkRoot (); switch (Framework) { diff --git a/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.iOS.Common.targets b/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.iOS.Common.targets index 2af263bc465b..9bda5009a32a 100644 --- a/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.iOS.Common.targets +++ b/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.iOS.Common.targets @@ -496,12 +496,20 @@ Copyright (C) 2013-2016 Xamarin. All rights reserved. Inputs="@(_SmeltedMetal)" Outputs="$(DeviceSpeficicIntermediateOutputPath)metal\default.metal-ar"> - + + + + + + + @@ -559,6 +567,7 @@ Copyright (C) 2013-2016 Xamarin. All rights reserved. +