From e9f0b1f8e67ae4a03102ba4412ade9b3e27b3157 Mon Sep 17 00:00:00 2001 From: Rolf Bjarne Kvinge Date: Mon, 23 Nov 2020 14:46:11 +0100 Subject: [PATCH] [msbuild] Implement support for Mac Catalyst --- msbuild/Makefile | 46 +++++ .../Tasks/XamarinTask.cs | 3 + msbuild/Xamarin.Shared/Xamarin.Shared.props | 6 +- .../Xamarin.MacCatalyst-FrameworkList.xml.in | 192 ++++++++++++++++++ .../Xamarin.MacCatalyst.CSharp.targets | 32 +++ .../Xamarin.MacCatalyst.Common.targets | 29 +++ .../Xamarin.MacCatalyst.FSharp.targets | 41 ++++ tools/common/Driver.cs | 2 + tools/mtouch/mtouch.cs | 1 + 9 files changed, 350 insertions(+), 2 deletions(-) create mode 100644 msbuild/Xamarin.iOS.Tasks.Core/Xamarin.MacCatalyst-FrameworkList.xml.in create mode 100644 msbuild/Xamarin.iOS.Tasks.Core/Xamarin.MacCatalyst.CSharp.targets create mode 100644 msbuild/Xamarin.iOS.Tasks.Core/Xamarin.MacCatalyst.Common.targets create mode 100644 msbuild/Xamarin.iOS.Tasks.Core/Xamarin.MacCatalyst.FSharp.targets diff --git a/msbuild/Makefile b/msbuild/Makefile index b4f88369be..48568fd4e3 100644 --- a/msbuild/Makefile +++ b/msbuild/Makefile @@ -78,6 +78,36 @@ MSBUILD_SYMLINKS += symlinks-ios MSBUILD_TASK_ASSEMBLIES += $(IOS_TASK_ASSEMBLIES) endif +## +## MacCatalyst definitions +## + +MACCATALYST_TARGETS = \ + $(wildcard Xamarin.iOS.Tasks.Core/Xamarin.MacCatalyst.*.props) \ + $(wildcard Xamarin.iOS.Tasks.Core/Xamarin.MacCatalyst.*.targets) \ + +MACCATALYST_DIRECTORIES = \ + $(IOS_DESTDIR)/Library/Frameworks/Mono.framework/External/xbuild-frameworks/Xamarin.MacCatalyst/v1.0/RedistList \ + $(IOS_DESTDIR)$(MONOTOUCH_PREFIX)/lib/msbuild/MacCatalyst \ + +MACCATALYST_SYMLINKS = \ + $(IOS_DESTDIR)/Library/Frameworks/Mono.framework/External/xbuild-frameworks/Xamarin.MacCatalyst/v1.0/RedistList/FrameworkList.xml \ + $(IOS_DESTDIR)/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/MacCatalyst \ + +MACCATALYST_PRODUCTS += \ + $(MACCATALYST_SYMLINKS) \ + $(IOS_DESTDIR)$(MONOTOUCH_PREFIX)/lib/msbuild/MacCatalyst/FrameworkList.xml \ + $(foreach target,$(MACCATALYST_TARGETS),$(IOS_DESTDIR)$(MONOTOUCH_PREFIX)/lib/msbuild/MacCatalyst/$(notdir $(target))) \ + +all-maccatalyst: $(MACCATALYST_PRODUCTS) +symlinks-maccatalyst: $(MACCATALYST_SYMLINKS) + +ifdef INCLUDE_MACCATALYST +MSBUILD_PRODUCTS += all-maccatalyst +MSBUILD_DIRECTORIES += $(MACCATALYST_DIRECTORIES) +MSBUILD_SYMLINKS += symlinks-maccatalyst +endif + ## ## XW definitions ## @@ -236,6 +266,22 @@ $(IOS_DESTDIR)$(MONOTOUCH_PREFIX)/lib/msbuild/iOS/%: Xamarin.iOS.Tasks/bin/$(CON $(IOS_DESTDIR)$(MONOTOUCH_PREFIX)/lib/msbuild/iOS/%: Xamarin.Localization.MSBuild/bin/$(CONFIG)/$(TARGETFRAMEWORK)/% | $(IOS_DESTDIR)$(MONOTOUCH_PREFIX)/lib/msbuild/iOS $(Q) install -m 644 $< $@ +## +## MacCatalyst +## + +$(IOS_DESTDIR)/Library/Frameworks/Mono.framework/External/xbuild-frameworks/Xamarin.MacCatalyst/v1.0/RedistList/FrameworkList.xml: | $(IOS_DESTDIR)/Library/Frameworks/Mono.framework/External/xbuild-frameworks/Xamarin.MacCatalyst/v1.0/RedistList + $(Q) ln -fs $(IOS_TARGETDIR)/Library/Frameworks/Xamarin.iOS.framework/Versions/Current/lib/msbuild/MacCatalyst/$(notdir $@) $@ + +$(IOS_DESTDIR)/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/MacCatalyst: | $(IOS_DESTDIR)/Library/Frameworks/Mono.framework/External/xbuild/Xamarin + $(Q) ln -Fhs $(IOS_TARGETDIR)/Library/Frameworks/Xamarin.iOS.framework/Versions/Current/lib/msbuild/MacCatalyst $@ + +$(IOS_DESTDIR)$(MONOTOUCH_PREFIX)/lib/msbuild/MacCatalyst/FrameworkList.xml: Xamarin.iOS.Tasks.Core/Xamarin.MacCatalyst-FrameworkList.xml.in Makefile | $(IOS_DESTDIR)$(MONOTOUCH_PREFIX)/lib/msbuild/MacCatalyst + $(Q) sed 's@%TargetFrameworkDirectory%@$(IOS_TARGETDIR)/Library/Frameworks/Xamarin.iOS.framework/Versions/Current/lib/mono/Xamarin.MacCatalyst@' $< > $@ + +$(IOS_DESTDIR)$(MONOTOUCH_PREFIX)/lib/msbuild/MacCatalyst/%: Xamarin.iOS.Tasks.Core/% | $(IOS_DESTDIR)$(MONOTOUCH_PREFIX)/lib/msbuild/MacCatalyst + $(Q) install -m 644 $< $@ + ## ## XW ## diff --git a/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/XamarinTask.cs b/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/XamarinTask.cs index c9fedb4538..4334dc9833 100644 --- a/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/XamarinTask.cs +++ b/msbuild/Xamarin.MacDev.Tasks.Core/Tasks/XamarinTask.cs @@ -28,6 +28,7 @@ namespace Xamarin.MacDev.Tasks { case ApplePlatform.iOS: case ApplePlatform.TVOS: case ApplePlatform.WatchOS: + case ApplePlatform.MacCatalyst: return "Xamarin.iOS"; case ApplePlatform.MacOSX: return "Xamarin.Mac"; @@ -70,6 +71,8 @@ namespace Xamarin.MacDev.Tasks { return "watchOS"; case ApplePlatform.MacOSX: return "macOS"; + case ApplePlatform.MacCatalyst: + return "MacCatalyst"; default: throw new InvalidOperationException ($"Invalid platform: {Platform}"); } diff --git a/msbuild/Xamarin.Shared/Xamarin.Shared.props b/msbuild/Xamarin.Shared/Xamarin.Shared.props index 703a293c5f..f5fa56a958 100644 --- a/msbuild/Xamarin.Shared/Xamarin.Shared.props +++ b/msbuild/Xamarin.Shared/Xamarin.Shared.props @@ -86,12 +86,14 @@ Copyright (C) 2020 Microsoft. All rights reserved. - <_XamarinBclPath Condition="'$(_PlatformName)' == 'iOS'">$(_XamarinSdkRoot)/lib/mono/Xamarin.iOS/ + <_XamarinBclPath Condition="'$(_PlatformName)' == 'iOS' And '$(_IsMacCatalyst)' == 'true'">$(_XamarinSdkRoot)/lib/mono/Xamarin.MacCatalyst/ + <_XamarinBclPath Condition="'$(_PlatformName)' == 'iOS' And '$(_IsMacCatalyst)' != 'true'">$(_XamarinSdkRoot)/lib/mono/Xamarin.iOS/ <_XamarinBclPath Condition="'$(_PlatformName)' == 'tvOS'">$(_XamarinSdkRoot)/lib/mono/Xamarin.TVOS/ <_XamarinBclPath Condition="'$(_PlatformName)' == 'watchOS'">$(_XamarinSdkRoot)/lib/mono/Xamarin.WatchOS/ - <_XamarinPlatformAssemblyName Condition="'$(_PlatformName)' == 'iOS'">Xamarin.iOS.dll + <_XamarinPlatformAssemblyName Condition="'$(_PlatformName)' == 'iOS' And '$(_IsMacCatalyst)' == 'true'">Xamarin.MacCatalyst.dll + <_XamarinPlatformAssemblyName Condition="'$(_PlatformName)' == 'iOS' And '$(_IsMacCatalyst)' != 'true'">Xamarin.iOS.dll <_XamarinPlatformAssemblyName Condition="'$(_PlatformName)' == 'tvOS'">Xamarin.TVOS.dll <_XamarinPlatformAssemblyName Condition="'$(_PlatformName)' == 'watchOS'">Xamarin.WatchOS.dll <_XamarinPlatformAssemblyName Condition="'$(_PlatformName)' == 'macOS'">Xamarin.Mac.dll diff --git a/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.MacCatalyst-FrameworkList.xml.in b/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.MacCatalyst-FrameworkList.xml.in new file mode 100644 index 0000000000..c2e0422419 --- /dev/null +++ b/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.MacCatalyst-FrameworkList.xml.in @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.MacCatalyst.CSharp.targets b/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.MacCatalyst.CSharp.targets new file mode 100644 index 0000000000..b80a419f95 --- /dev/null +++ b/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.MacCatalyst.CSharp.targets @@ -0,0 +1,32 @@ + + + + + + + Xamarin.MacCatalyst + v1.0 + + + + + + + + diff --git a/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.MacCatalyst.Common.targets b/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.MacCatalyst.Common.targets new file mode 100644 index 0000000000..b40957ee39 --- /dev/null +++ b/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.MacCatalyst.Common.targets @@ -0,0 +1,29 @@ + + + + + + xamarinios10;$(AssetTargetFallback) + + + + + + + diff --git a/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.MacCatalyst.FSharp.targets b/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.MacCatalyst.FSharp.targets new file mode 100644 index 0000000000..999f691c85 --- /dev/null +++ b/msbuild/Xamarin.iOS.Tasks.Core/Xamarin.MacCatalyst.FSharp.targets @@ -0,0 +1,41 @@ + + + + + + + Xamarin.MacCatalyst + v1.0 + + + + + + + + + + + diff --git a/tools/common/Driver.cs b/tools/common/Driver.cs index 638558c6e1..46f50e4546 100644 --- a/tools/common/Driver.cs +++ b/tools/common/Driver.cs @@ -773,6 +773,8 @@ namespace Xamarin.Bundler { return Path.Combine (GetFrameworkLibDirectory (app), "mono", "Xamarin.WatchOS"); case ApplePlatform.TVOS: return Path.Combine (GetFrameworkLibDirectory (app), "mono", "Xamarin.TVOS"); + case ApplePlatform.MacCatalyst: + return Path.Combine (GetFrameworkLibDirectory (app), "mono", "Xamarin.MacCatalyst"); case ApplePlatform.MacOSX: #if MMP if (IsUnifiedMobile) diff --git a/tools/mtouch/mtouch.cs b/tools/mtouch/mtouch.cs index 5630f7513d..456f165794 100644 --- a/tools/mtouch/mtouch.cs +++ b/tools/mtouch/mtouch.cs @@ -156,6 +156,7 @@ namespace Xamarin.Bundler case ApplePlatform.iOS: case ApplePlatform.TVOS: case ApplePlatform.WatchOS: + case ApplePlatform.MacCatalyst: return Path.Combine (GetPlatformFrameworkDirectory (app), "..", "..", "64bits", app.PlatformName); default: throw ErrorHelper.CreateError (71, Errors.MX0071, app.Platform, "Xamarin.iOS");