From 00f3eb20d0320c45b02ed324444c1ed6eab9a74b Mon Sep 17 00:00:00 2001 From: Chuck Walbourn Date: Fri, 14 Nov 2025 15:53:19 -0800 Subject: [PATCH] Update ADO pipeline to use GDK new layouts for 2510 (#649) --- .../DirectXTex-GitHub-CMake-Xbox-Dev17.yml | 187 ++++++++++++------ .../DirectXTex-GitHub-CMake-Xbox.yml | 7 +- .../pipelines/DirectXTex-GitHub-GDK-Dev17.yml | 120 ++++++++--- .../pipelines/DirectXTex-GitHub-GDK.yml | 7 +- .../templates/DirectXTex-build-gdkx.yml | 14 ++ .../templates/DirectXTex-setup-gdk-auto.yml | 55 ++++++ CMakeLists.txt | 2 +- build/Directory.Build.props | 51 +++-- build/RestoreGDK.proj | 3 +- build/RestoreGDK.ps1 | 112 +++++------ build/SetupBWOI.cmd | 76 ++++++- build/SetupBWOI.targets | 119 +++++++---- build/gdkedition.props | 1 + 13 files changed, 532 insertions(+), 222 deletions(-) create mode 100644 .azuredevops/templates/DirectXTex-setup-gdk-auto.yml diff --git a/.azuredevops/pipelines/DirectXTex-GitHub-CMake-Xbox-Dev17.yml b/.azuredevops/pipelines/DirectXTex-GitHub-CMake-Xbox-Dev17.yml index bc528f9..3602720 100644 --- a/.azuredevops/pipelines/DirectXTex-GitHub-CMake-Xbox-Dev17.yml +++ b/.azuredevops/pipelines/DirectXTex-GitHub-CMake-Xbox-Dev17.yml @@ -65,8 +65,8 @@ pool: vmImage: windows-2022 jobs: - - job: CMAKE_BUILD - displayName: CMake using VS Generator + - job: CMAKE_BUILD_VS_SCAR + displayName: CMake using VS Generator (x64+Xbox Series X|S) steps: - checkout: self clean: true @@ -98,13 +98,19 @@ jobs: displayName: 'Secure Supply Chain Analysis' - task: NuGetAuthenticate@1 displayName: 'NuGet Auth' - - task: PowerShell@2 - displayName: 'NuGet Install GDK' + - template: '/.azuredevops/templates/DirectXTex-setup-gdk-auto.yml' + parameters: + windows: true + scarlett: true + - task: CmdLine@2 + displayName: Setup required env variables inputs: - targetType: filePath - filePath: ./build/RestoreGDK.ps1 - arguments: -GDKEditionNumber $(GDK_EDITION) -OutputDirectory $(EXTRACTED_FOLDER) - failOnStderr: true + script: | + call $(Build.SourcesDirectory)\build\SetupBWOI.cmd $(EXTRACTED_FOLDER) $(GDK_EDITION) Scarlett + echo ##vso[task.setvariable variable=GameDK;]%GameDK% + echo ##vso[task.setvariable variable=GameDKLatest;]%GameDKLatest% + echo ##vso[task.setvariable variable=GameDKXboxLatest;]%GameDKXboxLatest% + - task: CMake@1 displayName: 'CMake (MSVC): Config x64 (Xbox Series X|S)' inputs: @@ -141,48 +147,12 @@ jobs: inputs: cwd: '' cmakeArgs: --build out2 -v --config RelWithDebInfo - - task: CMake@1 - displayName: 'CMake (MSVC): Config x64 (Xbox One)' - inputs: - cwd: '' - cmakeArgs: > - -G "$(VS_GENERATOR)" -A x64 -B out3 - -DCMAKE_SYSTEM_VERSION=$(WIN10_SDK) - -DBUILD_XBOX_EXTS_XBOXONE=ON -DBUILD_SAMPLE=OFF - - task: CMake@1 - displayName: 'CMake (MSVC): Build x64 Debug (Xbox One)' - inputs: - cwd: '' - cmakeArgs: --build out3 -v --config Debug - - task: CMake@1 - displayName: 'CMake (MSVC): Build x64 Release (Xbox One)' - inputs: - cwd: '' - cmakeArgs: --build out3 -v --config RelWithDebInfo - - task: CMake@1 - displayName: 'CMake (ClangCl): Config x64 (Xbox One)' - inputs: - cwd: '' - cmakeArgs: > - -G "$(VS_GENERATOR)" -A x64 -T clangcl -B out4 - -DCMAKE_SYSTEM_VERSION=$(WIN10_SDK) - -DBUILD_XBOX_EXTS_XBOXONE=ON -DBUILD_SAMPLE=OFF - - task: CMake@1 - displayName: 'CMake (ClangCl): Build x64 Debug (Xbox One)' - inputs: - cwd: '' - cmakeArgs: --build out4 -v --config Debug - - task: CMake@1 - displayName: 'CMake (ClangCl): Build x64 Release (Xbox One)' - inputs: - cwd: '' - cmakeArgs: --build out4 -v --config RelWithDebInfo - task: CMake@1 displayName: 'CMake (DLL): Config x64 (Xbox Series X|S)' inputs: cwd: '' cmakeArgs: > - -G "$(VS_GENERATOR)" -A x64 -B out5 + -G "$(VS_GENERATOR)" -A x64 -B out3 -DCMAKE_SYSTEM_VERSION=$(WIN10_SDK) -DBUILD_XBOX_EXTS_SCARLETT=ON -DBUILD_SAMPLE=OFF -DBUILD_SHARED_LIBS=ON @@ -190,13 +160,101 @@ jobs: displayName: 'CMake (DLL): Build x64 Debug (Xbox Series X|S)' inputs: cwd: '' - cmakeArgs: --build out5 -v --config Debug + cmakeArgs: --build out3 -v --config Debug + - task: CMake@1 + displayName: 'CMake (DLL): Build x64 Release (Xbox Series X|S)' + inputs: + cwd: '' + cmakeArgs: --build out3 -v --config RelWithDebInfo + + - job: CMAKE_BUILD_VS_XBONE + displayName: CMake using VS Generator (x64+Xbox One) + steps: + - checkout: self + clean: true + fetchTags: false + - task: NuGetToolInstaller@1 + displayName: 'Use NuGet' + - task: PowerShell@2 + displayName: 'Create nuget.config with single source' + inputs: + targetType: inline + script: | + $xml = @' + + + + + + + '@ + $xml | Set-Content -Path "$(Build.SourcesDirectory)\NuGet.config" + + - task: NuGetCommand@2 + # We have to use a nuget.config to provide the feed for the 'nuget install' option. + displayName: 'NuGet set package source to ADO feed' + inputs: + command: custom + arguments: sources add -Name xboxgdk -Source $(URL_FEED) -ConfigFile $(Build.SourcesDirectory)\NuGet.config + - task: nuget-security-analysis@0 + displayName: 'Secure Supply Chain Analysis' + - task: NuGetAuthenticate@1 + displayName: 'NuGet Auth' + - template: '/.azuredevops/templates/DirectXTex-setup-gdk-auto.yml' + parameters: + windows: true + scarlett: false + - task: CmdLine@2 + displayName: Setup required env variables + inputs: + script: | + call $(Build.SourcesDirectory)\build\SetupBWOI.cmd $(EXTRACTED_FOLDER) $(GDK_EDITION) XboxOne + echo ##vso[task.setvariable variable=GameDK;]%GameDK% + echo ##vso[task.setvariable variable=GameDKLatest;]%GameDKLatest% + echo ##vso[task.setvariable variable=GameDKXboxLatest;]%GameDKXboxLatest% + + - task: CMake@1 + displayName: 'CMake (MSVC): Config x64 (Xbox One)' + inputs: + cwd: '' + cmakeArgs: > + -G "$(VS_GENERATOR)" -A x64 -B out + -DCMAKE_SYSTEM_VERSION=$(WIN10_SDK) + -DBUILD_XBOX_EXTS_XBOXONE=ON -DBUILD_SAMPLE=OFF + - task: CMake@1 + displayName: 'CMake (MSVC): Build x64 Debug (Xbox One)' + inputs: + cwd: '' + cmakeArgs: --build out -v --config Debug + - task: CMake@1 + displayName: 'CMake (MSVC): Build x64 Release (Xbox One)' + inputs: + cwd: '' + cmakeArgs: --build out -v --config RelWithDebInfo + - task: CMake@1 + displayName: 'CMake (ClangCl): Config x64 (Xbox One)' + inputs: + cwd: '' + cmakeArgs: > + -G "$(VS_GENERATOR)" -A x64 -T clangcl -B out2 + -DCMAKE_SYSTEM_VERSION=$(WIN10_SDK) + -DBUILD_XBOX_EXTS_XBOXONE=ON -DBUILD_SAMPLE=OFF + - task: CMake@1 + displayName: 'CMake (ClangCl): Build x64 Debug (Xbox One)' + inputs: + cwd: '' + cmakeArgs: --build out2 -v --config Debug + - task: CMake@1 + displayName: 'CMake (ClangCl): Build x64 Release (Xbox One)' + inputs: + cwd: '' + cmakeArgs: --build out2 -v --config RelWithDebInfo - task: CMake@1 displayName: 'CMake (DLL): Config x64 (Xbox One)' inputs: cwd: '' cmakeArgs: > - -G "$(VS_GENERATOR)" -A x64 -B out6 + -G "$(VS_GENERATOR)" -A x64 -B out3 -DCMAKE_SYSTEM_VERSION=$(WIN10_SDK) -DBUILD_XBOX_EXTS_XBOXONE=ON -DBUILD_SAMPLE=OFF -DBUILD_SHARED_LIBS=ON @@ -204,7 +262,12 @@ jobs: displayName: 'CMake (DLL): Build x64 Debug (Xbox One)' inputs: cwd: '' - cmakeArgs: --build out6 -v --config Debug + cmakeArgs: --build out3 -v --config Debug + - task: CMake@1 + displayName: 'CMake (DLL): Build x64 Release (Xbox One)' + inputs: + cwd: '' + cmakeArgs: --build out3 -v --config Release - job: BUILD_GDK_CMAKE_XS displayName: 'Xbox Series X|S Extensions BUILD_TESTING=ON' @@ -249,13 +312,10 @@ jobs: displayName: 'Secure Supply Chain Analysis' - task: NuGetAuthenticate@1 displayName: 'NuGet Auth' - - task: PowerShell@2 - displayName: 'NuGet Install GDK' - inputs: - targetType: filePath - filePath: ./build/RestoreGDK.ps1 - arguments: -GDKEditionNumber $(GDK_EDITION) -OutputDirectory $(EXTRACTED_FOLDER) - failOnStderr: true + - template: '/.azuredevops/templates/DirectXTex-setup-gdk-auto.yml' + parameters: + windows: true + scarlett: true - task: CmdLine@2 displayName: Setup BWOI for GDK command-line inputs: @@ -268,7 +328,10 @@ jobs: echo ##vso[task.prependpath]%WindowsSdkVerBinPath%x64 echo ##vso[task.prependpath]%VCToolsInstallDir%bin\HostX64\x64 call $(Build.SourcesDirectory)\build\SetupBWOI.cmd $(EXTRACTED_FOLDER) $(GDK_EDITION) Scarlett + echo ##vso[task.setvariable variable=GameDK;]%GameDK% echo ##vso[task.setvariable variable=GameDKLatest;]%GameDKLatest% + echo ##vso[task.setvariable variable=GameDKCoreLatest;]%GameDKCoreLatest% + echo ##vso[task.setvariable variable=GameDKXboxLatest;]%GameDKXboxLatest% echo ##vso[task.setvariable variable=GRDKLatest;]%GRDKLatest% echo ##vso[task.setvariable variable=GXDKLatest;]%GXDKLatest% echo ##vso[task.setvariable variable=INCLUDE;]%INCLUDE% @@ -340,13 +403,10 @@ jobs: displayName: 'Secure Supply Chain Analysis' - task: NuGetAuthenticate@1 displayName: 'NuGet Auth' - - task: PowerShell@2 - displayName: 'NuGet Install GDK' - inputs: - targetType: filePath - filePath: ./build/RestoreGDK.ps1 - arguments: -GDKEditionNumber $(GDK_EDITION) -OutputDirectory $(EXTRACTED_FOLDER) - failOnStderr: true + - template: '/.azuredevops/templates/DirectXTex-setup-gdk-auto.yml' + parameters: + windows: true + scarlett: false - task: CmdLine@2 displayName: Setup BWOI for GDK command-line inputs: @@ -359,7 +419,10 @@ jobs: echo ##vso[task.prependpath]%WindowsSdkVerBinPath%x64 echo ##vso[task.prependpath]%VCToolsInstallDir%bin\HostX64\x64 call $(Build.SourcesDirectory)\build\SetupBWOI.cmd $(EXTRACTED_FOLDER) $(GDK_EDITION) XboxOne + echo ##vso[task.setvariable variable=GameDK;]%GameDK% echo ##vso[task.setvariable variable=GameDKLatest;]%GameDKLatest% + echo ##vso[task.setvariable variable=GameDKCoreLatest;]%GameDKCoreLatest% + echo ##vso[task.setvariable variable=GameDKXboxLatest;]%GameDKXboxLatest% echo ##vso[task.setvariable variable=GRDKLatest;]%GRDKLatest% echo ##vso[task.setvariable variable=GXDKLatest;]%GXDKLatest% echo ##vso[task.setvariable variable=INCLUDE;]%INCLUDE% diff --git a/.azuredevops/pipelines/DirectXTex-GitHub-CMake-Xbox.yml b/.azuredevops/pipelines/DirectXTex-GitHub-CMake-Xbox.yml index e277961..e21d9a9 100644 --- a/.azuredevops/pipelines/DirectXTex-GitHub-CMake-Xbox.yml +++ b/.azuredevops/pipelines/DirectXTex-GitHub-CMake-Xbox.yml @@ -76,7 +76,7 @@ pool: vmImage: windows-2022 jobs: - - job: CMAKE_BUILD + - job: CMAKE_BUILD_VS displayName: CMake using VS Generator steps: - checkout: self @@ -116,6 +116,11 @@ jobs: filePath: ./build/RestoreGDK.ps1 arguments: -GDKEditionNumber $(GDK_EDITION) -OutputDirectory $(EXTRACTED_FOLDER) failOnStderr: true + - task: NuGetCommand@2 + displayName: 'NuGet install Xbox GDK' + inputs: + command: custom + arguments: 'install -directdownload Microsoft.GDK.Xbox -ExcludeVersion -Version $(GDKNuGetPackageVersion) -OutputDirectory $(EXTRACTED_FOLDER)' - task: CMake@1 displayName: 'CMake (MSVC): Config x64 (Xbox Series X|S)' inputs: diff --git a/.azuredevops/pipelines/DirectXTex-GitHub-GDK-Dev17.yml b/.azuredevops/pipelines/DirectXTex-GitHub-GDK-Dev17.yml index 2824c17..5ac9edc 100644 --- a/.azuredevops/pipelines/DirectXTex-GitHub-GDK-Dev17.yml +++ b/.azuredevops/pipelines/DirectXTex-GitHub-GDK-Dev17.yml @@ -22,6 +22,8 @@ pr: include: - '.azuredevops/pipelines/DirectXTex-GitHub-GDK-Dev17.yml' - '.azuredevops/templates/DirectXTex-build-gdk.yml' + - '.azuredevops/templates/DirectXTex-build-gdkx.yml' + - '.azuredevops/templates/DirectXTex-setup-gdk-auto.yml' - CMakeList.txt - build/*.in - build/*.cmake @@ -59,7 +61,7 @@ variables: jobs: - job: BUILD_GDK - displayName: 'Microsoft Game Development Kit (GDK Gaming.Desktop.x64)' + displayName: 'Microsoft Game Development Kit (Gaming.*.x64)' timeoutInMinutes: 120 cancelTimeoutInMinutes: 1 steps: @@ -94,12 +96,17 @@ jobs: - task: NuGetAuthenticate@1 displayName: 'NuGet Auth' - task: PowerShell@2 - displayName: 'NuGet Install GDK' + displayName: 'NuGet Install PC GDK' inputs: targetType: filePath filePath: ./build/RestoreGDK.ps1 arguments: -GDKEditionNumber $(GDK_EDITION) -OutputDirectory $(EXTRACTED_FOLDER) failOnStderr: true + - task: NuGetCommand@2 + displayName: 'NuGet install Xbox GDK' + inputs: + command: custom + arguments: 'install -directdownload Microsoft.GDK.Xbox -ExcludeVersion -Version $(GDKNuGetPackageVersion) -OutputDirectory $(EXTRACTED_FOLDER)' - task: CopyFiles@2 displayName: Set up Directory.Build.props inputs: @@ -123,8 +130,8 @@ jobs: msVersion: '17.0' vsYear: 2022 - - job: BUILD_GDKX - displayName: 'Microsoft Game Development Kit (GDK x64)' + - job: BUILD_GDKX_SCAR + displayName: 'Microsoft Game Development Kit (x64+Xbox Series X|S)' timeoutInMinutes: 120 cancelTimeoutInMinutes: 1 steps: @@ -158,13 +165,10 @@ jobs: displayName: 'Secure Supply Chain Analysis' - task: NuGetAuthenticate@1 displayName: 'NuGet Auth' - - task: PowerShell@2 - displayName: 'NuGet Install GDK' - inputs: - targetType: filePath - filePath: ./build/RestoreGDK.ps1 - arguments: -GDKEditionNumber $(GDK_EDITION) -OutputDirectory $(EXTRACTED_FOLDER) - failOnStderr: true + - template: '/.azuredevops/templates/DirectXTex-setup-gdk-auto.yml' + parameters: + windows: true + scarlett: true - task: CopyFiles@2 displayName: Set up Directory.Build.props inputs: @@ -187,9 +191,10 @@ jobs: parameters: msVersion: '17.0' vsYear: 2022 + xboxone: false - - job: BUILD_GDK_CMAKE_SCAR - displayName: 'Microsoft Game Development Kit (GDK) using CMake (Scarlett)' + - job: BUILD_GDKX_XBONE + displayName: 'Microsoft Game Development Kit (x64+Xbox One)' timeoutInMinutes: 120 cancelTimeoutInMinutes: 1 steps: @@ -223,13 +228,73 @@ jobs: displayName: 'Secure Supply Chain Analysis' - task: NuGetAuthenticate@1 displayName: 'NuGet Auth' - - task: PowerShell@2 - displayName: 'NuGet Install GDK' + - template: '/.azuredevops/templates/DirectXTex-setup-gdk-auto.yml' + parameters: + windows: true + scarlett: false + - task: CopyFiles@2 + displayName: Set up Directory.Build.props inputs: - targetType: filePath - filePath: ./build/RestoreGDK.ps1 - arguments: -GDKEditionNumber $(GDK_EDITION) -OutputDirectory $(EXTRACTED_FOLDER) - failOnStderr: true + SourceFolder: build + Contents: 'Directory.Build.props' + TargetFolder: $(Build.SourcesDirectory) + - task: MSBuild@1 + displayName: Setup BWOI VCTargets + inputs: + solution: build/SetupBWOI.targets + msbuildArchitecture: x64 + msbuildArguments: /p:GDKEditionNumber=$(GDK_EDITION) + - task: MSBuild@1 + displayName: Log Information + inputs: + solution: build/LogInfo.targets + msbuildArchitecture: x64 + msbuildArguments: /p:GDKEditionNumber=$(GDK_EDITION) + - template: '/.azuredevops/templates/DirectXTex-build-gdkx.yml' + parameters: + msVersion: '17.0' + vsYear: 2022 + scarlett: false + + - job: BUILD_GDK_CMAKE_SCAR + displayName: 'Microsoft Game Development Kit (GDK) using CMake (Xbox Series X|S)' + timeoutInMinutes: 120 + cancelTimeoutInMinutes: 1 + steps: + - checkout: self + clean: true + fetchTags: false + - task: NuGetToolInstaller@1 + displayName: 'Use NuGet' + - task: PowerShell@2 + displayName: 'Create nuget.config with single source' + inputs: + targetType: inline + script: | + $xml = @' + + + + + + + '@ + $xml | Set-Content -Path "$(Build.SourcesDirectory)\NuGet.config" + + - task: NuGetCommand@2 + # We have to use a nuget.config to provide the feed for the 'nuget install' option. + displayName: 'NuGet set package source to ADO feed' + inputs: + command: custom + arguments: sources add -Name xboxgdk -Source $(URL_FEED) -ConfigFile $(Build.SourcesDirectory)\NuGet.config + - task: nuget-security-analysis@0 + displayName: 'Secure Supply Chain Analysis' + - task: NuGetAuthenticate@1 + displayName: 'NuGet Auth' + - template: '/.azuredevops/templates/DirectXTex-setup-gdk-auto.yml' + parameters: + windows: false + scarlett: true - task: CmdLine@2 displayName: Setup BWOI for GDK command-line inputs: @@ -242,7 +307,10 @@ jobs: echo ##vso[task.prependpath]%WindowsSdkVerBinPath%x64 echo ##vso[task.prependpath]%VCToolsInstallDir%bin\HostX64\x64 call $(Build.SourcesDirectory)\build\SetupBWOI.cmd $(EXTRACTED_FOLDER) $(GDK_EDITION) Scarlett + echo ##vso[task.setvariable variable=GameDK;]%GameDK% echo ##vso[task.setvariable variable=GameDKLatest;]%GameDKLatest% + echo ##vso[task.setvariable variable=GameDKCoreLatest;]%GameDKCoreLatest% + echo ##vso[task.setvariable variable=GameDKXboxLatest;]%GameDKXboxLatest% echo ##vso[task.setvariable variable=GRDKLatest;]%GRDKLatest% echo ##vso[task.setvariable variable=GXDKLatest;]%GXDKLatest% echo ##vso[task.setvariable variable=INCLUDE;]%INCLUDE% @@ -339,13 +407,10 @@ jobs: displayName: 'Secure Supply Chain Analysis' - task: NuGetAuthenticate@1 displayName: 'NuGet Auth' - - task: PowerShell@2 - displayName: 'NuGet Install GDK' - inputs: - targetType: filePath - filePath: ./build/RestoreGDK.ps1 - arguments: -GDKEditionNumber $(GDK_EDITION) -OutputDirectory $(EXTRACTED_FOLDER) - failOnStderr: true + - template: '/.azuredevops/templates/DirectXTex-setup-gdk-auto.yml' + parameters: + windows: false + scarlett: false - task: CmdLine@2 displayName: Setup BWOI for GDK command-line inputs: @@ -358,7 +423,10 @@ jobs: echo ##vso[task.prependpath]%WindowsSdkVerBinPath%x64 echo ##vso[task.prependpath]%VCToolsInstallDir%bin\HostX64\x64 call $(Build.SourcesDirectory)\build\SetupBWOI.cmd $(EXTRACTED_FOLDER) $(GDK_EDITION) XboxOne + echo ##vso[task.setvariable variable=GameDK;]%GameDK% echo ##vso[task.setvariable variable=GameDKLatest;]%GameDKLatest% + echo ##vso[task.setvariable variable=GameDKCoreLatest;]%GameDKCoreLatest% + echo ##vso[task.setvariable variable=GameDKXboxLatest;]%GameDKXboxLatest% echo ##vso[task.setvariable variable=GRDKLatest;]%GRDKLatest% echo ##vso[task.setvariable variable=GXDKLatest;]%GXDKLatest% echo ##vso[task.setvariable variable=INCLUDE;]%INCLUDE% diff --git a/.azuredevops/pipelines/DirectXTex-GitHub-GDK.yml b/.azuredevops/pipelines/DirectXTex-GitHub-GDK.yml index 848e96e..28bf5e9 100644 --- a/.azuredevops/pipelines/DirectXTex-GitHub-GDK.yml +++ b/.azuredevops/pipelines/DirectXTex-GitHub-GDK.yml @@ -112,12 +112,17 @@ jobs: - task: NuGetAuthenticate@1 displayName: 'NuGet Auth' - task: PowerShell@2 - displayName: 'NuGet Install GDK' + displayName: 'NuGet Install PC GDK' inputs: targetType: filePath filePath: ./build/RestoreGDK.ps1 arguments: -GDKEditionNumber $(GDK_EDITION) -OutputDirectory $(EXTRACTED_FOLDER) failOnStderr: true + - task: NuGetCommand@2 + displayName: 'NuGet install Xbox GDK' + inputs: + command: custom + arguments: 'install -directdownload Microsoft.GDK.Xbox -ExcludeVersion -Version $(GDKNuGetPackageVersion) -OutputDirectory $(EXTRACTED_FOLDER)' - task: CopyFiles@2 displayName: Set up Directory.Build.props inputs: diff --git a/.azuredevops/templates/DirectXTex-build-gdkx.yml b/.azuredevops/templates/DirectXTex-build-gdkx.yml index f4c493b..8ebf87c 100644 --- a/.azuredevops/templates/DirectXTex-build-gdkx.yml +++ b/.azuredevops/templates/DirectXTex-build-gdkx.yml @@ -14,6 +14,12 @@ parameters: type: number values: - 2022 + - name: scarlett + type: boolean + default: true + - name: xboxone + type: boolean + default: true steps: - task: VSBuild@1 @@ -38,6 +44,7 @@ steps: msbuildArgs: /p:GDKEditionNumber=$(GDK_EDITION) - task: VSBuild@1 displayName: Build solution DirectXTex_GDKX_${{ parameters.vsYear }} xbdbg + condition: eq(${{ parameters.xboxone }}, true) continueOnError: true inputs: solution: DirectXTex_GDKX_${{ parameters.vsYear }}.sln @@ -48,6 +55,7 @@ steps: msbuildArgs: /p:GDKEditionNumber=$(GDK_EDITION) - task: VSBuild@1 displayName: Build solution DirectXTex_GDKX_${{ parameters.vsYear }} xbrel + condition: eq(${{ parameters.xboxone }}, true) continueOnError: true inputs: solution: DirectXTex_GDKX_${{ parameters.vsYear }}.sln @@ -58,6 +66,7 @@ steps: msbuildArgs: /p:GDKEditionNumber=$(GDK_EDITION) - task: VSBuild@1 displayName: Build solution DirectXTex_GDKX_${{ parameters.vsYear }} scardbg + condition: eq(${{ parameters.scarlett }}, true) continueOnError: true inputs: solution: DirectXTex_GDKX_${{ parameters.vsYear }}.sln @@ -68,6 +77,7 @@ steps: msbuildArgs: /p:GDKEditionNumber=$(GDK_EDITION) - task: VSBuild@1 displayName: Build solution DirectXTex_GDKX_${{ parameters.vsYear }} scarrel + condition: eq(${{ parameters.scarlett }}, true) continueOnError: true inputs: solution: DirectXTex_GDKX_${{ parameters.vsYear }}.sln @@ -78,6 +88,7 @@ steps: msbuildArgs: /p:GDKEditionNumber=$(GDK_EDITION) - task: VSBuild@1 displayName: Build solution DirectXTex_GDK_PC_${{ parameters.vsYear }} dbg + condition: eq(${{ parameters.xboxone }}, true) continueOnError: true inputs: solution: DirectXTex_GXDK_PC_${{ parameters.vsYear }}.sln @@ -88,6 +99,7 @@ steps: msbuildArgs: /p:PreferredToolArchitecture=x64 /p:GDKEditionNumber=$(GDK_EDITION) - task: VSBuild@1 displayName: Build solution DirectXTex_GDK_PC_${{ parameters.vsYear }} rel + condition: eq(${{ parameters.xboxone }}, true) continueOnError: true inputs: solution: DirectXTex_GXDK_PC_${{ parameters.vsYear }}.sln @@ -98,6 +110,7 @@ steps: msbuildArgs: /p:PreferredToolArchitecture=x64 /p:GDKEditionNumber=$(GDK_EDITION) - task: VSBuild@1 displayName: Build solution DirectXTex_GDK_PC_${{ parameters.vsYear }} scardbg + condition: eq(${{ parameters.scarlett }}, true) continueOnError: true inputs: solution: DirectXTex_GXDK_PC_${{ parameters.vsYear }}.sln @@ -108,6 +121,7 @@ steps: msbuildArgs: /p:PreferredToolArchitecture=x64 /p:GDKEditionNumber=$(GDK_EDITION) - task: VSBuild@1 displayName: Build solution DirectXTex_GDK_PC_${{ parameters.vsYear }} scarrel + condition: eq(${{ parameters.scarlett }}, true) continueOnError: true inputs: solution: DirectXTex_GXDK_PC_${{ parameters.vsYear }}.sln diff --git a/.azuredevops/templates/DirectXTex-setup-gdk-auto.yml b/.azuredevops/templates/DirectXTex-setup-gdk-auto.yml new file mode 100644 index 0000000..ed30a95 --- /dev/null +++ b/.azuredevops/templates/DirectXTex-setup-gdk-auto.yml @@ -0,0 +1,55 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# +# http://go.microsoft.com/fwlink/?LinkId=248926 + +# Template used by GitHub-GDK-* pipelines + +parameters: + - name: windows + type: boolean + default: true + - name: scarlett + type: boolean + default: true + +steps: + - task: PowerShell@2 + displayName: 'NuGet Install GDK' + inputs: + targetType: filePath + filePath: ./build/RestoreGDK.ps1 + arguments: -GDKEditionNumber $(GDK_EDITION) -OutputDirectory $(EXTRACTED_FOLDER) -AutoLayout + failOnStderr: true + - task: NuGetCommand@2 + displayName: 'NuGet install GDK (Windows)' + condition: and(ge(variables.GDKEditionNumber, '251000'), eq(${{ parameters.windows }}, true)) + inputs: + command: custom + arguments: > + install -directdownload Microsoft.GDK.Windows -ExcludeVersion -Version $(GDKNuGetPackageVersion) + -OutputDirectory $(EXTRACTED_FOLDER) + - task: NuGetCommand@2 + displayName: 'NuGet install GDK (Xbox Series X|S)' + condition: and(ge(variables.GDKEditionNumber, '251000'), eq(${{ parameters.scarlett }}, true)) + inputs: + command: custom + arguments: > + install -directdownload Microsoft.GDK.Xbox.XboxSeriesX_S -ExcludeVersion -Version $(GDKNuGetPackageVersion) + -OutputDirectory $(EXTRACTED_FOLDER) + - task: NuGetCommand@2 + displayName: 'NuGet install GDK (Xbox One)' + condition: and(ge(variables.GDKEditionNumber, '251000'), eq(${{ parameters.scarlett }}, false)) + inputs: + command: custom + arguments: > + install -directdownload Microsoft.GDK.Xbox.XboxOne -ExcludeVersion -Version $(GDKNuGetPackageVersion) + -OutputDirectory $(EXTRACTED_FOLDER) + - task: NuGetCommand@2 + displayName: 'NuGet install GDK (Xbox)' + condition: lt(variables.GDKEditionNumber, '251000') + inputs: + command: custom + arguments: > + install -directdownload Microsoft.GDK.Xbox -ExcludeVersion -Version $(GDKNuGetPackageVersion) + -OutputDirectory $(EXTRACTED_FOLDER) diff --git a/CMakeLists.txt b/CMakeLists.txt index 62fe112..5eb5851 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -142,7 +142,7 @@ if(DEFINED XBOX_CONSOLE_TARGET) endif() elseif((BUILD_XBOX_EXTS_XBOXONE OR BUILD_XBOX_EXTS_SCARLETT) AND WIN32) - if(DEFINED ENV{GameDKXboxLatest}) + if((DEFINED ENV{GameDKXboxLatest}) AND (NOT ("$ENV{GameDKXboxLatest}" STREQUAL ""))) cmake_path(SET GameDK_DIR "$ENV{GameDKXboxLatest}") elseif(DEFINED ENV{GameDKLatest}) cmake_path(SET GameDK_DIR "$ENV{GameDKLatest}") diff --git a/build/Directory.Build.props b/build/Directory.Build.props index 330584b..08164e0 100644 --- a/build/Directory.Build.props +++ b/build/Directory.Build.props @@ -12,27 +12,11 @@ <_AlternativeVCTargetsPath170>$(ExtractedFolder)VCTargets170\ <_AlternativeVCTargetsPath160>$(ExtractedFolder)VCTargets160\ - <_AlternativeVCTargetsPath150 Condition="'$(GDKEditionNumber)' != '' AND '$(GDKEditionNumber)' < '241000'">$(ExtractedFolder)VCTargets150\ 15.0 - - <_PCNuGetPackage>Microsoft.PGDK - <_XboxNuGetPackage>Microsoft.GDK - - - - <_PCNuGetPackage>Microsoft.GDK.PC - <_XboxNuGetPackage>Microsoft.GDK.Xbox - - - - <_PCNuGetPackage>$(_PCNuGetPackage).$(GDKEditionNumber) - <_XboxNuGetPackage>$(_XboxNuGetPackage).$(GDKEditionNumber) - - @@ -47,11 +31,32 @@ Project="$(ExtractedFolder)Microsoft.Windows.SDK.cpp.arm64\build\native\Microsoft.Windows.SDK.cpp.arm64.props" /> - + - + + + + + + + + + + + + + + + + + + @@ -66,21 +71,18 @@ $(_AlternativeVCTargetsPath160) true - $(_AlternativeVCTargetsPath150) $(_AlternativeVCTargetsPath160) $(_AlternativeVCTargetsPath160) true - $(_AlternativeVCTargetsPath150) $(_AlternativeVCTargetsPath160) $(_AlternativeVCTargetsPath160) true - $(_AlternativeVCTargetsPath150) $(_AlternativeVCTargetsPath160) @@ -91,21 +93,18 @@ --> true - $(_AlternativeVCTargetsPath150) $(_AlternativeVCTargetsPath160) $(_AlternativeVCTargetsPath170) true - $(_AlternativeVCTargetsPath150) $(_AlternativeVCTargetsPath160) $(_AlternativeVCTargetsPath170) true - $(_AlternativeVCTargetsPath150) $(_AlternativeVCTargetsPath160) $(_AlternativeVCTargetsPath170) diff --git a/build/RestoreGDK.proj b/build/RestoreGDK.proj index 512d0fc..22de246 100644 --- a/build/RestoreGDK.proj +++ b/build/RestoreGDK.proj @@ -14,7 +14,6 @@ x64 - - + diff --git a/build/RestoreGDK.ps1 b/build/RestoreGDK.ps1 index 5f62959..8a3ee95 100644 --- a/build/RestoreGDK.ps1 +++ b/build/RestoreGDK.ps1 @@ -1,7 +1,7 @@ <# .SYNOPSIS -Download and extract GDK NuGet based on edition number +Download and extract the 'base' GDK NuGet based on edition number, returning the full version number that can be used to restore other GDK packages in the set. .DESCRIPTION This script determines the NuGet package id to use based on the provided GDK edition number. It makes use of MSBuild PackageReference floating version numbers to do the restore operation. @@ -12,6 +12,12 @@ The GDK edition number in the form of YYMMQQ. .PARAMETER OutputDirectory Directory to write the packages into. Path should not already contain the packages. +.PARAMETER NewLayout +Switch to indicate to use the 'new layout' of GDK packages (October 2025 and later). + +.PARAMETER AutoLayout +Switch to indicate to automatically choose layout style based on edition number. + #> param( @@ -24,9 +30,15 @@ param( Mandatory, Position = 1 )] - [string]$OutputDirectory + [string]$OutputDirectory, + [switch]$NewLayout, + [switch]$AutoLayout ) +if ($NewLayout -and $AutoLayout) { + Write-Error "##[error]Cannot specify both NewLayout and AutoLayout switches" -ErrorAction Stop +} + # Validate output directory if ([string]::IsNullOrEmpty($OutputDirectory)) { Write-Error "##[error]Output Directory is required" -ErrorAction Stop @@ -65,29 +77,40 @@ if (-Not $nuget) { } # Determine NuGet package ID -if ($GDKEditionNumber -ge 241000) { - $PGDK_ID = "Microsoft.GDK.PC" - $GDKX_ID = "Microsoft.GDK.Xbox" -} -else { +if ($GDKEditionNumber -lt 241000) { Write-Error "##[error]Script supports October 2024 or later" -ErrorAction Stop } -# Check that the package isn't already present -$PGDK_DIR = [IO.Path]::Combine($OutputDirectory, $PGDK_ID) -if (Test-Path $PGDK_DIR) { - Write-Error "##[error]PC Package ID already exists!" -ErrorAction Stop +if ($AutoLayout) { + if ($GDKEditionNumber -ge 251000) { + $NewLayout = $true + } + else { + $NewLayout = $false + } } -$GDKX_DIR = [IO.Path]::Combine($OutputDirectory, $GDKX_ID) -if (Test-Path $GDKX_DIR) { - Write-Error "##[error]Xbox Package ID already exists!" -ErrorAction Stop +if ($NewLayout) { + if ($GDKEditionNumber -lt 251000) { + Write-Error "##[error]New layout only supported for October 2025 or later" -ErrorAction Stop + } + $GDK_ID = "Microsoft.GDK.Core" +} +else { + $GDK_ID = "Microsoft.GDK.PC" +} + +# Check that the package isn't already present +$GDK_DIR = [IO.Path]::Combine($OutputDirectory, $GDK_ID) +if (Test-Path $GDK_DIR) { + Write-Error "##[error]NuGet Package ID already exists!" -ErrorAction Stop } # Restore Nuget packages using floating versions $propsfile = [IO.Path]::Combine( $PSScriptRoot , "gdkedition.props") $props = Get-Content -Path $propsfile $props = $props -replace '.+', ("{0}" -f $GDKEditionNumber) +$props = $props -replace '.+', ("{0}" -f $GDK_ID) Set-Content -Path $propsfile -Value $props $nugetArgs = "restore RestoreGDK.proj -PackageSaveMode nuspec -packagesDirectory `"{0}`"" -f $OutputDirectory.TrimEnd('\') @@ -98,62 +121,31 @@ if ($nugetrun.ExitCode -gt 0) { } # Verify expected output of restore -if (-Not (Test-Path $PGDK_DIR)) { - Write-Error "##[error]Missing PC package after restore!" -ErrorAction Stop -} - -if (-Not (Test-Path $GDKX_DIR)) { - Write-Error "##[error]Missing Xbox package after restore!" -ErrorAction Stop +if (-Not (Test-Path $GDK_DIR)) { + Write-Error "##[error]Missing NuGet package after restore!" -ErrorAction Stop } # Reduce path depth removing version folder -$PGDK_VER = Get-ChildItem $PGDK_DIR -if ($PGDK_VER.Count -ne 1) { +$GDK_VER = Get-ChildItem $GDK_DIR +if ($GDK_VER.Count -ne 1) { Write-Error "##[error]Expected a single directory for the version!" -ErrorAction Stop } -$content = Get-ChildItem $PGDK_VER.Fullname -ForEach-Object -InputObject $content { Move-Item $_.Fullname -Destination $PGDK_DIR } -Remove-Item $PGDK_VER.Fullname +$content = Get-ChildItem $GDK_VER.Fullname +ForEach-Object -InputObject $content { Move-Item $_.Fullname -Destination $GDK_DIR } +Remove-Item $GDK_VER.Fullname -$GDKX_VER = Get-ChildItem $GDKX_DIR -if ($GDKX_VER.Count -ne 1) { - Write-Error "##[error]Expected a single directory for the version!" -ErrorAction Stop -} - -$content = Get-ChildItem $GDKX_VER.Fullname -ForEach-Object -InputObject $content { Move-Item $_.Fullname -Destination $GDKX_DIR } -Remove-Item $GDKX_VER.Fullname - -Write-Host ("##[debug]PC Package ID: {0} Version: {1}" -f $PGDK_ID, $PGDK_VER) -Write-Host ("##[debug]Xbox Package ID: {0} Version: {1}" -f $GDKX_ID, $GDKX_VER) +Write-Host ("##[debug]NuGet Package ID: {0} Version: {1}" -f $GDK_ID, $GDK_VER) # Read the nuspec files -$PGDK_NUSPEC = New-Object xml -$PGDK_NUSPEC.PreserveWhitespace = $true -$PGDK_NUSPEC.Load([IO.Path]::Combine($PGDK_DIR, $PGDK_ID + ".nuspec")) - -$GDKX_NUSPEC = New-Object xml -$GDKX_NUSPEC.PreserveWhitespace = $true -$GDKX_NUSPEC.Load([IO.Path]::Combine($GDKX_DIR, $GDKX_ID + ".nuspec")) +$GDK_NUSPEC = New-Object xml +$GDK_NUSPEC.PreserveWhitespace = $true +$GDK_NUSPEC.Load([IO.Path]::Combine($GDK_DIR, $GDK_ID + ".nuspec")) # Log results -Write-Host "##[group]PC Nuget Package nuspec" -Write-host $PGDK_NUSPEC.outerxml +Write-Host "##[group]NuGet Nuget Package nuspec" +Write-host $GDK_NUSPEC.outerxml Write-Host "##[endgroup]" -Write-Host "##[group]Xbox Nuget Package nuspec" -Write-host $GDKX_NUSPEC.outerxml -Write-Host "##[endgroup]" - -$id = $PGDK_NUSPEC.package.metadata.id -Write-Host "##vso[task.setvariable variable=PCNuGetPackage;]$id" - -$id = $GDKX_NUSPEC.package.metadata.id -Write-Host "##vso[task.setvariable variable=XboxNuGetPackage;]$id" - -$ver = $PGDK_NUSPEC.package.metadata.version -Write-Host "##vso[task.setvariable variable=PCNuGetPackageVersion;]$ver" - -$ver = $GDKX_NUSPEC.package.metadata.version -Write-Host "##vso[task.setvariable variable=XboxNuGetPackageVersion;]$ver" +$ver = $GDK_NUSPEC.package.metadata.version +Write-Host "##vso[task.setvariable variable=GDKNuGetPackageVersion;]$ver" diff --git a/build/SetupBWOI.cmd b/build/SetupBWOI.cmd index f50ef7e..8c8c9f8 100644 --- a/build/SetupBWOI.cmd +++ b/build/SetupBWOI.cmd @@ -13,9 +13,73 @@ goto needconsole set GXDKEDITION=%2 echo GXDKEDITION: %GXDKEDITION% -set PCNUGET=%1\Microsoft.GDK.PC\ -if NOT EXIST %PCNUGET% goto missingpcnuget +set CORENUGET=%1\Microsoft.GDK.Core\ +if EXIST %CORENUGET% goto newlayout +set PCNUGET=%1\Microsoft.GDK.PC\ +if EXIST %PCNUGET% goto oldlayout + +goto missingpcnuget + +REM Use new layouts (October 2025 GDK and later) +:newlayout + +set GameDK=%CORENUGET%native\bin\ + +if %3.==PC. goto newlayoutpc +if %3.==XboxOne. goto newlayoutxboxone +if %3.==Scarlett. goto newlayoutscarlett +goto needconsole + +:newlayoutpc +set WINDOWSNUGET=%1\Microsoft.GDK.Windows\ +if NOT EXIST %WINDOWSNUGET% goto missingpcnuget + +set GameDKCoreLatest=%WINDOWSNUGET%native\%GXDKEDITION%\ + +set ADDINCLUDE=%GameDKCoreLatest%windows\include +REM arm64? +set ADDBIN=%GameDKCoreLatest%windows\bin\x64;%CORENUGET%native\bin +set ADDLIB=%GameDKCoreLatest%windows\lib\x64 +goto continuenew + +:newlayoutxboxone +set XBOXNUGET=%1\Microsoft.GDK.Xbox.XboxOne\ +if NOT EXIST %XBOXNUGET% goto missingxboxnuget + +set GameDKXboxLatest=%XBOXNUGET%native\%GXDKEDITION%\ + +set ADDINCLUDE=%GameDKXboxLatest%xbox\include\gen8;%GameDKXboxLatest%xbox\include +set ADDBIN=%GameDKXboxLatest%xbox\bin\gen8;%GameDKXboxLatest%xbox\bin\x64;%CORENUGET%native\bin +set ADDLIB=%GameDKXboxLatest%xbox\lib\gen8;%GameDKXboxLatest%xbox\lib\x64 +goto continuenew + +:newlayoutscarlett +set XBOXNUGET=%1\Microsoft.GDK.Xbox.XboxSeriesX_S\ +if NOT EXIST %XBOXNUGET% goto missingxboxnuget + +set GameDKXboxLatest=%XBOXNUGET%native\%GXDKEDITION%\ + +set ADDINCLUDE=%GameDKXboxLatest%xbox\include\gen9;%GameDKXboxLatest%xbox\include +set ADDBIN=%GameDKXboxLatest%xbox\bin\gen9;%GameDKXboxLatest%xbox\bin\x64;%CORENUGET%native\bin +set ADDLIB=%GameDKXboxLatest%xbox\lib\gen9;%GameDKXboxLatest%xbox\lib\x64 +goto continuenew + +:continuenew +echo GameDK: %GameDK% +echo GameDKCoreLatest: %GameDKCoreLatest% +echo GameDKXboxLatest: %GameDKXboxLatest% +echo ADDBIN: %ADDBIN% +echo ADDINCLUDE: %ADDINCLUDE% +echo ADDLIB: %ADDLIB% + +set PATH=%ADDBIN%;%PATH% +set INCLUDE=%INCLUDE%;%ADDINCLUDE% +set LIB=%LIB%;%ADDLIB% +exit /b 0 + +REM Use old layouts (pre-October 2025 GDK) +:oldlayout set GRDKLatest=%PCNUGET%native\%GXDKEDITION%\GRDK\ echo GRDKLatest: %GRDKLatest% @@ -33,7 +97,7 @@ set GameDKLatest=%XBOXNUGET%native\%GXDKEDITION%\ set ADDBIN=%GXDKLatest%bin\%3;%PCNUGET%native\bin;%XBOXNUGET%native\bin set ADDINCLUDE=%GXDKLatest%gamekit\include\%3;%GXDKLatest%gamekit\include;%GRDKLatest%gamekit\include set ADDLIB=%GXDKLatest%gamekit\lib\amd64\%3;%GXDKLatest%gamekit\lib\amd64;%GRDKLatest%gamekit\lib\amd64 -goto continue +goto continueold :grdkonly set GameDK=%PCNUGET%native\ @@ -43,7 +107,7 @@ set ADDBIN=%PCNUGET%native\bin set ADDINCLUDE=%GRDKLatest%gamekit\include set ADDLIB=%GRDKLatest%gamekit\lib\amd64 -:continue +:continueold echo GameDK: %GameDK% echo GameDKLatest: %GameDKLatest% echo ADDBIN: %ADDBIN% @@ -68,9 +132,9 @@ echo Usage: This script requires the target type of PC, Scarlett, or XboxOne in exit /b 1 :missingpcnuget -echo ERROR - Cannot find Microsoft.GDK.PC installed at '%1' +echo ERROR - Cannot find Microsoft.GDK.Core/Windows/PC installed at '%1' exit /b 1 :missingxboxnuget -echo ERROR - Cannot find Microsoft.GDK.Xbox installed at '%1' +echo ERROR - Cannot find Microsoft.GDK.Xbox/.XboxOne/.XboxSeriesX_S installed at '%1' exit /b 1 diff --git a/build/SetupBWOI.targets b/build/SetupBWOI.targets index 60d0162..8ba6722 100644 --- a/build/SetupBWOI.targets +++ b/build/SetupBWOI.targets @@ -7,25 +7,11 @@ --> + 999999 C:\xtracted\ $(ExtractedFolder)\ - - <_PCNuGetPackage>Microsoft.PGDK - <_XboxNuGetPackage>Microsoft.GDK - - - - <_PCNuGetPackage>Microsoft.GDK.PC - <_XboxNuGetPackage>Microsoft.GDK.Xbox - - - - <_PCNuGetPackage>$(_PCNuGetPackage).$(GDKEditionNumber) - <_XboxNuGetPackage>$(_XboxNuGetPackage).$(GDKEditionNumber) - - - - + + + - - - + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_VSFolder Condition="'$(VisualStudioVersion)' == '17.0'">VS2022 + <_VSFolder Condition="'$(VisualStudioVersion)' == '16.0'">VS2019 + + + @@ -127,10 +159,13 @@ SixtyFourBit = (IntPtr.Size == 8) ? true : false; - - + + + + @@ -140,14 +175,24 @@ SixtyFourBit = (IntPtr.Size == 8) ? true : false; - - + + + + - + + + ;_CreateVCTargetsFolder + ;_CreateVCTargetsFolderOld + + + + diff --git a/build/gdkedition.props b/build/gdkedition.props index 36ae935..6e7a69d 100644 --- a/build/gdkedition.props +++ b/build/gdkedition.props @@ -2,5 +2,6 @@ 000000 + Microsoft.GDK.xyz