From bdc8e693f97e765f87f46147b82858d126d20255 Mon Sep 17 00:00:00 2001 From: Rolf Bjarne Kvinge Date: Wed, 16 Oct 2019 22:14:11 +0200 Subject: [PATCH] [msbuild] Provide the correct value for the operating system for tvOS and watchOS to a few tasks. Fixes #6200. (#7226) The problem with #6200 was that we'd pass -mios-version-min=x.y to the metal tool even for tvOS apps. This fixes it so that now pass -mtvos-version-min. Fixes https://github.com/xamarin/xamarin-macios/issues/6200. --- .../Tasks/CompileSceneKitAssets.cs | 3 --- msbuild/Xamarin.Mac.Tasks/Tasks/Metal.cs | 4 ---- msbuild/Xamarin.Mac.Tasks/Tasks/ScnTool.cs | 3 --- .../Xamarin.Mac.Common.targets | 3 +++ .../PlatformFramework.cs | 17 +++++++++++++++ .../Tasks/CompileSceneKitAssetsTaskBase.cs | 9 ++++++-- .../Tasks/MetalTaskBase.cs | 21 +++++++++++++++++-- .../Tasks/ScnToolTaskBase.cs | 9 ++++++-- .../Tasks/CompileSceneKitAssetsTaskBase.cs | 3 --- .../Tasks/MetalTaskBase.cs | 4 ---- .../Tasks/ScnToolTaskBase.cs | 3 --- .../Xamarin.iOS.Common.targets | 3 +++ tests/mtouch/ToolTasksBinPathTest.cs | 7 +++++-- 13 files changed, 61 insertions(+), 28 deletions(-) diff --git a/msbuild/Xamarin.Mac.Tasks/Tasks/CompileSceneKitAssets.cs b/msbuild/Xamarin.Mac.Tasks/Tasks/CompileSceneKitAssets.cs index 9f26390e3e..2e3ed0fb2a 100644 --- a/msbuild/Xamarin.Mac.Tasks/Tasks/CompileSceneKitAssets.cs +++ b/msbuild/Xamarin.Mac.Tasks/Tasks/CompileSceneKitAssets.cs @@ -4,8 +4,5 @@ namespace Xamarin.Mac.Tasks { public class CompileSceneKitAssets : CompileSceneKitAssetsTaskBase { - protected override string OperatingSystem { - get { return "osx"; } - } } } diff --git a/msbuild/Xamarin.Mac.Tasks/Tasks/Metal.cs b/msbuild/Xamarin.Mac.Tasks/Tasks/Metal.cs index d3d9f0abb2..bc6f604202 100644 --- a/msbuild/Xamarin.Mac.Tasks/Tasks/Metal.cs +++ b/msbuild/Xamarin.Mac.Tasks/Tasks/Metal.cs @@ -6,10 +6,6 @@ namespace Xamarin.Mac.Tasks { public class Metal : MetalTaskBase { - protected override string OperatingSystem { - get { return "macosx"; } - } - #if !MTOUCH_TESTS protected override string MinimumDeploymentTargetKey { get { return ManifestKeys.LSMinimumSystemVersion; } diff --git a/msbuild/Xamarin.Mac.Tasks/Tasks/ScnTool.cs b/msbuild/Xamarin.Mac.Tasks/Tasks/ScnTool.cs index a6a10bd345..df1f7ecd12 100644 --- a/msbuild/Xamarin.Mac.Tasks/Tasks/ScnTool.cs +++ b/msbuild/Xamarin.Mac.Tasks/Tasks/ScnTool.cs @@ -4,8 +4,5 @@ namespace Xamarin.Mac.Tasks { public class ScnTool : ScnToolTaskBase { - protected override string OperatingSystem { - get { return "osx"; } - } } } diff --git a/msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.targets b/msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.targets index 9d84c0a1ef..e6d2b94b89 100644 --- a/msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.targets +++ b/msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.targets @@ -340,6 +340,7 @@ Copyright (C) 2014 Xamarin. All rights reserved. IntermediateOutputPath="$(IntermediateOutputPath)" AppManifest="$(_AppManifest)" ProjectDir="$(MSBuildProjectDirectory)" + TargetFrameworkIdentifier="$(TargetFrameworkIdentifier)" ResourcePrefix="$(XamMacResourcePrefix)" SdkDevPath="$(_SdkDevPath)" SdkRoot="$(_SdkRoot)" @@ -588,6 +589,7 @@ Copyright (C) 2014 Xamarin. All rights reserved. SdkRoot="$(_SdkRoot)" SdkDevPath="$(_SdkDevPath)" SdkVersion="$(MacOSXSdkVersion)" + TargetFrameworkIdentifier="$(TargetFrameworkIdentifier)" IntermediateOutputPath="$(IntermediateOutputPath)" InputScene="%(_ColladaAssetWithLogicalName.Identity)" OutputScene="$(IntermediateOutputPath)%(_ColladaAssetWithLogicalName.LogicalName)"> @@ -675,6 +677,7 @@ Copyright (C) 2014 Xamarin. All rights reserved. ToolPath="$(CopySceneKitAssetsPath)" SceneKitAssets="@(SceneKitAsset)" IntermediateOutputPath="$(IntermediateOutputPath)" + TargetFrameworkIdentifier="$(TargetFrameworkIdentifier)" ProjectDir="$(MSBuildProjectDirectory)" ResourcePrefix="$(XamMacResourcePrefix)" SdkPlatform="MacOSX" diff --git a/msbuild/Xamarin.MacDev.Tasks.Core/PlatformFramework.cs b/msbuild/Xamarin.MacDev.Tasks.Core/PlatformFramework.cs index efa5c78462..d2f6abd38d 100644 --- a/msbuild/Xamarin.MacDev.Tasks.Core/PlatformFramework.cs +++ b/msbuild/Xamarin.MacDev.Tasks.Core/PlatformFramework.cs @@ -54,5 +54,22 @@ namespace Xamarin.MacDev.Tasks throw new InvalidOperationException ("Unknown TargetFrameworkIdentifier: " + targetFrameworkIdentifier); } } + + public static string GetOperatingSystem (string targetFrameworkIdentifier) + { + var framework = PlatformFrameworkHelper.GetFramework (targetFrameworkIdentifier); + switch (framework) { + case PlatformFramework.WatchOS: + return "watchos"; + case PlatformFramework.TVOS: + return "tvos"; + case PlatformFramework.MacOS: + return "osx"; + case PlatformFramework.iOS: + return "ios"; + default: + throw new InvalidOperationException (string.Format ("Unknown target framework {0} for target framework identifier {2}.", framework, targetFrameworkIdentifier)); + } + } } } diff --git a/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/CompileSceneKitAssetsTaskBase.cs b/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/CompileSceneKitAssetsTaskBase.cs index 15da5851f8..12c39a8f0b 100644 --- a/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/CompileSceneKitAssetsTaskBase.cs +++ b/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/CompileSceneKitAssetsTaskBase.cs @@ -47,6 +47,9 @@ namespace Xamarin.MacDev.Tasks [Required] public string SdkVersion { get; set; } + [Required] + public string TargetFrameworkIdentifier { get; set; } + public string ToolExe { get { return toolExe ?? ToolName; } set { toolExe = value; } @@ -67,8 +70,10 @@ namespace Xamarin.MacDev.Tasks get { return "copySceneKitAssets"; } } - protected abstract string OperatingSystem { - get; + protected virtual string OperatingSystem { + get { + return PlatformFrameworkHelper.GetOperatingSystem (TargetFrameworkIdentifier); + } } string DeveloperRootBinDir { diff --git a/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/MetalTaskBase.cs b/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/MetalTaskBase.cs index d2123e2bb1..b4958721a6 100644 --- a/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/MetalTaskBase.cs +++ b/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/MetalTaskBase.cs @@ -39,6 +39,9 @@ namespace Xamarin.MacDev.Tasks [Required] public ITaskItem SourceFile { get; set; } + [Required] + public string TargetFrameworkIdentifier { get; set; } + #endregion [Output] @@ -48,8 +51,22 @@ namespace Xamarin.MacDev.Tasks get; } - protected abstract string OperatingSystem { - get; + protected virtual string OperatingSystem { + get { + switch (PlatformFrameworkHelper.GetFramework (TargetFrameworkIdentifier)) { + case PlatformFramework.WatchOS: + return "watchos"; + case PlatformFramework.TVOS: + return "tvos"; + case PlatformFramework.MacOS: + return "macosx"; + case PlatformFramework.iOS: + return "ios"; + default: + Log.LogError ($"Unknown target framework identifier: {TargetFrameworkIdentifier}."); + return string.Empty; + } + } } protected abstract string DevicePlatformBinDir { diff --git a/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/ScnToolTaskBase.cs b/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/ScnToolTaskBase.cs index a3f4206e90..ccbab4ad93 100644 --- a/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/ScnToolTaskBase.cs +++ b/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/ScnToolTaskBase.cs @@ -39,14 +39,19 @@ namespace Xamarin.MacDev.Tasks } } + [Required] + public string TargetFrameworkIdentifier { get; set; } + #endregion string DevicePlatformBinDir { get { return Path.Combine (SdkDevPath, "usr", "bin"); } } - protected abstract string OperatingSystem { - get; + protected virtual string OperatingSystem { + get { + return PlatformFrameworkHelper.GetOperatingSystem (TargetFrameworkIdentifier); + } } protected override string ToolName { diff --git a/msbuild/Xamarin.iOS.Tasks.Core/Tasks/CompileSceneKitAssetsTaskBase.cs b/msbuild/Xamarin.iOS.Tasks.Core/Tasks/CompileSceneKitAssetsTaskBase.cs index 30a75aa363..8b2021c653 100644 --- a/msbuild/Xamarin.iOS.Tasks.Core/Tasks/CompileSceneKitAssetsTaskBase.cs +++ b/msbuild/Xamarin.iOS.Tasks.Core/Tasks/CompileSceneKitAssetsTaskBase.cs @@ -2,8 +2,5 @@ { public abstract class CompileSceneKitAssetsTaskBase : Xamarin.MacDev.Tasks.CompileSceneKitAssetsTaskBase { - protected override string OperatingSystem { - get { return "ios"; } - } } } diff --git a/msbuild/Xamarin.iOS.Tasks.Core/Tasks/MetalTaskBase.cs b/msbuild/Xamarin.iOS.Tasks.Core/Tasks/MetalTaskBase.cs index 52450a3b28..ccbdd47e16 100644 --- a/msbuild/Xamarin.iOS.Tasks.Core/Tasks/MetalTaskBase.cs +++ b/msbuild/Xamarin.iOS.Tasks.Core/Tasks/MetalTaskBase.cs @@ -6,10 +6,6 @@ namespace Xamarin.iOS.Tasks { public abstract class MetalTaskBase : Xamarin.MacDev.Tasks.MetalTaskBase { - protected override string OperatingSystem { - get { return "ios"; } - } - protected override string MinimumDeploymentTargetKey { get { return ManifestKeys.MinimumOSVersion; } } diff --git a/msbuild/Xamarin.iOS.Tasks.Core/Tasks/ScnToolTaskBase.cs b/msbuild/Xamarin.iOS.Tasks.Core/Tasks/ScnToolTaskBase.cs index c0696e69b8..3ffe79e6cf 100644 --- a/msbuild/Xamarin.iOS.Tasks.Core/Tasks/ScnToolTaskBase.cs +++ b/msbuild/Xamarin.iOS.Tasks.Core/Tasks/ScnToolTaskBase.cs @@ -2,8 +2,5 @@ { public abstract class ScnToolTaskBase : Xamarin.MacDev.Tasks.ScnToolTaskBase { - protected override string OperatingSystem { - get { return "ios"; } - } } } diff --git a/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.iOS.Common.targets b/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.iOS.Common.targets index b5e69bf865..3ee8881492 100644 --- a/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.iOS.Common.targets +++ b/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.iOS.Common.targets @@ -603,6 +603,7 @@ Copyright (C) 2013-2016 Xamarin. All rights reserved. IntermediateOutputPath="$(DeviceSpecificIntermediateOutputPath)" AppManifest="$(_AppManifest)" ProjectDir="$(MSBuildProjectDirectory)" + TargetFrameworkIdentifier="$(TargetFrameworkIdentifier)" ResourcePrefix="$(IPhoneResourcePrefix)" SdkDevPath="$(_SdkDevPath)" SdkRoot="$(_SdkRoot)" @@ -1220,6 +1221,7 @@ Copyright (C) 2013-2016 Xamarin. All rights reserved. SdkRoot="$(_SdkRoot)" SdkDevPath="$(_SdkDevPath)" SdkVersion="$(MtouchSdkVersion)" + TargetFrameworkIdentifier="$(TargetFrameworkIdentifier)" IntermediateOutputPath="$(DeviceSpecificIntermediateOutputPath)" InputScene="%(_ColladaAssetWithLogicalName.Identity)" OutputScene="$(DeviceSpecificIntermediateOutputPath)%(_ColladaAssetWithLogicalName.LogicalName)"> @@ -1333,6 +1335,7 @@ Copyright (C) 2013-2016 Xamarin. All rights reserved. ToolPath="$(CopySceneKitAssetsPath)" SceneKitAssets="@(SceneKitAsset)" IntermediateOutputPath="$(DeviceSpecificIntermediateOutputPath)" + TargetFrameworkIdentifier="$(TargetFrameworkIdentifier)" ProjectDir="$(MSBuildProjectDirectory)" ResourcePrefix="$(IPhoneResourcePrefix)" IsWatchApp="$(IsWatchApp)" diff --git a/tests/mtouch/ToolTasksBinPathTest.cs b/tests/mtouch/ToolTasksBinPathTest.cs index 781628e4e0..b119e90e3c 100644 --- a/tests/mtouch/ToolTasksBinPathTest.cs +++ b/tests/mtouch/ToolTasksBinPathTest.cs @@ -14,8 +14,10 @@ namespace Xamarin.MacDev.Tasks { public abstract class MetalTaskBase { - protected abstract string OperatingSystem { - get; + protected virtual string OperatingSystem { + get { + throw new NotImplementedException (); + } } protected abstract string DevicePlatformBinDir { @@ -82,6 +84,7 @@ namespace Xamarin.Mac.Tasks { RedirectStandardError = true, }; psi.EnvironmentVariables.Add ("DEVELOPER_DIR", Configuration.xcode_root); + psi.EnvironmentVariables.Remove ("XCODE_DEVELOPER_DIR_PATH"); // VSfM sets XCODE_DEVELOPER_DIR_PATH, which confuses the command-line tools if it doesn't match xcode-select, so just unset it. var proc = Process.Start (psi); string output = proc.StandardOutput.ReadToEnd ();