diff --git a/.github/workflows/build-toolchain.yml b/.github/workflows/build-toolchain.yml index 6dcad70e0de..e7494c8473f 100644 --- a/.github/workflows/build-toolchain.yml +++ b/.github/workflows/build-toolchain.yml @@ -112,20 +112,13 @@ jobs: run: | $baseline = (Get-Content vcpkg.json | ConvertFrom-Json)."builtin-baseline" - $msvc = $env:VCToolsVersion - if (-not $msvc) { $msvc = "unknown" } - - # Reduce churn: keep major.minor (e.g. 14.44) - $msvcMajorMinor = ($msvc -split '\.')[0..1] -join '.' - $triplet = "x86-windows" if ("${{ inputs.preset }}" -like "x64*") { $triplet = "x64-windows" } "baseline=$baseline" >> $env:GITHUB_OUTPUT - "msvc=$msvcMajorMinor" >> $env:GITHUB_OUTPUT "triplet=$triplet" >> $env:GITHUB_OUTPUT - Write-Host "vcpkg cache key parts: baseline=$baseline, msvc=$msvcMajorMinor, triplet=$triplet" + Write-Host "vcpkg cache key parts: baseline=$baseline, triplet=$triplet" - name: Restore vcpkg binary cache if: startsWith(inputs.preset, 'win32') @@ -133,10 +126,10 @@ jobs: uses: actions/cache/restore@v4 with: path: ${{ github.workspace }}\vcpkg-bincache - key: vcpkg-bincache-v2-${{ runner.os }}-msvc${{ steps.vcpkg_key.outputs.msvc }}-baseline${{ steps.vcpkg_key.outputs.baseline }}-${{ steps.vcpkg_key.outputs.triplet }} + key: vcpkg-bincache-v3-${{ runner.os }}-baseline${{ steps.vcpkg_key.outputs.baseline }}-${{ steps.vcpkg_key.outputs.triplet }}-${{ hashFiles('triplets/*.cmake') }} restore-keys: | - vcpkg-bincache-v2-${{ runner.os }}-msvc${{ steps.vcpkg_key.outputs.msvc }}-baseline${{ steps.vcpkg_key.outputs.baseline }}- - vcpkg-bincache-v2-${{ runner.os }}- + vcpkg-bincache-v3-${{ runner.os }}-baseline${{ steps.vcpkg_key.outputs.baseline }}- + vcpkg-bincache-v3-${{ runner.os }}- - name: Setup vcpkg uses: lukka/run-vcpkg@v11 @@ -157,6 +150,8 @@ jobs: "VCPKG_DEFAULT_BINARY_CACHE=$cacheDir" >> $env:GITHUB_ENV "VCPKG_BINARY_SOURCES=$env:VCPKG_BINARY_SOURCES" >> $env:GITHUB_ENV + "VCPKG_OVERLAY_TRIPLETS=${{ github.workspace }}\triplets" >> $env:GITHUB_ENV + "VCPKG_INSTALL_OPTIONS=--x-abi-tools-use-exact-versions" >> $env:GITHUB_ENV - name: Configure ${{ inputs.game }} with CMake Using ${{ inputs.preset }}${{ inputs.tools && '+t' || '' }}${{ inputs.extras && '+e' || '' }} Preset shell: pwsh @@ -186,7 +181,7 @@ jobs: uses: actions/cache/save@v4 with: path: ${{ github.workspace }}\vcpkg-bincache - key: vcpkg-bincache-v2-${{ runner.os }}-msvc${{ steps.vcpkg_key.outputs.msvc }}-baseline${{ steps.vcpkg_key.outputs.baseline }}-${{ steps.vcpkg_key.outputs.triplet }} + key: vcpkg-bincache-v3-${{ runner.os }}-baseline${{ steps.vcpkg_key.outputs.baseline }}-${{ steps.vcpkg_key.outputs.triplet }}-${{ hashFiles('triplets/*.cmake') }} - name: Collect ${{ inputs.game }} ${{ inputs.preset }}${{ inputs.tools && '+t' || '' }}${{ inputs.extras && '+e' || '' }} Artifact shell: pwsh diff --git a/CMakePresets.json b/CMakePresets.json index 3b0a69e7261..fb1da4c5cc8 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -83,7 +83,8 @@ "CMAKE_EXPORT_COMPILE_COMMANDS": "ON", "CMAKE_MSVC_DEBUG_INFORMATION_FORMAT": "$<$:Embedded>", "CMAKE_MSVC_RUNTIME_LIBRARY": "MultiThreaded$<$:Debug>DLL", - "CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" + "CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake", + "VCPKG_OVERLAY_TRIPLETS": "${sourceDir}/triplets" } }, { diff --git a/triplets/x86-windows.cmake b/triplets/x86-windows.cmake new file mode 100644 index 00000000000..106900a72d7 --- /dev/null +++ b/triplets/x86-windows.cmake @@ -0,0 +1,9 @@ +# Include the default x86-windows triplet +set(VCPKG_TARGET_ARCHITECTURE x86) +set(VCPKG_CRT_LINKAGE dynamic) +set(VCPKG_LIBRARY_LINKAGE dynamic) + +# Exclude compiler version from ABI hash so that weekly GitHub runner image +# updates don't invalidate the binary cache. Minor MSVC version bumps do not +# cause ABI incompatibilities for this project. +set(VCPKG_DISABLE_COMPILER_TRACKING ON)