mirror of
https://github.com/flyinghead/flycast.git
synced 2026-11-09 17:11:59 -10:00
213 lines
9.6 KiB
YAML
213 lines
9.6 KiB
YAML
name: Linux, macOS, Windows
|
|
|
|
on:
|
|
push:
|
|
branches-ignore:
|
|
- 'l10n_**'
|
|
pull_request:
|
|
|
|
jobs:
|
|
build:
|
|
name: ${{ matrix.config.name }}
|
|
runs-on: ${{ matrix.config.os }}
|
|
|
|
defaults:
|
|
run:
|
|
shell: ${{ matrix.config.shell }}
|
|
|
|
env:
|
|
CCACHE_DIR: ${{ github.workspace }}/.ccache
|
|
|
|
strategy:
|
|
matrix:
|
|
config:
|
|
- { name: i686-pc-windows-msvc, os: windows-2022, shell: cmd, arch: x86, cmakeArgs: -G Ninja, buildType: Release }
|
|
- { name: apple-darwin, os: macos-latest, shell: sh, cmakeArgs: -G Xcode -DUSE_DISCORD=ON -DMOLTENVK_DYLIB=$MOLTENVK_DYLIB, destDir: osx, buildType: RelWithDebInfo, packagePath: artifact/flycast-apple-darwin.zip }
|
|
- { name: x86_64-pc-linux-gnu, os: ubuntu-22.04, shell: sh, cmakeArgs: -G Ninja -DUSE_DISCORD=ON -DUSE_LIBCDIO=ON, destDir: linux, buildType: RelWithDebInfo }
|
|
- { name: x86_64-pc-windows-msvc, os: windows-2022, shell: cmd, arch: x64, cmakeArgs: -G Ninja -DUSE_DISCORD=ON, buildType: Release }
|
|
- { name: x86_64-w64-mingw32, os: windows-2022, shell: 'msys2 {0}', cmakeArgs: -G Ninja -DUSE_DISCORD=ON -DUSE_LIBCDIO=ON, destDir: win, buildType: RelWithDebInfo, packagePath: artifact/flycast-x86_64-w64-mingw32.zip }
|
|
- { name: libretro-x86_64-pc-linux-gnu, os: ubuntu-22.04, shell: sh, cmakeArgs: -DLIBRETRO=ON -DUSE_LIBCDIO=ON -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE -G Ninja, buildType: Release }
|
|
- { name: libretro-x86_64-w64-mingw32, os: windows-2022, shell: 'msys2 {0}', cmakeArgs: -DLIBRETRO=ON -DUSE_LIBCDIO=ON -G Ninja, buildType: Release }
|
|
|
|
steps:
|
|
- name: Set up build environment (macOS)
|
|
run: |
|
|
# Unlink and re-link to prevent errors when github mac runner images install python outside of brew. See https://github.com/actions/setup-python/issues/577
|
|
brew list -1 | grep python | while read formula; do brew unlink $formula; brew link --overwrite $formula; done
|
|
brew update || :
|
|
brew install libao ldid pulseaudio
|
|
|
|
moltenvk_tag="v1.4.2"
|
|
moltenvk_root="$RUNNER_TEMP/MoltenVK-$moltenvk_tag"
|
|
rm -rf "$moltenvk_root"
|
|
mkdir -p "$moltenvk_root"
|
|
aria2c "https://github.com/KhronosGroup/MoltenVK/releases/download/$moltenvk_tag/MoltenVK-macos.tar" -d "$RUNNER_TEMP" -o "MoltenVK-macos-$moltenvk_tag.tar"
|
|
tar -xf "$RUNNER_TEMP/MoltenVK-macos-$moltenvk_tag.tar" -C "$moltenvk_root"
|
|
moltenvk_dylib="$(find "$moltenvk_root" -type f -path '*/macOS/*' -name libMoltenVK.dylib | head -n 1)"
|
|
if [ -z "$moltenvk_dylib" ]; then
|
|
echo "MoltenVK $moltenvk_tag was downloaded, but macOS libMoltenVK.dylib was not found." >&2
|
|
exit 1
|
|
fi
|
|
echo "MOLTENVK_DYLIB=$moltenvk_dylib" >> $GITHUB_ENV
|
|
if: runner.os == 'macOS'
|
|
|
|
- name: Set up build environment (Linux)
|
|
run: |
|
|
sudo add-apt-repository ppa:christianrauch/libdecoration
|
|
sudo apt-get update
|
|
sudo apt-get -y install ccache libao-dev libasound2-dev libevdev-dev libgl1-mesa-dev liblua5.3-dev libminiupnpc-dev libpulse-dev libsdl2-dev libudev-dev libzip-dev libcurl4-openssl-dev libcdio-dev libfuse2 locales
|
|
sudo apt-get -y install libwayland-dev libdecor-0-dev libaudio-dev libjack-dev libsndio-dev libsamplerate0-dev libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev libxkbcommon-dev libdrm-dev libgbm-dev libgles2-mesa-dev libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev fcitx-libs-dev
|
|
sudo sed -i 's/# fr_FR.UTF-8 UTF-8/fr_FR.UTF-8 UTF-8/g' /etc/locale.gen
|
|
sudo locale-gen
|
|
if: runner.os == 'Linux'
|
|
|
|
- name: Set up build environment (Windows, MinGW)
|
|
uses: msys2/setup-msys2@v2
|
|
with:
|
|
msystem: MINGW64
|
|
install: git make
|
|
pacboy: ccache:p cmake:p libcdio:p lua:p ninja:p SDL2:p toolchain:p
|
|
if: matrix.config.shell == 'msys2 {0}'
|
|
|
|
- name: Set up build environment (Windows, Visual Studio)
|
|
run: |
|
|
choco install ccache directx-sdk
|
|
echo DXSDK_DIR=C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)>> %GITHUB_ENV%
|
|
if: matrix.config.shell == 'cmd'
|
|
|
|
- uses: ilammy/msvc-dev-cmd@v1
|
|
with:
|
|
arch: ${{ matrix.config.arch }}
|
|
if: matrix.config.shell == 'cmd'
|
|
|
|
- uses: actions/checkout@v7
|
|
with:
|
|
fetch-depth: 0
|
|
submodules: recursive
|
|
|
|
- name: Compile universal dependencies (macOS)
|
|
run: |
|
|
for formula in ./shell/apple/libomp.rb ./shell/apple/libpng-flycast.rb; do
|
|
libname=$(basename "$formula" .rb)
|
|
HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 HOMEBREW_DEVELOPER=1 brew install --build-from-source --formula "$formula" || \
|
|
HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 HOMEBREW_DEVELOPER=1 brew reinstall --build-from-source --formula "$formula"
|
|
|
|
prefix=$(brew --prefix $libname)
|
|
# Find and verify the static library
|
|
libfile=$(find "$prefix/lib" -name "*.a" | head -n1)
|
|
lipo -info "$libfile"
|
|
|
|
# Export prefix for subsequent CMake steps
|
|
if [ -z "$CMAKE_PREFIX_PATH" ]; then
|
|
CMAKE_PREFIX_PATH="$prefix"
|
|
else
|
|
CMAKE_PREFIX_PATH="$CMAKE_PREFIX_PATH:$prefix"
|
|
fi
|
|
done
|
|
echo "CMAKE_PREFIX_PATH=$CMAKE_PREFIX_PATH" >> $GITHUB_ENV
|
|
# After the last brew download: brew's own curl links brew's zstd
|
|
brew uninstall --ignore-dependencies zstd
|
|
if: matrix.config.name == 'apple-darwin'
|
|
|
|
- uses: actions/cache@v6
|
|
with:
|
|
path: ${{ env.CCACHE_DIR }}
|
|
key: ccache-${{ matrix.config.name }}-${{ github.sha }}
|
|
restore-keys: ccache-${{ matrix.config.name }}-
|
|
if: runner.os != 'macOS'
|
|
|
|
- name: CMake
|
|
run: |
|
|
cmake -B build -DCMAKE_BUILD_TYPE=${{ matrix.config.buildType }} -DCMAKE_INSTALL_PREFIX=artifact ${{ matrix.config.cmakeArgs }} -DSENTRY_UPLOAD_URL=${{ env.SENTRY_UPLOAD_URL }}
|
|
cmake --build build --config ${{ matrix.config.buildType }} --target install
|
|
env:
|
|
SENTRY_UPLOAD_URL: ${{ secrets.SENTRY_UPLOAD_URL }}
|
|
|
|
- name: Unit Tests
|
|
run: |
|
|
cmake -B build -DCMAKE_BUILD_TYPE=${{ matrix.config.buildType }} -DCMAKE_INSTALL_PREFIX=artifact -DENABLE_CTEST=ON ${{ matrix.config.cmakeArgs }}
|
|
cmake --build build --config ${{ matrix.config.buildType }}
|
|
./build/flycast
|
|
if: matrix.config.name == 'x86_64-pc-linux-gnu'
|
|
|
|
- name: Dump symbols
|
|
run: |
|
|
mkdir -p symbols
|
|
core/deps/breakpad/bin/dump_syms artifact/bin/flycast.exe > symbols/flycast.sym 2>/dev/null
|
|
strip artifact/bin/flycast.exe
|
|
if: matrix.config.name == 'x86_64-w64-mingw32'
|
|
|
|
- name: Build breakpad (linux)
|
|
working-directory: core/deps/breakpad
|
|
run: |
|
|
./configure
|
|
make
|
|
sudo make install
|
|
if: matrix.config.name == 'x86_64-pc-linux-gnu'
|
|
|
|
- name: Dump symbols and make AppImage (linux)
|
|
run: |
|
|
mkdir -p symbols
|
|
dump_syms artifact/bin/flycast > symbols/flycast.sym 2>/dev/null
|
|
strip artifact/bin/flycast
|
|
shell/linux/make-appimage.sh . artifact/bin appimage
|
|
mv flycast-x86_64.AppImage artifact/bin
|
|
rm artifact/bin/flycast
|
|
if: matrix.config.name == 'x86_64-pc-linux-gnu'
|
|
|
|
- name: Package app (macos)
|
|
run: |
|
|
cd artifact/bin
|
|
codesign --verify --deep --strict --all-architectures --verbose=4 Flycast.app
|
|
zip -rm flycast.app.zip Flycast.app
|
|
cp flycast.app.zip "../../${{ matrix.config.packagePath }}"
|
|
if: matrix.config.name == 'apple-darwin'
|
|
|
|
- name: Package app (windows)
|
|
run: |
|
|
powershell Compress-Archive artifact/bin/flycast.exe artifact/bin/flycast.zip
|
|
rm artifact/bin/flycast.exe
|
|
cp artifact/bin/flycast.zip "${{ matrix.config.packagePath }}"
|
|
if: matrix.config.name == 'x86_64-w64-mingw32'
|
|
|
|
- uses: actions/upload-artifact@v7
|
|
with:
|
|
name: flycast-${{ matrix.config.name }}
|
|
archive: ${{ !matrix.config.packagePath }}
|
|
path: |
|
|
${{ matrix.config.packagePath || 'artifact/bin' }}
|
|
${{ !matrix.config.packagePath && 'artifact/lib/libretro' || '' }}
|
|
|
|
- name: Setup Rclone
|
|
uses: AnimMouse/setup-rclone@v1
|
|
with:
|
|
rclone_config: ${{ secrets.RCLONE_CONFIG }}
|
|
|
|
- name: Upload to S3
|
|
run: rclone copy artifact/bin scaleway:flycast-builds/${{ matrix.config.destDir }}/${GITHUB_REF#refs/}-$GITHUB_SHA
|
|
shell: bash
|
|
if: github.repository == 'flyinghead/flycast' && github.event_name == 'push' && matrix.config.destDir != ''
|
|
|
|
- name: Setup Sentry CLI
|
|
uses: mathieu-bour/setup-sentry-cli@v2
|
|
env:
|
|
SENTRY_TOKEN: ${{ secrets.SENTRY_TOKEN }}
|
|
with:
|
|
url: https://sentry.io
|
|
token: ${{ env.SENTRY_TOKEN }}
|
|
organization: flycast
|
|
project: minidump
|
|
version: 2.21.2
|
|
if: ${{ env.SENTRY_TOKEN != '' }}
|
|
|
|
- name: Upload symbols to Sentry (Windows, macOS, Linux)
|
|
run: |
|
|
VERSION=$(git describe --tags --always)
|
|
sentry-cli releases new "$VERSION"
|
|
sentry-cli releases set-commits "$VERSION" --auto
|
|
sentry-cli debug-files upload symbols
|
|
shell: bash
|
|
env:
|
|
SENTRY_TOKEN: ${{ secrets.SENTRY_TOKEN }}
|
|
if: ${{ env.SENTRY_TOKEN != '' && (matrix.config.name == 'x86_64-w64-mingw32' || matrix.config.name == 'apple-darwin' || matrix.config.name == 'x86_64-pc-linux-gnu') && github.event_name == 'push' }}
|