This document is the single source of truth for configuring, building, and testing YAZE on all platforms. Other documentation files link here rather than duplicating these instructions.
Run the verification script once per machine to check dependencies and fix common issues:
macOS / Linux:
Windows (PowerShell):
AppleClang (/usr/bin/clang) is the default and most reliable choice. If Homebrew LLVM is on your PATH and you hit SDK header errors, pick the toolchain explicitly:
YAZE uses CMake presets for consistent builds. Configure with cmake --preset <name>, then build with cmake --build --preset <name>.
mac-dbg, mac-dbg-v, mac-rel, mac-dev, mac-ai, mac-ai-fast, mac-uni, mac-sdl3, mac-testwin-dbg, win-dbg-v, win-rel, win-dev, win-ai, win-z3ed, win-arm, win-arm-rel, win-vs-dbg, win-vs-rel, win-vs-ai, win-sdl3, win-testlin-dbg, lin-dbg-v, lin-rel, lin-dev, lin-ai, lin-sdl3, lin-testios-debug, ios-release (device builds for the thin Xcode shell)ci-linux, ci-macos, ci-windows, ci-windows-aiwasm-debug, wasm-release, wasm-crash-repro, wasm-aimac-ai-fast prefers the Homebrew gRPC/protobuf stack for faster configure times (brew install grpc protobuf abseil).
Tip: Add -v suffix (e.g., mac-dbg-v) to enable verbose compiler warnings.
Use the thin iOS shell backed by CMake-built static libs:
This generates src/ios/yaze_ios.xcodeproj and a bundled static library at build-ios/ios/libyaze_ios_bundle.a. Open the Xcode project and run on device. Requires xcodegen (brew install xcodegen) and the iOS SDK from Xcode.
| Build Type | Default Directory |
|---|---|
| Native (desktop/CLI) | build/ |
| WASM | build-wasm/ |
macOS and Windows presets use multi-config generators, so binaries live under build/bin/Debug or build/bin/Release. Linux uses single-config builds in build/bin.
If you need per-user or per-agent isolation, create a local CMakeUserPresets.json that points binaryDir to a custom path outside the repo. Avoid creating additional build_* folders in the repo to keep the checkout small.
Example:
You can also set YAZE_BUILD_DIR for scripts and the agent build tool to direct builds to an external path:
For AI-enabled builds, use the *-ai presets and specify only the targets you need:
Use scripts/install-nightly.sh to keep a separate clone and install prefix for nightly builds so your dev build/ stays untouched.
Wrappers are created under ~/.local/bin:
yaze-nightly (GUI)yaze-nightly-grpc (GUI + gRPC for MCP)z3ed-nightly (CLI)yaze-mcp-nightly (MCP server; expects ~/Code/yaze-mcp/venv)How it works:
origin into $YAZE_NIGHTLY_REPO (default ~/Code/yaze-nightly) and keeps it clean.$YAZE_NIGHTLY_BUILD_DIR (default ~/Code/yaze-nightly/build-nightly).$YAZE_NIGHTLY_PREFIX/releases/<timestamp> and updates .../current symlink.$YAZE_NIGHTLY_BIN_DIR (default ~/.local/bin).Updating:
Removing:
Key overrides:
Set shared caches once per machine to avoid re-downloading dependencies after cleaning build directories.
macOS / Linux:
Windows (PowerShell):
You can also set these in CMakeUserPresets.json (see CMakeUserPresets.json.example).
Windows Helper Scripts:
scripts/agents/windows-smoke-build.ps1scripts/agents/run-tests.sh (or PowerShell equivalent)macOS:
Linux:
Windows:
macOS:
Linux:
Windows:
YAZE uses CTest with GoogleTest. Tests are organized by category using labels.
| Category | Command | Description |
|---|---|---|
| Stable | ctest --test-dir build -L stable | Core unit tests, always available |
| GUI | ctest --test-dir build -L gui | GUI smoke tests |
| ROM-dependent | ctest --test-dir build -L rom_dependent | Requires a Zelda 3 ROM |
| Experimental | ctest --test-dir build -L experimental | AI/experimental features |
| Preset | Stable | GUI | ROM-Dep | Experimental |
|---|---|---|---|---|
*-dbg | Yes | Yes | No | No |
*-ai | Yes | Yes | No | Yes |
*-dev | Yes | Yes | Yes | No |
*-rel | No | No | No | No |
| Variable | Purpose |
|---|---|
YAZE_TEST_ROM_VANILLA | Path to vanilla ROM for ROM-dependent tests |
YAZE_TEST_ROM_EXPANDED | Path to expanded (ZSCustom/OOS) ROM |
YAZE_TEST_ROM_PATH | Legacy ROM path (vanilla fallback) |
YAZE_SKIP_ROM_TESTS | Skip ROM tests (useful for CI) |
YAZE_ENABLE_UI_TESTS | Enable GUI tests (auto-detected if display available) |