Skip to content

Add show_error function #3210

Add show_error function

Add show_error function #3210

Workflow file for this run

name: Build
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
build-glfw-linux-x86_64:
name: Build (GLFW/Linux x86_64)
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- name: Get commit info
id: commit-info
run: |
echo "hash=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
echo "date=$(git log -1 --format=%cd --date=short)" >> $GITHUB_OUTPUT
- name: Install dependencies
run: sudo apt-get update && sudo apt-get install -y cmake ccache libglfw3-dev libbz2-dev
- uses: actions/cache@v5
with:
path: ~/.cache/ccache
key: ccache-glfw-linux-x86_64-${{ github.sha }}
restore-keys: |
ccache-glfw-linux-x86_64-
- name: Configure
run: cmake -B build -G Ninja -DWERROR=ON -DDESKTOP_BACKEND=glfw3 -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
- name: Build
run: cmake --build build
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: butterscotch-glfw-linux-x86_64
path: build/butterscotch
build-glfw-qt6-linux-x86_64:
name: Build (GLFW+QT6/Linux x86_64)
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- name: Get commit info
id: commit-info
run: |
echo "hash=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
echo "date=$(git log -1 --format=%cd --date=short)" >> $GITHUB_OUTPUT
- name: Install dependencies
run: sudo apt-get update && sudo apt-get install -y cmake libglfw3-dev libbz2-dev qt6-base-dev
- name: Configure
run: cmake -B build -DWERROR=ON -DDESKTOP_BACKEND=glfw3 -DLINUX_GUI=qt6 -DCMAKE_BUILD_TYPE=Release "-DBUTTERSCOTCH_COMMIT_HASH=${{ steps.commit-info.outputs.hash }}" "-DBUTTERSCOTCH_COMMIT_DATE=${{ steps.commit-info.outputs.date }}"
- name: Build
run: cmake --build build -j$(nproc)
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: butterscotch-glfw-qt6-linux-x86_64
path: build/butterscotch
build-glfw-gtk3-linux-x86_64:
name: Build (GLFW+GTK3/Linux x86_64)
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- name: Get commit info
id: commit-info
run: |
echo "hash=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
echo "date=$(git log -1 --format=%cd --date=short)" >> $GITHUB_OUTPUT
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y \
cmake \
libglfw3-dev \
libbz2-dev \
libgtk-3-dev
- name: Configure
run: cmake -B build -DWERROR=ON -DDESKTOP_BACKEND=glfw3 -DLINUX_GUI=gtk3 -DCMAKE_BUILD_TYPE=Release "-DBUTTERSCOTCH_COMMIT_HASH=${{ steps.commit-info.outputs.hash }}" "-DBUTTERSCOTCH_COMMIT_DATE=${{ steps.commit-info.outputs.date }}"
- name: Build
run: cmake --build build -j$(nproc)
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: butterscotch-glfw-gtk3-linux-x86_64
path: build/butterscotch
build-glfw-windows-x86_64:
name: Build (GLFW/Windows x86_64)
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- name: Get commit info
id: commit-info
run: |
echo "hash=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
echo "date=$(git log -1 --format=%cd --date=short)" >> $GITHUB_OUTPUT
- name: Install MinGW and dependencies
run: |
sudo apt-get update
sudo apt-get install -y cmake ccache mingw-w64
- uses: actions/cache@v5
with:
path: ~/.cache/ccache
key: ccache-glfw-windows-x86_64-${{ github.sha }}
restore-keys: |
ccache-glfw-windows-x86_64-
- name: Build GLFW for MinGW
run: |
git clone https://github.com/glfw/glfw.git /tmp/glfw
git -C /tmp/glfw checkout fdd14e65b1c29e4e6df875fb5669ec00d6793531
cmake -B /tmp/glfw/build -S /tmp/glfw -G Ninja \
-DCMAKE_TOOLCHAIN_FILE=${{ github.workspace }}/cmake/mingw-w64.cmake \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
-DCMAKE_INSTALL_PREFIX=/usr/x86_64-w64-mingw32 \
-DGLFW_BUILD_EXAMPLES=OFF -DGLFW_BUILD_TESTS=OFF -DGLFW_BUILD_DOCS=OFF
cmake --build /tmp/glfw/build
sudo cmake --install /tmp/glfw/build
- name: Configure
run: cmake -B build -G Ninja -DCMAKE_TOOLCHAIN_FILE=cmake/mingw-w64.cmake -DWERROR=ON -DDESKTOP_BACKEND=glfw3 -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
- name: Build
run: cmake --build build
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: butterscotch-glfw-windows-x86_64
path: build/butterscotch.exe
build-glfw-linux-x86:
name: Build (GLFW/Linux x86)
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- name: Get commit info
id: commit-info
run: |
echo "hash=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
echo "date=$(git log -1 --format=%cd --date=short)" >> $GITHUB_OUTPUT
- name: Install 32-bit toolchain and dependencies
run: |
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install -y cmake ccache gcc-multilib g++-multilib pkg-config libbz2-dev:i386 libx11-dev:i386 libxrandr-dev:i386 libxinerama-dev:i386 libxcursor-dev:i386 libxi-dev:i386 libgl-dev:i386
- uses: actions/cache@v5
with:
path: ~/.cache/ccache
key: ccache-glfw-linux-x86-${{ github.sha }}
restore-keys: |
ccache-glfw-linux-x86-
- name: Build GLFW (32-bit)
run: |
git clone https://github.com/glfw/glfw.git /tmp/glfw
git -C /tmp/glfw checkout fdd14e65b1c29e4e6df875fb5669ec00d6793531
cmake -B /tmp/glfw/build -S /tmp/glfw -G Ninja \
-DCMAKE_C_FLAGS=-m32 \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
-DCMAKE_INSTALL_PREFIX=/usr/local/glfw-x86 \
-DGLFW_BUILD_EXAMPLES=OFF -DGLFW_BUILD_TESTS=OFF -DGLFW_BUILD_DOCS=OFF -DGLFW_BUILD_WAYLAND=OFF
cmake --build /tmp/glfw/build
sudo cmake --install /tmp/glfw/build
- name: Configure
run: |
export PKG_CONFIG_PATH=/usr/local/glfw-x86/lib/pkgconfig:/usr/lib/i386-linux-gnu/pkgconfig
cmake -B build -G Ninja -DWERROR=ON -DDESKTOP_BACKEND=glfw3 -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS=-m32 -DCMAKE_EXE_LINKER_FLAGS=-m32 -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
- name: Build
run: cmake --build build
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: butterscotch-glfw-linux-x86
path: build/butterscotch
build-glfw-windows-x86:
name: Build (GLFW/Windows x86)
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- name: Setup cache
uses: actions/cache@v5
with:
path: |
~/.cache/ccache
~/toolchain-i486.tar
key: win32-artifact-${{ github.sha }}
restore-keys: win32-artifact-
- name: Get commit info
id: commit-info
run: |
echo "hash=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
echo "date=$(git log -1 --format=%cd --date=short)" >> $GITHUB_OUTPUT
- name: Unpack toolchain cache
run: |
if [ -f ~/toolchain-i486.tar ]; then
tar xf ~/toolchain-i486.tar -C ${{ github.workspace }}
fi
- name: Install MinGW and dependencies
run: |
sudo apt-get update
sudo apt-get install -y ccache libgmp-dev libmpfr-dev libmpc-dev
if [ ! -d "artifacts/windows/build/toolchain-i486" ]; then
ARCH=i486 ./artifacts/windows/build-toolchain.sh
fi
- name: Build
run: |
PATH="$PWD/artifacts/windows/build/toolchain-i486/bin:$PATH" make \
NO_COLOR=1 \
VERBOSE=1 \
CC='ccache i486-w64-mingw32-gcc' \
DESKTOP_BACKEND=glfw2 \
GLFW2_LIBS='-lglfw -lopengl32' \
EXTRALIBS='-latomic' \
BUTTERSCOTCH_COMMIT_HASH=${{ steps.commit-info.outputs.hash }} \
BUTTERSCOTCH_COMMIT_DATE=${{ steps.commit-info.outputs.date }}
- name: Pack toolchain cache
run: |
if [ -d "artifacts/windows/build/toolchain-i486" ]; then
tar cf ~/toolchain-i486.tar artifacts/windows/build/toolchain-i486
fi
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: butterscotch-glfw-windows-x86
path: build/butterscotch.exe
build-glfw-macos:
name: Build (AppKit/macOS ${{ matrix.label }})
strategy:
fail-fast: false
matrix:
include:
- label: x86_64
runner: macos-26-intel
- label: arm64
runner: macos-26
runs-on: ${{ matrix.runner }}
steps:
- uses: actions/checkout@v4
- name: Get commit info
id: commit-info
run: |
echo "hash=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
echo "date=$(git log -1 --format=%cd --date=short)" >> $GITHUB_OUTPUT
- name: Install dependencies
run: brew install glfw ccache
env:
HOMEBREW_NO_AUTO_UPDATE: 1
HOMEBREW_NO_INSTALL_CLEANUP: 1
- uses: actions/cache@v5
with:
path: ~/Library/Caches/ccache
key: ccache-macos-${{ matrix.label }}-${{ github.sha }}
restore-keys: |
ccache-macos-${{ matrix.label }}-
- name: Configure
run: cmake -B build -G Ninja -DWERROR=ON -DCMAKE_C_FLAGS="-Wno-deprecated-declarations" -DDESKTOP_BACKEND=appkit -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_BUILD_TYPE=Release
- name: Build
run: cmake --build build
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: butterscotch-appkit-macos-${{ matrix.label }}
path: build/butterscotch
build-sdl2-freebsd:
name: Build (SDL2/FreeBSD ${{ matrix.arch }})
runs-on: ubuntu-24.04
strategy:
fail-fast: false
matrix:
include:
- arch: amd64
sysroot_arch: amd64
target_triple: x86_64-unknown-freebsd
- arch: i386
sysroot_arch: i386
target_triple: i386-unknown-freebsd
- arch: aarch64
sysroot_arch: arm64
target_triple: aarch64-unknown-freebsd
env:
FREEBSD_SYSROOT: /opt/freebsd-sysroot
FREEBSD_MAJOR: 14
FREEBSD_MINOR: 3
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Install ccache
run: sudo apt-get update && sudo apt-get install -y ccache
- uses: actions/cache@v5
with:
path: ~/.cache/ccache
key: ccache-freebsd-${{ matrix.arch }}-${{ github.sha }}
restore-keys: |
ccache-freebsd-${{ matrix.arch }}-
- name: Download FreeBSD sysroot
run: |
curl -L -o sysroot.tar.xz https://download.freebsd.org/releases/${{ matrix.sysroot_arch }}/${{ env.FREEBSD_MAJOR }}.${{ env.FREEBSD_MINOR }}-RELEASE/base.txz
sudo mkdir -p ${{ env.FREEBSD_SYSROOT }}
sudo tar -xJf sysroot.tar.xz -C ${{ env.FREEBSD_SYSROOT }}
rm sysroot.tar.xz
- name: Download SDL2 for FreeBSD
run: |
# first we get the packagesite
curl -L -o packagesite.pkg "https://pkg.freebsd.org/FreeBSD:${{ env.FREEBSD_MAJOR }}:${{ matrix.arch }}/latest/packagesite.pkg"
mkdir -p /tmp/packagesite
tar -xf packagesite.pkg -C /tmp/packagesite
rm packagesite.pkg
SDL2_REPOPATH="$(grep -m 1 '"name":"sdl2"' /tmp/packagesite/packagesite.yaml | sed -n 's/.*"path":"\([^"]*\)".*/\1/p')"
# then we get SDL2
curl -L -o sdl2.pkg "https://pkg.freebsd.org/FreeBSD:${{ env.FREEBSD_MAJOR }}:${{ matrix.arch }}/latest/${SDL2_REPOPATH}"
sudo tar -xf sdl2.pkg -C ${{ env.FREEBSD_SYSROOT }}
rm sdl2.pkg
- name: Configure and build Butterscotch
env:
PKG_CONFIG_DIR: ""
PKG_CONFIG_LIBDIR: ${{ env.FREEBSD_SYSROOT }}/usr/local/libdata/pkgconfig:${{ env.FREEBSD_SYSROOT }}/usr/libdata/pkgconfig
PKG_CONFIG_SYSROOT_DIR: ${{ env.FREEBSD_SYSROOT }}
run: |
cmake -S . -B build -G Ninja \
-DDESKTOP_BACKEND=sdl2 \
-DAUDIO_BACKEND=miniaudio \
-DWERROR=ON \
-DCMAKE_SYSROOT=${{ env.FREEBSD_SYSROOT }} \
-DCMAKE_TOOLCHAIN_FILE=cmake/freebsd-llvm.cmake \
-DCMAKE_C_COMPILER_TARGET=${{ matrix.target_triple }} \
-DCMAKE_CXX_COMPILER_TARGET=${{ matrix.target_triple }} \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DCMAKE_BUILD_TYPE=Release
cmake --build build
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: butterscotch-sdl2-freebsd-${{ matrix.arch }}
path: build/butterscotch
build-ps2:
name: Build (PS2)${{ matrix.label }}
runs-on: ubuntu-24.04
container:
image: ps2dev/ps2dev:latest
env:
CCACHE_IGNOREOPTIONS: "-DBUTTERSCOTCH_COMMIT_HASH=* -DBUTTERSCOTCH_COMMIT_DATE=*"
strategy:
fail-fast: false
matrix:
include:
- label: ""
artifact: butterscotch-ps2
extra_flags: ""
- label: " [WAD Version 14]"
artifact: butterscotch-ps2-wad14
extra_flags: "-DENABLE_WAD14=ON -DENABLE_WAD16=OFF -DENABLE_WAD17=OFF"
- label: " [WAD Version 16]"
artifact: butterscotch-ps2-wad16
extra_flags: "-DENABLE_WAD14=OFF -DENABLE_WAD16=ON -DENABLE_WAD17=OFF"
- label: " [WAD Version 17]"
artifact: butterscotch-ps2-wad17
extra_flags: "-DENABLE_WAD14=OFF -DENABLE_WAD16=OFF -DENABLE_WAD17=ON"
steps:
- name: Install build tools
run: apk add --no-cache cmake ninja ccache gmp-dev mpfr-dev mpc1-dev git tar
- uses: actions/checkout@v4
- uses: actions/cache@v5
with:
path: ~/.cache/ccache
key: ccache-ps2-${{ matrix.artifact }}-${{ github.sha }}
restore-keys: |
ccache-ps2-${{ matrix.artifact }}-
# Yeah, the safe.directory is needed because "fatal: detected dubious ownership in repository at '/__w/Butterscotch/Butterscotch'"
- name: Get commit info
id: commit-info
run: |
git config --global --add safe.directory "$GITHUB_WORKSPACE"
echo "hash=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
echo "date=$(git log -1 --format=%cd --date=format:'%Y-%m-%d %H:%M:%S')" >> $GITHUB_OUTPUT
- name: Configure
run: |
mkdir -p build
export CFLAGS="-fopt-info-inline-optimized=$PWD/build/inline_report.txt"
cmake -B build -G Ninja -DCMAKE_TOOLCHAIN_FILE=$PS2SDK/ps2dev.cmake -DWERROR=ON -DPLATFORM=ps2 -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache ${{ matrix.extra_flags }} -DCMAKE_BUILD_TYPE=Release "-DBUTTERSCOTCH_COMMIT_HASH=${{ steps.commit-info.outputs.hash }}" "-DBUTTERSCOTCH_COMMIT_DATE=${{ steps.commit-info.outputs.date }}"
- name: Build
run: |
cmake --build build
cp build/butterscotch build/butterscotch.elf
- name: Check executeLoop I-Cache fit
run: |
# Extract executeLoop function size(s) from the ELF symbol table.
# GCC IPA passes (constprop/isra/part) may clone a static function and
# suffix the clones (e.g. "executeLoop.constprop.0"). Sum all variants
# since they all share the 16 KB I-Cache budget.
# nm -S prints: address size type name
echo "Getting executeLoop size from ELF symbol table..."
SYMBOL_LINES=$(mips64r5900el-ps2-elf-nm -S build/butterscotch.elf | grep -E ' executeLoop(\..*)?$' || true)
if [ -z "$SYMBOL_LINES" ]; then
echo "::error::Could not find executeLoop symbol in ELF (is it stripped?)"
exit 1
fi
echo "$SYMBOL_LINES"
SIZE_DEC=0
VARIANT_COUNT=0
for SIZE_HEX in $(echo "$SYMBOL_LINES" | awk '{print $2}'); do
SIZE_DEC=$((SIZE_DEC + 0x$SIZE_HEX))
VARIANT_COUNT=$((VARIANT_COUNT + 1))
done
LIMIT=16384
if [ "$SIZE_DEC" -gt "$LIMIT" ]; then
echo "::error::executeLoop is $SIZE_DEC bytes across $VARIANT_COUNT variant(s), exceeding the PS2 16 KB I-Cache ($LIMIT bytes) by $((SIZE_DEC - LIMIT)) bytes"
echo "| Function | Size | Limit | Status |" >> $GITHUB_STEP_SUMMARY
echo "|----------|------|-------|--------|" >> $GITHUB_STEP_SUMMARY
echo "| \`executeLoop\` ($VARIANT_COUNT variant(s)) | $SIZE_DEC bytes | $LIMIT bytes (16 KB) | **EXCEEDED** by $((SIZE_DEC - LIMIT)) bytes |" >> $GITHUB_STEP_SUMMARY
exit 1
fi
echo "| Function | Size | Limit | Status |" >> $GITHUB_STEP_SUMMARY
echo "|----------|------|-------|--------|" >> $GITHUB_STEP_SUMMARY
echo "| \`executeLoop\` ($VARIANT_COUNT variant(s)) | $SIZE_DEC bytes | $LIMIT bytes (16 KB) | $((LIMIT - SIZE_DEC)) bytes remaining |" >> $GITHUB_STEP_SUMMARY
- name: Report executeLoop inlining
run: |
REPORT=build/inline_report.txt
if [ ! -s "$REPORT" ]; then
echo "::warning::No inline report produced at $REPORT"
exit 0
fi
# Extract callees that GCC reported as inlined into executeLoop
INLINED=$(grep -E "Inlin(ed|ing) .* into executeLoop" "$REPORT" \
| awk '{for(i=1;i<=NF;i++) if($i=="into" && $(i+1) ~ /^executeLoop/) {name=$(i-1); sub(/\/[0-9]+$/,"",name); print name}}' \
| sort -u)
# Cross-check: jal targets still present in the compiled executeLoop
# (including GCC-cloned variants like executeLoop.constprop.0).
VARIANT_NAMES=$(mips64r5900el-ps2-elf-nm build/butterscotch.elf | awk '/ executeLoop(\..*)?$/ {print $3}')
DISASM_ARGS=""
for NAME in $VARIANT_NAMES; do
DISASM_ARGS="$DISASM_ARGS --disassemble=$NAME"
done
NOT_INLINED=$(mips64r5900el-ps2-elf-objdump -d $DISASM_ARGS build/butterscotch.elf 2>/dev/null \
| grep -oE "jal[[:space:]]+[0-9a-f]+ <[^>]+>" \
| sed -E 's/.*<([^>]+)>/\1/' \
| sort -u)
INLINED_COUNT=$(printf "%s\n" "$INLINED" | grep -c . || true)
NOT_INLINED_COUNT=$(printf "%s\n" "$NOT_INLINED" | grep -c . || true)
{
echo ""
echo "### \`executeLoop\` inlining report"
echo ""
echo "<details><summary>Inlined into <code>executeLoop</code> ($INLINED_COUNT callees, per GCC <code>-fopt-info-inline-optimized</code>)</summary>"
echo ""
echo '```'
printf "%s\n" "$INLINED"
echo '```'
echo ""
echo "</details>"
echo ""
echo "<details><summary>Still called via <code>jal</code> from <code>executeLoop</code> ($NOT_INLINED_COUNT symbols, per <code>objdump</code>)</summary>"
echo ""
echo '```'
printf "%s\n" "$NOT_INLINED"
echo '```'
echo ""
echo "</details>"
} >> $GITHUB_STEP_SUMMARY
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.artifact }}
path: build/butterscotch.elf
build-web:
name: Build (Web)${{ matrix.label }}
runs-on: ubuntu-24.04
strategy:
fail-fast: false
matrix:
include:
- label: ""
platform: web
artifact: butterscotch-web
output_glob: build/butterscotch.*
- label: " [Meta]"
platform: web-meta
artifact: butterscotch-web-meta
output_glob: build/butterscotch-meta.*
steps:
- uses: actions/checkout@v4
- name: Get commit info
id: commit-info
run: |
echo "hash=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
echo "date=$(git log -1 --format=%cd --date=short)" >> $GITHUB_OUTPUT
- name: Setup Emscripten SDK
uses: mymindstorm/setup-emsdk@v14
with:
version: latest
- name: Install ccache
run: sudo apt-get update && sudo apt-get install -y ccache
- uses: actions/cache@v5
with:
path: ~/.cache/ccache
key: ccache-web-${{ matrix.platform }}-${{ github.sha }}
restore-keys: |
ccache-web-${{ matrix.platform }}-
- name: Configure
run: emcmake cmake -B build -G Ninja -DWERROR=ON -DPLATFORM=${{ matrix.platform }} -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
- name: Build
run: cmake --build build
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.artifact }}
path: ${{ matrix.output_glob }}
build-ps3:
name: Build (PS3)
runs-on: ubuntu-24.04
container: scummvm/dockerized-toolchains:ps3
steps:
- uses: actions/checkout@v4
- name: Install ccache
run: apt-get update && apt-get install -y ccache
- uses: actions/cache@v5
with:
path: ~/.cache/ccache
key: ccache-ps3-${{ github.sha }}
restore-keys: |
ccache-ps3-
- name: Configure
run: cmake -B build -G Ninja -DWERROR=ON -DPLATFORM=ps3 -DCMAKE_TOOLCHAIN_FILE=cmake/ppu.cmake -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_BUILD_TYPE=Release
- name: Build
run: |
cmake --build build
sprxlinker build/butterscotch.elf
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: butterscotch-ps3
path: build/butterscotch.elf
build-vita:
name: Build (PS Vita)
runs-on: ubuntu-24.04
container: vitasdk/vitasdk:latest
steps:
- uses: actions/checkout@v4
- name: Install Ninja
run: |
apk add --no-cache ninja ccache tar
- uses: actions/cache@v5
with:
path: ~/.cache/ccache
key: ccache-vita-${{ github.sha }}
restore-keys: |
ccache-vita-
- name: Checkout vitaGL
run: |
git clone --depth 1 https://github.com/Rinnegatamante/vitaGL.git vendor/vitaGL
- name: Build vitaGL with speedhacks
run: |
CC="ccache arm-vita-eabi-gcc" CXX="ccache arm-vita-eabi-g++" make -C vendor/vitaGL \
install \
NO_DEBUG=1 \
NO_SPLASHSCREEN=1 \
LOG_ERRORS=1 \
HAVE_SHADER_CACHE=1 \
USE_SCRATCH_MEMORY=1 \
DEPTH_STENCIL_HACK=1 \
READBACKS_SPEEDHACK=1 \
-j$(nproc)
- name: Configure
run: |
cmake -B build -G Ninja -DWERROR=ON -DPLATFORM=vita -DAUDIO_BACKEND=openal -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
- name: Build
run: |
cmake --build build
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: butterscotch-vita
path: build/Butterscotch.vpk
build-android:
name: Build (Android)
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- name: Set up JDK 25
uses: actions/setup-java@v4
with:
java-version: '25'
distribution: 'temurin'
cache: 'gradle'
cache-dependency-path: src/android/frontend/gradle/wrapper/gradle-wrapper.properties
- name: Install ccache
run: sudo apt-get update && sudo apt-get install -y ccache
- uses: actions/cache@v5
with:
path: ~/.cache/ccache
key: ccache-android-${{ github.sha }}
restore-keys: |
ccache-android-
- name: Build APK
run: |
cd src/android/frontend
./gradlew assembleDebug \
-Pandroid.cxx.ndk.ccache=true \
-Porg.gradle.caching=true
- name: Upload APK
uses: actions/upload-artifact@v4
with:
name: butterscotch-android
path: src/android/frontend/app/build/outputs/apk/debug/app-debug.apk
build-old-gcc:
strategy:
fail-fast: false
matrix:
include:
- name: GCC 3.0
compiler: gcc-3.0
flags: '-std=gnu99 -w'
- name: GCC 2.95
compiler: g++-2.95
flags: '-w'
name: Build (${{ matrix.name }})
runs-on: ubuntu-24.04
steps:
- name: Create Debian Woody chroot
run: |
sudo apt-get install --no-install-recommends -y debootstrap
sudo debootstrap --arch=i386 --include='${{ matrix.compiler }},make,libsdl1.2-dev' woody ~/woody http://archive.debian.org/debian
- name: Checkout repo
uses: actions/checkout@v4
with:
path: butterscotch
- name: Build
run: |
sudo mv butterscotch ~/woody
sudo chroot ~/woody /bin/sh --login -c 'make -C /butterscotch NO_COLOR=1 VERBOSE=1 CC="${{ matrix.compiler }} ${{ matrix.flags }}" DESKTOP_BACKEND=sdl1 AUDIO_BACKEND=none SDL1_LIBS='-lSDL' DISABLE_MMD=1'
build-cxx:
name: Build as C++
runs-on: ubuntu-24.04
steps:
- name: Checkout repo
uses: actions/checkout@v4
- name: Install dependencies
run: sudo apt-get update && sudo apt-get install -y ccache libglfw3-dev
- uses: actions/cache@v5
with:
path: ~/.cache/ccache
key: ccache-cxx-${{ github.sha }}
restore-keys: |
ccache-cxx-
- name: Build
run: make CC='ccache g++ -std=gnu++98 -Wall -Wvla -Werror' NO_COLOR=1 VERBOSE=1