mirror of
https://github.com/Ryujinx/SDL.git
synced 2025-03-23 09:45:17 +00:00
Downstream distributors can use this to mark a version with their preferred version information, like a Linux distribution package version or the Steam revision it was built to be bundled into, or just to mark it with the vendor it was built by or the environment it's intended to be used in. For instance, in Debian I'd use this by configuring with: --enable-vendor-info="${DEB_VENDOR} ${DEB_VERSION}" to get a SDL_REVISION like: release-2.24.1-0-ga1d1946dc (Debian 2.24.1+dfsg-2) which gives a Debian user enough information to track down the patches and build-time configuration that were used for package revision 2. In Autotools and CMake, this is a configure-time option like any other, and will go into both SDL_REVISION (via SDL_revision.h) and SDL_GetRevision(). In other build systems (MSVC, Xcode, etc.), defining the SDL_VENDOR_INFO macro will get it into the output of SDL_GetRevision(), although not SDL_REVISION. Resolves: https://github.com/libsdl-org/SDL/issues/6418 Signed-off-by: Simon McVittie <smcv@collabora.com>
199 lines
8 KiB
YAML
199 lines
8 KiB
YAML
name: Build
|
|
|
|
on: [push, pull_request]
|
|
|
|
jobs:
|
|
Build:
|
|
name: ${{ matrix.platform.name }}
|
|
runs-on: ${{ matrix.platform.os }}
|
|
|
|
defaults:
|
|
run:
|
|
shell: ${{ matrix.platform.shell }}
|
|
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
platform:
|
|
- { name: Windows (mingw32), os: windows-latest, shell: 'msys2 {0}', msystem: mingw32, msys-env: mingw-w64-i686 }
|
|
- { name: Windows (mingw64), os: windows-latest, shell: 'msys2 {0}', msystem: mingw64, msys-env: mingw-w64-x86_64 }
|
|
- { name: Windows (clang32), os: windows-latest, shell: 'msys2 {0}', msystem: clang32, msys-env: mingw-w64-clang-i686 }
|
|
- { name: Windows (clang64), os: windows-latest, shell: 'msys2 {0}', msystem: clang64, msys-env: mingw-w64-clang-x86_64 }
|
|
- { name: Windows (ucrt64), os: windows-latest, shell: 'msys2 {0}', msystem: ucrt64, msys-env: mingw-w64-ucrt-x86_64 }
|
|
- { name: Ubuntu 20.04 (CMake), os: ubuntu-20.04, shell: sh }
|
|
- { name: Ubuntu 20.04 (autotools), os: ubuntu-20.04, shell: sh, autotools: true }
|
|
- { name: Ubuntu 22.04 (CMake), os: ubuntu-22.04, shell: sh }
|
|
- { name: Ubuntu 22.04 (autotools), os: ubuntu-22.04, shell: sh, autotools: true }
|
|
- { name: MacOS (CMake), os: macos-latest, shell: sh, cmake: '-DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"' }
|
|
- { name: MacOS (autotools), os: macos-latest, shell: sh, autotools: true }
|
|
|
|
steps:
|
|
- name: Set up MSYS2
|
|
if: matrix.platform.shell == 'msys2 {0}'
|
|
uses: msys2/setup-msys2@v2
|
|
with:
|
|
msystem: ${{ matrix.platform.msystem }}
|
|
install: >-
|
|
${{ matrix.platform.msys-env }}-cc
|
|
${{ matrix.platform.msys-env }}-cmake
|
|
${{ matrix.platform.msys-env }}-ninja
|
|
${{ matrix.platform.msys-env }}-pkg-config
|
|
|
|
- name: Setup Linux dependencies
|
|
if: runner.os == 'Linux'
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install build-essential git make autoconf automake libtool \
|
|
pkg-config cmake ninja-build gnome-desktop-testing libasound2-dev libpulse-dev \
|
|
libaudio-dev libjack-dev libsndio-dev libsamplerate0-dev libx11-dev libxext-dev \
|
|
libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev libwayland-dev \
|
|
libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev \
|
|
libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev fcitx-libs-dev
|
|
|
|
- name: Setup extra Ubuntu 22.04 dependencies
|
|
if: matrix.platform.os == 'ubuntu-22.04'
|
|
run: |
|
|
sudo apt-get install libpipewire-0.3-dev libdecor-0-dev
|
|
|
|
- name: Setup Macos dependencies
|
|
if: runner.os == 'macOS'
|
|
run: |
|
|
brew install \
|
|
ninja
|
|
- uses: actions/checkout@v3
|
|
- name: Check that versioning is consistent
|
|
# We only need to run this once: arbitrarily use the Linux/CMake build
|
|
if: "runner.os == 'Linux' && ! matrix.platform.autotools"
|
|
run: ./build-scripts/test-versioning.sh
|
|
- name: Configure (CMake)
|
|
if: "! matrix.platform.autotools"
|
|
run: |
|
|
cmake -S . -B build -G Ninja \
|
|
-DSDL_TESTS=ON \
|
|
-DSDL_WERROR=ON \
|
|
-DSDL_INSTALL_TESTS=ON \
|
|
-DSDL_VENDOR_INFO="Github Workflow" \
|
|
-DCMAKE_INSTALL_PREFIX=cmake_prefix \
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
${{ matrix.platform.cmake }}
|
|
- name: Build (CMake)
|
|
if: "! matrix.platform.autotools"
|
|
run: |
|
|
cmake --build build/ --config Release --verbose --parallel
|
|
- name: Run build-time tests (CMake)
|
|
if: "! matrix.platform.autotools"
|
|
run: |
|
|
set -eu
|
|
export SDL_TESTS_QUICK=1
|
|
ctest -VV --test-dir build/
|
|
- name: Install (CMake)
|
|
if: "! matrix.platform.autotools"
|
|
run: |
|
|
set -eu
|
|
cmake --install build/ --config Release
|
|
echo "SDL2_DIR=$(pwd)/cmake_prefix" >> $GITHUB_ENV
|
|
( cd cmake_prefix; find ) | LC_ALL=C sort -u
|
|
- name: Configure (Autotools)
|
|
if: matrix.platform.autotools
|
|
run: |
|
|
set -eu
|
|
rm -fr build-autotools
|
|
mkdir build-autotools
|
|
./autogen.sh
|
|
(
|
|
cd build-autotools
|
|
${{ github.workspace }}/configure \
|
|
--enable-vendor-info="Github Workflow" \
|
|
--enable-werror \
|
|
--prefix=${{ github.workspace }}/autotools_prefix \
|
|
)
|
|
if test "${{ runner.os }}" != "macOS" ; then
|
|
curdir="$(pwd)"
|
|
multiarch="$(dpkg-architecture -qDEB_HOST_MULTIARCH)"
|
|
(
|
|
mkdir -p build-autotools/test
|
|
cd build-autotools/test
|
|
${{ github.workspace }}/test/configure \
|
|
--enable-werror \
|
|
--x-includes=/usr/include \
|
|
--x-libraries="/usr/lib/${multiarch}" \
|
|
--prefix=${{ github.workspace }}/autotools_prefix \
|
|
SDL_CFLAGS="-I${curdir}/include" \
|
|
SDL_LIBS="-L${curdir}/build-autotools/build/.libs -lSDL2" \
|
|
ac_cv_lib_SDL2_ttf_TTF_Init=no \
|
|
${NULL+}
|
|
)
|
|
fi
|
|
- name: Build (Autotools)
|
|
if: matrix.platform.autotools
|
|
run: |
|
|
set -eu
|
|
parallel="$(getconf _NPROCESSORS_ONLN)"
|
|
make -j"${parallel}" -C build-autotools V=1
|
|
if test "${{ runner.os }}" != "macOS" ; then
|
|
make -j"${parallel}" -C build-autotools/test V=1
|
|
fi
|
|
- name: Run build-time tests (Autotools)
|
|
if: ${{ matrix.platform.autotools && (runner.os != 'macOS') }}
|
|
run: |
|
|
set -eu
|
|
curdir="$(pwd)"
|
|
parallel="$(getconf _NPROCESSORS_ONLN)"
|
|
export SDL_TESTS_QUICK=1
|
|
make -j"${parallel}" -C build-autotools/test check LD_LIBRARY_PATH="${curdir}/build-autotools/build/.libs"
|
|
- name: Install (Autotools)
|
|
if: matrix.platform.autotools
|
|
run: |
|
|
set -eu
|
|
curdir="$(pwd)"
|
|
parallel="$(getconf _NPROCESSORS_ONLN)"
|
|
make -j"${parallel}" -C build-autotools install V=1
|
|
if test "${{ runner.os }}" != "macOS" ; then
|
|
make -j"${parallel}" -C build-autotools/test install V=1
|
|
fi
|
|
( cd autotools_prefix; find . ) | LC_ALL=C sort -u
|
|
echo "SDL2_DIR=$(pwd)/autotools_prefix" >> $GITHUB_ENV
|
|
- name: Verify CMake configuration files
|
|
run: |
|
|
cmake -S cmake/test -B cmake_config_build -G Ninja \
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
-DCMAKE_PREFIX_PATH=${{ env.SDL2_DIR }}
|
|
cmake --build cmake_config_build --verbose
|
|
- name: Verify sdl2-config
|
|
run: |
|
|
export PATH=${{ env.SDL2_DIR }}/bin:$PATH
|
|
cmake/test/test_sdlconfig.sh
|
|
- name: Verify sdl2.pc
|
|
run: |
|
|
export PKG_CONFIG_PATH=${{ env.SDL2_DIR }}/lib/pkgconfig
|
|
cmake/test/test_pkgconfig.sh
|
|
- name: Distcheck (Autotools)
|
|
if: matrix.platform.autotools
|
|
run: |
|
|
set -eu
|
|
parallel="$(getconf _NPROCESSORS_ONLN)"
|
|
make -j"${parallel}" -C build-autotools dist V=1
|
|
# Similar to Automake `make distcheck`: check that the tarball
|
|
# release is sufficient to do a new build
|
|
mkdir distcheck
|
|
tar -C distcheck -zxf build-autotools/SDL2-*.tar.gz
|
|
( cd distcheck/SDL2-* && ./configure )
|
|
make -j"${parallel}" -C distcheck/SDL2-*
|
|
- name: Run installed-tests (Autotools)
|
|
if: "runner.os == 'Linux' && matrix.platform.autotools"
|
|
run: |
|
|
set -eu
|
|
parallel="$(getconf _NPROCESSORS_ONLN)"
|
|
sudo make -j"${parallel}" -C build-autotools install
|
|
sudo make -j"${parallel}" -C build-autotools/test install
|
|
export SDL_TESTS_QUICK=1
|
|
# We need to set LD_LIBRARY_PATH because it isn't in the default
|
|
# linker search path. We don't need to set XDG_DATA_DIRS for
|
|
# ginsttest-runner, because /usr/local/share *is* in the default
|
|
# search path for that.
|
|
env --chdir=/ \
|
|
LD_LIBRARY_PATH=/usr/local/lib \
|
|
SDL_AUDIODRIVER=dummy \
|
|
SDL_VIDEODRIVER=dummy \
|
|
ginsttest-runner --tap SDL2
|