This repository builds qemu-uae, the external QEMU-based PowerPC plugin used by Amiberry for CyberStorm PPC and Blizzard PPC accelerator emulation.
The plugin is intentionally kept outside the Amiberry source tree. Amiberry owns the host ABI, runtime loading, configuration, and packaging hooks; this repository owns the QEMU patch deck and plugin artifact build.
- QEMU: 11.0.1
- QEMU-UAE plugin API required by Amiberry: 3.8
- QEMU-UAE reference branch: https://github.com/reinauer/qemu-uae/tree/qemu-v11.0.1-uae
- Patch source: https://github.com/reinauer/uae-ppc-plugin
The GitHub Actions workflow builds the plugin for the desktop platforms that can load Amiberry dynamic plugins:
| Platform | Artifact | Notes |
|---|---|---|
| Linux x86_64 | qemu-uae-linux-x86_64 |
Built in an Ubuntu 22.04 container for an older glibc baseline. |
| Linux aarch64 | qemu-uae-linux-aarch64 |
Built in an Ubuntu 22.04 container on an ARM64 runner. |
| macOS x86_64 | qemu-uae-macos-x86_64 |
Intermediate per-architecture dylib. |
| macOS arm64 | qemu-uae-macos-arm64 |
Intermediate per-architecture dylib. |
| macOS universal | qemu-uae-macos-universal |
Lipo-merged dylib for Amiberry's universal app bundle. |
| Windows x64 | qemu-uae-windows-x64 |
Built with MSYS2 CLANG64. |
| Windows arm64 | qemu-uae-windows-arm64 |
Built with MSYS2 CLANGARM64. |
Android and iOS are not artifact targets because Amiberry currently disables dynamic PPC plugin loading there. FreeBSD and Haiku remain source-build or future-CI targets until their plugin packaging/runtime dependency story is proven.
Tagged releases publish reusable plugin asset archives for Amiberry packaging:
| Asset | Contents |
|---|---|
qemu-uae-linux-x86_64.tar.xz |
qemu-uae.so |
qemu-uae-linux-aarch64.tar.xz |
qemu-uae.so |
qemu-uae-macos-universal.zip |
qemu-uae.dylib |
qemu-uae-windows-x64.zip |
qemu-uae.dll; CI statically links GLib/zlib/MSYS2 plugin dependencies |
qemu-uae-windows-arm64.zip |
qemu-uae.dll; CI statically links GLib/zlib/MSYS2 plugin dependencies |
SHA256SUMS |
Checksums for the release assets |
Use a tag such as v11.0.1-amiberry.1 for the first release. The plugin is expected to change rarely, so Amiberry releases can keep reusing the same plugin release tag until either the QEMU-UAE API or plugin patch deck changes.
These plugin artifacts are not signed here. Amiberry bundles the selected artifact into the final platform package, and the Amiberry release workflow handles macOS and Windows package signing after bundling.
Install build dependencies:
sudo apt update
sudo apt install -y \
build-essential \
curl \
ninja-build \
patch \
pkg-config \
python3 \
python3-venv \
xz-utils \
libglib2.0-dev \
libpixman-1-dev \
zlib1g-devBuild the plugin:
./build-qemu-uae-plugin.sh --clean -j "$(nproc)"The default Linux output is:
build/qemu-uae.so
Pass --output /path/to/qemu-uae.so to copy the finished artifact elsewhere.
Install build dependencies:
brew install ninja pkg-config glibBuild the plugin:
./build-qemu-uae-plugin.sh --clean -j "$(sysctl -n hw.ncpu)"The default macOS output is:
build/qemu-uae.dylib
Use an MSYS2 CLANG shell matching the target architecture:
- x64:
CLANG64 - arm64:
CLANGARM64
Install build dependencies with pacman/pacboy, then build:
pacboy -S --needed clang:p glib2:p ninja:p pkgconf:p python:p zlib:p
pacman -S --needed base-devel ca-certificates curl git patch tar xz
CC=clang CXX=clang++ ./build-qemu-uae-plugin.sh --clean --static-deps -j "$(nproc)"The default Windows output is:
build/qemu-uae.dll
--static-deps is Windows-only and matches the release workflow. It enables static pkg-config and linker flags so GLib, zlib, and their MSYS2 transitive plugin dependencies are linked into qemu-uae.dll instead of being shipped as sidecar DLLs.
For local testing, place the built plugin in Amiberry's configured plugins directory, or configure Amiberry packaging with:
cmake -B build-amiberry \
-DUSE_PPC=ON \
-DUSE_QEMU_PPC=ON \
-DQEMU_UAE_PLUGIN=/path/to/qemu-uae.soAmiberry validates the plugin major API version exactly and requires minor version 3.8 or newer.
The ordered patch files in patches/ are applied to the clean QEMU 11.0.1 release tarball. Keep patch filenames ordered and deterministic.
To refresh from the current upstream reference patch repo:
rm -f patches/*.patch
cp /path/to/uae-ppc-plugin/patches/*.patch patches/After refreshing, run:
bash -n build-qemu-uae-plugin.sh
./build-qemu-uae-plugin.sh --clean -j "$(nproc)"