From 9850897657d3b9041794509bc0d337537e437c87 Mon Sep 17 00:00:00 2001 From: Chuck Walbourn Date: Fri, 23 Aug 2024 10:57:12 -0700 Subject: [PATCH] Add VCPKG usage to GitHub Actions (#499) --- .github/workflows/main.yml | 14 +++--- .github/workflows/test.yml | 14 +++--- .github/workflows/vcpkg.yml | 92 +++++++++++++++++++++++++++++++++++ .gitignore | 1 + Auxiliary/DirectXTexEXR.cpp | 2 +- CMakePresets.json | 7 +++ build/CompilerAndLinker.cmake | 3 +- build/vcpkg.json | 11 +++++ 8 files changed, 128 insertions(+), 16 deletions(-) create mode 100644 .github/workflows/vcpkg.yml create mode 100644 build/vcpkg.json diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index d652480..9af1d23 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -30,7 +30,7 @@ jobs: matrix: os: [windows-2019, windows-2022] - build_type: [x64-Debug, x64-Release, x64-Debug-Clang, x64-Release-Clang] + build_type: [x64-Debug, x64-Release] arch: [amd64] include: - os: windows-2019 @@ -39,18 +39,18 @@ jobs: - os: windows-2019 build_type: x86-Release arch: amd64_x86 - - os: windows-2019 - build_type: x86-Debug-Clang - arch: amd64_x86 - - os: windows-2019 - build_type: x86-Release-Clang - arch: amd64_x86 - os: windows-2022 build_type: x86-Debug arch: amd64_x86 - os: windows-2022 build_type: x86-Release arch: amd64_x86 + - os: windows-2022 + build_type: x64-Debug-Clang + arch: amd64 + - os: windows-2022 + build_type: x64-Release-Clang + arch: amd64 - os: windows-2022 build_type: x86-Debug-Clang arch: amd64_x86 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index dd65885..330494e 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -34,7 +34,7 @@ jobs: matrix: os: [windows-2019, windows-2022] - build_type: [x64-Debug, x64-Release, x64-Debug-Clang, x64-Release-Clang] + build_type: [x64-Debug, x64-Release] arch: [amd64] include: - os: windows-2019 @@ -43,18 +43,18 @@ jobs: - os: windows-2019 build_type: x86-Release arch: amd64_x86 - - os: windows-2019 - build_type: x86-Debug-Clang - arch: amd64_x86 - - os: windows-2019 - build_type: x86-Release-Clang - arch: amd64_x86 - os: windows-2022 build_type: x86-Debug arch: amd64_x86 - os: windows-2022 build_type: x86-Release arch: amd64_x86 + - os: windows-2022 + build_type: x64-Debug-Clang + arch: amd64 + - os: windows-2022 + build_type: x64-Release-Clang + arch: amd64 - os: windows-2022 build_type: x86-Debug-Clang arch: amd64_x86 diff --git a/.github/workflows/vcpkg.yml b/.github/workflows/vcpkg.yml new file mode 100644 index 0000000..973548f --- /dev/null +++ b/.github/workflows/vcpkg.yml @@ -0,0 +1,92 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# +# http://go.microsoft.com/fwlink/?LinkId=248926 + +name: 'CMake (Windows using VCPKG)' + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + paths-ignore: + - '*.md' + - LICENSE + - build/* + +jobs: + build: + runs-on: ${{ matrix.os }} + + strategy: + fail-fast: false + + matrix: + os: [windows-2019, windows-2022] + build_type: [x64-Debug-VCPKG] + arch: [amd64] + include: + - os: windows-2022 + build_type: x64-Debug-Clang-VCPKG + arch: amd64 + - os: windows-2022 + build_type: x86-Debug-VCPKG + arch: amd64_x86 + - os: windows-2022 + build_type: arm64-Debug-VCPKG + arch: amd64_arm64 + + steps: + - uses: actions/checkout@v4 + + - name: 'Install Ninja' + run: choco install ninja + + - uses: ilammy/msvc-dev-cmd@v1 + with: + arch: ${{ matrix.arch }} + + - name: 'Set triplet' + shell: pwsh + run: | + if ("${{ matrix.arch }}" -eq "amd64") + { + echo "VCPKG_DEFAULT_TRIPLET=x64-windows" >> $env:GITHUB_ENV + } + elseif ("${{ matrix.arch }}" -eq "amd64_x86") + { + echo "VCPKG_DEFAULT_TRIPLET=x86-windows" >> $env:GITHUB_ENV + } + elseif ("${{ matrix.arch }}" -eq "amd64_arm64") + { + if ("${{ matrix.build_type }}" -match "^arm64ec") + { + echo "VCPKG_DEFAULT_TRIPLET=arm64ec-windows" >> $env:GITHUB_ENV + } + else + { + echo "VCPKG_DEFAULT_TRIPLET=arm64-windows" >> $env:GITHUB_ENV + } + } + else + { + echo "::error Unknown architecture/build-type triplet mapping" + } + + - uses: lukka/run-vcpkg@v11 + with: + runVcpkgInstall: true + vcpkgJsonGlob: '**/build/vcpkg.json' + vcpkgGitCommitId: '7516a02de04e8f8ff4e4beb8f5bac0565f9bf9da' + + - name: 'Configure CMake' + working-directory: ${{ github.workspace }} + run: > + cmake --preset=${{ matrix.build_type }} -DBUILD_TESTING=OFF -DENABLE_OPENEXR_SUPPORT=ON -DENABLE_LIBJPEG_SUPPORT=ON -DENABLE_LIBPNG_SUPPORT=ON + -DCMAKE_TOOLCHAIN_FILE="${{ github.workspace }}/vcpkg/scripts/buildsystems/vcpkg.cmake" -DVCPKG_MANIFEST_DIR="${{ github.workspace }}/build" + -DVCPKG_TARGET_TRIPLET="${env:VCPKG_DEFAULT_TRIPLET}" + + - name: 'Build' + working-directory: ${{ github.workspace }} + run: cmake --build out\build\${{ matrix.build_type }} diff --git a/.gitignore b/.gitignore index 8e9cf76..19338fe 100644 --- a/.gitignore +++ b/.gitignore @@ -38,3 +38,4 @@ x64 /wiki /out /CMakeUserPresets.json +/build/vcpkg_installed diff --git a/Auxiliary/DirectXTexEXR.cpp b/Auxiliary/DirectXTexEXR.cpp index 16aa31f..1de9271 100644 --- a/Auxiliary/DirectXTexEXR.cpp +++ b/Auxiliary/DirectXTexEXR.cpp @@ -544,7 +544,7 @@ HRESULT DirectX::SaveToEXRFile(const Image& image, const wchar_t* szFile) { const uint64_t bytes = image.width * image.height; - if (bytes > UINT32_MAX) + if (bytes > static_cast(UINT32_MAX)) { return /* HRESULT_FROM_WIN32(ERROR_ARITHMETIC_OVERFLOW) */ static_cast(0x80070216L); } diff --git a/CMakePresets.json b/CMakePresets.json index b720be3..b806d08 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -304,6 +304,13 @@ { "name": "x86-Debug-Win7-Clang" , "description": "Clang/LLVM for x86 (Debug) for Windows 7", "inherits": [ "base", "x86", "Debug", "Clang", "Win7" ], "environment": { "CXXFLAGS": "-m32" } }, { "name": "x86-Release-Win7-Clang", "description": "Clang/LLVM for x86 (Release) for Windows 7", "inherits": [ "base", "x86", "Release", "Clang", "Win7" ], "environment": { "CXXFLAGS": "-m32" } }, + { "name": "x64-Debug-Clang-VCPKG" , "description": "Clang/LLVM for x64 (Debug) using VCPKG/OpenEXR", "inherits": [ "base", "x64", "Debug", "Clang", "VCPKG" ] }, + { "name": "x64-Release-Clang-VCPKG" , "description": "Clang/LLVM for x64 (Release) using VCPKG/OpenEXR", "inherits": [ "base", "x64", "Release", "Clang", "VCPKG" ] }, + { "name": "x86-Debug-Clang-VCPKG" , "description": "Clang/LLVM for x86 (Debug) using VCPKG/OpenEXR", "inherits": [ "base", "x86", "Debug", "Clang", "VCPKG" ], "environment": { "CXXFLAGS": "-m32" } }, + { "name": "x86-Release-Clang-VCPKG" , "description": "Clang/LLVM for x86 (Release) using VCPKG/OpenEXR", "inherits": [ "base", "x86", "Release", "Clang", "VCPKG" ], "environment": { "CXXFLAGS": "-m32" } }, + { "name": "arm64-Debug-Clang-VCPKG" , "description": "Clang/LLVM for AArch64 (Debug) using VCPKG/OpenEXR", "inherits": [ "base", "ARM64", "Debug", "Clang", "VCPKG" ], "environment": { "CXXFLAGS": "--target=arm64-pc-windows-msvc" } }, + { "name": "arm64-Release-Clang-VCPKG", "description": "Clang/LLVM for AArch64 (Release) using VCPKG/OpenEXR", "inherits": [ "base", "ARM64", "Release", "Clang", "VCPKG" ], "environment": { "CXXFLAGS": "--target=arm64-pc-windows-msvc" } }, + { "name": "x64-Debug-Clang-JPEG-PNG" , "description": "Clang/LLVM for x64 (Debug) with DX12", "inherits": [ "base", "x64", "Debug", "Clang", "VCPKG", "JPEG_PNG" ] }, { "name": "x64-Release-Clang-JPEG-PNG" , "description": "Clang/LLVM for x64 (Release) with DX12", "inherits": [ "base", "x64", "Release", "Clang", "VCPKG", "JPEG_PNG" ] }, diff --git a/build/CompilerAndLinker.cmake b/build/CompilerAndLinker.cmake index 8950d5c..1826feb 100644 --- a/build/CompilerAndLinker.cmake +++ b/build/CompilerAndLinker.cmake @@ -136,7 +136,8 @@ elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC") list(APPEND COMPILER_SWITCHES /Zc:lambda) endif() - if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.29) + if((CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.29) + AND (NOT VCPKG_TOOLCHAIN)) list(APPEND COMPILER_SWITCHES /external:W4) endif() diff --git a/build/vcpkg.json b/build/vcpkg.json new file mode 100644 index 0000000..552566d --- /dev/null +++ b/build/vcpkg.json @@ -0,0 +1,11 @@ +{ + "$schema": "https://raw.githubusercontent.com/microsoft/vcpkg-tool/main/docs/vcpkg.schema.json", + "dependencies": [ + "directxmath", + "directx-headers", + "openexr", + "libpng", + "libjpeg-turbo" + ] + } + \ No newline at end of file