Skip to content

Add a binding to toggle the FPS counter. #271

Add a binding to toggle the FPS counter.

Add a binding to toggle the FPS counter. #271

Workflow file for this run

name: Build
on:
push:
branches:
- master
pull_request:
workflow_dispatch:
jobs:
windows:
name: Windows x64 (Portable Archive)
runs-on: windows-latest
defaults:
run:
shell: msys2 {0}
steps:
- name: Fetch Source Code
uses: actions/checkout@v4
with:
submodules: recursive
- name: Install Dependencies
uses: msys2/setup-msys2@v2
with:
install: make mingw-w64-x86_64-meson mingw-w64-x86_64-ninja mingw-w64-x86_64-pkg-config mingw-w64-x86_64-gcc mingw-w64-x86_64-SDL2 mingw-w64-x86_64-glew mingw-w64-x86_64-libarchive
- name: Build Hades
run: |
meson --buildtype=release build -Dstatic_executable=true
cd build
ninja
- name: Test Hades
run: |
./build/Hades.exe --help
- name: Collect Artifacts
uses: actions/upload-artifact@v4
with:
name: hades-win64
path: build/Hades.exe
if-no-files-found: error
mac-os:
name: MacOS arm64 (DMG Installer)
runs-on: macos-14
steps:
- name: Fetch Source Code
uses: actions/checkout@v4
with:
submodules: recursive
- name: Install Dependencies
run: |
echo "Installing dependencies"
brew install meson ninja create-dmg sdl2 glew libarchive
- name: Build Hades for arm64
run: |
export PKG_CONFIG_PATH="/opt/homebrew/opt/libarchive/lib/pkgconfig"
# Circumvent a bug with meson that fails to find static dependencies of dependencies by providing
# a directory containing only the static archives (.a), without the .dylib next to them.
mkdir libs-arm64
cp /opt/homebrew/lib/*.a ./libs-arm64/
export LDFLAGS="-L$(pwd)/libs-arm64/"
rm -rf /tmp/build/
mkdir -p /tmp/build/Hades.app
meson --buildtype=release --prefix=/tmp/build/Hades.app --bindir=Contents/MacOS build --werror -Dstatic_dependencies=true
ninja -C build install
- name: Build Hades Universal App
run: |
echo "Hades Dependencies Check"
otool -L /tmp/build/Hades.app/Contents/MacOS/hades | grep /opt/homebrew/ && false
echo "Hades (Universal) Dependencies:"
otool -L /tmp/build/Hades.app/Contents/MacOS/hades
echo "End of dependencies"
# Set permissions
chmod +x /tmp/build/Hades.app/Contents/MacOS/hades
- name: Test Hades App
run: |
/tmp/build/Hades.app/Contents/MacOS/hades --help
- name: Sign Hades App
# Only run if a certificate is set
if: ${{ env.MACOS_CODESIGN_CRT != '' && env.MACOS_CODESIGN_CRT_IDENTITY != '' }}
run: |
# Create keychain with certificate to use to sign the binaries.
echo "$MACOS_CODESIGN_CRT" | base64 -d > certificate.p12
security create-keychain -p test123 build.keychain
security default-keychain -s build.keychain
security unlock-keychain -p test123 build.keychain
security import certificate.p12 -k build.keychain -P "$MACOS_CODESIGN_CRT_PWD" -T /usr/bin/codesign
# Delete certificate to avoid leaking it to next steps
rm certificate.p12
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k test123 build.keychain
echo "Signing file /tmp/build/Hades.app"
/usr/bin/codesign --deep --force -s "$MACOS_CODESIGN_CRT_IDENTITY" --options runtime "/tmp/build/Hades.app" -v
# Get rid of the keychain containing certificate to avoid leaking it
# to next steps.
security lock-keychain build.keychain
security default-keychain -s
security delete-keychain build.keychain
env:
MACOS_CODESIGN_CRT: ${{ secrets.MACOS_CODESIGN_CRT }}
MACOS_CODESIGN_CRT_PWD: ${{ secrets.MACOS_CODESIGN_CRT_PWD }}
MACOS_CODESIGN_CRT_IDENTITY: ${{ secrets.MACOS_CODESIGN_CRT_IDENTITY }}
- name: Create Hades DMG
run: |
create-dmg \
--volname "Hades Installer" \
--volicon ./resource/macos/hades.icns \
--background ./resource/macos/background.png \
--window-pos 200 120 \
--window-size 575 360 \
--icon-size 100 \
--icon Hades.app 150 225 \
--hide-extension Hades.app \
--app-drop-link 425 225 \
Hades-Installer.dmg \
/tmp/build/
- name: Notarize Hades DMG
if: ${{ env.MACOS_APPLE_USERNAME != '' }}
run: |
echo "Notarizing file $file"
xcrun notarytool submit --apple-id "$MACOS_APPLE_USERNAME" --password "$MACOS_APPLE_PASSWORD" --team-id "$MACOS_APPLE_TEAMID" --wait "Hades-Installer.dmg"
xcrun stapler staple -v "Hades-Installer.dmg"
env:
MACOS_APPLE_USERNAME: ${{ secrets.MACOS_APPLE_USERNAME }}
MACOS_APPLE_PASSWORD: ${{ secrets.MACOS_APPLE_PASSWORD }}
MACOS_APPLE_TEAMID: ${{ secrets.MACOS_APPLE_TEAMID }}
- name: Collect Artifacts
uses: actions/upload-artifact@v4
with:
name: hades-macos
path: Hades-Installer.dmg
if-no-files-found: error
linux-appimage:
name: Linux x64 (AppImage)
runs-on: ubuntu-20.04
steps:
- name: Fetch Source Code
uses: actions/checkout@v4
with:
submodules: recursive
- name: Install Dependencies
run: |
sudo apt-get update
sudo apt-get install -y \
meson \
ninja-build \
libfuse2 \
libsdl2-dev \
libglew-dev \
libgtk-3-dev \
libarchive-dev
- name: Build Hades
run: |
meson --buildtype=release --prefix=/usr build --werror
DESTDIR=$(pwd)/AppDir ninja -C build install
- name: Package Hades
uses: AppImageCrafters/build-appimage@master
with:
recipe: "./resource/linux/AppImageBuilder.yml"
- name: Test Hades
run: |
sudo chown --reference=. *.AppImage
mv -v *.AppImage hades.AppImage
./hades.AppImage --help
- name: Collect Artifacts
uses: actions/upload-artifact@v4
with:
name: hades-linux-appimage
path: hades.AppImage
if-no-files-found: error
linux-ubuntu:
name: Linux x64 (Ubuntu ${{ matrix.version }})
runs-on: ubuntu-${{ matrix.version }}
strategy:
matrix:
version: ["20.04", "22.04"]
include:
- dependency-glew: libglew2.1
version: "20.04"
- dependency-glew: libglew2.2
version: "22.04"
steps:
- name: Fetch Source Code
uses: actions/checkout@v4
with:
submodules: recursive
- name: Install Dependencies
run: |
sudo apt-get update
sudo apt-get install -y \
meson \
ninja-build \
libsdl2-dev \
libglew-dev \
libgtk-3-dev \
libarchive-dev
- name: Build Hades
run: |
meson --buildtype=release --prefix=/usr build --werror
DESTDIR=$(pwd)/pkg-root ninja -C build install
- name: Package Hades
uses: jiro4989/build-deb-action@v3
with:
package: hades
package_root: pkg-root
maintainer: The Hades Authors
version: 1.0.0
arch: 'amd64'
depends: 'libsdl2-2.0-0, libarchive13, libgtk-3-0, ${{ matrix.dependency-glew }}'
desc: 'A Nintendo Game Boy Advance Emulator.'
- name: Test Hades
run: |
sudo chown --reference=. *.deb
mv -v *.deb hades.deb
sudo apt install -y ./hades.deb
/usr/bin/hades --help
- name: Collect Artifacts
uses: actions/upload-artifact@v4
with:
name: hades-linux-ubuntu-${{ matrix.version }}
path: hades.deb
if-no-files-found: error