diff --git a/.github/workflows/ci-windows-vcpkg.yml b/.github/workflows/ci-windows-vcpkg.yml new file mode 100644 index 0000000000..8ffb5e0955 --- /dev/null +++ b/.github/workflows/ci-windows-vcpkg.yml @@ -0,0 +1,94 @@ +# This is a copy of ci-windows.yml for installed dependencies. It defers in the following ways: +# +# * vcpkg is used to install dependencies that are packaged + +name: CI Windows Installed +on: [push, pull_request] + +permissions: + contents: read + +# Cancel the workflow if a new one is triggered from the same PR, branch, or tag, except on main. +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} + +jobs: + build-static: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [windows-latest] + + steps: + - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 + - name: Setup Visual Studio shell + if: runner.os == 'Windows' + uses: egor-tensin/vs-shell@9a932a62d05192eae18ca370155cf877eecc2202 # v2.1 + - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5.1.0 + with: + python-version: '3.x' + - uses: actions-rs/toolchain@16499b5e05bf2e26879000db0c1d13f7e13fa3af # v1.0.7 + with: + profile: minimal + toolchain: stable + override: true + + - name: Cache external dependencies + id: cache-ext + uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 + with: + path: ext, build/_deps + key: ${{ runner.os }}-vcpkg-${{ hashFiles('cmake/Modules/*', 'ext/*.cmd', 'ext/*.sh') }} + - name: Install cargo-c + run: | + $LINK = "https://github.com/lu-zero/cargo-c/releases/latest/download" + $CARGO_C_FILE = "cargo-c-windows-msvc" + curl -LO "$LINK/$CARGO_C_FILE.zip" + 7z e -y "$CARGO_C_FILE.zip" -o"${env:USERPROFILE}\.cargo\bin" + - name: Print cmake version + run: cmake --version + - uses: ilammy/setup-nasm@13cbeb366c45c4379d3478cdcbadd8295feb5028 # v1.5.1 + - uses: seanmiddleditch/gha-setup-ninja@8b297075da4cd2a5f1fd21fe011b499edf06e9d2 # v4 + - name: Print ImageMagick version + run: magick --version + - name: vcpkg build + uses: johnwason/vcpkg-action@v6 + id: vcpkg + with: + pkgs: aom dav1d libjpeg-turbo libpng libxml2 libyuv zlib + triplet: x64-windows-release + token: ${{ github.token }} + github-binarycache: true + cache-key: ${{ hashFiles('cmake/Modules/*', 'ext/*.cmd', 'ext/*.sh') }} + - name: Prepare libavif (cmake) + run: > + cmake .. ${{ steps.vcpkg.outputs.vcpkg-cmake-config }} -G Ninja -S ./ -B build + -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF + -DAVIF_CODEC_AOM=SYSTEM -DAVIF_CODEC_DAV1D=SYSTEM + -DAVIF_CODEC_RAV1E=LOCAL -DAVIF_CODEC_SVT=LOCAL + -DAVIF_CODEC_LIBGAV1=LOCAL + -DAVIF_JPEG=SYSTEM -DAVIF_LIBSHARPYUV=LOCAL -DAVIF_LIBXML2=SYSTEM + -DAVIF_LIBYUV=SYSTEM -DAVIF_ZLIBPNG=SYSTEM + -DAVIF_BUILD_EXAMPLES=ON -DAVIF_BUILD_APPS=ON + -DAVIF_BUILD_TESTS=ON -DAVIF_ENABLE_GTEST=ON -DAVIF_GTEST=LOCAL + -DAVIF_ENABLE_EXPERIMENTAL_YCGCO_R=ON + -DAVIF_ENABLE_EXPERIMENTAL_GAIN_MAP=ON + -DAVIF_ENABLE_EXPERIMENTAL_AVIR=ON + -DAVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM=ON + -DAVIF_ENABLE_WERROR=ON + - name: Cache cargo registry + uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 + continue-on-error: true + with: + path: ~/.cargo/registry/cache + key: cargo-registry-${{ runner.os }}-${{ hashFiles('ext/rav1e/Cargo.lock') }}- + restore-keys: | + cargo-registry-${{ runner.os }}- + - name: Build libavif (ninja) + working-directory: ./build + run: ninja + - name: Run AVIF Tests + working-directory: ./build + run: ctest -j $Env:NUMBER_OF_PROCESSORS --output-on-failure diff --git a/cmake/Modules/Finddav1d.cmake b/cmake/Modules/Finddav1d.cmake index 1e4cabc84c..62dfb02b88 100644 --- a/cmake/Modules/Finddav1d.cmake +++ b/cmake/Modules/Finddav1d.cmake @@ -48,6 +48,8 @@ if(DAV1D_LIBRARY) else() add_library(dav1d::dav1d SHARED IMPORTED GLOBAL) endif() - set_target_properties(dav1d::dav1d PROPERTIES IMPORTED_LOCATION "${DAV1D_LIBRARY}" IMPORTED_SONAME dav1d) + set_target_properties( + dav1d::dav1d PROPERTIES IMPORTED_LOCATION "${DAV1D_LIBRARY}" IMPORTED_SONAME dav1d IMPORTED_IMPLIB "${DAV1D_LIBRARY}" + ) target_include_directories(dav1d::dav1d INTERFACE ${DAV1D_INCLUDE_DIR}) endif()