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.
For day-to-day local development on a configured machine, use the unified workflow script:
Useful subcommands:
What sync does on macOS:
/Applications/yaze.app from the selected build output.z3ed (default: /usr/local/bin/z3ed).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.
For CLI-driven device deploys (build + install + optional launch):
deploy resolves the app bundle from DerivedData and installs via xcrun devicectl. Device selection order is DEVICE arg, $YAZE_IOS_DEVICE, then "Baby Pad".
For multi-iPad deploy loops (build once + install to many devices):
instant caches an iOS source fingerprint and skips rebuilds when inputs haven't changed, making repeated installs much faster.
| Build Type | Default Directory |
|---|---|
| Native (desktop/CLI) | build/ |
| Native (AI presets) | build_ai/ |
| WASM | build-wasm/ |
macOS and Windows presets use multi-config generators, so binaries live under build_ai/bin/Debug or build_ai/bin/Release (AI presets) and build/bin/... (non-AI presets). Linux uses single-config builds in build/bin or build_ai/bin depending on preset.
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 beyond build/ and build_ai/ 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 the unified workflow to build from build_ai presets and sync the runtime bundle to a single canonical app path: /Applications/yaze.app.
For faster iteration when tests are already green:
Menu launchers (SketchyBar, Raycast, Alfred, etc.) should target:
The sync workflow also prunes legacy aliases such as /Applications/Yaze.app and older Nightly app links when present.
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)Tip: Prefer ./scripts/yaze and ./scripts/z3ed to run the newest local binary (the wrappers prefer build_ai/ outputs when available).
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) |