diff --git a/dotnet/Makefile b/dotnet/Makefile index 7f7e57cec6..50f461ff8e 100644 --- a/dotnet/Makefile +++ b/dotnet/Makefile @@ -153,15 +153,9 @@ endef $(foreach platform,$(DOTNET_PLATFORMS),$(eval $(call SupportedTargetPlatforms,$(platform)))) define WorkloadTargets -Workloads/Microsoft.NET.Sdk.$(1)/WorkloadManifest.json: targets/WorkloadManifest.$(1).template.json Makefile $(TOP)/Make.config.inc $(TOP)/.git/HEAD $(TOP)/.git/index Makefile +Workloads/Microsoft.NET.Sdk.$(1)/WorkloadManifest.json: Makefile $(TOP)/Make.config.inc $(TOP)/.git/HEAD $(TOP)/.git/index Makefile generate-workloadmanifest-json.csharp $$(Q) rm -f $$@.tmp - $$(Q_GEN) sed \ - -e "s/@VERSION@/$3/g" \ - -e "s/@NET6_VERSION@/$(4)/g" \ - -e "s/@BUNDLED_NETCORE_PLATFORMS_PACKAGE_VERSION@/$(BUNDLED_NETCORE_PLATFORMS_PACKAGE_VERSION)/g" \ - -e "s/@PLATFORM_LOWERCASE@/$2/g" \ - -e "s/@PLATFORM@/$1/g" \ - $$< > $$@.tmp + $$(Q_GEN) ./generate-workloadmanifest-json.csharp "$(1)" "$(3)" "$(4)" "$$(DOTNET_$(5)_RUNTIME_IDENTIFIERS)" "$$@.tmp" "$$(DOTNET_WINDOWS_PLATFORMS)" $$(Q) mv $$@.tmp $$@ Workloads/Microsoft.NET.Sdk.$(1)/LICENSE: $(TOP)/LICENSE @@ -173,7 +167,7 @@ WORKLOAD_TARGETS += Workloads/Microsoft.NET.Sdk.$(1)/LICENSE LOCAL_WORKLOAD_TARGETS += Workloads/Microsoft.NET.Sdk.$(1)/WorkloadManifest.json LOCAL_WORKLOAD_TARGETS += Workloads/Microsoft.NET.Sdk.$(1)/LICENSE endef -$(foreach platform,$(DOTNET_PLATFORMS),$(eval $(call WorkloadTargets,$(platform),$(shell echo $(platform) | tr A-Z a-z),$($(platform)_NUGET_VERSION_NO_METADATA),$(NET6_$(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),$(NET6_$(platform)_NUGET_VERSION_NO_METADATA),$(shell echo $(platform) | tr a-z A-Z)))) $(DOTNET_NUPKG_DIR)/vs-workload.props: Workloads/vs-workload.template.props $(Q) rm -f $@.tmp diff --git a/dotnet/generate-workloadmanifest-json.csharp b/dotnet/generate-workloadmanifest-json.csharp new file mode 100755 index 0000000000..fa88de4e01 --- /dev/null +++ b/dotnet/generate-workloadmanifest-json.csharp @@ -0,0 +1,137 @@ +#!/usr/bin/env /Library/Frameworks/Mono.framework/Commands/csharp + +// arguments are: + +using System.IO; +using System.Xml; + +var args = Environment.GetCommandLineArgs (); +var expectedArgumentCount = 6; +if (args.Length != expectedArgumentCount + 2 /* 2 default arguments (executable + script) + 'expectedArgumentCount' arguments we're interested in */) { + // first arg is "/Library/Frameworks/Mono.framework/Versions/4.8.0/lib/mono/4.5/csharp.exe" + // second arg the script itself + // then comes the ones we care about + Console.WriteLine ($"Need {expectedArgumentCount} arguments, got {args.Length - 2}"); + Environment.Exit (1); + return; +} + +var argumentIndex = 2; +var platform = args [argumentIndex++]; +var version = args [argumentIndex++]; +var net6Version = args [argumentIndex++]; +var runtimeIdentifiers = args [argumentIndex++].Split (' '); +var outputPath = args [argumentIndex++]; +var windowsPlatforms = args [argumentIndex++].Split (' '); +var hasWindows = Array.IndexOf (windowsPlatforms, platform) >= 0; + +var platformLowerCase = platform.ToLowerInvariant (); + +using (TextWriter writer = new StreamWriter (outputPath)) { + writer.WriteLine ($"{{"); + writer.WriteLine ($" \"version\": \"{version}\","); + writer.WriteLine ($" \"workloads\": {{"); + writer.WriteLine ($" \"{platformLowerCase}\": {{"); + writer.WriteLine ($" \"description\": \".NET SDK Workload for building {platform} applications.\","); + writer.WriteLine ($" \"packs\": ["); + writer.WriteLine ($" \"Microsoft.{platform}.Sdk.net7\","); + writer.WriteLine ($" \"Microsoft.{platform}.Sdk.net6\","); + if (hasWindows) { + writer.WriteLine ($" \"Microsoft.{platform}.Windows.Sdk.Aliased.net7\","); + writer.WriteLine ($" \"Microsoft.{platform}.Windows.Sdk.Aliased.net6\","); + } + writer.WriteLine ($" \"Microsoft.{platform}.Ref.net7\","); + writer.WriteLine ($" \"Microsoft.{platform}.Ref\","); + foreach (var rid in runtimeIdentifiers) { + writer.WriteLine ($" \"Microsoft.{platform}.Runtime.{rid}.net7\","); + writer.WriteLine ($" \"Microsoft.{platform}.Runtime.{rid}\","); + } + writer.WriteLine ($" \"Microsoft.{platform}.Templates.net7\""); + writer.WriteLine ($" ],"); + writer.WriteLine ($" \"extends\": ["); + if (platform == "macOS") { + writer.WriteLine ($" \"microsoft-net-runtime-mono-tooling\","); + writer.WriteLine ($" \"microsoft-net-runtime-mono-tooling-net6\","); + } else { + writer.WriteLine ($" \"microsoft-net-runtime-{platformLowerCase}\","); + writer.WriteLine ($" \"microsoft-net-runtime-{platformLowerCase}-net6\","); + } + writer.WriteLine ($" ]"); + writer.WriteLine ($" }},"); + writer.WriteLine ($" }},"); + writer.WriteLine ($" \"packs\": {{"); + writer.WriteLine ($" \"Microsoft.{platform}.Sdk.net7\": {{"); + writer.WriteLine ($" \"kind\": \"sdk\","); + writer.WriteLine ($" \"version\": \"{version}\","); + writer.WriteLine ($" \"alias-to\": {{"); + writer.WriteLine ($" \"any\": \"Microsoft.{platform}.Sdk\""); + writer.WriteLine ($" }}"); + writer.WriteLine ($" }},"); + writer.WriteLine ($" \"Microsoft.{platform}.Sdk.net6\": {{"); + writer.WriteLine ($" \"kind\": \"sdk\","); + writer.WriteLine ($" \"version\": \"{net6Version}\","); + writer.WriteLine ($" \"alias-to\": {{"); + writer.WriteLine ($" \"any\": \"Microsoft.{platform}.Sdk\""); + writer.WriteLine ($" }}"); + writer.WriteLine ($" }},"); + if (hasWindows) { + writer.WriteLine ($" \"Microsoft.@PLATFORM@.Windows.Sdk.Aliased.net7\": {{"); + writer.WriteLine ($" \"kind\": \"sdk\","); + writer.WriteLine ($" \"version\": \"{version}\","); + writer.WriteLine ($" \"alias-to\": {{"); + writer.WriteLine ($" \"win-x64\": \"Microsoft.{platform}.Windows.Sdk\","); + writer.WriteLine ($" \"win-x86\": \"Microsoft.{platform}.Windows.Sdk\","); + writer.WriteLine ($" \"win-arm64\": \"Microsoft.{platform}.Windows.Sdk\","); + writer.WriteLine ($" }}"); + writer.WriteLine ($" }},"); + writer.WriteLine ($" \"Microsoft.{platform}.Windows.Sdk.Aliased.net6\": {{"); + writer.WriteLine ($" \"kind\": \"sdk\","); + writer.WriteLine ($" \"version\": \"{net6Version}\","); + writer.WriteLine ($" \"alias-to\": {{"); + writer.WriteLine ($" \"win-x64\": \"Microsoft.{platform}.Windows.Sdk\","); + writer.WriteLine ($" \"win-x86\": \"Microsoft.{platform}.Windows.Sdk\","); + writer.WriteLine ($" \"win-arm64\": \"Microsoft.{platform}.Windows.Sdk\","); + writer.WriteLine ($" }}"); + writer.WriteLine ($" }},"); + } + writer.WriteLine ($" // The ref and runtime packs use the .net6 version, because when we load the .net6 SDK pack, it says to use the ref and runtime pack versions from the workload (**FromWorkload**)."); + writer.WriteLine ($" // This could be solvable with aliases as well, except that aliases doesn't work in this scenario (https://github.com/dotnet/sdk/issues/26384)."); + writer.WriteLine ($" // For the .net7 packs, we're stating the exact version to use in the KnownFrameworkReference item, so whatever we specify here is ignored."); + writer.WriteLine ($" \"Microsoft.{platform}.Ref\": {{"); + writer.WriteLine ($" \"kind\": \"framework\","); + writer.WriteLine ($" \"version\": \"{net6Version}\""); + writer.WriteLine ($" }},"); + writer.WriteLine ($" \"Microsoft.{platform}.Ref.net7\": {{"); + writer.WriteLine ($" \"kind\": \"framework\","); + writer.WriteLine ($" \"version\": \"{version}\","); + writer.WriteLine ($" \"alias-to\": {{"); + writer.WriteLine ($" \"any\": \"Microsoft.{platform}.Ref\","); + writer.WriteLine ($" }}"); + writer.WriteLine ($" }},"); + foreach (var rid in runtimeIdentifiers) { + writer.WriteLine ($" \"Microsoft.{platform}.Runtime.{rid}\": {{"); + writer.WriteLine ($" \"kind\": \"framework\","); + writer.WriteLine ($" \"version\": \"{net6Version}\""); + writer.WriteLine ($" }},"); + } + foreach (var rid in runtimeIdentifiers) { + writer.WriteLine ($" \"Microsoft.{platform}.Runtime.{rid}.net7\": {{"); + writer.WriteLine ($" \"kind\": \"framework\","); + writer.WriteLine ($" \"version\": \"{version}\","); + writer.WriteLine ($" \"alias-to\": {{"); + writer.WriteLine ($" \"any\": \"Microsoft.{platform}.Runtime.{rid}\","); + writer.WriteLine ($" }}"); + writer.WriteLine ($" }},"); + } + writer.WriteLine ($" \"Microsoft.{platform}.Templates.net7\": {{"); + writer.WriteLine ($" \"kind\": \"template\","); + writer.WriteLine ($" \"version\": \"{version}\","); + writer.WriteLine ($" \"alias-to\": {{"); + writer.WriteLine ($" \"any\": \"Microsoft.{platform}.Templates\","); + writer.WriteLine ($" }}"); + writer.WriteLine ($" }}"); + writer.WriteLine ($" }}"); + writer.WriteLine ($"}}"); +} + +Environment.Exit (0); diff --git a/dotnet/targets/WorkloadManifest.MacCatalyst.template.json b/dotnet/targets/WorkloadManifest.MacCatalyst.template.json deleted file mode 100644 index 7f9fdd41a0..0000000000 --- a/dotnet/targets/WorkloadManifest.MacCatalyst.template.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "version": "@VERSION@", - "workloads": { - "@PLATFORM_LOWERCASE@": { - "description": ".NET SDK Workload for building macOS applications with @PLATFORM@.", - "packs": [ - "Microsoft.@PLATFORM@.Sdk", - "Microsoft.@PLATFORM@.Ref", - "Microsoft.@PLATFORM@.Runtime.maccatalyst-arm64", - "Microsoft.@PLATFORM@.Runtime.maccatalyst-x64", - "Microsoft.@PLATFORM@.Templates" - ], - "extends": [ - "microsoft-net-runtime-maccatalyst" - ] - } - }, - "packs": { - "Microsoft.@PLATFORM@.Sdk": { - "kind": "sdk", - "version": "@VERSION@" - }, - "Microsoft.@PLATFORM@.Ref": { - "kind": "framework", - "version": "@VERSION@" - }, - "Microsoft.@PLATFORM@.Runtime.maccatalyst-arm64": { - "kind": "framework", - "version": "@VERSION@" - }, - "Microsoft.@PLATFORM@.Runtime.maccatalyst-x64": { - "kind": "framework", - "version": "@VERSION@" - }, - "Microsoft.@PLATFORM@.Templates": { - "kind": "template", - "version": "@VERSION@" - } - } -} diff --git a/dotnet/targets/WorkloadManifest.iOS.template.json b/dotnet/targets/WorkloadManifest.iOS.template.json deleted file mode 100644 index a628df8283..0000000000 --- a/dotnet/targets/WorkloadManifest.iOS.template.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "version": "@VERSION@", - "workloads": { - "@PLATFORM_LOWERCASE@": { - "description": ".NET SDK Workload for building @PLATFORM@ applications.", - "packs": [ - "Microsoft.@PLATFORM@.Sdk", - "Microsoft.@PLATFORM@.Windows.Sdk.Aliased", - "Microsoft.@PLATFORM@.Ref", - "Microsoft.@PLATFORM@.Runtime.ios-arm", - "Microsoft.@PLATFORM@.Runtime.ios-arm64", - "Microsoft.@PLATFORM@.Runtime.iossimulator-x86", - "Microsoft.@PLATFORM@.Runtime.iossimulator-x64", - "Microsoft.@PLATFORM@.Runtime.iossimulator-arm64", - "Microsoft.@PLATFORM@.Templates" - ], - "extends": [ - "microsoft-net-runtime-ios" - ] - } - }, - "packs": { - "Microsoft.@PLATFORM@.Sdk": { - "kind": "sdk", - "version": "@VERSION@" - }, - "Microsoft.@PLATFORM@.Windows.Sdk.Aliased": { - "kind": "sdk", - "version": "@VERSION@", - "alias-to": { - "win-x64": "Microsoft.@PLATFORM@.Windows.Sdk", - "win-x86": "Microsoft.@PLATFORM@.Windows.Sdk", - "win-arm64": "Microsoft.@PLATFORM@.Windows.Sdk", - } - }, - "Microsoft.@PLATFORM@.Ref": { - "kind": "framework", - "version": "@VERSION@" - }, - "Microsoft.@PLATFORM@.Runtime.ios-arm": { - "kind": "framework", - "version": "@VERSION@" - }, - "Microsoft.@PLATFORM@.Runtime.ios-arm64": { - "kind": "framework", - "version": "@VERSION@" - }, - "Microsoft.@PLATFORM@.Runtime.iossimulator-x86": { - "kind": "framework", - "version": "@VERSION@" - }, - "Microsoft.@PLATFORM@.Runtime.iossimulator-x64": { - "kind": "framework", - "version": "@VERSION@" - }, - "Microsoft.@PLATFORM@.Runtime.iossimulator-arm64": { - "kind": "framework", - "version": "@VERSION@" - }, - "Microsoft.@PLATFORM@.Templates": { - "kind": "template", - "version": "@VERSION@" - } - } -} diff --git a/dotnet/targets/WorkloadManifest.macOS.template.json b/dotnet/targets/WorkloadManifest.macOS.template.json deleted file mode 100644 index 7404d828b2..0000000000 --- a/dotnet/targets/WorkloadManifest.macOS.template.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "version": "@VERSION@", - "workloads": { - "@PLATFORM_LOWERCASE@": { - "description": ".NET SDK Workload for building @PLATFORM@ applications.", - "packs": [ - "Microsoft.@PLATFORM@.Sdk", - "Microsoft.@PLATFORM@.Ref", - "Microsoft.@PLATFORM@.Runtime.osx-arm64", - "Microsoft.@PLATFORM@.Runtime.osx-x64", - "Microsoft.@PLATFORM@.Templates" - ], - "extends": [ - "microsoft-net-runtime-mono-tooling" - ] - } - }, - "packs": { - "Microsoft.@PLATFORM@.Sdk": { - "kind": "sdk", - "version": "@VERSION@" - }, - "Microsoft.@PLATFORM@.Ref": { - "kind": "framework", - "version": "@VERSION@" - }, - "Microsoft.@PLATFORM@.Runtime.osx-arm64": { - "kind": "framework", - "version": "@VERSION@" - }, - "Microsoft.@PLATFORM@.Runtime.osx-x64": { - "kind": "framework", - "version": "@VERSION@" - }, - "Microsoft.@PLATFORM@.Templates": { - "kind": "template", - "version": "@VERSION@" - } - } -} diff --git a/dotnet/targets/WorkloadManifest.tvOS.template.json b/dotnet/targets/WorkloadManifest.tvOS.template.json deleted file mode 100644 index d60dfa2323..0000000000 --- a/dotnet/targets/WorkloadManifest.tvOS.template.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "version": "@VERSION@", - "workloads": { - "@PLATFORM_LOWERCASE@": { - "description": ".NET SDK Workload for building @PLATFORM@ applications.", - "packs": [ - "Microsoft.@PLATFORM@.Sdk", - "Microsoft.@PLATFORM@.Ref", - "Microsoft.@PLATFORM@.Runtime.tvos-arm64", - "Microsoft.@PLATFORM@.Runtime.tvossimulator-x64", - "Microsoft.@PLATFORM@.Runtime.tvossimulator-arm64", - "Microsoft.@PLATFORM@.Templates" - ], - "extends": [ - "microsoft-net-runtime-tvos" - ] - } - }, - "packs": { - "Microsoft.@PLATFORM@.Sdk": { - "kind": "sdk", - "version": "@VERSION@" - }, - "Microsoft.@PLATFORM@.Ref": { - "kind": "framework", - "version": "@VERSION@" - }, - "Microsoft.@PLATFORM@.Runtime.tvos-arm64": { - "kind": "framework", - "version": "@VERSION@" - }, - "Microsoft.@PLATFORM@.Runtime.tvossimulator-x64": { - "kind": "framework", - "version": "@VERSION@" - }, - "Microsoft.@PLATFORM@.Runtime.tvossimulator-arm64": { - "kind": "framework", - "version": "@VERSION@" - }, - "Microsoft.@PLATFORM@.Templates": { - "kind": "template", - "version": "@VERSION@" - } - } -}