[build] Create Microsoft.iOS.Windows.Sdk workload pack (#11251)

Converts the Microsoft.iOS.Windows.Sdk NuGet package into a proper
[workload SDK pack][0].  The entry point for this pack has been changed,
and it is now imported through the `WorkloadManifest.targets` file
included in `Microsoft.NET.Workload.iOS`, rather than being imported
directly from `Microsoft.iOS.Sdk`.

Import ordering has otherwise changed slightly.  The following files are
now imported before the majority of the `Microsoft.iOS.Sdk` (and the 
majority of the .NET SDK targets):

 * Xamarin.iOS.Common.Before.props
 * Xamarin.iOS.Common.Before.targets

After this the majority of the .NET SDK targets will load, followed by
the `Microsoft.iOS.Sdk` targets. Finally, everything declared in the
`<AfterMicrosoftNETSdkTargets/>` hook loads, which consists of:

 * Microsoft.iOS.Windows.Sdk.targets
 * tools/msbuild/*

[0]: https://github.com/dotnet/designs/blob/main/accepted/2020/workloads/workload-manifest.md#sdk-packs

Co-authored-by: Rolf Bjarne Kvinge <rolf@xamarin.com>
This commit is contained in:
Peter Collins 2021-04-27 01:44:51 -04:00 коммит произвёл GitHub
Родитель 5de96fd9f8
Коммит b88c3bb031
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
12 изменённых файлов: 86 добавлений и 44 удалений

Просмотреть файл

@ -32,7 +32,9 @@ $(foreach platform,$(DOTNET_PLATFORMS),$(eval $(call DefineTargets,$(platform)))
define DefineWindowsTargets
$(1)_WINDOWS_NUGET_TARGETS = \
$(DOTNET_DESTDIR)/Microsoft.$(1).Windows.Sdk/targets/Xamarin.Shared.Sdk.Before.targets \
$(DOTNET_DESTDIR)/Microsoft.$(1).Windows.Sdk/Sdk/Sdk.props \
$(DOTNET_DESTDIR)/Microsoft.$(1).Windows.Sdk/targets/Microsoft.$(1).Windows.Sdk.props \
$(DOTNET_DESTDIR)/Microsoft.$(1).Windows.Sdk/targets/Microsoft.$(1).Windows.Sdk.targets \
endef
$(foreach platform,$(DOTNET_WINDOWS_PLATFORMS),$(eval $(call DefineWindowsTargets,$(platform))))
@ -52,6 +54,7 @@ DIRECTORIES += \
$(foreach platform,$(DOTNET_PLATFORMS),$(DOTNET_PACKS_PATH)/Microsoft.$(platform).Ref) \
$(foreach platform,$(DOTNET_PLATFORMS),$(DOTNET_TEMPLATE_PACKS_PATH)/Microsoft.$(platform).Templates) \
$(TMP_PKG_DIR) \
$(foreach platform,$(DOTNET_WINDOWS_PLATFORMS),$(DOTNET_DESTDIR)/Microsoft.$(platform).Windows.Sdk/Sdk) \
$(foreach platform,$(DOTNET_WINDOWS_PLATFORMS),$(DOTNET_DESTDIR)/Microsoft.$(platform).Windows.Sdk/targets) \
$(DIRECTORIES):
@ -59,7 +62,8 @@ $(DIRECTORIES):
CURRENT_HASH_LONG:=$(shell git log -1 --pretty=%H)
$(DOTNET_DESTDIR)/Microsoft.%: Microsoft.% | $(foreach platform,$(DOTNET_PLATFORMS),$(DOTNET_DESTDIR)/Microsoft.$(platform).Sdk/Sdk $(DOTNET_DESTDIR)/Microsoft.$(platform).Sdk/targets $(DOTNET_DESTDIR)/Microsoft.$(platform).Templates)
$(DOTNET_DESTDIR)/Microsoft.%: Microsoft.% | $(foreach platform,$(DOTNET_PLATFORMS),$(DOTNET_DESTDIR)/Microsoft.$(platform).Sdk/Sdk $(DOTNET_DESTDIR)/Microsoft.$(platform).Sdk/targets $(DOTNET_DESTDIR)/Microsoft.$(platform).Templates) \
$(foreach platform,$(DOTNET_WINDOWS_PLATFORMS),$(DOTNET_DESTDIR)/Microsoft.$(platform).Windows.Sdk/Sdk $(DOTNET_DESTDIR)/Microsoft.$(platform).Windows.Sdk/targets)
$(Q) $(CP) $< $@
define CopyTargets
@ -68,12 +72,6 @@ $$(DOTNET_DESTDIR)/Microsoft.$(1).Sdk/targets/%: targets/% | $$(DOTNET_DESTDIR)/
endef
$(foreach platform,$(DOTNET_PLATFORMS),$(eval $(call CopyTargets,$(platform))))
define CopyWindowsTargets
$$(DOTNET_DESTDIR)/Microsoft.$(1).Windows.Sdk/targets/%: WindowsTargets/% | $$(DOTNET_DESTDIR)/Microsoft.$(1).Windows.Sdk/targets
$$(Q) $$(CP) $$< $$@
endef
$(foreach platform,$(DOTNET_WINDOWS_PLATFORMS),$(eval $(call CopyWindowsTargets,$(platform))))
define VersionsTemplate
targets/Microsoft.$(1).Sdk.Versions.props: targets/Microsoft.Sdk.Versions.template.props Makefile $(TOP)/Make.config.inc $(TOP)/.git/HEAD $(TOP)/.git/index
$$(Q_GEN) sed \
@ -108,7 +106,7 @@ endef
$(foreach platform,$(DOTNET_PLATFORMS),$(eval $(call SupportedTargetPlatforms,$(platform))))
define WorkloadTargets
Microsoft.NET.Workload.$(1)/WorkloadManifest.json: targets/WorkloadManifest.template.json Makefile $(TOP)/Make.config.inc $(TOP)/.git/HEAD $(TOP)/.git/index
Microsoft.NET.Workload.$(1)/WorkloadManifest.json: $4 Makefile $(TOP)/Make.config.inc $(TOP)/.git/HEAD $(TOP)/.git/index
$$(Q) rm -f $$@.tmp
$$(Q_GEN) sed \
-e "s/@VERSION@/$3/g" \
@ -123,7 +121,8 @@ Microsoft.NET.Workload.$(1)/LICENSE: $(TOP)/LICENSE
WORKLOAD_TARGETS += Microsoft.NET.Workload.$(1)/WorkloadManifest.json
WORKLOAD_TARGETS += Microsoft.NET.Workload.$(1)/LICENSE
endef
$(foreach platform,$(DOTNET_PLATFORMS),$(eval $(call WorkloadTargets,$(platform),$(shell echo $(platform) | tr A-Z a-z),$($(platform)_NUGET_VERSION_NO_METADATA))))
$(foreach platform,$(DOTNET_PLATFORMS),$(eval $(call WorkloadTargets,$(platform),$(shell echo $(platform) | tr A-Z a-z),$($(platform)_NUGET_VERSION_NO_METADATA), \
$(if $(findstring $(platform),$(DOTNET_WINDOWS_PLATFORMS)),targets/WorkloadManifest.windows.template.json,targets/WorkloadManifest.template.json))))
TEMPLATED_FILES = \
$(foreach platform,$(DOTNET_PLATFORMS),Microsoft.$(platform).Sdk/targets/Microsoft.$(platform).Sdk.Versions.props) \
@ -167,7 +166,7 @@ endef
# Create the NuGet packaging targets. It's amazing what make allows you to do...
$(foreach platform,$(DOTNET_PLATFORMS),$(eval $(call CreateNuGetTemplate,Microsoft.$(platform).Sdk,$($(platform)_NUGET_VERSION_NO_METADATA),$($(platform)_NUGET_TARGETS))))
$(eval $(call CreateWindowsNuGetTemplate,Microsoft.iOS.Windows.Sdk,$(IOS_WINDOWS_NUGET_VERSION_NO_METADATA),$(IOS_WINDOWS_NUGET_TARGETS)))
$(foreach platform,$(DOTNET_WINDOWS_PLATFORMS),$(eval $(call CreateWindowsNuGetTemplate,Microsoft.$(platform).Windows.Sdk,$(IOS_WINDOWS_NUGET_VERSION_NO_METADATA),$($(platform)_WINDOWS_NUGET_TARGETS))))
$(foreach platform,$(DOTNET_PLATFORMS),$(eval $(call CreateNuGetTemplate,Microsoft.$(platform).Ref,$($(platform)_NUGET_VERSION_NO_METADATA))))
$(foreach platform,$(DOTNET_PLATFORMS),$(eval $(call CreateNuGetTemplate,Microsoft.$(platform).Templates,$($(platform)_NUGET_VERSION_NO_METADATA))))
$(foreach platform,$(DOTNET_PLATFORMS),$(eval $(call CreateNuGetTemplate,Microsoft.NET.Workload.$(platform),$($(platform)_NUGET_VERSION_NO_METADATA))))

Просмотреть файл

@ -1,3 +1,4 @@
<Project>
<Import Project="Sdk.props" Sdk="Microsoft.iOS.Sdk" Condition="'$(TargetPlatformIdentifier)' == 'iOS'" />
<Import Project="Sdk.props" Sdk="Microsoft.iOS.Windows.Sdk" Condition=" '$(TargetPlatformIdentifier)' == 'iOS' and $([MSBuild]::IsOSPlatform('windows'))" />
</Project>

Просмотреть файл

@ -2,6 +2,8 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<_PlatformName>iOS</_PlatformName>
<!-- Used by Microsoft.iOS.Windows.Sdk -->
<CoreiOSSdkDirectory>$(MSBuildThisFileDirectory)..\tools\msbuild\iOS\</CoreiOSSdkDirectory>
</PropertyGroup>
<Import Project="Xamarin.Shared.Sdk.props" />

Просмотреть файл

@ -0,0 +1,3 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildThisFileDirectory)..\targets\Microsoft.iOS.Windows.Sdk.props" />
</Project>

Просмотреть файл

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildThisFileDirectory)..\tools\msbuild\iOS\Xamarin.iOS.Common.Before.props" />
<Import Project="$(MSBuildThisFileDirectory)..\tools\msbuild\iOS\Xamarin.iOS.Common.Before.targets" />
<PropertyGroup>
<_DotNetRootRemoteDirectory Condition="$(_DotNetRootRemoteDirectory) == ''">/usr/local/share/dotnet/</_DotNetRootRemoteDirectory>
<_XamarinSdkRemoteRootDirectory Condition="'$(_XamarinSdkRemoteRootDirectory)' == ''">$(_XamarinSdkRootDirectory.Replace('$(NetCoreRoot)', '$(_DotNetRootRemoteDirectory)'))</_XamarinSdkRemoteRootDirectory>
<_MlaunchPath Condition="'$(_MlaunchPath)' == ''">$(_XamarinSdkRemoteRootDirectory)tools/bin/mlaunch</_MlaunchPath>
<AfterMicrosoftNETSdkTargets>$(AfterMicrosoftNETSdkTargets);$(MSBuildThisFileDirectory)..\targets\Microsoft.iOS.Windows.Sdk.targets</AfterMicrosoftNETSdkTargets>
</PropertyGroup>
</Project>

Просмотреть файл

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildThisFileDirectory)..\tools\msbuild\iOS\Xamarin.iOS.Common.After.props" />
<Import Project="$(MSBuildThisFileDirectory)..\tools\msbuild\iOS\Xamarin.iOS.Common.After.targets" />
<!-- Note: The following pack files are not yet imported in .NET 6:
<Import Project="$(MSBuildThisFileDirectory)..\tools\msbuild\iOS\Xamarin.iOS.ObjCBinding.Common.After.props" />
<Import Project="$(MSBuildThisFileDirectory)..\tools\msbuild\iOS\Xamarin.iOS.ObjCBinding.Common.After.targets" />
<Import Project="$(MSBuildThisFileDirectory)..\tools\msbuild\iOS\Xamarin.iOS.ObjCBinding.Common.Before.targets" />
<Import Project="$(MSBuildThisFileDirectory)..\tools\msbuild\iOS\Xamarin.iOS.ObjCBinding.CSharp.After.props" />
<Import Project="$(MSBuildThisFileDirectory)..\tools\msbuild\iOS\Xamarin.iOS.ObjCBinding.CSharp.After.targets" />
<Import Project="$(MSBuildThisFileDirectory)..\tools\msbuild\iOS\Xamarin.iOS.WatchApp.Common.After.targets" />
-->
</Project>

Просмотреть файл

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<_DotNetRootRemoteDirectory Condition="$(_DotNetRootRemoteDirectory) == ''">/usr/local/share/dotnet/</_DotNetRootRemoteDirectory>
<_XamarinSdkRemoteRootDirectory Condition="'$(_XamarinSdkRemoteRootDirectory)' == ''">$(_XamarinSdkRootDirectory.Replace('$(NetCoreRoot)', '$(_DotNetRootRemoteDirectory)'))</_XamarinSdkRemoteRootDirectory>
<_MlaunchPath Condition="'$(_MlaunchPath)' == ''">$(_XamarinSdkRemoteRootDirectory)tools/bin/mlaunch</_MlaunchPath>
</PropertyGroup>
</Project>

Просмотреть файл

@ -0,0 +1,32 @@
{
"version": 5,
"workloads": {
"microsoft-@PLATFORM_LOWERCASE@-sdk-full": {
"description": "Microsoft @PLATFORM@ SDK",
"packs": [
"Microsoft.@PLATFORM@.Sdk",
"Microsoft.@PLATFORM@.Windows.Sdk",
"Microsoft.@PLATFORM@.Ref",
"Microsoft.@PLATFORM@.Templates"
]
}
},
"packs": {
"Microsoft.@PLATFORM@.Sdk": {
"kind": "sdk",
"version": "@VERSION@"
},
"Microsoft.@PLATFORM@.Windows.Sdk": {
"kind": "sdk",
"version": "@VERSION@"
},
"Microsoft.@PLATFORM@.Ref": {
"kind": "framework",
"version": "@VERSION@"
},
"Microsoft.@PLATFORM@.Templates": {
"kind": "template",
"version": "@VERSION@"
}
}
}

Просмотреть файл

@ -11,6 +11,10 @@
<PropertyGroup>
<!-- Set to true when using the Microsoft.<platform>.Sdk NuGet. This is used by pre-existing/shared targets to tweak behavior depending on build system -->
<UsingAppleNETSdk>true</UsingAppleNETSdk>
<!-- This is the location of the Microsoft.<platform>.Sdk NuGet (/usr/local/share/dotnet/sdk/<version>/Sdks/Microsoft.[iOS/tvOS/watchOS/macOS].Sdk) -->
<_XamarinSdkRootDirectory>$([MSBuild]::NormalizePath('$(MSBuildThisFileDirectory)', '..'))\</_XamarinSdkRootDirectory>
<_XamarinTaskAssembly Condition="'$(_PlatformName)' != 'macOS'">$(_XamarinSdkRootDirectory)\tools\msbuild\iOS\Xamarin.iOS.Tasks.dll</_XamarinTaskAssembly>
<_XamarinTaskAssembly Condition="'$(_PlatformName)' == 'macOS'">$(_XamarinSdkRootDirectory)\tools\msbuild\macOS\Xamarin.Mac.Tasks.dll</_XamarinTaskAssembly>
<SuppressTrimAnalysisWarnings Condition=" '$(SuppressTrimAnalysisWarnings)' == '' ">true</SuppressTrimAnalysisWarnings>
<AfterMicrosoftNETSdkTargets>$(AfterMicrosoftNETSdkTargets);$(MSBuildThisFileDirectory)Microsoft.$(_PlatformName).Sdk.targets</AfterMicrosoftNETSdkTargets>
</PropertyGroup>

Просмотреть файл

@ -2,21 +2,10 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<!-- This is the location of the Microsoft.<platform>.Sdk NuGet (/usr/local/share/dotnet/sdk/<version>/Sdks/Microsoft.[iOS/tvOS/watchOS/macOS].Sdk) -->
<_XamarinSdkRootDirectory>$([MSBuild]::NormalizePath('$(MSBuildThisFileDirectory)', '..'))\</_XamarinSdkRootDirectory>
<_XamarinTaskAssembly Condition="'$(_PlatformName)' != 'macOS'">$(_XamarinSdkRootDirectory)\tools\msbuild\iOS\Xamarin.iOS.Tasks.dll</_XamarinTaskAssembly>
<_XamarinTaskAssembly Condition="'$(_PlatformName)' == 'macOS'">$(_XamarinSdkRootDirectory)\tools\msbuild\macOS\Xamarin.Mac.Tasks.dll</_XamarinTaskAssembly>
<!-- Use single-project MSBuild properties to generate the application manifest by default -->
<GenerateApplicationManifest Condition="'$(GenerateApplicationManifest)' == ''">true</GenerateApplicationManifest>
<XamarinWindowsSdkDirectory Condition="'$(XamarinWindowsSdkDirectory)' == '' And '$(_PlatformName)' == 'iOS'">$(MSBuildThisFileDirectory.Replace('Microsoft.iOS.Sdk', 'Microsoft.iOS.Windows.Sdk'))</XamarinWindowsSdkDirectory>
<XamarinWindowsSdkDirectory Condition="'$(XamarinWindowsSdkDirectory)' == '' And '$(_PlatformName)' == 'tvOS'">$(MSBuildThisFileDirectory.Replace('Microsoft.tvOS.Sdk', 'Microsoft.tvOS.Windows.Sdk'))</XamarinWindowsSdkDirectory>
</PropertyGroup>
<Import Project="$(XamarinWindowsSdkDirectory)$(MSBuildThisFileName).Before.targets" Condition="Exists('$(XamarinWindowsSdkDirectory)$(MSBuildThisFileName).Before.targets')" />
<UsingTask TaskName="Xamarin.MacDev.Tasks.CompileNativeCode" AssemblyFile="$(_XamarinTaskAssembly)" />
<UsingTask TaskName="Xamarin.MacDev.Tasks.LinkNativeCode" AssemblyFile="$(_XamarinTaskAssembly)" />

Просмотреть файл

@ -17,15 +17,8 @@ Copyright (C) 2013-2016 Xamarin. All rights reserved.
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildThisFileDirectory)Xamarin.iOS.Common.props" />
<PropertyGroup>
<!-- Naming convention that relies on the fact that there will be a Microsoft.Windows.iOS.Sdk pack with the same version that the core SDK, on Windows installations only -->
<WindowsiOSSdkDirectory>$(MSBuildThisFileDirectory.Replace('Microsoft.iOS.Sdk', 'Microsoft.iOS.Windows.Sdk'))</WindowsiOSSdkDirectory>
</PropertyGroup>
<Import Project="$(MSBuildThisFileDirectory)$(MSBuildThisFileName).Before.targets"
Condition="Exists('$(MSBuildThisFileDirectory)$(MSBuildThisFileName).Before.targets')"/>
<Import Project="$(WindowsiOSSdkDirectory)$(MSBuildThisFileName).Before.targets"
Condition="Exists('$(WindowsiOSSdkDirectory)$(MSBuildThisFileName).Before.targets')"/>
<!-- *** Code Analysis Setup *** -->
<!-- Library projects aren't supported, if we enable Xamarin.Analysis on them, we'll need to revisit the rules and deactivate some (e.g XIA0002). -->
@ -1165,7 +1158,5 @@ Copyright (C) 2013-2016 Xamarin. All rights reserved.
<Import Project="$(MSBuildThisFileDirectory)$(MSBuildThisFileName).After.targets"
Condition="Exists('$(MSBuildThisFileDirectory)$(MSBuildThisFileName).After.targets')"/>
<Import Project="$(WindowsiOSSdkDirectory)$(MSBuildThisFileName).After.targets"
Condition="Exists('$(WindowsiOSSdkDirectory)$(MSBuildThisFileName).After.targets')"/>
</Project>

Просмотреть файл

@ -13,9 +13,8 @@ Copyright (C) 2011-2013 Xamarin. All rights reserved.
-->
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<CoreiOSSdkDirectory>$(MSBuildThisFileDirectory)</CoreiOSSdkDirectory>
<!-- Naming convention that relies on the fact that the Microsoft.iOS.Sdk pack exists with the same version that the Windows SDK (.net6 only) -->
<CoreiOSSdkDirectory Condition="$(MSBuildThisFileDirectory.Contains('Microsoft.iOS.Windows.Sdk'))">$(MSBuildThisFileDirectory.Replace('Microsoft.iOS.Windows.Sdk', 'Microsoft.iOS.Sdk'))</CoreiOSSdkDirectory>
<!-- $(CoreiOSSdkDirectory) is defined in Microsoft.iOS.Sdk.targets, from Microsoft.iOS.Sdk package -->
<CoreiOSSdkDirectory Condition=" '$(CoreiOSSdkDirectory)' == '' and '$(UsingAppleNETSdk)' != 'true' ">$(MSBuildThisFileDirectory)</CoreiOSSdkDirectory>
<!-- Property originally defined in Xamarin.Messaging.Build.targets, from Xamarin.Messaging.Build.Client package -->
<MessagingBuildClientAssemblyFile>$(CoreiOSSdkDirectory)Xamarin.iOS.Tasks.dll</MessagingBuildClientAssemblyFile>
<MessagingAgentsDirectory>$(MSBuildThisFileDirectory)</MessagingAgentsDirectory>