diff --git a/.azuredevops/pipelines/DirectXMesh-GitHub-GDK-Dev17.yml b/.azuredevops/pipelines/DirectXMesh-GitHub-GDK-Dev17.yml
index c411410a..c756cb15 100644
--- a/.azuredevops/pipelines/DirectXMesh-GitHub-GDK-Dev17.yml
+++ b/.azuredevops/pipelines/DirectXMesh-GitHub-GDK-Dev17.yml
@@ -22,6 +22,8 @@ pr:
include:
- '.azuredevops/pipelines/DirectXMesh-GitHub-GDK-Dev17.yml'
- '.azuredevops/templates/DirectXMesh-build-gdk.yml'
+ - '.azuredevops/templates/DirectXMesh-build-gdkx.yml'
+ - '.azuredevops/templates/DirectXMesh-setup-gdk-auto.yml'
- CMakeList.txt
- build/*.in
- build/*.cmake
@@ -57,7 +59,7 @@ variables:
jobs:
- job: BUILD_GDK
- displayName: 'Microsoft Game Development Kit (GDK Gaming.Desktop.x64)'
+ displayName: 'Microsoft Game Development Kit (Gaming.Desktop.x64)'
timeoutInMinutes: 120
cancelTimeoutInMinutes: 1
steps:
@@ -92,12 +94,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:
@@ -121,8 +128,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:
@@ -156,13 +163,73 @@ jobs:
displayName: 'Secure Supply Chain Analysis'
- task: NuGetAuthenticate@1
displayName: 'NuGet Auth'
+ - template: '/.azuredevops/templates/DirectXTex-setup-gdk-auto.yml'
+ parameters:
+ windows: true
+ scarlett: true
+ - task: CopyFiles@2
+ displayName: Set up Directory.Build.props
+ inputs:
+ 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/DirectXMesh-build-gdkx.yml'
+ parameters:
+ msVersion: '17.0'
+ vsYear: 2022
+ xboxone: false
+
+ - job: BUILD_GDKX_XBONE
+ displayName: 'Microsoft Game Development Kit (x64+Xbox One)'
+ timeoutInMinutes: 120
+ cancelTimeoutInMinutes: 1
+ steps:
+ - checkout: self
+ clean: true
+ fetchTags: false
+ - task: NuGetToolInstaller@1
+ displayName: 'Use NuGet'
- task: PowerShell@2
- displayName: 'NuGet Install GDK'
+ displayName: 'Create nuget.config with single source'
inputs:
- targetType: filePath
- filePath: ./build/RestoreGDK.ps1
- arguments: -GDKEditionNumber $(GDK_EDITION) -OutputDirectory $(EXTRACTED_FOLDER)
- failOnStderr: true
+ 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: CopyFiles@2
displayName: Set up Directory.Build.props
inputs:
@@ -185,9 +252,10 @@ jobs:
parameters:
msVersion: '17.0'
vsYear: 2022
+ scarlett: false
- job: BUILD_GDK_CMAKE_SCAR
- displayName: 'Microsoft Game Development Kit (GDK) using CMake (Scarlett)'
+ displayName: 'Microsoft Game Development Kit (GDK) using CMake (Xbox Series X|S)'
timeoutInMinutes: 120
cancelTimeoutInMinutes: 1
steps:
@@ -221,13 +289,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: true
- task: CmdLine@2
displayName: Setup BWOI for GDK command-line
inputs:
@@ -240,7 +305,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%
@@ -337,13 +405,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:
@@ -356,7 +421,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/DirectXMesh-GitHub-GDK.yml b/.azuredevops/pipelines/DirectXMesh-GitHub-GDK.yml
index 4d41bfc6..180e8a47 100644
--- a/.azuredevops/pipelines/DirectXMesh-GitHub-GDK.yml
+++ b/.azuredevops/pipelines/DirectXMesh-GitHub-GDK.yml
@@ -110,12 +110,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/pipelines/DirectXMesh-GitHub.yml b/.azuredevops/pipelines/DirectXMesh-GitHub.yml
index 933a06a2..faa24365 100644
--- a/.azuredevops/pipelines/DirectXMesh-GitHub.yml
+++ b/.azuredevops/pipelines/DirectXMesh-GitHub.yml
@@ -60,7 +60,7 @@ jobs:
BuildPlatform: x86
BuildConfiguration: Debug
SpectreMitigation: false
- # windows-2022 image is missing v142 spectre-mitigated libraries
+ # windows-2022 image is missing v142 spectre-mitigated libraries
steps:
- checkout: self
clean: true
diff --git a/.azuredevops/templates/DirectXMesh-build-gdkx.yml b/.azuredevops/templates/DirectXMesh-build-gdkx.yml
index 9ae66c17..924419c2 100644
--- a/.azuredevops/templates/DirectXMesh-build-gdkx.yml
+++ b/.azuredevops/templates/DirectXMesh-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
@@ -36,6 +42,7 @@ steps:
msbuildArgs: /p:GDKEditionNumber=$(GDK_EDITION)
- task: VSBuild@1
displayName: Build solution DirectXMesh_GDKX_${{ parameters.vsYear }} xbdbg
+ condition: eq(${{ parameters.xboxone }}, true)
inputs:
solution: DirectXMesh_GDKX_${{ parameters.vsYear }}.sln
vsVersion: ${{ parameters.msVersion }}
@@ -45,6 +52,7 @@ steps:
msbuildArgs: /p:GDKEditionNumber=$(GDK_EDITION)
- task: VSBuild@1
displayName: Build solution DirectXMesh_GDKX_${{ parameters.vsYear }} xbrel
+ condition: eq(${{ parameters.xboxone }}, true)
inputs:
solution: DirectXMesh_GDKX_${{ parameters.vsYear }}.sln
vsVersion: ${{ parameters.msVersion }}
@@ -54,6 +62,7 @@ steps:
msbuildArgs: /p:GDKEditionNumber=$(GDK_EDITION)
- task: VSBuild@1
displayName: Build solution DirectXMesh_GDKX_${{ parameters.vsYear }} scardbg
+ condition: eq(${{ parameters.scarlett }}, true)
inputs:
solution: DirectXMesh_GDKX_${{ parameters.vsYear }}.sln
vsVersion: ${{ parameters.msVersion }}
@@ -63,6 +72,7 @@ steps:
msbuildArgs: /p:GDKEditionNumber=$(GDK_EDITION)
- task: VSBuild@1
displayName: Build solution DirectXMesh_GDKX_${{ parameters.vsYear }} scarrel
+ condition: eq(${{ parameters.scarlett }}, true)
inputs:
solution: DirectXMesh_GDKX_${{ parameters.vsYear }}.sln
vsVersion: ${{ parameters.msVersion }}
diff --git a/.azuredevops/templates/DirectXMesh-setup-gdk-auto.yml b/.azuredevops/templates/DirectXMesh-setup-gdk-auto.yml
new file mode 100644
index 00000000..ed30a958
--- /dev/null
+++ b/.azuredevops/templates/DirectXMesh-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/build/Directory.Build.props b/build/Directory.Build.props
index 330584b7..08164e0b 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 512d0fc6..22de246d 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 5f629594..8a3ee954 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
+ }
+}
+
+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"
}
-$GDKX_DIR = [IO.Path]::Combine($OutputDirectory, $GDKX_ID)
-if (Test-Path $GDKX_DIR) {
- Write-Error "##[error]Xbox Package ID already exists!" -ErrorAction Stop
+# 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) {
- 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
-
-$GDKX_VER = Get-ChildItem $GDKX_DIR
-if ($GDKX_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 $GDKX_VER.Fullname
-ForEach-Object -InputObject $content { Move-Item $_.Fullname -Destination $GDKX_DIR }
-Remove-Item $GDKX_VER.Fullname
+$content = Get-ChildItem $GDK_VER.Fullname
+ForEach-Object -InputObject $content { Move-Item $_.Fullname -Destination $GDK_DIR }
+Remove-Item $GDK_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 "##[endgroup]"
-
-Write-Host "##[group]Xbox Nuget Package nuspec"
-Write-host $GDKX_NUSPEC.outerxml
+Write-Host "##[group]NuGet Nuget Package nuspec"
+Write-host $GDK_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 f50ef7ed..8c8c9f87 100644
--- a/build/SetupBWOI.cmd
+++ b/build/SetupBWOI.cmd
@@ -13,9 +13,73 @@ goto needconsole
set GXDKEDITION=%2
echo GXDKEDITION: %GXDKEDITION%
+set CORENUGET=%1\Microsoft.GDK.Core\
+if EXIST %CORENUGET% goto newlayout
+
set PCNUGET=%1\Microsoft.GDK.PC\
-if NOT EXIST %PCNUGET% goto missingpcnuget
+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 60d01625..8ba67229 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 36ae9359..6e7a69dc 100644
--- a/build/gdkedition.props
+++ b/build/gdkedition.props
@@ -2,5 +2,6 @@
000000
+ Microsoft.GDK.xyz