forked from AOMediaCodec/libavif
-
Notifications
You must be signed in to change notification settings - Fork 3
144 lines (135 loc) · 5.44 KB
/
ci-windows.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
# 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
- name: Cache external dependencies
id: cache-ext
uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
with:
path: ext, build/_deps
key: ${{ runner.os }}-${{ hashFiles('cmake/Modules/*', 'ext/*.cmd', 'ext/*.sh') }}-alldeps
- 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
- 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: >
mkdir build && cd build
cmake .. -G Ninja
-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: 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
- 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