2026-10-23 14:29:48 +03:00
|
|
|
#!/bin/sh
|
|
|
|
|
# Cross-compile Bananarchy standalone X11 games (Snake, Tetris) for armv7.
|
|
|
|
|
set -eu
|
|
|
|
|
|
|
|
|
|
BASE_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
|
|
|
|
ROOTFS_DIR="${ROOTFS_DIR:-$BASE_DIR/rootfs}"
|
|
|
|
|
if [ -e "$ROOTFS_DIR" ]; then
|
|
|
|
|
ROOTFS_DIR="$(realpath "$ROOTFS_DIR")"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
exec docker run --rm --network=host \
|
|
|
|
|
-e HOST_UID="$(id -u)" \
|
|
|
|
|
-e HOST_GID="$(id -g)" \
|
|
|
|
|
-v "$BASE_DIR:/bananarchy" \
|
|
|
|
|
-v "$ROOTFS_DIR:/target-rootfs" \
|
|
|
|
|
alpine:3.24 sh -eu -c '
|
|
|
|
|
cat > /etc/apk/repositories <<EOF
|
|
|
|
|
https://mirror.nura.eco/postmarketos/v26.06
|
|
|
|
|
https://dl-cdn.alpinelinux.org/alpine/edge/main
|
|
|
|
|
https://dl-cdn.alpinelinux.org/alpine/edge/community
|
|
|
|
|
https://dl-cdn.alpinelinux.org/alpine/edge/testing
|
|
|
|
|
EOF
|
|
|
|
|
cp /bananarchy/keys/* /etc/apk/keys/
|
|
|
|
|
|
|
|
|
|
echo "[1/4] Installing host cross-compilation toolchain..."
|
|
|
|
|
apk add --no-cache \
|
|
|
|
|
build-base \
|
|
|
|
|
gcc-armv7 \
|
|
|
|
|
g++-armv7 \
|
|
|
|
|
binutils-armv7 \
|
|
|
|
|
pkgconf >/dev/null
|
|
|
|
|
|
2026-10-26 15:17:55 +02:00
|
|
|
echo "[2/4] Preparing armv7 sysroot (X11 + ALSA)..."
|
2026-10-23 14:29:48 +03:00
|
|
|
SYSROOT="/tmp/armv7-sysroot"
|
|
|
|
|
mkdir -p "$SYSROOT/etc/apk/keys"
|
|
|
|
|
cp /etc/apk/repositories "$SYSROOT/etc/apk/repositories"
|
|
|
|
|
cp /etc/apk/keys/* "$SYSROOT/etc/apk/keys/"
|
|
|
|
|
apk --root "$SYSROOT" --initdb --arch armv7 add --no-scripts \
|
|
|
|
|
alpine-baselayout \
|
|
|
|
|
musl-dev \
|
|
|
|
|
linux-headers \
|
2026-10-26 15:17:55 +02:00
|
|
|
libx11-dev \
|
|
|
|
|
alsa-lib-dev >/dev/null
|
2026-10-23 14:29:48 +03:00
|
|
|
|
|
|
|
|
export PKG_CONFIG_SYSROOT_DIR="$SYSROOT"
|
|
|
|
|
export PKG_CONFIG_LIBDIR="$SYSROOT/usr/lib/pkgconfig:$SYSROOT/usr/share/pkgconfig"
|
|
|
|
|
CC="armv7-alpine-linux-musleabihf-gcc --sysroot=$SYSROOT"
|
|
|
|
|
CXX="armv7-alpine-linux-musleabihf-g++ --sysroot=$SYSROOT"
|
|
|
|
|
STRIP="armv7-alpine-linux-musleabihf-strip"
|
|
|
|
|
OPT_CFLAGS="-O2 -march=armv7-a -mtune=cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard -fno-plt -fomit-frame-pointer"
|
|
|
|
|
|
|
|
|
|
mkdir -p /bananarchy/prebuilt/games/usr/bin
|
|
|
|
|
|
2026-10-26 15:17:55 +02:00
|
|
|
echo "[3/4] Compiling Snake, Tetris, and Gambatte (Game Boy / Game Boy Color)..."
|
2026-10-23 14:29:48 +03:00
|
|
|
$CXX $OPT_CFLAGS -std=c++17 -Wall -Wextra \
|
|
|
|
|
/bananarchy/src/games/snake.cpp $(pkgconf --libs x11) \
|
|
|
|
|
-o /bananarchy/prebuilt/games/usr/bin/snake
|
|
|
|
|
$CXX $OPT_CFLAGS -std=c++17 -Wall -Wextra \
|
|
|
|
|
/bananarchy/src/games/tetris.cpp $(pkgconf --libs x11) \
|
|
|
|
|
-o /bananarchy/prebuilt/games/usr/bin/tetris
|
2026-10-26 15:17:55 +02:00
|
|
|
|
|
|
|
|
GAMBATTE_DIR="/bananarchy/src/games/gambatte"
|
|
|
|
|
$CXX $OPT_CFLAGS -std=c++17 -DHAVE_STDINT_H -D__LIBRETRO__ \
|
|
|
|
|
$(pkgconf --cflags alsa) \
|
|
|
|
|
-I"$GAMBATTE_DIR" \
|
|
|
|
|
-I"$GAMBATTE_DIR/common" \
|
|
|
|
|
-I"$GAMBATTE_DIR/include" \
|
|
|
|
|
-I"$GAMBATTE_DIR/src" \
|
|
|
|
|
"$GAMBATTE_DIR"/src/*.cpp \
|
|
|
|
|
"$GAMBATTE_DIR"/src/mem/*.cpp \
|
|
|
|
|
"$GAMBATTE_DIR"/src/sound/*.cpp \
|
|
|
|
|
"$GAMBATTE_DIR"/src/video/*.cpp \
|
|
|
|
|
/bananarchy/src/games/gambatte_phone.cpp \
|
|
|
|
|
$(pkgconf --libs x11 alsa) -lpthread -lm \
|
|
|
|
|
-o /bananarchy/prebuilt/games/usr/bin/gambatte
|
|
|
|
|
|
|
|
|
|
ln -sf gambatte /bananarchy/prebuilt/games/usr/bin/gbemu
|
|
|
|
|
|
|
|
|
|
$STRIP --strip-unneeded \
|
|
|
|
|
/bananarchy/prebuilt/games/usr/bin/snake \
|
|
|
|
|
/bananarchy/prebuilt/games/usr/bin/tetris \
|
|
|
|
|
/bananarchy/prebuilt/games/usr/bin/gambatte
|
2026-10-23 14:29:48 +03:00
|
|
|
|
|
|
|
|
echo "[4/4] Installing into overlay and (optional) target rootfs..."
|
|
|
|
|
mkdir -p /bananarchy/overlay/rootfs/usr/bin
|
|
|
|
|
cp -a /bananarchy/prebuilt/games/usr/bin/. /bananarchy/overlay/rootfs/usr/bin/
|
|
|
|
|
if [ -d /target-rootfs/usr/bin ]; then
|
|
|
|
|
cp -a /bananarchy/prebuilt/games/usr/bin/. /target-rootfs/usr/bin/
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
chown -R "$HOST_UID:$HOST_GID" \
|
|
|
|
|
/bananarchy/prebuilt/games \
|
|
|
|
|
/bananarchy/overlay/rootfs/usr/bin \
|
|
|
|
|
/bananarchy/src/games
|
2026-10-26 15:17:55 +02:00
|
|
|
ls -lh /bananarchy/prebuilt/games/usr/bin/snake /bananarchy/prebuilt/games/usr/bin/tetris /bananarchy/prebuilt/games/usr/bin/gambatte
|
2026-10-23 14:29:48 +03:00
|
|
|
'
|