mirror of
https://github.com/bryanthaboi/gen1recomp.git
synced 2026-08-21 05:00:43 +02:00
Add Xbox UWP build workflow
This commit is contained in:
+61
-11
@@ -19,7 +19,8 @@ The tested toolchain is:
|
||||
- C++ Universal Windows Platform tools
|
||||
- Windows 11 SDK `10.0.26100.0`
|
||||
- CMake 3.24 or newer
|
||||
- Git
|
||||
- Git for Windows
|
||||
- Info-ZIP `zip` and `unzip`
|
||||
|
||||
Use Visual Studio Installer to add **Universal Windows Platform development**, the v143 C++ tools, CMake tools for Windows, and Windows SDK `10.0.26100.0`.
|
||||
|
||||
@@ -30,10 +31,10 @@ build.
|
||||
|
||||
## Rebuild the Dependencies
|
||||
|
||||
Run the dependency rebuild from `ports/uwp`:
|
||||
Run the dependency rebuild from the repository root:
|
||||
|
||||
```powershell
|
||||
.\scripts\rebuild-dependencies.ps1
|
||||
.\scripts\xbox-uwp\rebuild_dependencies.ps1
|
||||
```
|
||||
|
||||
The script clones the pinned SDL2, LÖVE, LuaJIT, vcpkg, depot_tools, and ANGLE
|
||||
@@ -46,24 +47,73 @@ The generated source checkouts are ignored by Git. A fresh ANGLE sync is about
|
||||
10 GB, so allow at least 20 GB of free disk space for all sources and build
|
||||
outputs. Use `-SkipAngle` to retain the existing pinned ANGLE runtime while
|
||||
rebuilding SDL2, LÖVE, LuaJIT, and the vcpkg libraries. Use `-SkipPackage` when
|
||||
only the dependency bundle needs to be refreshed.
|
||||
only the dependency bundle needs to be refreshed. The rebuild stops if a source
|
||||
checkout has local changes. Remove that generated `source` directory to restore
|
||||
the pinned revision.
|
||||
|
||||
## Build the MSIX
|
||||
|
||||
Build the game package from `ports/uwp`:
|
||||
Run the Xbox build from Git Bash at the repository root:
|
||||
|
||||
```powershell
|
||||
Set-Location "ports\uwp"
|
||||
cmake --preset uwp-release
|
||||
cmake --build --preset uwp-release
|
||||
```bash
|
||||
scripts/build_xbox_uwp.sh --release --version 1.2.3
|
||||
```
|
||||
|
||||
The build creates `gen1recomp.love`, links the UWP host, and stages LÖVE, LuaJIT, SDL2, ANGLE, and the vcpkg runtime DLLs.
|
||||
The build uses `scripts/pack_love.sh` to create and verify the same ROM-free
|
||||
`game.love` payload used by the other release targets. It then links the UWP
|
||||
host and stages LÖVE, LuaJIT, SDL2, ANGLE, and the vcpkg runtime DLLs.
|
||||
|
||||
Use `--relwithdebinfo` for a package with symbols. To package a `.love` produced
|
||||
by another build or downloaded from CI, pass `--game-love path/to/game.love`.
|
||||
The upstream `X.Y.Z` release becomes `X.Y.Z.0` in the generated MSIX manifest.
|
||||
Neither the manifest template nor `src/core/Version.lua` is edited in place.
|
||||
|
||||
The manifest publisher must match the signing certificate subject. Pass it
|
||||
when preparing a signed package:
|
||||
|
||||
```bash
|
||||
scripts/build_xbox_uwp.sh --release --version 1.2.3 \
|
||||
--publisher "CN=Gen1Recomp"
|
||||
```
|
||||
|
||||
The normal build is unsigned. Release CI supplies the private PFX and password
|
||||
from `XBOX_UWP_SIGNING_CERTIFICATE` and `XBOX_UWP_SIGNING_PASSWORD`; neither may
|
||||
be committed. The public certificate is safe to include with the release.
|
||||
|
||||
Run the offline packaging checks from Git Bash:
|
||||
|
||||
```bash
|
||||
bash scripts/xbox-uwp/selftest_build_xbox_uwp.sh
|
||||
```
|
||||
|
||||
## Build Output
|
||||
|
||||
The Release package lands under:
|
||||
Visual Studio package output lands under:
|
||||
|
||||
```text
|
||||
ports\uwp\build\release\AppPackages\Gen1RecompUWP
|
||||
```
|
||||
|
||||
The build also stages the distributable archive and checksum under:
|
||||
|
||||
```text
|
||||
dist\xbox-uwp\gen1recomp-X.Y.Z-xbox-uwp.zip
|
||||
dist\xbox-uwp\gen1recomp-X.Y.Z-xbox-uwp.zip.sha256
|
||||
```
|
||||
|
||||
The archive contains the MSIX, framework dependencies, build provenance and,
|
||||
for a signed release, the public certificate. The third-party notices are
|
||||
packaged inside the MSIX. Install the MSIX and dependency packages through
|
||||
Xbox Device Portal.
|
||||
|
||||
## Runtime Data
|
||||
|
||||
The package contains no ROM, generated cache, save or mod data. The Xbox file
|
||||
picker copies user-selected files into LocalState and the launcher imports them
|
||||
from there. Saves, ROM cache and installed mods remain under the LÖVE save
|
||||
directory in LocalState.
|
||||
|
||||
LuaJIT requires the `codeGeneration` capability. `removableStorage` exposes
|
||||
external media to the Xbox picker. The network capabilities support relay play
|
||||
and direct hosting. The package does not request full trust or broad filesystem
|
||||
access.
|
||||
|
||||
@@ -12,6 +12,31 @@ set(SDL2_ROOT "${THIRD_PARTY_ROOT}/sdl2")
|
||||
set(ANGLE_ROOT "${THIRD_PARTY_ROOT}/angle")
|
||||
set(RUNTIME_ROOT "${THIRD_PARTY_ROOT}/runtime")
|
||||
|
||||
set(GEN1RECOMP_VERSION "0.0.0" CACHE STRING "Gen1Recomp release version")
|
||||
if(NOT GEN1RECOMP_VERSION MATCHES "^[0-9]+\\.[0-9]+\\.[0-9]+$")
|
||||
message(FATAL_ERROR "GEN1RECOMP_VERSION must use X.Y.Z format.")
|
||||
endif()
|
||||
string(REPLACE "." ";" VERSION_PARTS "${GEN1RECOMP_VERSION}")
|
||||
foreach(part IN LISTS VERSION_PARTS)
|
||||
if(part GREATER 65535)
|
||||
message(FATAL_ERROR "MSIX version components cannot exceed 65535.")
|
||||
endif()
|
||||
endforeach()
|
||||
set(GEN1RECOMP_UWP_PUBLISHER "CN=Gen1Recomp" CACHE STRING
|
||||
"Publisher subject from the MSIX signing certificate")
|
||||
set(UWP_PUBLISHER_XML "${GEN1RECOMP_UWP_PUBLISHER}")
|
||||
string(REPLACE "&" "&" UWP_PUBLISHER_XML "${UWP_PUBLISHER_XML}")
|
||||
string(REPLACE "\"" """ UWP_PUBLISHER_XML "${UWP_PUBLISHER_XML}")
|
||||
string(REPLACE "<" "<" UWP_PUBLISHER_XML "${UWP_PUBLISHER_XML}")
|
||||
string(REPLACE ">" ">" UWP_PUBLISHER_XML "${UWP_PUBLISHER_XML}")
|
||||
set(UWP_PACKAGE_VERSION "${GEN1RECOMP_VERSION}.0")
|
||||
set(PACKAGE_MANIFEST "${CMAKE_CURRENT_BINARY_DIR}/Package.appxmanifest")
|
||||
configure_file(
|
||||
"${CMAKE_CURRENT_LIST_DIR}/Package.appxmanifest.in"
|
||||
"${PACKAGE_MANIFEST}"
|
||||
@ONLY
|
||||
)
|
||||
|
||||
set(REQUIRED_FILES
|
||||
"${THIRD_PARTY_ROOT}/manifest.json"
|
||||
"${LOVE_ROOT}/lib/lovestatic.lib"
|
||||
@@ -32,19 +57,28 @@ foreach(path IN LISTS REQUIRED_FILES)
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
set(GEN1RECOMP_LOVE "${GAME_ROOT}/.bazinga/work/game.love" CACHE FILEPATH
|
||||
"Path to the game.love payload produced by scripts/pack_love.sh")
|
||||
if(NOT EXISTS "${GEN1RECOMP_LOVE}")
|
||||
message(FATAL_ERROR
|
||||
"Missing game.love payload: ${GEN1RECOMP_LOVE}\n"
|
||||
"Build it with scripts/build_xbox_uwp.sh or scripts/pack_love.sh.")
|
||||
endif()
|
||||
|
||||
set(GAME_ARCHIVE "${CMAKE_CURRENT_BINARY_DIR}/gen1recomp.love")
|
||||
set_source_files_properties("${GAME_ARCHIVE}" PROPERTIES GENERATED TRUE)
|
||||
add_custom_target(gen1recomp_love ALL
|
||||
COMMAND powershell -NoProfile -ExecutionPolicy Bypass -File
|
||||
"${CMAKE_CURRENT_LIST_DIR}/scripts/package-game.ps1"
|
||||
-SourceRoot "${GAME_ROOT}" -Output "${GAME_ARCHIVE}"
|
||||
BYPRODUCTS "${GAME_ARCHIVE}"
|
||||
add_custom_command(
|
||||
OUTPUT "${GAME_ARCHIVE}"
|
||||
COMMAND "${CMAKE_COMMAND}" -E copy_if_different
|
||||
"${GEN1RECOMP_LOVE}" "${GAME_ARCHIVE}"
|
||||
DEPENDS "${GEN1RECOMP_LOVE}"
|
||||
VERBATIM
|
||||
)
|
||||
add_custom_target(gen1recomp_love ALL DEPENDS "${GAME_ARCHIVE}")
|
||||
set_source_files_properties("${GAME_ARCHIVE}" PROPERTIES GENERATED TRUE)
|
||||
|
||||
add_custom_target(verify_uwp_dependencies
|
||||
COMMAND powershell -NoProfile -ExecutionPolicy Bypass -File
|
||||
"${CMAKE_CURRENT_LIST_DIR}/scripts/verify-dependencies.ps1"
|
||||
"${GAME_ROOT}/scripts/xbox-uwp/verify_dependencies.ps1"
|
||||
VERBATIM
|
||||
)
|
||||
|
||||
@@ -53,6 +87,7 @@ add_dependencies(${PROJECT_NAME} gen1recomp_love verify_uwp_dependencies)
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES
|
||||
CXX_STANDARD 17
|
||||
CXX_STANDARD_REQUIRED YES
|
||||
VS_GLOBAL_DefaultLanguage "en-US"
|
||||
VS_SDK_REFERENCES "Microsoft.VCLibs, Version=14.0"
|
||||
)
|
||||
target_include_directories(${PROJECT_NAME} PRIVATE "${SDL2_ROOT}/include/SDL2")
|
||||
@@ -65,7 +100,7 @@ target_link_libraries(${PROJECT_NAME} PRIVATE
|
||||
)
|
||||
|
||||
set(PACKAGE_ROOT_FILES
|
||||
"${CMAKE_CURRENT_LIST_DIR}/Package.appxmanifest"
|
||||
"${PACKAGE_MANIFEST}"
|
||||
"${GAME_ARCHIVE}"
|
||||
"${LOVE_ROOT}/bin/love.dll"
|
||||
"${LOVE_ROOT}/bin/lua51.dll"
|
||||
@@ -74,6 +109,7 @@ set(PACKAGE_ROOT_FILES
|
||||
"${ANGLE_ROOT}/bin/libGLESv2.dll"
|
||||
"${ANGLE_ROOT}/bin/d3dcompiler_47.dll"
|
||||
)
|
||||
set_source_files_properties("${PACKAGE_MANIFEST}" PROPERTIES GENERATED TRUE)
|
||||
|
||||
set(RUNTIME_NAMES
|
||||
brotlicommon.dll brotlidec.dll bz2.dll fmt.dll freetype.dll libpng16.dll
|
||||
@@ -98,4 +134,16 @@ set_source_files_properties(${PACKAGE_ASSETS} PROPERTIES
|
||||
VS_DEPLOYMENT_CONTENT TRUE
|
||||
VS_DEPLOYMENT_LOCATION "Assets"
|
||||
)
|
||||
target_sources(${PROJECT_NAME} PRIVATE ${PACKAGE_ROOT_FILES} ${PACKAGE_ASSETS})
|
||||
|
||||
file(GLOB PACKAGE_LICENSES CONFIGURE_DEPENDS "${THIRD_PARTY_ROOT}/licenses/*.txt")
|
||||
set_source_files_properties(${PACKAGE_LICENSES} PROPERTIES
|
||||
VS_TOOL_OVERRIDE "Content"
|
||||
VS_COPY_TO_OUT_DIR Always
|
||||
VS_DEPLOYMENT_CONTENT TRUE
|
||||
VS_DEPLOYMENT_LOCATION "licenses"
|
||||
)
|
||||
target_sources(${PROJECT_NAME} PRIVATE
|
||||
${PACKAGE_ROOT_FILES}
|
||||
${PACKAGE_ASSETS}
|
||||
${PACKAGE_LICENSES}
|
||||
)
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Package
|
||||
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
|
||||
xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
|
||||
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
|
||||
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
|
||||
IgnorableNamespaces="uap mp rescap">
|
||||
<Identity Name="Gen1RecompUWP" Publisher="CN=Caorthann" Version="0.3.0.0" />
|
||||
IgnorableNamespaces="uap mp">
|
||||
<Identity Name="Gen1RecompUWP" Publisher="@UWP_PUBLISHER_XML@" Version="@UWP_PACKAGE_VERSION@" />
|
||||
<mp:PhoneIdentity PhoneProductId="5074018d-a46b-4dd3-b7fa-93a1e39858ad" PhonePublisherId="00000000-0000-0000-0000-000000000000" />
|
||||
<Properties>
|
||||
<DisplayName>Gen1Recomp</DisplayName>
|
||||
@@ -37,10 +36,8 @@
|
||||
<Capabilities>
|
||||
<Capability Name="internetClient" />
|
||||
<Capability Name="internetClientServer" />
|
||||
<Capability Name="privateNetworkClientServer" />
|
||||
<Capability Name="codeGeneration" />
|
||||
<uap:Capability Name="removableStorage" />
|
||||
<rescap:Capability Name="runFullTrust" />
|
||||
<rescap:Capability Name="broadFileSystemAccess" />
|
||||
<rescap:Capability Name="expandedResources" />
|
||||
</Capabilities>
|
||||
</Package>
|
||||
@@ -26,6 +26,5 @@ int runLove(int, char **)
|
||||
int CALLBACK WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
|
||||
{
|
||||
SDL_SetHint(SDL_HINT_WINRT_HANDLE_BACK_BUTTON, "1");
|
||||
OutputDebugStringA("Gen1Recomp UWP startup\n");
|
||||
return SDL_WinRTRunApp(runLove, nullptr);
|
||||
}
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
param(
|
||||
[string]$Configuration = "Release",
|
||||
[string]$WindowsSdkVersion = "10.0"
|
||||
)
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
$portRoot = Split-Path -Parent $PSScriptRoot
|
||||
$sourceRoot = Join-Path $portRoot "third_party\sdl2\source"
|
||||
$buildRoot = Join-Path $portRoot "build\sdl2"
|
||||
$installRoot = Join-Path $portRoot "build\sdl2-install"
|
||||
|
||||
cmake --fresh -S $sourceRoot -B $buildRoot `
|
||||
-G "Visual Studio 17 2022" -A x64 `
|
||||
-DCMAKE_SYSTEM_NAME=WindowsStore `
|
||||
"-DCMAKE_SYSTEM_VERSION=$WindowsSdkVersion" `
|
||||
"-DCMAKE_INSTALL_PREFIX=$installRoot" `
|
||||
-DSDL_SHARED=ON -DSDL_STATIC=OFF `
|
||||
-DSDL_OPENGL=OFF -DSDL_OPENGLES=ON -DSDL_VULKAN=OFF
|
||||
if ($LASTEXITCODE -ne 0) { throw "SDL2 configure failed with exit code $LASTEXITCODE." }
|
||||
|
||||
cmake --build $buildRoot --config $Configuration --target INSTALL --parallel
|
||||
if ($LASTEXITCODE -ne 0) { throw "SDL2 build failed with exit code $LASTEXITCODE." }
|
||||
@@ -1,49 +0,0 @@
|
||||
param(
|
||||
[Parameter(Mandatory = $true)][string]$SourceRoot,
|
||||
[Parameter(Mandatory = $true)][string]$Output
|
||||
)
|
||||
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$source = (Resolve-Path -LiteralPath $SourceRoot).Path
|
||||
$required = @('main.lua', 'conf.lua', 'tools/rom_manifest.json')
|
||||
$allowedRoots = @('assets/', 'data/', 'mods/', 'src/', 'tools/rom_manifest')
|
||||
$forbidden = '(?i)(^|/)(assets/generated|data/generated|build|dist|ports|mobile|tests?)(/|$)|\.(gb|gbc|sav|srm)$'
|
||||
|
||||
$tracked = & git -C $source ls-files
|
||||
if ($LASTEXITCODE -ne 0) { throw 'git ls-files failed' }
|
||||
|
||||
$entries = $tracked |
|
||||
ForEach-Object { $_.Replace('\', '/') } |
|
||||
Where-Object {
|
||||
$path = $_
|
||||
(($required -contains $path) -or ($allowedRoots | Where-Object { $path.StartsWith($_) })) -and
|
||||
$path -notmatch $forbidden
|
||||
} |
|
||||
Sort-Object -Unique
|
||||
|
||||
foreach ($path in $required) {
|
||||
if ($entries -notcontains $path) { throw "Required game file is missing from archive input: $path" }
|
||||
}
|
||||
|
||||
$parent = Split-Path -Parent $Output
|
||||
New-Item -ItemType Directory -Force -Path $parent | Out-Null
|
||||
if (Test-Path -LiteralPath $Output) { Remove-Item -LiteralPath $Output -Force }
|
||||
|
||||
Add-Type -AssemblyName System.IO.Compression
|
||||
Add-Type -AssemblyName System.IO.Compression.FileSystem
|
||||
$archive = [System.IO.Compression.ZipFile]::Open($Output, 'Create')
|
||||
try {
|
||||
foreach ($relative in $entries) {
|
||||
$full = Join-Path $source $relative
|
||||
if (-not (Test-Path -LiteralPath $full -PathType Leaf)) { throw "Tracked file is missing: $relative" }
|
||||
$entry = $archive.CreateEntry($relative, [System.IO.Compression.CompressionLevel]::Optimal)
|
||||
$entry.LastWriteTime = [DateTimeOffset]'2000-01-01T00:00:00Z'
|
||||
$input = [System.IO.File]::OpenRead($full)
|
||||
$outputStream = $entry.Open()
|
||||
try { $input.CopyTo($outputStream) } finally { $outputStream.Dispose(); $input.Dispose() }
|
||||
}
|
||||
} finally {
|
||||
$archive.Dispose()
|
||||
}
|
||||
|
||||
Write-Host "Created $Output with $($entries.Count) tracked, ROM-free entries."
|
||||
@@ -1,389 +0,0 @@
|
||||
[CmdletBinding()]
|
||||
param(
|
||||
[ValidateSet("Release", "RelWithDebInfo")]
|
||||
[string]$Configuration = "Release",
|
||||
[string]$WindowsSdkVersion = "10.0",
|
||||
[switch]$SkipAngle,
|
||||
[switch]$SkipPackage
|
||||
)
|
||||
|
||||
Set-StrictMode -Version Latest
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
$portRoot = Split-Path -Parent $PSScriptRoot
|
||||
$thirdPartyRoot = Join-Path $portRoot "third_party"
|
||||
$manifestPath = Join-Path $thirdPartyRoot "manifest.json"
|
||||
$metadata = Get-Content -Raw -LiteralPath $manifestPath | ConvertFrom-Json
|
||||
|
||||
$sdlRoot = Join-Path $thirdPartyRoot "sdl2"
|
||||
$sdlSource = Join-Path $sdlRoot "source"
|
||||
$sdlInstall = Join-Path $portRoot "build\sdl2-install"
|
||||
$loveRoot = Join-Path $thirdPartyRoot "love"
|
||||
$loveSource = Join-Path $loveRoot "source"
|
||||
$loveBuild = Join-Path $portRoot "build\love"
|
||||
$luajitSource = Join-Path $thirdPartyRoot "luajit\source"
|
||||
$angleRoot = Join-Path $thirdPartyRoot "angle"
|
||||
$angleSource = Join-Path $angleRoot "source"
|
||||
$depotToolsSource = Join-Path $angleRoot "depot_tools"
|
||||
$runtimeRoot = Join-Path $thirdPartyRoot "runtime"
|
||||
$vcpkgSource = Join-Path $runtimeRoot "source"
|
||||
$vcpkgInstalled = Join-Path $vcpkgSource "installed\x64-uwp"
|
||||
$licensesRoot = Join-Path $thirdPartyRoot "licenses"
|
||||
|
||||
function Invoke-Tool {
|
||||
param([string]$FilePath)
|
||||
|
||||
& $FilePath @args
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
throw "$FilePath failed with exit code $LASTEXITCODE."
|
||||
}
|
||||
}
|
||||
|
||||
function Assert-Command {
|
||||
param([Parameter(Mandatory)][string]$Name)
|
||||
|
||||
if (-not (Get-Command $Name -ErrorAction SilentlyContinue)) {
|
||||
throw "Required tool not found on PATH: $Name"
|
||||
}
|
||||
}
|
||||
|
||||
function Ensure-Directory {
|
||||
param([Parameter(Mandatory)][string]$Path)
|
||||
|
||||
if (-not (Test-Path -LiteralPath $Path -PathType Container)) {
|
||||
New-Item -ItemType Directory -Path $Path -Force | Out-Null
|
||||
}
|
||||
}
|
||||
|
||||
function Ensure-GitSource {
|
||||
param(
|
||||
[Parameter(Mandatory)][string]$Name,
|
||||
[Parameter(Mandatory)][string]$Repository,
|
||||
[Parameter(Mandatory)][string]$Revision,
|
||||
[Parameter(Mandatory)][string]$Path,
|
||||
[string]$SnapshotRevision
|
||||
)
|
||||
|
||||
if (-not (Test-Path -LiteralPath $Path -PathType Container)) {
|
||||
Write-Host "Cloning $Name at $Revision..."
|
||||
Ensure-Directory (Split-Path -Parent $Path)
|
||||
Invoke-Tool git init $Path
|
||||
Invoke-Tool git -C $Path remote add origin $Repository
|
||||
Invoke-Tool git -C $Path fetch --depth 1 origin $Revision
|
||||
Invoke-Tool git -C $Path checkout --detach FETCH_HEAD
|
||||
}
|
||||
|
||||
$gitDirectory = Join-Path $Path ".git"
|
||||
if (Test-Path -LiteralPath $gitDirectory) {
|
||||
$actual = (& git -C $Path rev-parse HEAD).Trim()
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
throw "Unable to inspect the $Name source checkout."
|
||||
}
|
||||
if ($actual -ne $Revision) {
|
||||
throw "$Name source is at $actual; expected $Revision. Remove '$Path' to recreate it."
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
if (-not $SnapshotRevision) {
|
||||
throw "$Name source exists without Git metadata, so its revision cannot be verified."
|
||||
}
|
||||
|
||||
$revisionFile = Join-Path $Path "REVISION.txt"
|
||||
if (-not (Test-Path -LiteralPath $revisionFile -PathType Leaf)) {
|
||||
throw "$Name source snapshot is missing REVISION.txt."
|
||||
}
|
||||
$actualSnapshot = (Get-Content -Raw -LiteralPath $revisionFile).Trim()
|
||||
if ($actualSnapshot -ne $SnapshotRevision) {
|
||||
throw "$Name source snapshot is '$actualSnapshot'; expected '$SnapshotRevision'."
|
||||
}
|
||||
}
|
||||
|
||||
function Copy-RequiredFile {
|
||||
param(
|
||||
[Parameter(Mandatory)][string]$Source,
|
||||
[Parameter(Mandatory)][string]$Destination
|
||||
)
|
||||
|
||||
if (-not (Test-Path -LiteralPath $Source -PathType Leaf)) {
|
||||
throw "Expected build output not found: $Source"
|
||||
}
|
||||
Ensure-Directory (Split-Path -Parent $Destination)
|
||||
Copy-Item -LiteralPath $Source -Destination $Destination -Force
|
||||
}
|
||||
|
||||
function Reset-Directory {
|
||||
param([Parameter(Mandatory)][string]$Path)
|
||||
|
||||
if (Test-Path -LiteralPath $Path) {
|
||||
Remove-Item -LiteralPath $Path -Recurse -Force
|
||||
}
|
||||
New-Item -ItemType Directory -Path $Path -Force | Out-Null
|
||||
}
|
||||
|
||||
function Ensure-DepotToolsGit {
|
||||
$wrapper = Join-Path $depotToolsSource "git.bat"
|
||||
if (Test-Path -LiteralPath $wrapper -PathType Leaf) {
|
||||
return
|
||||
}
|
||||
|
||||
$gitExe = (Get-Command git).Source
|
||||
$content = "@echo off`r`n`"$gitExe`" %*`r`n"
|
||||
[System.IO.File]::WriteAllText($wrapper, $content, [System.Text.ASCIIEncoding]::new())
|
||||
}
|
||||
|
||||
function Get-Sha256 {
|
||||
param([Parameter(Mandatory)][string]$Path)
|
||||
|
||||
$stream = [System.IO.File]::OpenRead($Path)
|
||||
try {
|
||||
$sha256 = [System.Security.Cryptography.SHA256]::Create()
|
||||
try {
|
||||
$hash = $sha256.ComputeHash($stream)
|
||||
return [System.BitConverter]::ToString($hash).Replace("-", "")
|
||||
} finally {
|
||||
$sha256.Dispose()
|
||||
}
|
||||
} finally {
|
||||
$stream.Dispose()
|
||||
}
|
||||
}
|
||||
|
||||
function Update-Manifest {
|
||||
$roots = @(
|
||||
"angle\bin",
|
||||
"love\bin",
|
||||
"love\lib",
|
||||
"runtime\bin",
|
||||
"sdl2\bin",
|
||||
"sdl2\include",
|
||||
"sdl2\lib"
|
||||
)
|
||||
$files = foreach ($relativeRoot in $roots) {
|
||||
$path = Join-Path $thirdPartyRoot $relativeRoot
|
||||
Get-ChildItem -LiteralPath $path -File -Recurse | ForEach-Object {
|
||||
$relative = $_.FullName.Substring($thirdPartyRoot.Length + 1).Replace("\", "/")
|
||||
[ordered]@{
|
||||
path = $relative
|
||||
sha256 = Get-Sha256 $_.FullName
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$metadata.configuration = $Configuration
|
||||
$metadata.files = @($files | Sort-Object path)
|
||||
$json = $metadata | ConvertTo-Json -Depth 10
|
||||
[System.IO.File]::WriteAllText($manifestPath, "$json`r`n", [System.Text.UTF8Encoding]::new($false))
|
||||
}
|
||||
|
||||
Assert-Command git
|
||||
Assert-Command cmake
|
||||
|
||||
Ensure-GitSource `
|
||||
-Name "SDL2" `
|
||||
-Repository $metadata.sources.sdl2.repository `
|
||||
-Revision $metadata.sources.sdl2.commit `
|
||||
-Path $sdlSource `
|
||||
-SnapshotRevision $metadata.sources.sdl2.revision
|
||||
|
||||
$sdlPatch = Join-Path $thirdPartyRoot $metadata.sources.sdl2.patch
|
||||
Push-Location $sdlSource
|
||||
try {
|
||||
& git apply --reverse --check $sdlPatch 2>$null
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
Invoke-Tool git apply --check $sdlPatch
|
||||
Invoke-Tool git apply $sdlPatch
|
||||
}
|
||||
} finally {
|
||||
Pop-Location
|
||||
}
|
||||
|
||||
Write-Host "Building SDL2..."
|
||||
& (Join-Path $PSScriptRoot "build-sdl2-angle.ps1") `
|
||||
-Configuration $Configuration `
|
||||
-WindowsSdkVersion $WindowsSdkVersion
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
throw "SDL2 build failed with exit code $LASTEXITCODE."
|
||||
}
|
||||
|
||||
Ensure-GitSource `
|
||||
-Name "vcpkg" `
|
||||
-Repository $metadata.sources.vcpkg.repository `
|
||||
-Revision $metadata.sources.vcpkg.commit `
|
||||
-Path $vcpkgSource
|
||||
|
||||
$vcpkgExe = Join-Path $vcpkgSource "vcpkg.exe"
|
||||
if (-not (Test-Path -LiteralPath $vcpkgExe -PathType Leaf)) {
|
||||
Write-Host "Bootstrapping vcpkg..."
|
||||
Invoke-Tool (Join-Path $vcpkgSource "bootstrap-vcpkg.bat") -disableMetrics
|
||||
}
|
||||
|
||||
Write-Host "Installing the LÖVE runtime dependencies..."
|
||||
$vcpkgPackages = @($metadata.sources.vcpkg.packages | ForEach-Object { "${_}:x64-uwp" })
|
||||
Invoke-Tool $vcpkgExe install @vcpkgPackages --recurse --clean-after-build --vcpkg-root $vcpkgSource
|
||||
|
||||
Ensure-GitSource `
|
||||
-Name "LÖVE" `
|
||||
-Repository $metadata.sources.love.repository `
|
||||
-Revision $metadata.sources.love.commit `
|
||||
-Path $loveSource
|
||||
|
||||
Ensure-GitSource `
|
||||
-Name "LuaJIT" `
|
||||
-Repository $metadata.sources.luajit.repository `
|
||||
-Revision $metadata.sources.luajit.commit `
|
||||
-Path $luajitSource
|
||||
|
||||
Write-Host "Building LÖVE..."
|
||||
Invoke-Tool cmake --fresh -S $loveSource -B $loveBuild `
|
||||
-G "Visual Studio 17 2022" -A x64 `
|
||||
-DCMAKE_SYSTEM_NAME=WindowsStore `
|
||||
"-DCMAKE_SYSTEM_VERSION=$WindowsSdkVersion" `
|
||||
"-DCMAKE_TOOLCHAIN_FILE=$(Join-Path $vcpkgSource 'scripts\buildsystems\vcpkg.cmake')" `
|
||||
-DVCPKG_TARGET_TRIPLET=x64-uwp `
|
||||
"-DLOVE_UWP_SDL_ROOT=$sdlInstall" `
|
||||
-DLOVE_UWP_LUAJIT=ON `
|
||||
-DLOVE_UWP_ANGLE=ON `
|
||||
"-DFETCHCONTENT_SOURCE_DIR_LOVE_LUAJIT_SOURCE=$luajitSource"
|
||||
Invoke-Tool cmake --build $loveBuild --config $Configuration --parallel
|
||||
|
||||
if (-not $SkipAngle) {
|
||||
Ensure-GitSource `
|
||||
-Name "depot_tools" `
|
||||
-Repository $metadata.sources.depotTools.repository `
|
||||
-Revision $metadata.sources.depotTools.commit `
|
||||
-Path $depotToolsSource
|
||||
Ensure-DepotToolsGit
|
||||
|
||||
Ensure-GitSource `
|
||||
-Name "ANGLE" `
|
||||
-Repository $metadata.sources.angle.repository `
|
||||
-Revision $metadata.sources.angle.commit `
|
||||
-Path $angleSource
|
||||
|
||||
$gclientPath = Join-Path $angleSource ".gclient"
|
||||
if (-not (Test-Path -LiteralPath $gclientPath -PathType Leaf)) {
|
||||
$gclient = @"
|
||||
solutions = [
|
||||
{
|
||||
"name": ".",
|
||||
"url": "$($metadata.sources.angle.repository)",
|
||||
"deps_file": "DEPS",
|
||||
"managed": False,
|
||||
"custom_deps": {},
|
||||
"custom_vars": {},
|
||||
},
|
||||
]
|
||||
target_os = ["winuwp"]
|
||||
"@
|
||||
[System.IO.File]::WriteAllText($gclientPath, $gclient, [System.Text.UTF8Encoding]::new($false))
|
||||
}
|
||||
|
||||
$gn = Join-Path $angleSource "buildtools\win\gn.exe"
|
||||
$ninja = Join-Path $angleSource "third_party\ninja\ninja.exe"
|
||||
if (-not (Test-Path -LiteralPath $gn -PathType Leaf) -or
|
||||
-not (Test-Path -LiteralPath $ninja -PathType Leaf)) {
|
||||
Write-Host "Synchronising ANGLE dependencies..."
|
||||
$oldPath = $env:PATH
|
||||
$oldDepotToolsUpdate = $env:DEPOT_TOOLS_UPDATE
|
||||
$oldDepotToolsToolchain = $env:DEPOT_TOOLS_WIN_TOOLCHAIN
|
||||
try {
|
||||
$env:PATH = "$depotToolsSource;$oldPath"
|
||||
$env:DEPOT_TOOLS_UPDATE = "0"
|
||||
$env:DEPOT_TOOLS_WIN_TOOLCHAIN = "0"
|
||||
Push-Location $angleSource
|
||||
try {
|
||||
Invoke-Tool (Join-Path $depotToolsSource "gclient.bat") sync -D
|
||||
} finally {
|
||||
Pop-Location
|
||||
}
|
||||
} finally {
|
||||
$env:PATH = $oldPath
|
||||
$env:DEPOT_TOOLS_UPDATE = $oldDepotToolsUpdate
|
||||
$env:DEPOT_TOOLS_WIN_TOOLCHAIN = $oldDepotToolsToolchain
|
||||
}
|
||||
} else {
|
||||
Write-Host "Using the existing ANGLE dependency checkout."
|
||||
}
|
||||
|
||||
Write-Host "Building ANGLE..."
|
||||
$angleBuild = Join-Path $angleSource "out\uwp-release"
|
||||
$gnArgs = ($metadata.sources.angle.gnArgs -join "`n")
|
||||
$oldPath = $env:PATH
|
||||
$oldDepotToolsToolchain = $env:DEPOT_TOOLS_WIN_TOOLCHAIN
|
||||
try {
|
||||
$env:PATH = "$depotToolsSource;$oldPath"
|
||||
$env:DEPOT_TOOLS_WIN_TOOLCHAIN = "0"
|
||||
Push-Location $angleSource
|
||||
try {
|
||||
Invoke-Tool $gn gen $angleBuild "--args=$gnArgs"
|
||||
} finally {
|
||||
Pop-Location
|
||||
}
|
||||
Invoke-Tool $ninja -C $angleBuild libEGL libGLESv2
|
||||
} finally {
|
||||
$env:PATH = $oldPath
|
||||
$env:DEPOT_TOOLS_WIN_TOOLCHAIN = $oldDepotToolsToolchain
|
||||
}
|
||||
|
||||
Reset-Directory (Join-Path $angleRoot "bin")
|
||||
foreach ($name in @("libEGL.dll", "libGLESv2.dll", "d3dcompiler_47.dll")) {
|
||||
Copy-RequiredFile (Join-Path $angleBuild $name) (Join-Path $angleRoot "bin\$name")
|
||||
}
|
||||
Copy-RequiredFile (Join-Path $angleSource "AUTHORS") (Join-Path $angleRoot "AUTHORS")
|
||||
Copy-RequiredFile (Join-Path $angleSource "LICENSE") (Join-Path $angleRoot "LICENSE")
|
||||
} else {
|
||||
Write-Host "Keeping the existing ANGLE runtime (-SkipAngle)."
|
||||
}
|
||||
|
||||
Write-Host "Staging SDL2..."
|
||||
Reset-Directory (Join-Path $sdlRoot "bin")
|
||||
Reset-Directory (Join-Path $sdlRoot "lib")
|
||||
Reset-Directory (Join-Path $sdlRoot "include")
|
||||
Copy-RequiredFile (Join-Path $sdlInstall "bin\SDL2.dll") (Join-Path $sdlRoot "bin\SDL2.dll")
|
||||
Copy-RequiredFile (Join-Path $sdlInstall "lib\SDL2.lib") (Join-Path $sdlRoot "lib\SDL2.lib")
|
||||
Copy-Item -LiteralPath (Join-Path $sdlInstall "include\SDL2") -Destination (Join-Path $sdlRoot "include\SDL2") -Recurse
|
||||
|
||||
Write-Host "Staging LÖVE and LuaJIT..."
|
||||
$loveOutput = Join-Path $loveBuild $Configuration
|
||||
Reset-Directory (Join-Path $loveRoot "bin")
|
||||
Reset-Directory (Join-Path $loveRoot "lib")
|
||||
foreach ($name in @("love.dll", "lua51.dll")) {
|
||||
Copy-RequiredFile (Join-Path $loveOutput $name) (Join-Path $loveRoot "bin\$name")
|
||||
}
|
||||
foreach ($name in @("liblove.lib", "lovestatic.lib", "lua51.lib")) {
|
||||
Copy-RequiredFile (Join-Path $loveOutput $name) (Join-Path $loveRoot "lib\$name")
|
||||
}
|
||||
|
||||
Write-Host "Staging the vcpkg runtime..."
|
||||
Reset-Directory (Join-Path $runtimeRoot "bin")
|
||||
foreach ($name in $metadata.sources.vcpkg.runtimeFiles) {
|
||||
Copy-RequiredFile (Join-Path $vcpkgInstalled "bin\$name") (Join-Path $runtimeRoot "bin\$name")
|
||||
}
|
||||
|
||||
Write-Host "Updating dependency licences..."
|
||||
Ensure-Directory $licensesRoot
|
||||
Copy-RequiredFile (Join-Path $loveSource "license.txt") (Join-Path $licensesRoot "love.txt")
|
||||
Copy-RequiredFile (Join-Path $luajitSource "COPYRIGHT") (Join-Path $licensesRoot "luajit.txt")
|
||||
Copy-RequiredFile (Join-Path $sdlSource "LICENSE.txt") (Join-Path $licensesRoot "sdl2.txt")
|
||||
Copy-RequiredFile (Join-Path $angleRoot "LICENSE") (Join-Path $licensesRoot "angle.txt")
|
||||
foreach ($license in $metadata.sources.vcpkg.licenses.PSObject.Properties) {
|
||||
Copy-RequiredFile `
|
||||
(Join-Path $vcpkgInstalled "share\$($license.Name)\copyright") `
|
||||
(Join-Path $licensesRoot $license.Value)
|
||||
}
|
||||
|
||||
Write-Host "Updating dependency hashes..."
|
||||
Update-Manifest
|
||||
& (Join-Path $PSScriptRoot "verify-dependencies.ps1") -Manifest $manifestPath
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
throw "Dependency verification failed with exit code $LASTEXITCODE."
|
||||
}
|
||||
|
||||
if (-not $SkipPackage) {
|
||||
Write-Host "Building the Release package..."
|
||||
Invoke-Tool cmake --preset uwp-release -S $portRoot
|
||||
Invoke-Tool cmake --build --preset uwp-release
|
||||
}
|
||||
|
||||
Write-Host "UWP dependencies rebuilt and staged successfully."
|
||||
@@ -1,34 +0,0 @@
|
||||
param(
|
||||
[string]$Manifest = (Join-Path $PSScriptRoot "..\third_party\manifest.json")
|
||||
)
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
$manifestPath = (Resolve-Path $Manifest).Path
|
||||
$thirdPartyRoot = Split-Path -Parent $manifestPath
|
||||
$metadata = Get-Content -Raw $manifestPath | ConvertFrom-Json
|
||||
|
||||
foreach ($file in $metadata.files) {
|
||||
$path = Join-Path $thirdPartyRoot $file.path
|
||||
if (-not (Test-Path -LiteralPath $path -PathType Leaf)) {
|
||||
throw "Missing UWP dependency: $($file.path)"
|
||||
}
|
||||
|
||||
$stream = [System.IO.File]::OpenRead($path)
|
||||
try {
|
||||
$sha256 = [System.Security.Cryptography.SHA256]::Create()
|
||||
try {
|
||||
$hash = $sha256.ComputeHash($stream)
|
||||
$actual = [System.BitConverter]::ToString($hash).Replace("-", "")
|
||||
} finally {
|
||||
$sha256.Dispose()
|
||||
}
|
||||
} finally {
|
||||
$stream.Dispose()
|
||||
}
|
||||
if ($actual -ne $file.sha256) {
|
||||
throw "UWP dependency hash mismatch: $($file.path)"
|
||||
}
|
||||
}
|
||||
|
||||
Write-Host "Verified $($metadata.files.Count) UWP dependency files."
|
||||
Vendored
+1
-1
@@ -8,4 +8,4 @@ This directory contains the complete x64 UWP Release dependency bundle used by t
|
||||
- `runtime` contains the codec, font, compression, and audio DLLs used by LÖVE.
|
||||
- `licenses` contains the corresponding third party notices.
|
||||
|
||||
`manifest.json` pins the source revisions and SHA-256 hashes. Run `../scripts/verify-dependencies.ps1` after updating any dependency.
|
||||
`manifest.json` pins the source revisions and SHA-256 hashes. Run `scripts/xbox-uwp/verify_dependencies.ps1` from the repository root after updating any dependency.
|
||||
|
||||
Vendored
+302
-302
@@ -90,88 +90,296 @@
|
||||
"sha256": "A05F99734F7C4822FEFC12B367AF21FD0976ED6608752FB1E1E80B6ECE7ECBBB"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_scancode.h",
|
||||
"sha256": "EB14F3CEDDE58358F6456D185F473D7551E8234DE260151AD0319861FF1444C2"
|
||||
"path": "angle/bin/libEGL.dll",
|
||||
"sha256": "B0E0C6BAC9D9F0F084DC8F56083A2EEFFB866C0629A64D52B5E33616B4F90CBE"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_rwops.h",
|
||||
"sha256": "10DA91C08E96E5FCA452E06E11029908A6F237356E4DB11AF1AD13FFA2E57A47"
|
||||
"path": "angle/bin/libGLESv2.dll",
|
||||
"sha256": "6DE6940EDB728396CBA6F3C0D79172A8EFD33E37671A13B1721C652EECEBF4C4"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_revision.h",
|
||||
"sha256": "C28DA498955466CEF76278184636A3297F103AE34D9B605394BA6FE1B75F1850"
|
||||
"path": "love/bin/love.dll",
|
||||
"sha256": "7B1BE4699AC950173474BB0C03B5DD52E1202ABA6F60C29E294957057F587692"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_render.h",
|
||||
"sha256": "A0CF0DB1A13D0DD0D8BFDC01FFB371E2B19BE36326F85058200AC9481876C7F0"
|
||||
"path": "love/bin/lua51.dll",
|
||||
"sha256": "08380FB9A7C8A8A85D3425C1FD6F1CB826D980FF31925453E353227E9A23BC70"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_rect.h",
|
||||
"sha256": "01DB368D4B7736E2358CD29EEC0D187D964CFD6182CFFAB57A938ADF73B6A418"
|
||||
"path": "love/lib/liblove.lib",
|
||||
"sha256": "C93A358D5EAE8BE3D74DDFDFA767657E96E95E0151F843FEB4E587CF2D89320A"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_quit.h",
|
||||
"sha256": "9C902ABAEA7560F98FC546BD35A04629A205D047DF5433FC30B0C1D81AF58B21"
|
||||
"path": "love/lib/lovestatic.lib",
|
||||
"sha256": "15FB3A9CB3C3CDAB8B33DE5B1D1F8D8FF6CE9719E9AA7BC2CF3D7B51CDCE0C98"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_power.h",
|
||||
"sha256": "FBBDF3FF13B21095623EDFC5659C1B76C6DBB1364A4DD14D8F9E5CF329048784"
|
||||
"path": "love/lib/lua51.lib",
|
||||
"sha256": "A4F4F0942A432B88A3541A185B3D3D5B4D58413B3CEEE10A2E48CAF9D8439759"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_platform.h",
|
||||
"sha256": "9CE62823791D7A16B9AD17AD11F4DE8DCBCDE7918F67BF6D1DD4FC625B69E50C"
|
||||
"path": "runtime/bin/brotlicommon.dll",
|
||||
"sha256": "6A1D267564FE5BE6D601C1F5301F45DD0D0CCBDA2AE8975CACA4424A9FD452AF"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_pixels.h",
|
||||
"sha256": "FEE61AEE337A3823E832F5C26B3000315D6EB95DA91BA20D4FB0B5BAC9D4967A"
|
||||
"path": "runtime/bin/brotlidec.dll",
|
||||
"sha256": "C12C983AEE4E7EF966982AD11D71B32456CB445B18B8E11D9A35E781619085E2"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_opengles2.h",
|
||||
"sha256": "73A3B042F7B3D296904BFF91268730D5180638F4EC1836D57258FE53EE60DF8B"
|
||||
"path": "runtime/bin/bz2.dll",
|
||||
"sha256": "28ADC0239EAF51D13F8C7075B8514420CAE92EFF14471EC6F5B56A11D9345F00"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_opengles2_khrplatform.h",
|
||||
"sha256": "7B1E01AAA7AD8F6FC34B5C7BDF79EBF5189BB09E2C4D2E79FC5D350623D11E83"
|
||||
"path": "runtime/bin/fmt.dll",
|
||||
"sha256": "B4ED319D0733EA619D11770558957AFBDF99021D86A4ED068628AE34426C6090"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_opengles2_gl2platform.h",
|
||||
"sha256": "4779BE999ACD1904458238F09C86983B7960AC40E612E05DB2DB97DB615F1E0F"
|
||||
"path": "runtime/bin/freetype.dll",
|
||||
"sha256": "3727B17849902FE12DED3C76BD71D2907C523CF67D1A7CB516025522E260F9D4"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_opengles2_gl2ext.h",
|
||||
"sha256": "4FC5B0034DCDE9C125922E3E70D01489A6B335076856EE660294E1A6305A3719"
|
||||
"path": "runtime/bin/libpng16.dll",
|
||||
"sha256": "9B3B823A59ABCB4BA43D1E6DB4C35855AE66384106E32FD5F9D486A7DECB81AF"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_opengles2_gl2.h",
|
||||
"sha256": "D6EC44B1D73F3AFCE3A20AC6976DB7FB3DAC656C5190F0B563E4CE90D79A15AA"
|
||||
"path": "runtime/bin/ogg.dll",
|
||||
"sha256": "283B0890599450AE4BE486C07241ECCC7B14B480465AF7F8D9F2A84528064A65"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_opengles.h",
|
||||
"sha256": "0542791816FCDD84B74D98347AC1B00A97BC6C2CDF31334CD9083789FFB6594A"
|
||||
"path": "runtime/bin/OpenAL32.dll",
|
||||
"sha256": "D37D04CDD1EEE2005ACF64B558DFB16F0A0D83991F3B2A75E5C69FF314054F8B"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_opengl.h",
|
||||
"sha256": "C4D2857E757B2B2A83D7531CBEDA19C383AD6D16648AB9B7544FC0A74EB2FF13"
|
||||
"path": "runtime/bin/theora.dll",
|
||||
"sha256": "C90101C9C169B68F4FA155E63C71F28B271BBB68649085C8ACEFB26816663857"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_opengl_glext.h",
|
||||
"sha256": "1ABB28891C9B0661B6FF3749DE2671DA5FE12BEB5BCB1833B2D6BDF5C89ECDF8"
|
||||
"path": "runtime/bin/theoradec.dll",
|
||||
"sha256": "53A5A3A0B24F72B7D8812DE4B78FD3BB222399B9293B577A8FCF80009B72F004"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_name.h",
|
||||
"sha256": "FDC6C648734220285056AD8B8273511C75D5BE00D17FC1EA3EB4C06526B13FA3"
|
||||
"path": "runtime/bin/vorbis.dll",
|
||||
"sha256": "A4B2D0A4C032A7E60AA297ADAE134E8A2C1BE61D7EC639CAA93AF85BF7EAC2C7"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_mutex.h",
|
||||
"sha256": "C5EF9A8AEB056422EF878672770E1F60AE965933693DF6D8EBD53D0E514A1794"
|
||||
"path": "runtime/bin/vorbisfile.dll",
|
||||
"sha256": "0BFFA35539F0A8233A8EFF4C6680F8A7CF3B9DBE3B437A3F94D5301B66A2F134"
|
||||
},
|
||||
{
|
||||
"path": "runtime/bin/z.dll",
|
||||
"sha256": "8B86502ADC15A13C0E136FB9D63AA6583C59AD93EC608A9A7C901757354744C3"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/bin/SDL2.dll",
|
||||
"sha256": "B02D13F77221A335AB9F21304F2B4E003FE59C6DF10F21BA6D49023016D35CA8"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/begin_code.h",
|
||||
"sha256": "9803DAB29FB4522CE3500AB789260E9622DF6307CE90F92AD20C1808E19C4E7B"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/close_code.h",
|
||||
"sha256": "4599E9CEDBA7451FF07A6306F0B7531BEED05B1C5A65B1A2613D1B771BE43FDA"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_assert.h",
|
||||
"sha256": "32FC342E0A5F3A55EA1CE2A5D9195E77215EDCB6F4595C0DC3674DCCA1CC81D8"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_atomic.h",
|
||||
"sha256": "C561CE8F94DE18CCB4F708BDA45880BA6D3C9F052E166BEB5DADC5544F35221E"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_audio.h",
|
||||
"sha256": "047AFC29591AC43A90F06169F67EE7D99A6256C6BBE5EFE5DE79A52565BB6853"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_bits.h",
|
||||
"sha256": "63D22D1C8FE0D83BBA5A49ABA9BB700592F14462F7F7BF87E5838064047E3FA9"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_blendmode.h",
|
||||
"sha256": "1985F81B886D9BC681821AF4F23D28E6E51BF51F21E5EF28CCC13BC8C7CDFBAE"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_clipboard.h",
|
||||
"sha256": "3E8C73FB9B3CA5A544B70B66B683B78DB53E1A187E066912A068C0ED7BB3E8CE"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_config.h",
|
||||
"sha256": "108A953419E1638AE2FF09148E2927C3AC4FF3E15B72A56FF41B542F356021BA"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_copying.h",
|
||||
"sha256": "3F90BE470C18F99F4AEF39444E9374EDBA166CFEB1B90F99F35286CC33924642"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_cpuinfo.h",
|
||||
"sha256": "FEE0C489ED4364C21FE0B726A47F72DF167FBCBF42CF569807B2BBF77DC30C54"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_egl.h",
|
||||
"sha256": "72C119F4F7EC30F13B03D3E33D2266CB012EE103F0AD1973786D84D538A0B53D"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_endian.h",
|
||||
"sha256": "7907CB3AB7B8D7BC99274F5AEF5294BEF215B01EA49D97226CBE6E911DE557D5"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_error.h",
|
||||
"sha256": "0931656A5825E5F1F319F2CD3F573FC527393BB02FA7A1ED3F7FAE6C790328BE"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_events.h",
|
||||
"sha256": "CEB7BC717342E652E2C432FD1DD08A5508575CEA6BD8615FB4DDEA63C071DDC4"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_filesystem.h",
|
||||
"sha256": "DCFAA010C73150E7B0D56F50F5ADB3FC2E35621091A55BC5436B2FB85FE71675"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_gamecontroller.h",
|
||||
"sha256": "C77C1D8287EE441843B9D8BE87B71252BDB1CE76B7BFC4FCFF46889AD8E9CFEC"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_gesture.h",
|
||||
"sha256": "A5A8F8BB8EFB26860FAA9694189AAF76DF1CDB7755CCD30A8599B46B237A5D82"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_guid.h",
|
||||
"sha256": "DA8FEF1D047B31E55D1B167DE301A806481B6948E7C2497779FD71934C45D5DB"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_haptic.h",
|
||||
"sha256": "4267B6F039BEA7AD0F5CB37C37D63D0704AF84F73A36D2680684FF302F49F153"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_hidapi.h",
|
||||
"sha256": "489A83D1073E528F82E821C23C515AF8B5A59357EC5AB132C854BB588648F59F"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_hints.h",
|
||||
"sha256": "96C1056E0734F019B1DAFED5129D4A9D36253559ED8C7577A23C188BB75A48C1"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_joystick.h",
|
||||
"sha256": "A39FC5DA97EDC94EABFF8616A413CF850EFB35D1DAF437A8CC16CAA837766482"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_keyboard.h",
|
||||
"sha256": "F68DFA4F784F0B22949A8DF94F3C3653EA01A03AE02297D17579EB9E7EA94054"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_keycode.h",
|
||||
"sha256": "291C769A05BC3E1EAD011DB3E07CB52415E1AA306F484904D203E94CBB3186CD"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_loadso.h",
|
||||
"sha256": "8D3653B7B774B406A289519C74AE695EB5B52D71060712A88FCE4C72D82B1BD3"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_locale.h",
|
||||
"sha256": "C4A663CE8EA4CA22F961796CAE644A04FC521FA2D0681333F7DA8A581909560C"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_log.h",
|
||||
"sha256": "3342CB31280C2DBF0E5809B03E5499F0CF5EDF193EFA5E3C5B17814526A92033"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_main.h",
|
||||
"sha256": "622FFCD0E7FE0C755A987C5EB9DAD6B3672774026B8250B66AD3C40D3A4DDA9A"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_messagebox.h",
|
||||
"sha256": "65DF549CAB0A515145AE55325C447159AE1D60171331A7508EAC06034D25C972"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_metal.h",
|
||||
"sha256": "1F3D0251522B735B0E37677EB1A0594440599FBBB2AF86BBB508606CCA001A06"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_misc.h",
|
||||
"sha256": "5D5E4B42481A5EF44EC9D66159E88426BE5632262731A3C3B223277771D30006"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_mouse.h",
|
||||
"sha256": "66B5353387D011A54B232931E86121CB5551E251B9491B9ED15AFE293D5856FF"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_misc.h",
|
||||
"sha256": "5D5E4B42481A5EF44EC9D66159E88426BE5632262731A3C3B223277771D30006"
|
||||
"path": "sdl2/include/SDL2/SDL_mutex.h",
|
||||
"sha256": "C5EF9A8AEB056422EF878672770E1F60AE965933693DF6D8EBD53D0E514A1794"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_name.h",
|
||||
"sha256": "FDC6C648734220285056AD8B8273511C75D5BE00D17FC1EA3EB4C06526B13FA3"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_opengl_glext.h",
|
||||
"sha256": "1ABB28891C9B0661B6FF3749DE2671DA5FE12BEB5BCB1833B2D6BDF5C89ECDF8"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_opengl.h",
|
||||
"sha256": "C4D2857E757B2B2A83D7531CBEDA19C383AD6D16648AB9B7544FC0A74EB2FF13"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_opengles.h",
|
||||
"sha256": "0542791816FCDD84B74D98347AC1B00A97BC6C2CDF31334CD9083789FFB6594A"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_opengles2_gl2.h",
|
||||
"sha256": "D6EC44B1D73F3AFCE3A20AC6976DB7FB3DAC656C5190F0B563E4CE90D79A15AA"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_opengles2_gl2ext.h",
|
||||
"sha256": "4FC5B0034DCDE9C125922E3E70D01489A6B335076856EE660294E1A6305A3719"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_opengles2_gl2platform.h",
|
||||
"sha256": "4779BE999ACD1904458238F09C86983B7960AC40E612E05DB2DB97DB615F1E0F"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_opengles2_khrplatform.h",
|
||||
"sha256": "7B1E01AAA7AD8F6FC34B5C7BDF79EBF5189BB09E2C4D2E79FC5D350623D11E83"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_opengles2.h",
|
||||
"sha256": "73A3B042F7B3D296904BFF91268730D5180638F4EC1836D57258FE53EE60DF8B"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_pixels.h",
|
||||
"sha256": "FEE61AEE337A3823E832F5C26B3000315D6EB95DA91BA20D4FB0B5BAC9D4967A"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_platform.h",
|
||||
"sha256": "9CE62823791D7A16B9AD17AD11F4DE8DCBCDE7918F67BF6D1DD4FC625B69E50C"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_power.h",
|
||||
"sha256": "FBBDF3FF13B21095623EDFC5659C1B76C6DBB1364A4DD14D8F9E5CF329048784"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_quit.h",
|
||||
"sha256": "9C902ABAEA7560F98FC546BD35A04629A205D047DF5433FC30B0C1D81AF58B21"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_rect.h",
|
||||
"sha256": "01DB368D4B7736E2358CD29EEC0D187D964CFD6182CFFAB57A938ADF73B6A418"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_render.h",
|
||||
"sha256": "A0CF0DB1A13D0DD0D8BFDC01FFB371E2B19BE36326F85058200AC9481876C7F0"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_revision.h",
|
||||
"sha256": "EF28EADA36B000C710B033317A37677B5484A4DE224547CB7293A77FA0C97195"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_rwops.h",
|
||||
"sha256": "10DA91C08E96E5FCA452E06E11029908A6F237356E4DB11AF1AD13FFA2E57A47"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_scancode.h",
|
||||
"sha256": "EB14F3CEDDE58358F6456D185F473D7551E8234DE260151AD0319861FF1444C2"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_sensor.h",
|
||||
@@ -190,305 +398,97 @@
|
||||
"sha256": "92299233370D645F78D9C655CE7F102C16F9D4DDDE28A59BD82A962C49B51D94"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_vulkan.h",
|
||||
"sha256": "98ED6B3D354191019AE208FC861799237BA8FFB11FA6BD41B3569E6CE05555B8"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_video.h",
|
||||
"sha256": "82AB63FF37834CD4BFCEE490B8E37FB892BBB0B31A1A7913EC13C329271CA5FF"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_version.h",
|
||||
"sha256": "EE97570D0D6507B4687076336C07FD4A7FA1F5E7986C9B61893A279950FEBCE8"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_types.h",
|
||||
"sha256": "ED0C92BED5EEC2648F744E8451F3AC5140C1EF11510175FA1B726273DBDED9ED"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_touch.h",
|
||||
"sha256": "4E5D7A083BBF5237DAF5CCF06FAED3FAE81B1CAA693E27841EBF4EC9BF8FF769"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_timer.h",
|
||||
"sha256": "D0497AD3D75701613A227134D63FDCBC62ED72F645153D52753E386EE4B498C7"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_thread.h",
|
||||
"sha256": "0E546047DD407CA0E1D2D686CF2650AC77A987047184E3645F6BA2EC958DDC5C"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_test.h",
|
||||
"sha256": "55E453735FB6A14CF350F663E8C7BC9AA273DB95BB31BCF3ABBFB5B3A91A414E"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_test_random.h",
|
||||
"sha256": "1D8C7987AE39B74D83F40FB54394FD32C61037716C77EBCAF7CE87788934C035"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_test_memory.h",
|
||||
"sha256": "556F676637FBB1A85F1998545C59ADDCA358B8B95C71812337B370184F27483F"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_metal.h",
|
||||
"sha256": "1F3D0251522B735B0E37677EB1A0594440599FBBB2AF86BBB508606CCA001A06"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_test_md5.h",
|
||||
"sha256": "BE73865B584B5EB207CAB3D8DCFF6AD057286B75053B547B0238DF275E282491"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_test_images.h",
|
||||
"sha256": "35E7AD856A201FBAAFE7EC3FC48DB47FB5D9452C292267F8936AEC5E5C77B81D"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_test_harness.h",
|
||||
"sha256": "30B9CCB36E07FF0442429A27540F6A796AEE073355B538BD50EF0B98CC47982E"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_test_fuzzer.h",
|
||||
"sha256": "494E0E49882A9C2745D07DA7B04761D8D992DD90A7A29DD34B605051ED8DCEE5"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_test_font.h",
|
||||
"sha256": "B0B7E6AC8BCF7B9E5BF28695B05D3A084CD530C90322CBC9A0B198114B174231"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_test_crc32.h",
|
||||
"sha256": "74CB4C2F7F7130D6048A2C716260D6403620F0E358FA928136ED3560BF71A378"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_test_compare.h",
|
||||
"sha256": "713AF284D8520E910D94090396BFD2DB2B2292096EDD93E4D60AA69163B9C510"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_test_common.h",
|
||||
"sha256": "B619CC3020FFDC8F8A12F5D9D4AF8B83E9B7C6C3BFC05C6502933C4B3F0103DE"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_test_assert.h",
|
||||
"sha256": "FE826FEB054929284764718C67AE95B920729AE1336FFEEC88A23D611E6498F0"
|
||||
"path": "sdl2/include/SDL2/SDL_system.h",
|
||||
"sha256": "FFC5F3662A85F795C0B2E2B87B9FBF493BCEEDA4AACF7721A68225C5E318CA67"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_syswm.h",
|
||||
"sha256": "34FEC1A5F1089BD395EE11C3A25AD0FC10E7ABC56D4A77CC6F17EB9E4E8A9607"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_system.h",
|
||||
"sha256": "FFC5F3662A85F795C0B2E2B87B9FBF493BCEEDA4AACF7721A68225C5E318CA67"
|
||||
"path": "sdl2/include/SDL2/SDL_test_assert.h",
|
||||
"sha256": "FE826FEB054929284764718C67AE95B920729AE1336FFEEC88A23D611E6498F0"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_test_common.h",
|
||||
"sha256": "B619CC3020FFDC8F8A12F5D9D4AF8B83E9B7C6C3BFC05C6502933C4B3F0103DE"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_test_compare.h",
|
||||
"sha256": "713AF284D8520E910D94090396BFD2DB2B2292096EDD93E4D60AA69163B9C510"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_test_crc32.h",
|
||||
"sha256": "74CB4C2F7F7130D6048A2C716260D6403620F0E358FA928136ED3560BF71A378"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_test_font.h",
|
||||
"sha256": "B0B7E6AC8BCF7B9E5BF28695B05D3A084CD530C90322CBC9A0B198114B174231"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_test_fuzzer.h",
|
||||
"sha256": "494E0E49882A9C2745D07DA7B04761D8D992DD90A7A29DD34B605051ED8DCEE5"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_test_harness.h",
|
||||
"sha256": "30B9CCB36E07FF0442429A27540F6A796AEE073355B538BD50EF0B98CC47982E"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_test_images.h",
|
||||
"sha256": "35E7AD856A201FBAAFE7EC3FC48DB47FB5D9452C292267F8936AEC5E5C77B81D"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_test_log.h",
|
||||
"sha256": "3A8736E6D757666420616F83E7929493FCBE816A0CDDF10347F3446818870BE8"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_messagebox.h",
|
||||
"sha256": "65DF549CAB0A515145AE55325C447159AE1D60171331A7508EAC06034D25C972"
|
||||
"path": "sdl2/include/SDL2/SDL_test_md5.h",
|
||||
"sha256": "BE73865B584B5EB207CAB3D8DCFF6AD057286B75053B547B0238DF275E282491"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_main.h",
|
||||
"sha256": "622FFCD0E7FE0C755A987C5EB9DAD6B3672774026B8250B66AD3C40D3A4DDA9A"
|
||||
"path": "sdl2/include/SDL2/SDL_test_memory.h",
|
||||
"sha256": "556F676637FBB1A85F1998545C59ADDCA358B8B95C71812337B370184F27483F"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_log.h",
|
||||
"sha256": "3342CB31280C2DBF0E5809B03E5499F0CF5EDF193EFA5E3C5B17814526A92033"
|
||||
"path": "sdl2/include/SDL2/SDL_test_random.h",
|
||||
"sha256": "1D8C7987AE39B74D83F40FB54394FD32C61037716C77EBCAF7CE87788934C035"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/begin_code.h",
|
||||
"sha256": "9803DAB29FB4522CE3500AB789260E9622DF6307CE90F92AD20C1808E19C4E7B"
|
||||
"path": "sdl2/include/SDL2/SDL_test.h",
|
||||
"sha256": "55E453735FB6A14CF350F663E8C7BC9AA273DB95BB31BCF3ABBFB5B3A91A414E"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/bin/SDL2.dll",
|
||||
"sha256": "B02D13F77221A335AB9F21304F2B4E003FE59C6DF10F21BA6D49023016D35CA8"
|
||||
"path": "sdl2/include/SDL2/SDL_thread.h",
|
||||
"sha256": "0E546047DD407CA0E1D2D686CF2650AC77A987047184E3645F6BA2EC958DDC5C"
|
||||
},
|
||||
{
|
||||
"path": "runtime/bin/z.dll",
|
||||
"sha256": "8B86502ADC15A13C0E136FB9D63AA6583C59AD93EC608A9A7C901757354744C3"
|
||||
"path": "sdl2/include/SDL2/SDL_timer.h",
|
||||
"sha256": "D0497AD3D75701613A227134D63FDCBC62ED72F645153D52753E386EE4B498C7"
|
||||
},
|
||||
{
|
||||
"path": "runtime/bin/vorbisfile.dll",
|
||||
"sha256": "0BFFA35539F0A8233A8EFF4C6680F8A7CF3B9DBE3B437A3F94D5301B66A2F134"
|
||||
"path": "sdl2/include/SDL2/SDL_touch.h",
|
||||
"sha256": "4E5D7A083BBF5237DAF5CCF06FAED3FAE81B1CAA693E27841EBF4EC9BF8FF769"
|
||||
},
|
||||
{
|
||||
"path": "runtime/bin/vorbis.dll",
|
||||
"sha256": "A4B2D0A4C032A7E60AA297ADAE134E8A2C1BE61D7EC639CAA93AF85BF7EAC2C7"
|
||||
"path": "sdl2/include/SDL2/SDL_types.h",
|
||||
"sha256": "ED0C92BED5EEC2648F744E8451F3AC5140C1EF11510175FA1B726273DBDED9ED"
|
||||
},
|
||||
{
|
||||
"path": "runtime/bin/theoradec.dll",
|
||||
"sha256": "53A5A3A0B24F72B7D8812DE4B78FD3BB222399B9293B577A8FCF80009B72F004"
|
||||
"path": "sdl2/include/SDL2/SDL_version.h",
|
||||
"sha256": "EE97570D0D6507B4687076336C07FD4A7FA1F5E7986C9B61893A279950FEBCE8"
|
||||
},
|
||||
{
|
||||
"path": "runtime/bin/theora.dll",
|
||||
"sha256": "C90101C9C169B68F4FA155E63C71F28B271BBB68649085C8ACEFB26816663857"
|
||||
"path": "sdl2/include/SDL2/SDL_video.h",
|
||||
"sha256": "82AB63FF37834CD4BFCEE490B8E37FB892BBB0B31A1A7913EC13C329271CA5FF"
|
||||
},
|
||||
{
|
||||
"path": "runtime/bin/OpenAL32.dll",
|
||||
"sha256": "D37D04CDD1EEE2005ACF64B558DFB16F0A0D83991F3B2A75E5C69FF314054F8B"
|
||||
},
|
||||
{
|
||||
"path": "runtime/bin/ogg.dll",
|
||||
"sha256": "283B0890599450AE4BE486C07241ECCC7B14B480465AF7F8D9F2A84528064A65"
|
||||
},
|
||||
{
|
||||
"path": "runtime/bin/libpng16.dll",
|
||||
"sha256": "9B3B823A59ABCB4BA43D1E6DB4C35855AE66384106E32FD5F9D486A7DECB81AF"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/close_code.h",
|
||||
"sha256": "4599E9CEDBA7451FF07A6306F0B7531BEED05B1C5A65B1A2613D1B771BE43FDA"
|
||||
},
|
||||
{
|
||||
"path": "runtime/bin/freetype.dll",
|
||||
"sha256": "3727B17849902FE12DED3C76BD71D2907C523CF67D1A7CB516025522E260F9D4"
|
||||
},
|
||||
{
|
||||
"path": "runtime/bin/bz2.dll",
|
||||
"sha256": "28ADC0239EAF51D13F8C7075B8514420CAE92EFF14471EC6F5B56A11D9345F00"
|
||||
},
|
||||
{
|
||||
"path": "runtime/bin/brotlidec.dll",
|
||||
"sha256": "C12C983AEE4E7EF966982AD11D71B32456CB445B18B8E11D9A35E781619085E2"
|
||||
},
|
||||
{
|
||||
"path": "runtime/bin/brotlicommon.dll",
|
||||
"sha256": "6A1D267564FE5BE6D601C1F5301F45DD0D0CCBDA2AE8975CACA4424A9FD452AF"
|
||||
},
|
||||
{
|
||||
"path": "love/lib/lua51.lib",
|
||||
"sha256": "A4F4F0942A432B88A3541A185B3D3D5B4D58413B3CEEE10A2E48CAF9D8439759"
|
||||
},
|
||||
{
|
||||
"path": "love/lib/lovestatic.lib",
|
||||
"sha256": "15FB3A9CB3C3CDAB8B33DE5B1D1F8D8FF6CE9719E9AA7BC2CF3D7B51CDCE0C98"
|
||||
},
|
||||
{
|
||||
"path": "love/lib/liblove.lib",
|
||||
"sha256": "C93A358D5EAE8BE3D74DDFDFA767657E96E95E0151F843FEB4E587CF2D89320A"
|
||||
},
|
||||
{
|
||||
"path": "love/bin/lua51.dll",
|
||||
"sha256": "08380FB9A7C8A8A85D3425C1FD6F1CB826D980FF31925453E353227E9A23BC70"
|
||||
},
|
||||
{
|
||||
"path": "love/bin/love.dll",
|
||||
"sha256": "7B1BE4699AC950173474BB0C03B5DD52E1202ABA6F60C29E294957057F587692"
|
||||
},
|
||||
{
|
||||
"path": "angle/bin/libGLESv2.dll",
|
||||
"sha256": "6DE6940EDB728396CBA6F3C0D79172A8EFD33E37671A13B1721C652EECEBF4C4"
|
||||
},
|
||||
{
|
||||
"path": "angle/bin/libEGL.dll",
|
||||
"sha256": "B0E0C6BAC9D9F0F084DC8F56083A2EEFFB866C0629A64D52B5E33616B4F90CBE"
|
||||
},
|
||||
{
|
||||
"path": "runtime/bin/fmt.dll",
|
||||
"sha256": "B4ED319D0733EA619D11770558957AFBDF99021D86A4ED068628AE34426C6090"
|
||||
"path": "sdl2/include/SDL2/SDL_vulkan.h",
|
||||
"sha256": "98ED6B3D354191019AE208FC861799237BA8FFB11FA6BD41B3569E6CE05555B8"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL.h",
|
||||
"sha256": "952E89E1DC4E0DD1A7BEA6A153DF632B8CDB6E433A9B3B0702C5FFE15B9B9360"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_assert.h",
|
||||
"sha256": "32FC342E0A5F3A55EA1CE2A5D9195E77215EDCB6F4595C0DC3674DCCA1CC81D8"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_audio.h",
|
||||
"sha256": "047AFC29591AC43A90F06169F67EE7D99A6256C6BBE5EFE5DE79A52565BB6853"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_locale.h",
|
||||
"sha256": "C4A663CE8EA4CA22F961796CAE644A04FC521FA2D0681333F7DA8A581909560C"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_loadso.h",
|
||||
"sha256": "8D3653B7B774B406A289519C74AE695EB5B52D71060712A88FCE4C72D82B1BD3"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_keycode.h",
|
||||
"sha256": "291C769A05BC3E1EAD011DB3E07CB52415E1AA306F484904D203E94CBB3186CD"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_keyboard.h",
|
||||
"sha256": "F68DFA4F784F0B22949A8DF94F3C3653EA01A03AE02297D17579EB9E7EA94054"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_joystick.h",
|
||||
"sha256": "A39FC5DA97EDC94EABFF8616A413CF850EFB35D1DAF437A8CC16CAA837766482"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_hints.h",
|
||||
"sha256": "96C1056E0734F019B1DAFED5129D4A9D36253559ED8C7577A23C188BB75A48C1"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_hidapi.h",
|
||||
"sha256": "489A83D1073E528F82E821C23C515AF8B5A59357EC5AB132C854BB588648F59F"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_haptic.h",
|
||||
"sha256": "4267B6F039BEA7AD0F5CB37C37D63D0704AF84F73A36D2680684FF302F49F153"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_guid.h",
|
||||
"sha256": "DA8FEF1D047B31E55D1B167DE301A806481B6948E7C2497779FD71934C45D5DB"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_gesture.h",
|
||||
"sha256": "A5A8F8BB8EFB26860FAA9694189AAF76DF1CDB7755CCD30A8599B46B237A5D82"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_atomic.h",
|
||||
"sha256": "C561CE8F94DE18CCB4F708BDA45880BA6D3C9F052E166BEB5DADC5544F35221E"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_gamecontroller.h",
|
||||
"sha256": "C77C1D8287EE441843B9D8BE87B71252BDB1CE76B7BFC4FCFF46889AD8E9CFEC"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_events.h",
|
||||
"sha256": "CEB7BC717342E652E2C432FD1DD08A5508575CEA6BD8615FB4DDEA63C071DDC4"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_error.h",
|
||||
"sha256": "0931656A5825E5F1F319F2CD3F573FC527393BB02FA7A1ED3F7FAE6C790328BE"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_endian.h",
|
||||
"sha256": "7907CB3AB7B8D7BC99274F5AEF5294BEF215B01EA49D97226CBE6E911DE557D5"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_egl.h",
|
||||
"sha256": "72C119F4F7EC30F13B03D3E33D2266CB012EE103F0AD1973786D84D538A0B53D"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_cpuinfo.h",
|
||||
"sha256": "FEE0C489ED4364C21FE0B726A47F72DF167FBCBF42CF569807B2BBF77DC30C54"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_copying.h",
|
||||
"sha256": "3F90BE470C18F99F4AEF39444E9374EDBA166CFEB1B90F99F35286CC33924642"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_config.h",
|
||||
"sha256": "1B33FCD93DEFBC0B0C396FB5BC98DE5CAD0868A347417167C0D8CA2C68A823DA"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_clipboard.h",
|
||||
"sha256": "3E8C73FB9B3CA5A544B70B66B683B78DB53E1A187E066912A068C0ED7BB3E8CE"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_blendmode.h",
|
||||
"sha256": "1985F81B886D9BC681821AF4F23D28E6E51BF51F21E5EF28CCC13BC8C7CDFBAE"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_bits.h",
|
||||
"sha256": "63D22D1C8FE0D83BBA5A49ABA9BB700592F14462F7F7BF87E5838064047E3FA9"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/include/SDL2/SDL_filesystem.h",
|
||||
"sha256": "DCFAA010C73150E7B0D56F50F5ADB3FC2E35621091A55BC5436B2FB85FE71675"
|
||||
},
|
||||
{
|
||||
"path": "sdl2/lib/SDL2.lib",
|
||||
"sha256": "37B330EE42407B405BD2432E79CB9B9036245309B3ACC445AD70CB8E555B7288"
|
||||
|
||||
Vendored
+1
-1
@@ -6,4 +6,4 @@ The bundled x64 UWP Release binaries use SDL 2.32.10 from the official `release-
|
||||
|
||||
`SDL2.dll`, `SDL2.lib`, and the headers must be updated together.
|
||||
|
||||
`ports/uwp/scripts/build-sdl2-angle.ps1` builds the source for x64 WindowsStore with GLES enabled and desktop OpenGL and Vulkan disabled. ANGLE supplies EGL and GLES at runtime.
|
||||
`scripts/xbox-uwp/build_sdl2_angle.ps1` builds the source for x64 WindowsStore with GLES enabled and desktop OpenGL and Vulkan disabled. ANGLE supplies EGL and GLES at runtime.
|
||||
|
||||
@@ -1,28 +1,19 @@
|
||||
diff --git a/src/joystick/SDL_gamecontroller.c b/src/joystick/SDL_gamecontroller.c
|
||||
index 035176b..04e1701 100644
|
||||
index 36e521e..4d1f171 100644
|
||||
--- a/src/joystick/SDL_gamecontroller.c
|
||||
+++ b/src/joystick/SDL_gamecontroller.c
|
||||
@@ -726,7 +726,12 @@ static ControllerMapping_t *SDL_CreateMappingForWGIController(SDL_JoystickGUID g
|
||||
}
|
||||
|
||||
SDL_strlcpy(mapping_string, "none,*,", sizeof(mapping_string));
|
||||
@@ -682,0 +683,4 @@ static ControllerMapping_t *SDL_CreateMappingForWGIController(SDL_JoystickGUID g
|
||||
+#ifdef __WINRT__
|
||||
+ /* Xbox WGI exposes the canonical SDL axis and hat layout. */
|
||||
+ SDL_strlcat(mapping_string, "a:b0,b:b1,x:b2,y:b3,back:b6,start:b7,leftstick:b8,rightstick:b9,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,lefttrigger:a2,rightx:a3,righty:a4,righttrigger:a5,", sizeof(mapping_string));
|
||||
+#else
|
||||
SDL_strlcat(mapping_string, "a:b0,b:b1,x:b2,y:b3,back:b6,start:b7,leftstick:b8,rightstick:b9,leftshoulder:b4,rightshoulder:b5,dpup:b10,dpdown:b12,dpleft:b13,dpright:b11,leftx:a1,lefty:a0~,rightx:a3,righty:a2~,lefttrigger:a4,righttrigger:a5,", sizeof(mapping_string));
|
||||
@@ -683,0 +688 @@ static ControllerMapping_t *SDL_CreateMappingForWGIController(SDL_JoystickGUID g
|
||||
+#endif
|
||||
|
||||
return SDL_PrivateAddMappingForGUID(guid, mapping_string, &existing, SDL_CONTROLLER_MAPPING_PRIORITY_DEFAULT);
|
||||
}
|
||||
diff --git a/src/joystick/windows/SDL_windows_gaming_input.c b/src/joystick/windows/SDL_windows_gaming_input.c
|
||||
index 6f01b4e..26b8811 100644
|
||||
index 9299ac5..9fce0a5 100644
|
||||
--- a/src/joystick/windows/SDL_windows_gaming_input.c
|
||||
+++ b/src/joystick/windows/SDL_windows_gaming_input.c
|
||||
@@ -731,10 +731,19 @@ static int WGI_JoystickOpen(SDL_Joystick *joystick, int device_index)
|
||||
__x_ABI_CWindows_CGaming_CInput_CIGameController_get_IsWireless(hwdata->gamecontroller, &wireless);
|
||||
}
|
||||
|
||||
@@ -793,4 +793,13 @@ static int WGI_JoystickOpen(SDL_Joystick *joystick, int device_index)
|
||||
- /* Initialize the joystick capabilities */
|
||||
- joystick->nbuttons = state->nbuttons;
|
||||
- joystick->naxes = state->naxes;
|
||||
@@ -40,13 +31,7 @@ index 6f01b4e..26b8811 100644
|
||||
+ joystick->naxes = state->naxes;
|
||||
+ joystick->nhats = state->nhats;
|
||||
+ }
|
||||
joystick->epowerlevel = wireless ? SDL_JOYSTICK_POWER_UNKNOWN : SDL_JOYSTICK_POWER_WIRED;
|
||||
|
||||
if (wireless && hwdata->battery) {
|
||||
@@ -872,6 +881,51 @@ static void WGI_JoystickUpdate(SDL_Joystick *joystick)
|
||||
{
|
||||
struct joystick_hwdata *hwdata = joystick->hwdata;
|
||||
HRESULT hr;
|
||||
@@ -933,0 +943,45 @@ static void WGI_JoystickUpdate(SDL_Joystick *joystick)
|
||||
+
|
||||
+#ifdef __WINRT__
|
||||
+ if (hwdata->gamepad) {
|
||||
@@ -92,13 +77,7 @@ index 6f01b4e..26b8811 100644
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
UINT32 nbuttons = SDL_min(joystick->nbuttons, SDL_MAX_UINT8);
|
||||
boolean *buttons = NULL;
|
||||
UINT32 nhats = SDL_min(joystick->nhats, SDL_MAX_UINT8);
|
||||
@@ -994,7 +1048,38 @@ static void WGI_JoystickQuit(void)
|
||||
|
||||
static SDL_bool WGI_JoystickGetGamepadMapping(int device_index, SDL_GamepadMapping *out)
|
||||
{
|
||||
@@ -1055,0 +1110,30 @@ static SDL_bool WGI_JoystickGetGamepadMapping(int device_index, SDL_GamepadMappi
|
||||
+#ifdef __WINRT__
|
||||
+ WindowsGamingInputControllerState *state = &wgi.controllers[device_index];
|
||||
+
|
||||
@@ -129,8 +108,5 @@ index 6f01b4e..26b8811 100644
|
||||
+ out->righttrigger = (SDL_InputMapping){ EMappingKind_Axis, 5 };
|
||||
+ return SDL_TRUE;
|
||||
+#else
|
||||
return SDL_FALSE;
|
||||
@@ -1056,0 +1141 @@ static SDL_bool WGI_JoystickGetGamepadMapping(int device_index, SDL_GamepadMappi
|
||||
+#endif
|
||||
}
|
||||
|
||||
SDL_JoystickDriver SDL_WGI_JoystickDriver = {
|
||||
|
||||
Reference in New Issue
Block a user