|
1 | | -name: Build |
| 1 | +name: PGCE Build |
2 | 2 |
|
3 | 3 | on: [push, pull_request] |
4 | 4 |
|
5 | 5 | jobs: |
6 | | - Build: |
7 | | - name: ${{ matrix.platform.name }} |
8 | | - runs-on: ${{ matrix.platform.os }} |
9 | | - |
10 | | - defaults: |
11 | | - run: |
12 | | - shell: ${{ matrix.platform.shell }} |
| 6 | + build: |
| 7 | + name: Windows ${{ matrix.archplatform }} |
| 8 | + runs-on: windows-latest |
13 | 9 |
|
14 | 10 | strategy: |
15 | | - fail-fast: false |
| 11 | + fail-fast: false # if a particular matrix build fails, don't skip the rest |
16 | 12 | matrix: |
17 | | - platform: |
18 | | - - { name: Windows (MSVC+CMake), os: windows-latest, shell: sh, cmake: '-GNinja', msvc: 1, shared: 1, static: 0, vendored: 1 } |
19 | | - - { name: Windows (mingw32+autotools), os: windows-latest, shell: 'msys2 {0}', msystem: mingw32, msys-env: mingw-w64-i686, shared: 1, static: 1 } |
20 | | - - { name: Windows (mingw64+CMake), os: windows-latest, shell: 'msys2 {0}', msystem: mingw64, msys-env: mingw-w64-x86_64, shared: 1, static: 0, |
21 | | - cmake: '-DSDL2IMAGE_BACKEND_STB=OFF -DSDL2IMAGE_BACKEND_WIC=OFF -G "Ninja Multi-Config"' } |
22 | | - - { name: Linux (autotools), os: ubuntu-latest, shell: sh, shared: 1, static: 1} |
23 | | - - { name: Linux (CMake), os: ubuntu-latest, shell: sh, cmake: '-GNinja', shared: 1, static: 0, vendored: 1 } |
24 | | - - { name: 'Linux (CMake, static)', os: ubuntu-latest, shell: sh, cmake: '-DBUILD_SHARED_LIBS=OFF -GNinja', shared: 0, static: 1, vendored: 1 } |
25 | | - - { name: Macos (autotools), os: macos-latest, shell: sh, shared: 1, static: 1 } |
26 | | - - { name: Macos (CMake), os: macos-latest, shell: sh, cmake: '-GNinja', shared: 1, static: 0, vendored: 1 } |
27 | | - |
| 13 | + include: |
| 14 | + - { |
| 15 | + arch: x86_amd64, |
| 16 | + archplatform: x64, |
| 17 | + archlocation: x64, |
| 18 | + } |
| 19 | + - { |
| 20 | + arch: x86, |
| 21 | + archplatform: x86, |
| 22 | + archlocation: Win32, |
| 23 | + } |
| 24 | + |
28 | 25 | steps: |
29 | | - - uses: ilammy/msvc-dev-cmd@v1 |
30 | | - if: ${{ matrix.platform.msvc }} |
31 | | - with: |
32 | | - arch: x64 |
33 | | - - name: Set up MSYS2 |
34 | | - if: ${{ contains(matrix.platform.shell, 'msys2') }} |
35 | | - uses: msys2/setup-msys2@v2 |
36 | | - with: |
37 | | - msystem: ${{ matrix.platform.msystem }} |
38 | | - path-type: inherit |
39 | | - install: >- |
40 | | - ${{ matrix.platform.msys-env }}-autotools |
41 | | - ${{ matrix.platform.msys-env }}-cmake |
42 | | - ${{ matrix.platform.msys-env }}-gcc |
43 | | - ${{ matrix.platform.msys-env }}-ninja |
44 | | - ${{ matrix.platform.msys-env }}-pkg-config |
45 | | - ${{ matrix.platform.msys-env }}-nasm |
46 | | - ${{ matrix.platform.msys-env }}-libavif |
47 | | - ${{ matrix.platform.msys-env }}-libjpeg-turbo |
48 | | - ${{ matrix.platform.msys-env }}-libjxl |
49 | | - ${{ matrix.platform.msys-env }}-libpng |
50 | | - ${{ matrix.platform.msys-env }}-libtiff |
51 | | - ${{ matrix.platform.msys-env }}-libwebp |
52 | | - ${{ matrix.platform.msys-env }}-zlib |
53 | | - - name: Install Ninja |
54 | | - uses: turtlesec-no/get-ninja@main |
55 | | - if: ${{ !contains(matrix.platform.shell, 'msys2') }} |
56 | | - - name: Set up SDL |
57 | | - id: sdl |
58 | | - uses: libsdl-org/setup-sdl@main |
59 | | - with: |
60 | | - cmake-generator: Ninja |
61 | | - version: 2-head |
62 | | - sdl-test: true |
63 | | - shell: ${{ matrix.platform.shell }} |
64 | | - add-to-environment: true |
65 | | - - name: Setup Macos dependencies |
66 | | - if: ${{ runner.os == 'macOS' }} |
67 | | - run: | |
68 | | - brew install \ |
69 | | - autoconf \ |
70 | | - automake \ |
71 | | - jpeg \ |
72 | | - libavif \ |
73 | | - libpng \ |
74 | | - libtiff \ |
75 | | - libtool \ |
76 | | - nasm \ |
77 | | - ninja \ |
78 | | - pkg-config \ |
79 | | - webp \ |
80 | | - zlib \ |
81 | | - ${NULL+} |
82 | | - - name: Setup Linux dependencies |
83 | | - if: ${{ runner.os == 'Linux' }} |
84 | | - run: | |
85 | | - sudo apt-get update |
86 | | - sudo apt-get -y install \ |
87 | | - autoconf \ |
88 | | - automake \ |
89 | | - cmake \ |
90 | | - libavif-dev \ |
91 | | - libjpeg-dev \ |
92 | | - libpng-dev \ |
93 | | - libtiff-dev \ |
94 | | - libtool \ |
95 | | - libwebp-dev \ |
96 | | - nasm \ |
97 | | - ninja-build \ |
98 | | - pkg-config \ |
99 | | - zlib1g-dev \ |
100 | | - ${NULL+} |
101 | | - - name: Set up NASM |
102 | | - uses: ilammy/setup-nasm@v1 |
103 | | - if: ${{ matrix.platform.vendored && !contains(matrix.platform.shell, 'msys2') }} |
104 | | - |
105 | | - - uses: actions/checkout@v3 |
106 | | - with: |
107 | | - submodules: recursive |
108 | | - |
109 | | - - name: Check that versioning is consistent |
110 | | - # We only need to run this once: arbitrarily use the Linux/CMake build |
111 | | - if: ${{ runner.os == 'Linux' && matrix.platform.cmake }} |
112 | | - run: ./build-scripts/test-versioning.sh |
113 | | - |
114 | | - - name: Setup (CMake) |
115 | | - if: ${{ matrix.platform.cmake && !matrix.platform.msystem && !matrix.platform.msvc }} |
116 | | - uses: jwlawson/actions-setup-cmake@master |
117 | | - with: |
118 | | - cmake-version: '3.16' |
119 | | - - name: Configure (CMake) |
120 | | - if: ${{ matrix.platform.cmake }} |
121 | | - run: | |
122 | | - export CMAKE_CONFIGURATION_TYPES=Debug |
123 | | - cmake -B build \ |
124 | | - -DSDL2IMAGE_VENDORED=${{ matrix.platform.vendored }} \ |
125 | | - -DCMAKE_RUNTIME_OUTPUT_DIRECTORY=$PWD/build \ |
126 | | - -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=$PWD/build \ |
127 | | - -DBUILD_SHARED_LIBS=ON \ |
128 | | - -DCMAKE_BUILD_TYPE=Debug \ |
129 | | - -DSDL2IMAGE_SAMPLES=ON \ |
130 | | - -DSDL2IMAGE_TESTS=ON \ |
131 | | - -DSDL2IMAGE_TESTS_INSTALL=ON \ |
132 | | - -DSDL2IMAGE_AVIF=ON \ |
133 | | - -DSDL2IMAGE_JXL=ON \ |
134 | | - -DSDL2IMAGE_TIF=ON \ |
135 | | - -DSDL2IMAGE_WEBP=ON \ |
136 | | - -DCMAKE_INSTALL_PREFIX=prefix_cmake \ |
137 | | - ${{ matrix.platform.cmake }} |
138 | | - - name: Build (CMake) |
139 | | - if: ${{ matrix.platform.cmake }} |
140 | | - run: cmake --build build/ --config Debug --parallel --verbose |
141 | | - - name: Run build-time tests (CMake) |
142 | | - if: ${{ matrix.platform.cmake }} |
143 | | - run: | |
144 | | - set -eu |
145 | | - if [ "x${{ runner.os }}" = xLinux ]; then |
146 | | - export LD_LIBRARY_PATH="${{ github.workspace }}/build:$LD_LIBRARY_PATH" |
147 | | - fi |
148 | | - if [ "x${{ runner.os }}" = xmacos ]; then |
149 | | - export DYLD_LIBRARY_PATH="${{ github.workspace }}/build:$DYLD_LIBRARY_PATH" |
150 | | - fi |
151 | | - if [ "x${{ runner.os }}" = "xWindows" ]; then |
152 | | - sdl_binpath="$( cygpath -u "${{ steps.sdl.outputs.prefix }}" )" |
153 | | - sdlimage_binpath="$( cygpath -u "${{ github.workspace }}/build" )" |
154 | | - export PATH="$sdl_binpath:$sdlimage_binpath:$PATH" |
155 | | - fi |
156 | | -
|
157 | | - export SDL_IMAGE_TEST_REQUIRE_LOAD_AVIF=1 |
158 | | - export SDL_IMAGE_TEST_REQUIRE_LOAD_BMP=1 |
159 | | - export SDL_IMAGE_TEST_REQUIRE_LOAD_CUR=1 |
160 | | - export SDL_IMAGE_TEST_REQUIRE_LOAD_GIF=1 |
161 | | - export SDL_IMAGE_TEST_REQUIRE_LOAD_ICO=1 |
162 | | - export SDL_IMAGE_TEST_REQUIRE_LOAD_JPG=1 |
163 | | - export SDL_IMAGE_TEST_REQUIRE_LOAD_JXL=1 |
164 | | - export SDL_IMAGE_TEST_REQUIRE_LOAD_LBM=1 |
165 | | - export SDL_IMAGE_TEST_REQUIRE_LOAD_PCX=1 |
166 | | - export SDL_IMAGE_TEST_REQUIRE_LOAD_PNG=1 |
167 | | - export SDL_IMAGE_TEST_REQUIRE_LOAD_PNM=1 |
168 | | - export SDL_IMAGE_TEST_REQUIRE_LOAD_QOI=1 |
169 | | - export SDL_IMAGE_TEST_REQUIRE_LOAD_SVG=1 |
170 | | - export SDL_IMAGE_TEST_REQUIRE_LOAD_TGA=1 |
171 | | - export SDL_IMAGE_TEST_REQUIRE_LOAD_TIF=1 |
172 | | - export SDL_IMAGE_TEST_REQUIRE_LOAD_WEBP=1 |
173 | | - export SDL_IMAGE_TEST_REQUIRE_LOAD_XPM=1 |
174 | | - export SDL_IMAGE_TEST_REQUIRE_LOAD_XV=1 |
175 | | -
|
176 | | - export SDL_IMAGE_TEST_REQUIRE_SAVE_JPG=1 |
177 | | - export SDL_IMAGE_TEST_REQUIRE_SAVE_PNG=1 |
178 | | -
|
179 | | - cd build/test |
180 | | - ctest -VV -C Debug |
181 | | - - name: Install (CMake) |
182 | | - if: ${{ (matrix.platform.shell == 'sh' || contains(matrix.platform.shell, 'msys2')) && matrix.platform.cmake }} |
183 | | - run: | |
184 | | - set -eu |
185 | | - rm -fr DESTDIR-cmake |
186 | | - cmake --install build/ --config Debug |
187 | | - echo "SDL2_image_DIR=$(pwd)/prefix_cmake" >> $GITHUB_ENV |
188 | | - ( cd prefix_cmake; find . ) | LC_ALL=C sort -u |
189 | | - - name: Upload artifacts (CMake) |
190 | | - if: ${{ failure() && runner.os == 'Linux' && matrix.platform.cmake }} |
191 | | - uses: actions/upload-artifact@v3 |
192 | | - with: |
193 | | - name: "${{ matrix.platform.name }} artifacts" |
194 | | - path: | |
195 | | - build/test/*.bmp |
196 | | - build/test/*.jpg |
197 | | - build/test/*.png |
198 | | - if-no-files-found: ignore |
199 | | - |
200 | | - - name: Configure (Autotools) |
201 | | - if: ${{ !matrix.platform.cmake }} |
202 | | - run: | |
203 | | - set -eu |
204 | | - rm -fr build |
205 | | - mkdir build |
206 | | - ./autogen.sh |
207 | | - if [ "x${{ runner.os }}" = "xmacOS" ]; then |
208 | | - export LDFLAGS=-Wl,-rpath,${{ steps.sdl.outputs.prefix }}/lib |
209 | | - fi |
210 | | - # We do the CMake build with stb_image and the Autotools build without |
211 | | - set -- --disable-stb-image --prefix=$(pwd)/prefix_autotools --enable-tests --enable-installed-tests |
212 | | - ( cd build && ../configure "$@" ) |
213 | | - - name: Build (Autotools) |
214 | | - if: ${{ !matrix.platform.cmake }} |
215 | | - run: | |
216 | | - set -eu |
217 | | - parallel="$(getconf _NPROCESSORS_ONLN)" |
218 | | - make -j"${parallel}" -C build V=1 |
219 | | - - name: Run build-time tests (Autotools) |
220 | | - if: ${{ !matrix.platform.cmake }} |
221 | | - run: | |
222 | | - set -eu |
223 | | - if [ "x${{ runner.os }}" = "xWindows" ]; then |
224 | | - sdl_binpath="$( cygpath -u "${{ steps.sdl.outputs.prefix }}" )" |
225 | | - export PATH="$sdl_binpath:$PATH" |
226 | | - fi |
227 | | - parallel="$(getconf _NPROCESSORS_ONLN)" |
228 | | -
|
229 | | - # Expect to support all formats except JXL in these builds. |
230 | | - # See test/README.md for how this works. |
231 | | - export SDL_IMAGE_TEST_REQUIRE_LOAD_AVIF=1 |
232 | | - export SDL_IMAGE_TEST_REQUIRE_LOAD_BMP=1 |
233 | | - export SDL_IMAGE_TEST_REQUIRE_LOAD_CUR=1 |
234 | | - export SDL_IMAGE_TEST_REQUIRE_LOAD_GIF=1 |
235 | | - export SDL_IMAGE_TEST_REQUIRE_LOAD_ICO=1 |
236 | | - export SDL_IMAGE_TEST_REQUIRE_LOAD_JPG=1 |
237 | | - export SDL_IMAGE_TEST_REQUIRE_LOAD_JXL=0 |
238 | | - export SDL_IMAGE_TEST_REQUIRE_LOAD_LBM=1 |
239 | | - export SDL_IMAGE_TEST_REQUIRE_LOAD_PCX=1 |
240 | | - export SDL_IMAGE_TEST_REQUIRE_LOAD_PNG=1 |
241 | | - export SDL_IMAGE_TEST_REQUIRE_LOAD_PNM=1 |
242 | | - export SDL_IMAGE_TEST_REQUIRE_LOAD_QOI=1 |
243 | | - export SDL_IMAGE_TEST_REQUIRE_LOAD_SVG=1 |
244 | | - export SDL_IMAGE_TEST_REQUIRE_LOAD_TGA=1 |
245 | | - export SDL_IMAGE_TEST_REQUIRE_LOAD_TIF=1 |
246 | | - export SDL_IMAGE_TEST_REQUIRE_LOAD_WEBP=1 |
247 | | - export SDL_IMAGE_TEST_REQUIRE_LOAD_XPM=1 |
248 | | - export SDL_IMAGE_TEST_REQUIRE_LOAD_XV=1 |
249 | | -
|
250 | | - export SDL_IMAGE_TEST_REQUIRE_SAVE_JPG=1 |
251 | | - export SDL_IMAGE_TEST_REQUIRE_SAVE_PNG=1 |
252 | | -
|
253 | | - make -j"${parallel}" -C build check V=1 VERBOSE=1 |
254 | | - - name: Install (Autotools) |
255 | | - if: ${{ !matrix.platform.cmake }} |
256 | | - run: | |
257 | | - set -eu |
258 | | - curdir="$(pwd)" |
259 | | - parallel="$(getconf _NPROCESSORS_ONLN)" |
260 | | - make -j"${parallel}" -C build install V=1 |
261 | | - echo "SDL2_image_DIR=$(pwd)/prefix_autotools" >> $GITHUB_ENV |
262 | | - ( cd prefix_autotools; find . ) | LC_ALL=C sort -u |
263 | | - - name: Distcheck (Autotools) |
264 | | - if: ${{ runner.os == 'Linux' && !matrix.platform.cmake }} |
265 | | - run: | |
266 | | - set -eu |
267 | | - parallel="$(getconf _NPROCESSORS_ONLN)" |
268 | | - make -j"${parallel}" -C build distcheck V=1 |
269 | | - - name: Upload artifacts (Autotools) |
270 | | - if: ${{ failure() && !matrix.platform.cmake }} |
271 | | - uses: actions/upload-artifact@v3 |
272 | | - with: |
273 | | - name: ${{ matrix.platform.name }} artifacts |
274 | | - path: | |
275 | | - build/test/*.bmp |
276 | | - build/test/*.jpg |
277 | | - build/test/*.log |
278 | | - build/test/*.png |
279 | | - if-no-files-found: ignore |
280 | | - - name: Verify CMake configuration files |
281 | | - run: | |
282 | | - cmake -S cmake/test -B cmake_config_build \ |
283 | | - -DCMAKE_BUILD_TYPE=Debug \ |
284 | | - -DCMAKE_PREFIX_PATH="${{ env.SDL2_image_DIR }}" \ |
285 | | - -DTEST_SHARED=${{ matrix.platform.shared }} \ |
286 | | - -DTEST_STATIC=${{ matrix.platform.static }} |
287 | | - cmake --build cmake_config_build --verbose |
| 26 | + |
| 27 | + |
| 28 | + - uses: TheMrMilchmann/setup-msvc-dev@v3 # this lets us use the developer command prompt on windows |
| 29 | + with: |
| 30 | + arch: ${{ matrix.arch }} |
| 31 | + |
| 32 | + - name: Get SDL |
| 33 | + run: | |
| 34 | + .github/fetch_sdl_vc.ps1 |
| 35 | +
|
| 36 | + - name: Build SDL_image |
| 37 | + run: | |
| 38 | + msbuild VisualC/SDL_image.vcxproj /p:PlatformToolset=v143 /p:Configuration=Release /p:Platform=${{ matrix.archplatform }} |
| 39 | +
|
| 40 | + - name: Prepare upload |
| 41 | + run: | |
| 42 | + mkdir upload_prep/lib/${{ matrix.archplatform }} |
| 43 | + cp VisualC/${{ matrix.archlocation }}/Release/SDL2_image.dll upload_prep/lib/${{ matrix.archplatform }}/SDL2_image.dll |
| 44 | + cp VisualC/${{ matrix.archlocation }}/Release/SDL2_image.lib upload_prep/lib/${{ matrix.archplatform }}/SDL2_image.lib |
| 45 | + cp -r VisualC/external/optional/${{ matrix.archplatform }} upload_prep/lib/${{ matrix.archplatform }}/optional |
| 46 | +
|
| 47 | + - name: Add constant files to bundle |
| 48 | + if: matrix.archplatform == 'x64' # only run once, adds to same bundle as win32 |
| 49 | + run: | |
| 50 | + mkdir upload_prep/include |
| 51 | + cp include/SDL_image.h upload_prep/include/SDL_image.h |
| 52 | + cp CHANGES.txt upload_prep/CHANGES.txt |
| 53 | + cp README.txt upload_prep/README.txt |
| 54 | + cp LICENSE.txt upload_prep/LICENSE.txt |
| 55 | +
|
| 56 | + - uses: actions/upload-artifact@v3 |
| 57 | + with: |
| 58 | + name: SDL-image-build |
| 59 | + path: upload_prep |
0 commit comments