| # 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@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 |
| - uses: ./.github/actions/setup-windows |
| id: setup |
| with: |
| codec-aom: 'LOCAL' |
| codec-dav1d: 'LOCAL' |
| codec-rav1e: 'LOCAL' |
| |
| - name: Build libyuv |
| if: steps.setup.outputs.ext-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 |