Use common code for caching (#2174) #468
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# This is a copy of ci-unix-static.yml for Windows. It differs from ci-unix-static.yml as follows: | |
# | |
# * The os matrix consists of windows-latest only. | |
# * Installs Visual Studio in the os image. | |
# * Doesn't install cmake 3.17.x, because only cmake 3.18 or later, with the | |
# following bug fix, detects Visual Studio compilers correctly: | |
# https://gitlab.kitware.com/cmake/cmake/-/issues/20585 | |
# * Runs ext/*.cmd as Windows batch files rather than using bash. This is | |
# important for ext/svt.cmd, to prevent it from running ext/svt.sh. | |
# * Builds with local libjpeg (-DAVIF_JPEG=LOCAL). | |
# * Builds with local zlib and libpng (-DAVIF_ZLIBPNG=LOCAL). | |
name: CI Windows | |
on: | |
push: | |
pull_request: | |
paths: | |
- '.github/workflows/ci-windows.yml' | |
- '**CMakeLists.txt' | |
- 'cmake/**' | |
- 'ext/**' | |
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-windows: | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [windows-latest] | |
steps: | |
- uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 | |
- 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 | |
- uses: ./.github/actions/cache | |
with: | |
use-rust: true | |
- name: Print cmake version | |
run: cmake --version | |
- uses: ilammy/setup-nasm@13cbeb366c45c4379d3478cdcbadd8295feb5028 # v1.5.1 | |
- uses: seanmiddleditch/gha-setup-ninja@8b297075da4cd2a5f1fd21fe011b499edf06e9d2 # v4 | |
- run: pip install meson | |
- name: Print ImageMagick version | |
run: magick --version | |
- name: Build aom | |
if: steps.cache-ext.outputs.cache-hit != 'true' | |
working-directory: ./ext | |
run: ./aom.cmd | |
# Visual Studio 2022 has an issue starting at 17.8.0 which might cause | |
# AVX-512 instructions to be emitted in non-AVX-512 code. See | |
# https://github.com/AOMediaCodec/libavif/issues/2033#issuecomment-1960062751. | |
env: | |
CC: clang-cl | |
CXX: clang-cl | |
- name: Build libyuv | |
if: steps.cache-ext.outputs.cache-hit != 'true' | |
working-directory: ./ext | |
run: ./libyuv.cmd | |
# Use clang-cl to build libyuv. The assembly code in libyuv is written in the | |
# GCC inline assembly format. Visual C++ doesn't support GCC inline assembly. | |
env: | |
CC: clang-cl | |
CXX: clang-cl | |
- name: Prepare libavif (cmake) | |
run: > | |
cmake -G Ninja -S ./ -B build | |
-DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF | |
-DAVIF_CODEC_AOM=LOCAL -DAVIF_CODEC_DAV1D=LOCAL | |
-DAVIF_CODEC_RAV1E=LOCAL -DAVIF_CODEC_SVT=LOCAL | |
-DAVIF_CODEC_LIBGAV1=LOCAL | |
-DAVIF_JPEG=LOCAL -DAVIF_LIBSHARPYUV=LOCAL -DAVIF_LIBXML2=LOCAL | |
-DAVIF_LIBYUV=LOCAL -DAVIF_ZLIBPNG=LOCAL | |
-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_MINI=ON | |
-DAVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM=ON | |
-DAVIF_ENABLE_WERROR=ON | |
- 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 | |
- name: Check static link bundling | |
run: > | |
cl .\apps\avifenc.c .\apps\shared\*.c .\third_party\iccjpeg\iccjpeg.c /nologo | |
/DWIN32 /D_WINDOWS /MD /O2 /Ob2 | |
-I.\apps\shared -I.\include -I.\third_party\iccjpeg | |
-external:W0 | |
-external:I.\build\_deps\libpng-src | |
-external:I.\build\libjpeg\src\libjpeg | |
-external:I.\build\libjpeg\src\libjpeg-build | |
-external:I.\build\_deps\zlib-src | |
-external:I.\build\_deps\libpng | |
-external:I.\build\_deps\zlib | |
/link | |
build\libjpeg\src\libjpeg-build\jpeg-static.lib | |
build\_deps\libpng\libpng16_static.lib | |
build\_deps\zlib\zlibstatic.lib | |
build\avif.lib | |
ws2_32.lib ntdll.lib userenv.lib bcrypt.lib advapi32.lib | |
/out:avifenc.exe | |
.\avifenc.exe --help |