Root Cause: The z3ed CLI tool (via yaze_agent) depends on yaze_app_core_lib, but this library was only being created when YAZE_BUILD_APP=ON (which doesn't exist - should be YAZE_BUILD_GUI). When building z3ed standalone with tests (YAZE_BUILD_Z3ED=ON, YAZE_BUILD_GUI=OFF), the linker failed with: ld: library 'yaze_app_core_lib' not found clang: error: linker command failed with exit code 1 Changes: 1. Created src/app/app_core.cmake: Contains only yaze_app_core_lib creation 2. Modified src/app/app.cmake: Now includes app_core.cmake, then conditionally builds the yaze executable only when YAZE_BUILD_GUI=ON 3. Modified src/CMakeLists.txt: Include app/app.cmake whenever agent features are needed (YAZE_BUILD_GUI OR YAZE_BUILD_Z3ED OR YAZE_BUILD_TESTS), ensuring yaze_app_core_lib is always available before yaze_agent is built Impact: - macOS CI builds will now succeed (z3ed can link properly) - No impact on existing GUI builds (yaze executable still built correctly) - No impact on Windows/Linux (same dependency structure applies) - Cleaner separation: library (always) vs executable (conditional) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
YAZE - Yet Another Zelda3 Editor
A cross-platform Zelda 3 ROM editor with a modern C++ GUI, Asar 65816 assembler integration, and an automation-friendly CLI (z3ed). YAZE bundles its toolchain, offers AI-assisted editing flows, and targets reproducible builds on Windows, macOS, and Linux.
Highlights
- All-in-one editing: Overworld, dungeon, sprite, palette, and messaging tools with live previews.
- Assembler-first workflow: Built-in Asar integration, symbol extraction, and patch validation.
- Automation & AI:
z3edexposes CLI/TUI automation, proposal workflows, and optional AI agents. - Testing & CI hooks: CMake presets, ROM-less test fixtures, and gRPC-based GUI automation support.
- Cross-platform toolchains: Single source tree targeting MSVC, Clang, and GCC with identical presets.
- Modular AI stack: Toggle agent UI (
YAZE_BUILD_AGENT_UI), remote automation/gRPC (YAZE_ENABLE_REMOTE_AUTOMATION), and AI runtimes (YAZE_ENABLE_AI_RUNTIME) per preset.
Project Status
0.3.x builds are in active development. Release automation is being reworked, so packaged builds may lag behind main. Follow develop for the most accurate view of current functionality.
Quick Start
Clone & Bootstrap
git clone --recursive https://github.com/scawful/yaze.git
cd yaze
Run the environment verifier once per machine:
# macOS / Linux
./scripts/verify-build-environment.sh --fix
# Windows (PowerShell)
.\scripts\verify-build-environment.ps1 -FixIssues
Configure & Build
- Use the CMake preset that matches your platform (
mac-dbg,lin-dbg,win-dbg, etc.). - Build with
cmake --build --preset <name> [--target …]. - See
docs/public/build/quick-reference.mdfor the canonical list of presets, AI build policy, and testing commands.
Agent Feature Flags
| Option | Default | Effect |
|---|---|---|
YAZE_BUILD_AGENT_UI |
ON when GUI builds are enabled |
Compiles the chat/dialog widgets so the editor can host agent sessions. Turn this OFF when you want a lean GUI-only build. |
YAZE_ENABLE_REMOTE_AUTOMATION |
ON for *-ai presets |
Builds the gRPC servers/clients and protobufs that power GUI automation. |
YAZE_ENABLE_AI_RUNTIME |
ON for *-ai presets |
Enables Gemini/Ollama transports, proposal planning, and advanced routing logic. |
YAZE_ENABLE_AGENT_CLI |
ON when CLI builds are enabled |
Compiles the conversational agent stack consumed by z3ed. Disable to skip the CLI entirely. |
Windows win-* presets keep every switch OFF by default (win-dbg, win-rel, ci-windows) so MSVC builds stay fast. Use win-ai, win-vs-ai, or the new ci-windows-ai preset whenever you need remote automation or AI runtime features.
All bundled third-party code (SDL, ImGui, ImGui Test Engine, Asar, nlohmann/json, cpp-httplib, nativefiledialog-extended) now lives under ext/ for easier vendoring and cleaner include paths.
Applications & Workflows
./build/bin/yaze– full GUI editor with multi-session dockspace, theming, and ROM patching../build/bin/z3ed --tui– CLI/TUI companion for scripting, AI-assisted edits, and Asar workflows../build_ai/bin/yaze_test --unit|--integration|--e2e– structured test runner for quick regression checks.z3ed+ macOS automation – pair the CLI with sketchybar/yabai/skhd or Emacs/Spacemacs to drive ROM workflows without opening the GUI.
Typical commands:
# Launch GUI with a ROM
./build/bin/yaze zelda3.sfc
# Apply a patch via CLI
./build/bin/z3ed asar patch.asm --rom zelda3.sfc
# Run focused tests
cmake --build --preset mac-ai --target yaze_test
./build_ai/bin/yaze_test --unit
Testing
./build_ai/bin/yaze_test --unitfor fast checks; add--integrationor--e2e --show-guifor broader coverage.ctest --preset devmirrors CI’s stable set;ctest --preset allruns the full matrix.- Set
YAZE_TEST_ROM_PATHor pass--rom-pathwhen a test needs a real ROM image.
Documentation
- Human-readable docs live under
docs/public/with an entry point atdocs/public/index.md. - Run
doxygen Doxyfileto generate API + guide pages (build/docs/htmlandbuild/docs/latex). - Agent playbooks, architecture notes, and testing recipes now live in
docs/internal/.
Contributing & Community
- Review
CONTRIBUTING.mdand the build/test guides indocs/public/. - Conventional commit messages (
feat:,fix:, etc.) keep history clean; use topic branches for larger work. - Chat with the team on Oracle of Secrets Discord.
License
YAZE is licensed under the GNU GPL v3. See LICENSE for details and third-party notices.