refactor: reorganize submodule structure and enhance CMake configuration
- Moved all third-party libraries (SDL, ImGui, Asar, etc.) from `src/lib/` and `third_party/` to a new `ext/` directory for better organization and clarity in dependency management. - Updated CMake configuration to reflect the new paths, ensuring all targets and includes point to the `ext/` directory. - Enhanced CMake presets to support new build options for AI and gRPC features, improving modularity and build flexibility. - Added new feature flags for agent UI and remote automation, allowing for more granular control over build configurations. - Updated documentation to reflect changes in the project structure and build options, ensuring clarity for contributors and users.
This commit is contained in:
15
.github/actions/run-tests/action.yml
vendored
15
.github/actions/run-tests/action.yml
vendored
@@ -12,12 +12,21 @@ inputs:
|
||||
runs:
|
||||
using: 'composite'
|
||||
steps:
|
||||
- name: Select test preset suffix
|
||||
shell: bash
|
||||
run: |
|
||||
if [ "${{ inputs.preset }}" = "ci-windows-ai" ]; then
|
||||
echo "CTEST_SUFFIX=-ai" >> $GITHUB_ENV
|
||||
else
|
||||
echo "CTEST_SUFFIX=" >> $GITHUB_ENV
|
||||
fi
|
||||
|
||||
- name: Run stable tests
|
||||
if: inputs.test-type == 'stable' || inputs.test-type == 'all'
|
||||
shell: bash
|
||||
run: |
|
||||
cd build
|
||||
ctest --preset stable \
|
||||
ctest --preset stable${CTEST_SUFFIX} \
|
||||
--output-on-failure \
|
||||
--output-junit stable_test_results.xml || true
|
||||
|
||||
@@ -26,7 +35,7 @@ runs:
|
||||
shell: bash
|
||||
run: |
|
||||
cd build
|
||||
ctest --preset unit \
|
||||
ctest --preset unit${CTEST_SUFFIX} \
|
||||
--output-on-failure \
|
||||
--output-junit unit_test_results.xml || true
|
||||
|
||||
@@ -35,7 +44,7 @@ runs:
|
||||
shell: bash
|
||||
run: |
|
||||
cd build
|
||||
ctest --preset integration \
|
||||
ctest --preset integration${CTEST_SUFFIX} \
|
||||
--output-on-failure \
|
||||
--output-junit integration_test_results.xml || true
|
||||
|
||||
|
||||
42
.github/workflows/ci.yml
vendored
42
.github/workflows/ci.yml
vendored
@@ -58,7 +58,7 @@ jobs:
|
||||
os: macos-14
|
||||
platform: macos
|
||||
preset: ci-macos
|
||||
- name: "Windows 2022 (MSVC)"
|
||||
- name: "Windows 2022 (Core)"
|
||||
os: windows-2022
|
||||
platform: windows
|
||||
preset: ci-windows
|
||||
@@ -111,7 +111,7 @@ jobs:
|
||||
os: macos-14
|
||||
platform: macos
|
||||
preset: ci-macos
|
||||
- name: "Windows 2022"
|
||||
- name: "Windows 2022 (Core)"
|
||||
os: windows-2022
|
||||
platform: windows
|
||||
preset: ci-windows
|
||||
@@ -148,6 +148,44 @@ jobs:
|
||||
test-type: unit
|
||||
preset: ${{ matrix.preset }}
|
||||
|
||||
windows-agent:
|
||||
name: "Windows Agent (Full Stack)"
|
||||
runs-on: windows-2022
|
||||
needs: [build, test]
|
||||
if: github.event_name != 'pull_request'
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: Setup build environment
|
||||
uses: ./.github/actions/setup-build
|
||||
with:
|
||||
platform: windows
|
||||
preset: ci-windows-ai
|
||||
cache-key: ${{ hashFiles('cmake/dependencies.lock') }}
|
||||
|
||||
- name: Build project
|
||||
uses: ./.github/actions/build-project
|
||||
with:
|
||||
platform: windows
|
||||
preset: ci-windows-ai
|
||||
build-type: ${{ env.BUILD_TYPE }}
|
||||
|
||||
- name: Run stable tests (agent stack)
|
||||
uses: ./.github/actions/run-tests
|
||||
with:
|
||||
test-type: stable
|
||||
preset: ci-windows-ai
|
||||
|
||||
- name: Run unit tests (agent stack)
|
||||
uses: ./.github/actions/run-tests
|
||||
with:
|
||||
test-type: unit
|
||||
preset: ci-windows-ai
|
||||
|
||||
code-quality:
|
||||
name: "Code Quality"
|
||||
runs-on: ubuntu-22.04
|
||||
|
||||
17
.github/workflows/release.yml
vendored
17
.github/workflows/release.yml
vendored
@@ -69,6 +69,15 @@ jobs:
|
||||
cpack -G DragNDrop
|
||||
ls -la _CPack_Packages/
|
||||
|
||||
- name: Create notarized bundle (macOS)
|
||||
if: matrix.platform == 'macos'
|
||||
shell: bash
|
||||
run: |
|
||||
chmod +x ./scripts/create-macos-bundle.sh
|
||||
./scripts/create-macos-bundle.sh ${{ env.VERSION }} yaze-${{ env.VERSION }}-bundle
|
||||
mkdir -p build/_CPack_Packages/manual
|
||||
mv yaze-${{ env.VERSION }}-bundle.dmg build/_CPack_Packages/manual/ || true
|
||||
|
||||
- name: Package artifacts (Windows)
|
||||
if: matrix.platform == 'windows'
|
||||
run: |
|
||||
@@ -151,6 +160,13 @@ jobs:
|
||||
with:
|
||||
path: ./artifacts
|
||||
|
||||
- name: Generate release checksums
|
||||
run: |
|
||||
cd artifacts
|
||||
find . -type f \( -name "*.zip" -o -name "*.exe" -o -name "*.deb" -o -name "*.tar.gz" -o -name "*.dmg" \) -print0 \
|
||||
| sort -z \
|
||||
| xargs -0 sha256sum > checksums.txt
|
||||
|
||||
- name: Create Release
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
@@ -202,6 +218,7 @@ jobs:
|
||||
artifacts/yaze-macos-*/yaze-*.dmg
|
||||
artifacts/yaze-windows-*/yaze-*.exe
|
||||
artifacts/yaze-windows-*/yaze-*.zip
|
||||
artifacts/checksums.txt
|
||||
draft: false
|
||||
prerelease: ${{ contains(env.VERSION, 'alpha') || contains(env.VERSION, 'beta') || contains(env.VERSION, 'rc') }}
|
||||
env:
|
||||
|
||||
28
.gitmodules
vendored
28
.gitmodules
vendored
@@ -1,27 +1,27 @@
|
||||
[submodule "src/lib/imgui"]
|
||||
path = src/lib/imgui
|
||||
[submodule "ext/imgui"]
|
||||
path = ext/imgui
|
||||
url = https://github.com/ocornut/imgui.git
|
||||
[submodule "assets/asm/alttp-hacker-workspace"]
|
||||
path = assets/asm/alttp-hacker-workspace
|
||||
url = https://github.com/scawful/alttp-hacker-workspace.git
|
||||
[submodule "src/lib/SDL"]
|
||||
path = src/lib/SDL
|
||||
[submodule "ext/SDL"]
|
||||
path = ext/SDL
|
||||
url = https://github.com/libsdl-org/SDL.git
|
||||
[submodule "src/lib/asar"]
|
||||
path = src/lib/asar
|
||||
[submodule "ext/asar"]
|
||||
path = ext/asar
|
||||
url = https://github.com/RPGHacker/asar.git
|
||||
[submodule "src/lib/imgui_test_engine"]
|
||||
path = src/lib/imgui_test_engine
|
||||
[submodule "ext/imgui_test_engine"]
|
||||
path = ext/imgui_test_engine
|
||||
url = https://github.com/ocornut/imgui_test_engine.git
|
||||
[submodule "src/lib/nativefiledialog-extended"]
|
||||
path = src/lib/nativefiledialog-extended
|
||||
[submodule "ext/nativefiledialog-extended"]
|
||||
path = ext/nativefiledialog-extended
|
||||
url = https://github.com/btzy/nativefiledialog-extended.git
|
||||
[submodule "assets/asm/usdasm"]
|
||||
path = assets/asm/usdasm
|
||||
url = https://github.com/spannerisms/usdasm.git
|
||||
[submodule "third_party/json"]
|
||||
path = third_party/json
|
||||
[submodule "ext/json"]
|
||||
path = ext/json
|
||||
url = https://github.com/nlohmann/json.git
|
||||
[submodule "third_party/httplib"]
|
||||
path = third_party/httplib
|
||||
[submodule "ext/httplib"]
|
||||
path = ext/httplib
|
||||
url = https://github.com/yhirose/cpp-httplib.git
|
||||
|
||||
@@ -10,7 +10,9 @@ set(CMAKE_POLICY_VERSION_MINIMUM 3.5 CACHE STRING "Minimum policy version for su
|
||||
cmake_policy(SET CMP0091 NEW)
|
||||
|
||||
# Ensure we consistently use the static MSVC runtime (/MT, /MTd) to match vcpkg static triplets
|
||||
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>" CACHE STRING "" FORCE)
|
||||
if(MSVC)
|
||||
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>" CACHE STRING "" FORCE)
|
||||
endif()
|
||||
cmake_policy(SET CMP0048 NEW)
|
||||
cmake_policy(SET CMP0077 NEW)
|
||||
|
||||
|
||||
@@ -169,7 +169,28 @@
|
||||
"YAZE_ENABLE_JSON": "ON",
|
||||
"YAZE_ENABLE_AI": "OFF",
|
||||
"YAZE_ENABLE_ROM_TESTS": "OFF",
|
||||
"YAZE_MINIMAL_BUILD": "OFF"
|
||||
"YAZE_MINIMAL_BUILD": "OFF",
|
||||
"YAZE_BUILD_AGENT_UI": "OFF",
|
||||
"YAZE_ENABLE_REMOTE_AUTOMATION": "OFF",
|
||||
"YAZE_ENABLE_AI_RUNTIME": "OFF"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "ci-windows-ai",
|
||||
"inherits": "windows-base",
|
||||
"displayName": "CI Build - Windows (Agent)",
|
||||
"description": "Full agent build with gRPC + AI runtime (runs outside PRs)",
|
||||
"cacheVariables": {
|
||||
"CMAKE_BUILD_TYPE": "RelWithDebInfo",
|
||||
"YAZE_BUILD_TESTS": "ON",
|
||||
"YAZE_ENABLE_GRPC": "ON",
|
||||
"YAZE_ENABLE_JSON": "ON",
|
||||
"YAZE_ENABLE_AI": "ON",
|
||||
"YAZE_ENABLE_ROM_TESTS": "OFF",
|
||||
"YAZE_MINIMAL_BUILD": "OFF",
|
||||
"YAZE_BUILD_AGENT_UI": "ON",
|
||||
"YAZE_ENABLE_REMOTE_AUTOMATION": "ON",
|
||||
"YAZE_ENABLE_AI_RUNTIME": "ON"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -215,7 +236,10 @@
|
||||
"YAZE_BUILD_TESTS": "ON",
|
||||
"YAZE_ENABLE_GRPC": "OFF",
|
||||
"YAZE_ENABLE_JSON": "ON",
|
||||
"YAZE_ENABLE_AI": "OFF"
|
||||
"YAZE_ENABLE_AI": "OFF",
|
||||
"YAZE_BUILD_AGENT_UI": "OFF",
|
||||
"YAZE_ENABLE_REMOTE_AUTOMATION": "OFF",
|
||||
"YAZE_ENABLE_AI_RUNTIME": "OFF"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -238,7 +262,10 @@
|
||||
"YAZE_ENABLE_GRPC": "OFF",
|
||||
"YAZE_ENABLE_JSON": "ON",
|
||||
"YAZE_ENABLE_AI": "OFF",
|
||||
"YAZE_ENABLE_LTO": "ON"
|
||||
"YAZE_ENABLE_LTO": "ON",
|
||||
"YAZE_BUILD_AGENT_UI": "OFF",
|
||||
"YAZE_ENABLE_REMOTE_AUTOMATION": "OFF",
|
||||
"YAZE_ENABLE_AI_RUNTIME": "OFF"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -252,7 +279,10 @@
|
||||
"YAZE_ENABLE_GRPC": "OFF",
|
||||
"YAZE_ENABLE_JSON": "ON",
|
||||
"YAZE_ENABLE_AI": "OFF",
|
||||
"YAZE_ENABLE_ROM_TESTS": "ON"
|
||||
"YAZE_ENABLE_ROM_TESTS": "ON",
|
||||
"YAZE_BUILD_AGENT_UI": "OFF",
|
||||
"YAZE_ENABLE_REMOTE_AUTOMATION": "OFF",
|
||||
"YAZE_ENABLE_AI_RUNTIME": "OFF"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -266,7 +296,10 @@
|
||||
"YAZE_ENABLE_GRPC": "ON",
|
||||
"YAZE_ENABLE_JSON": "ON",
|
||||
"YAZE_ENABLE_AI": "ON",
|
||||
"YAZE_ENABLE_ROM_TESTS": "ON"
|
||||
"YAZE_ENABLE_ROM_TESTS": "ON",
|
||||
"YAZE_BUILD_AGENT_UI": "ON",
|
||||
"YAZE_ENABLE_REMOTE_AUTOMATION": "ON",
|
||||
"YAZE_ENABLE_AI_RUNTIME": "ON"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -280,7 +313,10 @@
|
||||
"YAZE_BUILD_CLI": "ON",
|
||||
"YAZE_ENABLE_GRPC": "ON",
|
||||
"YAZE_ENABLE_JSON": "ON",
|
||||
"YAZE_ENABLE_AI": "ON"
|
||||
"YAZE_ENABLE_AI": "ON",
|
||||
"YAZE_BUILD_AGENT_UI": "OFF",
|
||||
"YAZE_ENABLE_REMOTE_AUTOMATION": "ON",
|
||||
"YAZE_ENABLE_AI_RUNTIME": "ON"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -293,7 +329,10 @@
|
||||
"YAZE_BUILD_TESTS": "ON",
|
||||
"YAZE_ENABLE_GRPC": "OFF",
|
||||
"YAZE_ENABLE_JSON": "ON",
|
||||
"YAZE_ENABLE_AI": "OFF"
|
||||
"YAZE_ENABLE_AI": "OFF",
|
||||
"YAZE_BUILD_AGENT_UI": "OFF",
|
||||
"YAZE_ENABLE_REMOTE_AUTOMATION": "OFF",
|
||||
"YAZE_ENABLE_AI_RUNTIME": "OFF"
|
||||
},
|
||||
"architecture": {
|
||||
"value": "ARM64",
|
||||
@@ -308,7 +347,10 @@
|
||||
"cacheVariables": {
|
||||
"CMAKE_BUILD_TYPE": "Release",
|
||||
"YAZE_BUILD_TESTS": "OFF",
|
||||
"YAZE_ENABLE_LTO": "ON"
|
||||
"YAZE_ENABLE_LTO": "ON",
|
||||
"YAZE_BUILD_AGENT_UI": "OFF",
|
||||
"YAZE_ENABLE_REMOTE_AUTOMATION": "OFF",
|
||||
"YAZE_ENABLE_AI_RUNTIME": "OFF"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -321,7 +363,10 @@
|
||||
"YAZE_BUILD_TESTS": "ON",
|
||||
"YAZE_ENABLE_GRPC": "OFF",
|
||||
"YAZE_ENABLE_JSON": "ON",
|
||||
"YAZE_ENABLE_AI": "OFF"
|
||||
"YAZE_ENABLE_AI": "OFF",
|
||||
"YAZE_BUILD_AGENT_UI": "OFF",
|
||||
"YAZE_ENABLE_REMOTE_AUTOMATION": "OFF",
|
||||
"YAZE_ENABLE_AI_RUNTIME": "OFF"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -335,7 +380,10 @@
|
||||
"YAZE_ENABLE_GRPC": "OFF",
|
||||
"YAZE_ENABLE_JSON": "ON",
|
||||
"YAZE_ENABLE_AI": "OFF",
|
||||
"YAZE_ENABLE_LTO": "ON"
|
||||
"YAZE_ENABLE_LTO": "ON",
|
||||
"YAZE_BUILD_AGENT_UI": "OFF",
|
||||
"YAZE_ENABLE_REMOTE_AUTOMATION": "OFF",
|
||||
"YAZE_ENABLE_AI_RUNTIME": "OFF"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -349,7 +397,10 @@
|
||||
"YAZE_ENABLE_GRPC": "ON",
|
||||
"YAZE_ENABLE_JSON": "ON",
|
||||
"YAZE_ENABLE_AI": "ON",
|
||||
"YAZE_ENABLE_ROM_TESTS": "ON"
|
||||
"YAZE_ENABLE_ROM_TESTS": "ON",
|
||||
"YAZE_BUILD_AGENT_UI": "ON",
|
||||
"YAZE_ENABLE_REMOTE_AUTOMATION": "ON",
|
||||
"YAZE_ENABLE_AI_RUNTIME": "ON"
|
||||
}
|
||||
}
|
||||
],
|
||||
@@ -397,6 +448,13 @@
|
||||
"configuration": "RelWithDebInfo",
|
||||
"jobs": 12
|
||||
},
|
||||
{
|
||||
"name": "ci-windows-ai",
|
||||
"configurePreset": "ci-windows-ai",
|
||||
"displayName": "CI Build - Windows (AI)",
|
||||
"configuration": "RelWithDebInfo",
|
||||
"jobs": 12
|
||||
},
|
||||
{
|
||||
"name": "coverage",
|
||||
"configurePreset": "coverage",
|
||||
@@ -532,6 +590,39 @@
|
||||
"label": "integration"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "stable-ai",
|
||||
"configurePreset": "ci-windows-ai",
|
||||
"displayName": "Stable Tests (Agent Stack)",
|
||||
"description": "Run stable tests against the ci-windows-ai preset",
|
||||
"filter": {
|
||||
"include": {
|
||||
"label": "stable"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "unit-ai",
|
||||
"configurePreset": "ci-windows-ai",
|
||||
"displayName": "Unit Tests (Agent Stack)",
|
||||
"description": "Run unit tests against the ci-windows-ai preset",
|
||||
"filter": {
|
||||
"include": {
|
||||
"label": "unit"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "integration-ai",
|
||||
"configurePreset": "ci-windows-ai",
|
||||
"displayName": "Integration Tests (Agent Stack)",
|
||||
"description": "Run integration tests against the ci-windows-ai preset",
|
||||
"filter": {
|
||||
"include": {
|
||||
"label": "integration"
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"packagePresets": [
|
||||
|
||||
21
README.md
21
README.md
@@ -14,6 +14,7 @@ A cross-platform Zelda 3 ROM editor with a modern C++ GUI, Asar 65816 assembler
|
||||
- **Automation & AI**: `z3ed` exposes 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.
|
||||
@@ -45,19 +46,37 @@ cmake --build --preset mac-dbg
|
||||
cmake --preset lin-dbg
|
||||
cmake --build --preset lin-dbg
|
||||
|
||||
# Windows
|
||||
# Windows (core preset)
|
||||
cmake --preset win-dbg
|
||||
cmake --build --preset win-dbg --target yaze
|
||||
|
||||
# Enable AI + gRPC tooling (any platform)
|
||||
cmake --preset mac-ai
|
||||
cmake --build --preset mac-ai --target yaze z3ed
|
||||
|
||||
# Windows AI preset
|
||||
cmake --preset win-ai
|
||||
cmake --build --preset win-ai --target yaze z3ed
|
||||
```
|
||||
|
||||
### 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:
|
||||
```bash
|
||||
|
||||
@@ -14,7 +14,7 @@ if(MSVC)
|
||||
endif()
|
||||
|
||||
# Set Asar source directory
|
||||
set(ASAR_SRC_DIR "${CMAKE_SOURCE_DIR}/src/lib/asar/src")
|
||||
set(ASAR_SRC_DIR "${CMAKE_SOURCE_DIR}/ext/asar/src")
|
||||
|
||||
# Add Asar as subdirectory
|
||||
add_subdirectory(${ASAR_SRC_DIR} EXCLUDE_FROM_ALL)
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
# Dear ImGui dependency management
|
||||
# Uses the bundled ImGui in src/lib/imgui
|
||||
# Uses the bundled ImGui in ext/imgui
|
||||
|
||||
message(STATUS "Setting up Dear ImGui from bundled sources")
|
||||
|
||||
# Use the bundled ImGui from src/lib/imgui
|
||||
set(IMGUI_DIR ${CMAKE_SOURCE_DIR}/src/lib/imgui)
|
||||
# Use the bundled ImGui from ext/imgui
|
||||
set(IMGUI_DIR ${CMAKE_SOURCE_DIR}/ext/imgui)
|
||||
|
||||
# Create ImGui library with core files from bundled source
|
||||
add_library(ImGui STATIC
|
||||
@@ -35,7 +35,7 @@ message(STATUS "Created ImGui target from bundled source at ${IMGUI_DIR}")
|
||||
|
||||
# Create ImGui Test Engine for test automation (if tests are enabled)
|
||||
if(YAZE_BUILD_TESTS)
|
||||
set(IMGUI_TEST_ENGINE_DIR ${CMAKE_SOURCE_DIR}/src/lib/imgui_test_engine/imgui_test_engine)
|
||||
set(IMGUI_TEST_ENGINE_DIR ${CMAKE_SOURCE_DIR}/ext/imgui_test_engine/imgui_test_engine)
|
||||
|
||||
if(EXISTS ${IMGUI_TEST_ENGINE_DIR})
|
||||
set(IMGUI_TEST_ENGINE_SOURCES
|
||||
@@ -53,7 +53,7 @@ if(YAZE_BUILD_TESTS)
|
||||
target_include_directories(ImGuiTestEngine PUBLIC
|
||||
${IMGUI_DIR}
|
||||
${IMGUI_TEST_ENGINE_DIR}
|
||||
${CMAKE_SOURCE_DIR}/src/lib
|
||||
${CMAKE_SOURCE_DIR}/ext
|
||||
)
|
||||
target_compile_features(ImGuiTestEngine PUBLIC cxx_std_17)
|
||||
target_link_libraries(ImGuiTestEngine PUBLIC ImGui ${YAZE_SDL2_TARGETS})
|
||||
|
||||
@@ -4,14 +4,14 @@ if(NOT YAZE_ENABLE_JSON)
|
||||
return()
|
||||
endif()
|
||||
|
||||
message(STATUS "Setting up nlohmann_json with local third_party")
|
||||
message(STATUS "Setting up nlohmann_json with local ext directory")
|
||||
|
||||
# Use the bundled nlohmann_json from third_party
|
||||
# Use the bundled nlohmann_json from ext/json
|
||||
set(JSON_BuildTests OFF CACHE BOOL "" FORCE)
|
||||
set(JSON_Install OFF CACHE BOOL "" FORCE)
|
||||
set(JSON_MultipleHeaders OFF CACHE BOOL "" FORCE)
|
||||
|
||||
add_subdirectory(${CMAKE_SOURCE_DIR}/third_party/json EXCLUDE_FROM_ALL)
|
||||
add_subdirectory(${CMAKE_SOURCE_DIR}/ext/json EXCLUDE_FROM_ALL)
|
||||
|
||||
# Verify target is available
|
||||
if(TARGET nlohmann_json::nlohmann_json)
|
||||
@@ -25,10 +25,7 @@ else()
|
||||
endif()
|
||||
|
||||
# Export for use in other CMake files
|
||||
set(YAZE_JSON_TARGETS
|
||||
nlohmann_json::nlohmann_json
|
||||
PARENT_SCOPE
|
||||
)
|
||||
set(YAZE_JSON_TARGETS nlohmann_json::nlohmann_json CACHE INTERNAL "nlohmann_json targets")
|
||||
|
||||
message(STATUS "nlohmann_json setup complete")
|
||||
|
||||
|
||||
@@ -3,7 +3,8 @@
|
||||
|
||||
# Core build options
|
||||
option(YAZE_BUILD_GUI "Build GUI application" ON)
|
||||
option(YAZE_BUILD_CLI "Build CLI tools (z3ed)" ON)
|
||||
option(YAZE_BUILD_CLI "Build CLI tools (shared libraries)" ON)
|
||||
option(YAZE_BUILD_Z3ED "Build z3ed CLI executable" ON)
|
||||
option(YAZE_BUILD_EMU "Build emulator components" ON)
|
||||
option(YAZE_BUILD_LIB "Build static library" ON)
|
||||
option(YAZE_BUILD_TESTS "Build test suite" ON)
|
||||
@@ -13,6 +14,24 @@ option(YAZE_ENABLE_GRPC "Enable gRPC agent support" ON)
|
||||
option(YAZE_ENABLE_JSON "Enable JSON support" ON)
|
||||
option(YAZE_ENABLE_AI "Enable AI agent features" ON)
|
||||
|
||||
# Advanced feature toggles
|
||||
option(YAZE_ENABLE_REMOTE_AUTOMATION
|
||||
"Enable remote automation services (gRPC/protobuf servers + GUI automation clients)"
|
||||
${YAZE_ENABLE_GRPC})
|
||||
option(YAZE_ENABLE_AI_RUNTIME
|
||||
"Enable AI runtime integrations (Gemini/Ollama, advanced routing, proposal planning)"
|
||||
${YAZE_ENABLE_AI})
|
||||
option(YAZE_BUILD_AGENT_UI
|
||||
"Build ImGui-based agent/chat panels inside the GUI"
|
||||
${YAZE_BUILD_GUI})
|
||||
option(YAZE_ENABLE_AGENT_CLI
|
||||
"Build the conversational agent CLI stack (z3ed agent commands)"
|
||||
${YAZE_BUILD_CLI})
|
||||
|
||||
if((YAZE_BUILD_CLI OR YAZE_BUILD_Z3ED) AND NOT YAZE_ENABLE_AGENT_CLI)
|
||||
set(YAZE_ENABLE_AGENT_CLI ON CACHE BOOL "Build the conversational agent CLI stack (z3ed agent commands)" FORCE)
|
||||
endif()
|
||||
|
||||
# Build optimizations
|
||||
option(YAZE_ENABLE_LTO "Enable link-time optimization" OFF)
|
||||
option(YAZE_ENABLE_SANITIZERS "Enable AddressSanitizer/UBSanitizer" OFF)
|
||||
@@ -33,6 +52,14 @@ option(YAZE_INSTALL_LIB "Install static library" OFF)
|
||||
option(YAZE_INSTALL_HEADERS "Install public headers" ON)
|
||||
|
||||
# Set preprocessor definitions based on options
|
||||
if(YAZE_ENABLE_REMOTE_AUTOMATION AND NOT YAZE_ENABLE_GRPC)
|
||||
set(YAZE_ENABLE_GRPC ON CACHE BOOL "Enable gRPC agent support" FORCE)
|
||||
endif()
|
||||
|
||||
if(NOT YAZE_ENABLE_REMOTE_AUTOMATION)
|
||||
set(YAZE_ENABLE_GRPC OFF CACHE BOOL "Enable gRPC agent support" FORCE)
|
||||
endif()
|
||||
|
||||
if(YAZE_ENABLE_GRPC)
|
||||
add_compile_definitions(YAZE_WITH_GRPC)
|
||||
endif()
|
||||
@@ -41,6 +68,14 @@ if(YAZE_ENABLE_JSON)
|
||||
add_compile_definitions(YAZE_WITH_JSON)
|
||||
endif()
|
||||
|
||||
if(YAZE_ENABLE_AI_RUNTIME AND NOT YAZE_ENABLE_AI)
|
||||
set(YAZE_ENABLE_AI ON CACHE BOOL "Enable AI agent features" FORCE)
|
||||
endif()
|
||||
|
||||
if(NOT YAZE_ENABLE_AI_RUNTIME)
|
||||
set(YAZE_ENABLE_AI OFF CACHE BOOL "Enable AI agent features" FORCE)
|
||||
endif()
|
||||
|
||||
if(YAZE_ENABLE_AI)
|
||||
add_compile_definitions(Z3ED_AI)
|
||||
endif()
|
||||
@@ -49,12 +84,17 @@ endif()
|
||||
message(STATUS "=== YAZE Build Configuration ===")
|
||||
message(STATUS "GUI Application: ${YAZE_BUILD_GUI}")
|
||||
message(STATUS "CLI Tools: ${YAZE_BUILD_CLI}")
|
||||
message(STATUS "z3ed CLI: ${YAZE_BUILD_Z3ED}")
|
||||
message(STATUS "Emulator: ${YAZE_BUILD_EMU}")
|
||||
message(STATUS "Static Library: ${YAZE_BUILD_LIB}")
|
||||
message(STATUS "Tests: ${YAZE_BUILD_TESTS}")
|
||||
message(STATUS "gRPC Support: ${YAZE_ENABLE_GRPC}")
|
||||
message(STATUS "Remote Automation: ${YAZE_ENABLE_REMOTE_AUTOMATION}")
|
||||
message(STATUS "JSON Support: ${YAZE_ENABLE_JSON}")
|
||||
message(STATUS "AI Features: ${YAZE_ENABLE_AI}")
|
||||
message(STATUS "AI Runtime: ${YAZE_ENABLE_AI_RUNTIME}")
|
||||
message(STATUS "AI Features (legacy): ${YAZE_ENABLE_AI}")
|
||||
message(STATUS "Agent UI Panels: ${YAZE_BUILD_AGENT_UI}")
|
||||
message(STATUS "Agent CLI Stack: ${YAZE_ENABLE_AGENT_CLI}")
|
||||
message(STATUS "LTO: ${YAZE_ENABLE_LTO}")
|
||||
message(STATUS "Sanitizers: ${YAZE_ENABLE_SANITIZERS}")
|
||||
message(STATUS "Coverage: ${YAZE_ENABLE_COVERAGE}")
|
||||
|
||||
@@ -27,14 +27,14 @@ if(WIN32)
|
||||
endif()
|
||||
|
||||
# Fall back to bundled SDL if vcpkg not available or SDL2 not found
|
||||
if(EXISTS "${CMAKE_SOURCE_DIR}/src/lib/SDL/CMakeLists.txt")
|
||||
if(EXISTS "${CMAKE_SOURCE_DIR}/ext/SDL/CMakeLists.txt")
|
||||
message(STATUS "○ vcpkg SDL2 not found, using bundled SDL2")
|
||||
add_subdirectory(src/lib/SDL)
|
||||
add_subdirectory(ext/SDL)
|
||||
set(SDL_TARGETS SDL2-static)
|
||||
set(SDL2_INCLUDE_DIR
|
||||
${CMAKE_SOURCE_DIR}/src/lib/SDL/include
|
||||
${CMAKE_BINARY_DIR}/src/lib/SDL/include
|
||||
${CMAKE_BINARY_DIR}/src/lib/SDL/include-config-${CMAKE_BUILD_TYPE}
|
||||
${CMAKE_SOURCE_DIR}/ext/SDL/include
|
||||
${CMAKE_BINARY_DIR}/ext/SDL/include
|
||||
${CMAKE_BINARY_DIR}/ext/SDL/include-config-${CMAKE_BUILD_TYPE}
|
||||
)
|
||||
set(SDL2_INCLUDE_DIRS ${SDL2_INCLUDE_DIR})
|
||||
if(TARGET SDL2main)
|
||||
@@ -47,12 +47,12 @@ if(WIN32)
|
||||
endif()
|
||||
elseif(UNIX OR MINGW)
|
||||
# Non-Windows: use bundled SDL
|
||||
add_subdirectory(src/lib/SDL)
|
||||
add_subdirectory(ext/SDL)
|
||||
set(SDL_TARGETS SDL2-static)
|
||||
set(SDL2_INCLUDE_DIR
|
||||
${CMAKE_SOURCE_DIR}/src/lib/SDL/include
|
||||
${CMAKE_BINARY_DIR}/src/lib/SDL/include
|
||||
${CMAKE_BINARY_DIR}/src/lib/SDL/include-config-${CMAKE_BUILD_TYPE}
|
||||
${CMAKE_SOURCE_DIR}/ext/SDL/include
|
||||
${CMAKE_BINARY_DIR}/ext/SDL/include
|
||||
${CMAKE_BINARY_DIR}/ext/SDL/include-config-${CMAKE_BUILD_TYPE}
|
||||
)
|
||||
set(SDL2_INCLUDE_DIRS ${SDL2_INCLUDE_DIR})
|
||||
message(STATUS "Using bundled SDL2")
|
||||
|
||||
100
docs/internal/agents/ai-modularity.md
Normal file
100
docs/internal/agents/ai-modularity.md
Normal file
@@ -0,0 +1,100 @@
|
||||
# AI & gRPC Modularity Blueprint
|
||||
|
||||
*Date: November 16, 2025 – Author: GPT-5.1 Codex*
|
||||
|
||||
## 1. Scope & Goals
|
||||
|
||||
- Make AI/gRPC features optional without scattering `#ifdef` guards.
|
||||
- Ensure Windows builds succeed regardless of whether AI tooling is enabled.
|
||||
- Provide a migration path toward relocatable dependencies (`ext/`) and cleaner preset defaults for macOS + custom tiling window manager workflows (sketchybar/yabai/skhd, Emacs/Spacemacs).
|
||||
|
||||
## 2. Current Touchpoints
|
||||
|
||||
| Surface | Key Paths | Notes |
|
||||
| --- | --- | --- |
|
||||
| Editor UI | `src/app/editor/agent/**`, `app/gui/app/agent_chat_widget.cc`, `app/editor/agent/agent_chat_history_popup.cc` | Widgets always compile when `YAZE_ENABLE_GRPC=ON`, but they include protobuf types directly. |
|
||||
| Core Services | `src/app/service/grpc_support.cmake`, `app/service/*.cc`, `app/test/test_recorder.cc` | `yaze_grpc_support` bundles servers, generated protos, and even CLI code (`cli/service/planning/tile16_proposal_generator.cc`). |
|
||||
| CLI / z3ed | `src/cli/agent.cmake`, `src/cli/service/agent/*.cc`, `src/cli/service/ai/*.cc`, `src/cli/service/gui/*.cc` | gRPC, Gemeni/Ollama (JSON + httplib/OpenSSL) all live in one static lib. |
|
||||
| Build Flags | `cmake/options.cmake`, scattered `#ifdef Z3ED_AI` and `#ifdef Z3ED_AI_AVAILABLE` | Flags do not describe GUI vs CLI vs runtime needs, so every translation unit drags in gRPC headers once `YAZE_ENABLE_GRPC=ON`. |
|
||||
| Tests & Automation | `src/app/test/test_manager.cc`, `scripts/agent_test_suite.sh`, `.github/workflows/ci.yml` | Tests assume AI features exist; Windows agents hit linker issues when that assumption breaks. |
|
||||
|
||||
## 3. Coupling Pain Points
|
||||
|
||||
1. **Single Monolithic `yaze_agent`** – Links SDL, GUI, emulator, Abseil, yaml, nlohmann_json, httplib, OpenSSL, and gRPC simultaneously. No stubs exist when only CLI or GUI needs certain services (`src/cli/agent.cmake`).
|
||||
2. **Editor Hard Links** – `yaze_editor` unconditionally links `yaze_agent` when `YAZE_MINIMAL_BUILD` is `OFF`, so even ROM-editing-only builds drag in AI dependencies (`src/app/editor/editor_library.cmake`).
|
||||
3. **Shared Proto Targets** – `yaze_grpc_support` consumes CLI proto files, so editor-only builds still compile CLI automation code (`src/app/service/grpc_support.cmake`).
|
||||
4. **Preprocessor Guards** – UI code mixes `Z3ED_AI` and `Z3ED_AI_AVAILABLE`; CLI code checks `Z3ED_AI` while build system only defines `Z3ED_AI` when `YAZE_ENABLE_AI=ON`. These mismatches cause dead code paths and missing symbols.
|
||||
|
||||
## 4. Windows Build Blockers
|
||||
|
||||
- **Runtime library mismatch** – yaml-cpp and other dependencies are built `/MT` while `yaze_emu` uses `/MD`, causing cascades of `LNK2038` and `_Lockit`/`libcpmt` conflicts (`logs/windows_ci_linker_error.log`).
|
||||
- **OpenSSL duplication** – `yaze_agent` links cpp-httplib with OpenSSL while gRPC pulls BoringSSL, leading to duplicate symbol errors (`libssl.lib` vs `ssl.lib`) in the same log.
|
||||
- **Missing native dialogs** – `FileDialogWrapper` symbols fail to link when macOS-specific implementations are not excluded on Windows (also visible in the same log).
|
||||
- **Preset drift** – `win-ai` enables GRPC/AI without guaranteeing vcpkg/clang-cl or ROM assets; `win-dbg` disables gRPC entirely so editor agents fail to compile because of unconditional includes.
|
||||
|
||||
## 5. Proposed Modularization
|
||||
|
||||
| Proposed CMake Option | Purpose | Default | Notes |
|
||||
| --- | --- | --- | --- |
|
||||
| `YAZE_BUILD_AGENT_UI` | Compile ImGui agent widgets (editor). | `ON` for GUI presets, `OFF` elsewhere. | Controls `app/editor/agent/**` sources. |
|
||||
| `YAZE_ENABLE_REMOTE_AUTOMATION` | Build/ship gRPC servers & automation bridges. | `ON` in `*-ai` presets. | Owns `yaze_grpc_support` + proto generation. |
|
||||
| `YAZE_ENABLE_AI_RUNTIME` | Include AI runtime (Gemini/Ollama, CLI planners). | `ON` in CLI/AI presets. | Governs `cli/service/ai/**`. |
|
||||
| `YAZE_ENABLE_AGENT_CLI` | Build `z3ed` with full agent features. | `ON` when CLI requested. | Allows `z3ed` to be disabled independently. |
|
||||
|
||||
Implementation guidelines:
|
||||
|
||||
1. **Split Targets**
|
||||
- `yaze_agent_core`: command routing, ROM helpers, no AI.
|
||||
- `yaze_agent_ai`: depends on JSON + OpenSSL + remote automation.
|
||||
- `yaze_agent_ui_bridge`: tiny facade that editor links only when `YAZE_BUILD_AGENT_UI=ON`.
|
||||
2. **Proto Ownership**
|
||||
- Keep proto generation under `yaze_grpc_support`, but do not add CLI sources to that target. Instead, expose headers/libs and let CLI link them conditionally.
|
||||
3. **Stub Providers**
|
||||
- Provide header-compatible no-op classes (e.g., `AgentChatWidgetBridge::Create()` returning `nullptr`) when UI is disabled, removing the need for `#ifdef` in ImGui panels.
|
||||
4. **Dependency Injection**
|
||||
- Replace `#ifdef Z3ED_AI_AVAILABLE` in `agent_chat_widget.cc` with an interface returned from `AgentFeatures::MaybeCreateChatPanel()`.
|
||||
|
||||
## 6. Preset & Feature Matrix
|
||||
|
||||
| Preset | GUI | CLI | GRPC | AI Runtime | Agent UI |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| `mac-dbg` | ✅ | ✅ | ⚪ | ⚪ | ✅ |
|
||||
| `mac-ai` | ✅ | ✅ | ✅ | ✅ | ✅ |
|
||||
| `lin-dbg` | ✅ | ✅ | ⚪ | ⚪ | ✅ |
|
||||
| `ci-windows` | ✅ | ✅ | ⚪ | ⚪ | ⚪ (core only) |
|
||||
| `ci-windows-ai` (new nightly) | ✅ | ✅ | ✅ | ✅ | ✅ |
|
||||
| `win-dbg` | ✅ | ✅ | ⚪ | ⚪ | ✅ |
|
||||
| `win-ai` | ✅ | ✅ | ✅ | ✅ | ✅ |
|
||||
|
||||
Legend: ✅ enabled, ⚪ disabled.
|
||||
|
||||
## 7. Migration Steps
|
||||
|
||||
1. **Define Options** in `cmake/options.cmake` and propagate via presets.
|
||||
2. **Restructure Libraries**:
|
||||
- Move CLI AI/runtime code into `yaze_agent_ai`.
|
||||
- Add `yaze_agent_stub` for builds without AI.
|
||||
- Make `yaze_editor` link against stub/real target via generator expressions.
|
||||
3. **CMake Cleanup**:
|
||||
- Limit `yaze_grpc_support` to gRPC-only code.
|
||||
- Guard JSON/OpenSSL includes behind `YAZE_ENABLE_AI_RUNTIME`.
|
||||
4. **Windows Hardening**:
|
||||
- Force `/MD` everywhere and ensure yaml-cpp inherits `CMAKE_MSVC_RUNTIME_LIBRARY`.
|
||||
- Allow only one SSL provider based on feature set.
|
||||
- Add preset validation in `scripts/verify-build-environment.ps1`.
|
||||
5. **CI/CD Split**:
|
||||
- Current `.github/workflows/ci.yml` runs GRPC on all platforms; adjust to run minimal Windows build plus nightly AI build to save time and reduce flakiness.
|
||||
6. **Docs + Scripts**:
|
||||
- Update build guides to describe new options.
|
||||
- Document how macOS users can integrate headless builds with sketchybar/yabai/skhd (focus on CLI usage + automation).
|
||||
7. **External Dependencies**:
|
||||
- Relocate submodules to `ext/` and update scripts so the new layout is enforced before toggling feature flags.
|
||||
|
||||
## 8. Deliverables
|
||||
|
||||
- This blueprint (`docs/internal/agents/ai-modularity.md`).
|
||||
- Updated CMake options, presets, and stubs.
|
||||
- Hardened Windows build scripts/logging.
|
||||
- CI/CD workflow split + release automation updates.
|
||||
- Documentation refresh & dependency relocation.
|
||||
|
||||
@@ -108,7 +108,7 @@ Add `-v` suffix (e.g., `mac-dbg-v`) for verbose compiler warnings.
|
||||
**Problem**: Conflicting ImGui versions (bundled vs CPM download)
|
||||
|
||||
**Fixes**:
|
||||
- Used bundled ImGui from `src/lib/imgui/` instead of downloading
|
||||
- Used bundled ImGui from `ext/imgui/` instead of downloading
|
||||
- Created proper ImGui static library target
|
||||
- Added `imgui_stdlib.cpp` for std::string support
|
||||
- Exported with `PARENT_SCOPE`
|
||||
@@ -118,7 +118,7 @@ Add `-v` suffix (e.g., `mac-dbg-v`) for verbose compiler warnings.
|
||||
|
||||
**Fixes**:
|
||||
- Created `cmake/dependencies/json.cmake`
|
||||
- Set up bundled `third_party/json/`
|
||||
- Set up bundled `ext/json/`
|
||||
- Added include directories to all targets that need JSON
|
||||
|
||||
#### 7. GTest and GMock ✅
|
||||
|
||||
@@ -13,6 +13,7 @@ yaze uses a modern CMake build system with presets for easy configuration. This
|
||||
# With automatic fixes
|
||||
.\scripts\verify-build-environment.ps1 -FixIssues
|
||||
```
|
||||
> Tip: After verification, run `.\scripts\setup-vcpkg-windows.ps1` to bootstrap vcpkg, ensure `clang-cl`/Ninja are installed, and cache the `x64-windows` triplet.
|
||||
|
||||
### macOS & Linux (Bash)
|
||||
```bash
|
||||
@@ -53,6 +54,10 @@ cmake --preset win-dbg
|
||||
|
||||
# Build the project
|
||||
cmake --build --preset win-dbg
|
||||
|
||||
# Enable the full AI/gRPC stack
|
||||
cmake --preset win-ai
|
||||
cmake --build --preset win-ai
|
||||
```
|
||||
|
||||
### AI-Enabled Build (All Platforms)
|
||||
@@ -67,10 +72,31 @@ cmake --preset win-ai
|
||||
cmake --build --preset win-ai
|
||||
```
|
||||
|
||||
## Feature Toggles & Windows Profiles
|
||||
|
||||
### Windows Presets
|
||||
|
||||
| Preset | Purpose |
|
||||
| --- | --- |
|
||||
| `win-dbg`, `win-rel`, `ci-windows` | Core builds without agent UI, gRPC, or AI runtimes. Fastest option for MSVC/clang-cl. |
|
||||
| `win-ai`, `win-vs-ai` | Full agent stack for local development (UI panels + remote automation + AI runtime). |
|
||||
| `ci-windows-ai` | Nightly/weekly CI preset that exercises the entire automation stack on Windows. |
|
||||
|
||||
### Agent Feature Flags
|
||||
|
||||
| Option | Default | Effect |
|
||||
| --- | --- | --- |
|
||||
| `YAZE_BUILD_AGENT_UI` | `ON` when `YAZE_BUILD_GUI=ON` | Builds the ImGui widgets used by the chat/agent panels. |
|
||||
| `YAZE_ENABLE_REMOTE_AUTOMATION` | `ON` for `*-ai` presets | Adds gRPC/protobuf services plus GUI automation clients. |
|
||||
| `YAZE_ENABLE_AI_RUNTIME` | `ON` for `*-ai` presets | Enables Gemini/Ollama transports, proposal planning, and advanced routing logic. |
|
||||
| `YAZE_ENABLE_AGENT_CLI` | `ON` when `YAZE_BUILD_CLI=ON` | Compiles the conversational agent stack consumed by `z3ed`. |
|
||||
|
||||
Combine these switches to match your workflow: keep everything `OFF` for lightweight GUI hacking or turn them `ON` for automation-heavy work with sketchybar/yabai/skhd, tmux, or remote runners.
|
||||
|
||||
## 3. Dependencies
|
||||
|
||||
- **Required**: CMake 3.16+, C++23 Compiler (GCC 13+, Clang 16+, MSVC 2019+), Git.
|
||||
- **Bundled**: All other dependencies (SDL2, ImGui, Abseil, Asar, GoogleTest, etc.) are included as Git submodules or managed by CMake's `FetchContent`. No external package manager is required for a basic build.
|
||||
- **Bundled**: All other dependencies (SDL2, ImGui, Asar, nlohmann/json, cpp-httplib, GoogleTest, etc.) live under the `ext/` directory or are managed by CMake's `FetchContent`. No external package manager is required for a basic build.
|
||||
- **Optional**:
|
||||
- **gRPC**: For GUI test automation. Can be enabled with `-DYAZE_WITH_GRPC=ON`.
|
||||
- **vcpkg (Windows)**: Can be used for faster gRPC builds on Windows (optional).
|
||||
@@ -95,7 +121,8 @@ sudo apt-get install -y build-essential cmake ninja-build pkg-config \
|
||||
|
||||
### Windows
|
||||
- **Visual Studio 2022** is required, with the "Desktop development with C++" workload.
|
||||
- The `verify-build-environment.ps1` script will help identify any missing components.
|
||||
- The updated `verify-build-environment.ps1` script checks clang-cl, Ninja, vcpkg caches, and ROM assets.
|
||||
- Run `.\scripts\setup-vcpkg-windows.ps1` once per machine to bootstrap vcpkg and prefetch SDL2/yaml-cpp.
|
||||
- For building with gRPC, see the "Windows Build Optimization" section below.
|
||||
|
||||
## 5. Testing
|
||||
@@ -171,6 +198,7 @@ open build/yaze.xcodeproj
|
||||
- **vcpkg**: Only fast packages (SDL2, yaml-cpp) - 2 minutes
|
||||
- **gRPC**: Built via FetchContent (v1.75.1) - cached after first build
|
||||
- **Caching**: Aggressive multi-tier caching (vcpkg + FetchContent + sccache)
|
||||
- **Agent matrix**: A dedicated `ci-windows-ai` job runs outside pull requests to exercise the full gRPC + AI runtime stack.
|
||||
- **Expected time**:
|
||||
- First build: ~10-15 minutes
|
||||
- Cached build: ~3-5 minutes
|
||||
@@ -188,9 +216,8 @@ open build/yaze.xcodeproj
|
||||
For desktop development, you can use vcpkg for faster gRPC builds:
|
||||
|
||||
```powershell
|
||||
# Install vcpkg
|
||||
git clone https://github.com/Microsoft/vcpkg.git
|
||||
cd vcpkg && .\bootstrap-vcpkg.bat
|
||||
# Bootstrap vcpkg and prefetch packages
|
||||
.\scripts\setup-vcpkg-windows.ps1
|
||||
|
||||
# Configure with vcpkg
|
||||
cmake -B build -DYAZE_USE_VCPKG_GRPC=ON -DCMAKE_TOOLCHAIN_FILE=vcpkg/scripts/buildsystems/vcpkg.cmake
|
||||
|
||||
@@ -18,6 +18,10 @@ can treat it as a quick reference while editing.
|
||||
| `YAZE_ENABLE_GRPC` | `OFF` | Pulls in gRPC/protobuf for automation and remote control features. |
|
||||
| `YAZE_MINIMAL_BUILD` | `OFF` | Skips optional editors/assets. Useful for CI smoke builds. |
|
||||
| `YAZE_BUILD_LIB` | `OFF` | Produces the `yaze_core` INTERFACE target used by external tooling. |
|
||||
| `YAZE_BUILD_AGENT_UI` | `ON` when `YAZE_BUILD_GUI` is `ON` | Compiles ImGui chat widgets. Disable for lighter GUI builds. |
|
||||
| `YAZE_ENABLE_REMOTE_AUTOMATION` | `OFF` in `win-*` core presets | Builds gRPC servers/clients plus proto generation. |
|
||||
| `YAZE_ENABLE_AI_RUNTIME` | `OFF` in `win-*` core presets | Enables Gemini/Ollama transports, proposal planning, and advanced routing code. |
|
||||
| `YAZE_ENABLE_AGENT_CLI` | `ON` when `YAZE_BUILD_CLI` is `ON` | Compiles the conversational agent stack used by `z3ed`. |
|
||||
|
||||
Use the canned presets from `CMakePresets.json` so these options stay consistent across
|
||||
platforms: `mac-dbg`, `mac-ai`, `lin-dbg`, `win-dbg`, etc. The `*-ai` presets enable both
|
||||
@@ -58,12 +62,13 @@ alone. Touching editor UI code does **not** require rebuilding `yaze_emulator`.
|
||||
|
||||
### 4. Tooling & Export Targets
|
||||
- **`yaze_agent`** (`src/cli/agent`): shared logic behind the CLI and AI workflows. Built whenever
|
||||
`YAZE_BUILD_Z3ED` is enabled.
|
||||
`YAZE_ENABLE_AGENT_CLI` is enabled (automatically true when `YAZE_BUILD_Z3ED=ON`). When both the CLI and the agent UI are disabled, CMake now emits a lightweight stub target so GUI-only builds don't drag in unnecessary dependencies.
|
||||
- **`z3ed` binary** (`src/cli/z3ed.cmake`): links `yaze_agent`, `yaze_zelda3`, `yaze_gfx`, and
|
||||
Abseil/FTXUI.
|
||||
- **`yaze_core_lib`** (`src/core`): static library that exposes project management helpers and the
|
||||
Asar integration. When `YAZE_BUILD_LIB=ON` it can be consumed by external tools.
|
||||
- **`yaze_test_support`** (`src/app/test`): harness for the in-editor dashboard and `yaze_test`.
|
||||
- **`yaze_grpc_support`**: server-only aggregation of gRPC/protobuf code, gated by `YAZE_ENABLE_REMOTE_AUTOMATION`. CLI clients (`cli/service/gui/**`, `cli/service/planning/**`) now live solely in `yaze_agent` so GUI builds can opt out entirely.
|
||||
|
||||
### 5. Final Binaries
|
||||
- **`yaze`**: GUI editor. Links every layer plus `yaze_test_support` when tests are enabled.
|
||||
|
||||
@@ -115,3 +115,25 @@ cmake --build build --target build_cleaner
|
||||
- Other: `YAZE_AGENT_SOURCES`, `YAZE_TEST_SOURCES`
|
||||
|
||||
The script intelligently preserves conditional blocks (if/endif) and excludes conditional files from the main source list.
|
||||
|
||||
## verify-build-environment.\*
|
||||
|
||||
`verify-build-environment.ps1` (Windows) and `verify-build-environment.sh` (macOS/Linux) are the primary diagnostics for contributors. They now:
|
||||
|
||||
- Check for `clang-cl`, Ninja, NASM, Visual Studio workloads, and VS Code (optional).
|
||||
- Validate vcpkg bootstrap status plus `vcpkg/installed` cache contents.
|
||||
- Warn about missing ROM assets (`zelda3.sfc`, `assets/zelda3.sfc`, etc.).
|
||||
- Offer `-FixIssues` and `-CleanCache` switches to repair Git config, resync submodules, and wipe stale build directories.
|
||||
|
||||
Run the script once per machine (and rerun after major toolchain updates) to ensure presets such as `win-dbg`, `win-ai`, `mac-ai`, and `ci-windows-ai` have everything they need.
|
||||
|
||||
## setup-vcpkg-windows.ps1
|
||||
|
||||
Automates the vcpkg bootstrap flow on Windows:
|
||||
|
||||
1. Clones and bootstraps vcpkg (if not already present).
|
||||
2. Verifies that `git`, `clang-cl`, and Ninja are available, printing friendly instructions when they are missing.
|
||||
3. Installs the default triplet (`x64-windows` or `arm64-windows` when detected) and confirms that `vcpkg/installed/<triplet>` is populated.
|
||||
4. Reminds you to rerun `.\scripts\verify-build-environment.ps1 -FixIssues` to double-check the environment.
|
||||
|
||||
Use it immediately after cloning the repository or whenever you need to refresh your local dependency cache before running `win-ai` or `ci-windows-ai` presets.
|
||||
|
||||
@@ -65,6 +65,22 @@ if (-not (Test-Command "git")) {
|
||||
|
||||
Write-Status "✓ Git found" "Success"
|
||||
|
||||
# Check for clang-cl
|
||||
if (Test-Command "clang-cl") {
|
||||
$clangVersion = & clang-cl --version 2>&1 | Select-Object -First 1
|
||||
Write-Status "✓ clang-cl detected: $clangVersion" "Success"
|
||||
} else {
|
||||
Write-Status "⚠ clang-cl not found. Install the \"LLVM tools for Visual Studio\" component for faster builds." "Warning"
|
||||
}
|
||||
|
||||
# Check for Ninja
|
||||
if (Test-Command "ninja") {
|
||||
$ninjaVersion = & ninja --version 2>&1
|
||||
Write-Status "✓ Ninja detected: version $ninjaVersion" "Success"
|
||||
} else {
|
||||
Write-Status "⚠ Ninja not found. Install via: choco install ninja (required for win-dbg/win-ai presets)" "Warning"
|
||||
}
|
||||
|
||||
# Clone vcpkg if needed
|
||||
if (-not (Test-Path "vcpkg")) {
|
||||
Write-Status "Cloning vcpkg..." "Warning"
|
||||
@@ -102,6 +118,12 @@ Write-Status "Installing dependencies for triplet: $Triplet" "Warning"
|
||||
& $vcpkgExe install --triplet $Triplet
|
||||
if ($LASTEXITCODE -eq 0) {
|
||||
Write-Status "✓ Dependencies installed successfully" "Success"
|
||||
$installedPath = "vcpkg\installed\$Triplet"
|
||||
if (Test-Path $installedPath) {
|
||||
Write-Status "✓ Cached packages under $installedPath" "Success"
|
||||
} else {
|
||||
Write-Status "⚠ vcpkg install folder missing (expected $installedPath). Builds may rebuild dependencies on first run." "Warning"
|
||||
}
|
||||
} else {
|
||||
Write-Status "⚠ Some dependencies may not have installed correctly" "Warning"
|
||||
}
|
||||
@@ -112,4 +134,6 @@ Write-Status "========================================" "Info"
|
||||
Write-Status ""
|
||||
Write-Status "You can now build YAZE using:" "Warning"
|
||||
Write-Status " .\scripts\build-windows.ps1" "White"
|
||||
Write-Status ""
|
||||
Write-Status "For ongoing diagnostics run: .\scripts\verify-build-environment.ps1 -FixIssues" "Info"
|
||||
Write-Status ""
|
||||
@@ -56,12 +56,14 @@ function Get-CMakeVersion {
|
||||
|
||||
function Test-GitSubmodules {
|
||||
$submodules = @(
|
||||
"src/lib/SDL",
|
||||
"ext/SDL",
|
||||
"src/lib/abseil-cpp",
|
||||
"src/lib/asar",
|
||||
"src/lib/imgui",
|
||||
"third_party/json",
|
||||
"third_party/httplib"
|
||||
"ext/asar",
|
||||
"ext/imgui",
|
||||
"ext/json",
|
||||
"ext/httplib",
|
||||
"ext/imgui_test_engine",
|
||||
"ext/nativefiledialog-extended"
|
||||
)
|
||||
|
||||
$allPresent = $true
|
||||
@@ -165,6 +167,36 @@ function Test-Vcpkg {
|
||||
}
|
||||
}
|
||||
|
||||
function Test-VcpkgCache {
|
||||
$vcpkgPath = Join-Path $PSScriptRoot ".." "vcpkg"
|
||||
$installedDir = Join-Path $vcpkgPath "installed"
|
||||
|
||||
if (-not (Test-Path $installedDir)) {
|
||||
return
|
||||
}
|
||||
|
||||
$triplets = @("x64-windows", "arm64-windows")
|
||||
$hasPackages = $false
|
||||
|
||||
foreach ($triplet in $triplets) {
|
||||
$tripletDir = Join-Path $installedDir $triplet
|
||||
if (Test-Path $tripletDir) {
|
||||
$count = (Get-ChildItem $tripletDir -Force | Measure-Object).Count
|
||||
if ($count -gt 0) {
|
||||
$hasPackages = $true
|
||||
Write-Status "vcpkg cache populated for $triplet" "Success"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (-not $hasPackages) {
|
||||
Write-Status "vcpkg/installed is empty. Run scripts\\setup-vcpkg-windows.ps1 to prefetch dependencies." "Warning"
|
||||
$script:warnings += "vcpkg cache empty - builds may spend extra time compiling dependencies."
|
||||
} else {
|
||||
$script:success += "vcpkg cache ready for Windows presets"
|
||||
}
|
||||
}
|
||||
|
||||
function Test-CMakeCache {
|
||||
$buildDirs = @("build", "build-windows", "build-test", "build-ai", "out/build")
|
||||
$cacheIssues = $false
|
||||
@@ -279,6 +311,25 @@ function Test-Ninja {
|
||||
}
|
||||
}
|
||||
|
||||
function Test-ClangCL {
|
||||
Write-Status "Checking clang-cl compiler..." "Step"
|
||||
if (Test-Command "clang-cl") {
|
||||
try {
|
||||
$clangVersion = & clang-cl --version 2>&1 | Select-Object -First 1
|
||||
Write-Status "clang-cl found: $clangVersion" "Success"
|
||||
$script:success += "clang-cl available (recommended for win-* presets)"
|
||||
return $true
|
||||
} catch {
|
||||
Write-Status "clang-cl command exists but version check failed" "Warning"
|
||||
return $true
|
||||
}
|
||||
} else {
|
||||
Write-Status "clang-cl not found (LLVM toolset for MSVC missing?)" "Warning"
|
||||
$script:warnings += "Install the \"LLVM tools for Visual Studio\" component or enable clang-cl via Visual Studio Installer."
|
||||
return $false
|
||||
}
|
||||
}
|
||||
|
||||
function Test-NASM {
|
||||
Write-Status "Checking NASM assembler..." "Step"
|
||||
if (Test-Command "nasm") {
|
||||
@@ -346,6 +397,28 @@ function Test-VSCode {
|
||||
}
|
||||
}
|
||||
|
||||
function Test-RomAssets {
|
||||
Write-Status "Checking for local Zelda 3 ROM assets..." "Step"
|
||||
$romPaths = @(
|
||||
"zelda3.sfc",
|
||||
"assets/zelda3.sfc",
|
||||
"assets/zelda3.yaze",
|
||||
"Roms/zelda3.sfc"
|
||||
)
|
||||
|
||||
foreach ($relativePath in $romPaths) {
|
||||
$fullPath = Join-Path $PSScriptRoot ".." $relativePath
|
||||
if (Test-Path $fullPath) {
|
||||
Write-Status "Found ROM asset at '$relativePath'" "Success"
|
||||
$script:success += "ROM asset available for GUI/editor smoke tests"
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
Write-Status "No ROM asset detected. Place a clean 'zelda3.sfc' in the repo root or assets/ directory." "Warning"
|
||||
$script:warnings += "ROM assets missing - GUI workflows that load ROMs will fail until one is provided."
|
||||
}
|
||||
|
||||
function Test-CMakePresets {
|
||||
Write-Status "Validating CMakePresets.json..." "Step"
|
||||
|
||||
@@ -492,8 +565,9 @@ if (Test-Command "git") {
|
||||
$script:issuesFound += "Git not installed or not in PATH"
|
||||
}
|
||||
|
||||
# Step 3: Check Build Tools (Ninja and NASM)
|
||||
# Step 3: Check Build Tools (Ninja, clang-cl, NASM)
|
||||
Test-Ninja | Out-Null
|
||||
Test-ClangCL | Out-Null
|
||||
Test-NASM | Out-Null
|
||||
|
||||
# Step 4: Check Visual Studio
|
||||
@@ -528,6 +602,7 @@ Test-CMakePresets | Out-Null
|
||||
|
||||
# Step 7: Check vcpkg
|
||||
Test-Vcpkg | Out-Null
|
||||
Test-VcpkgCache | Out-Null
|
||||
|
||||
# Step 8: Check Git Submodules
|
||||
Write-Status "Checking git submodules..." "Step"
|
||||
@@ -564,6 +639,9 @@ if (Test-CMakeCache) {
|
||||
}
|
||||
}
|
||||
|
||||
# Step 10: Check ROM assets
|
||||
Test-RomAssets | Out-Null
|
||||
|
||||
# ============================================================================
|
||||
# Summary Report
|
||||
# ============================================================================
|
||||
|
||||
@@ -90,12 +90,14 @@ function get_cmake_version() {
|
||||
|
||||
function test_git_submodules() {
|
||||
local submodules=(
|
||||
"src/lib/SDL"
|
||||
"src/lib/abseil-cpp"
|
||||
"src/lib/asar"
|
||||
"src/lib/imgui"
|
||||
"third_party/json"
|
||||
"third_party/httplib"
|
||||
"ext/SDL"
|
||||
"src/lib/abseil-cpp"
|
||||
"ext/asar"
|
||||
"ext/imgui"
|
||||
"ext/json"
|
||||
"ext/httplib"
|
||||
"ext/imgui_test_engine"
|
||||
"ext/nativefiledialog-extended"
|
||||
)
|
||||
|
||||
local all_present=1
|
||||
@@ -242,14 +244,14 @@ function test_dependency_compatibility() {
|
||||
write_status "Testing dependency configuration..." "Step"
|
||||
|
||||
# Check httplib configuration
|
||||
if [[ -f "third_party/httplib/CMakeLists.txt" ]]; then
|
||||
write_status "httplib found in third_party" "Success"
|
||||
if [[ -f "ext/httplib/CMakeLists.txt" ]]; then
|
||||
write_status "httplib found in ext/" "Success"
|
||||
SUCCESS+=("httplib header-only library available")
|
||||
fi
|
||||
|
||||
# Check json library
|
||||
if [[ -d "third_party/json/include" ]]; then
|
||||
write_status "nlohmann/json found in third_party" "Success"
|
||||
if [[ -d "ext/json/include" ]]; then
|
||||
write_status "nlohmann/json found in ext/" "Success"
|
||||
SUCCESS+=("nlohmann/json header-only library available")
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -77,7 +77,7 @@ if(YAZE_BUILD_TESTS OR NOT YAZE_MINIMAL_BUILD)
|
||||
endif()
|
||||
|
||||
# Include gRPC support library (consolidates all protobuf/gRPC usage)
|
||||
if(YAZE_ENABLE_GRPC)
|
||||
if(YAZE_ENABLE_REMOTE_AUTOMATION)
|
||||
include(app/service/grpc_support.cmake)
|
||||
endif()
|
||||
|
||||
|
||||
@@ -47,8 +47,8 @@ if(APPLE)
|
||||
target_include_directories(yaze_app_objcxx PUBLIC
|
||||
${CMAKE_SOURCE_DIR}/src
|
||||
${CMAKE_SOURCE_DIR}/src/app
|
||||
${CMAKE_SOURCE_DIR}/src/lib
|
||||
${CMAKE_SOURCE_DIR}/src/lib/imgui
|
||||
${CMAKE_SOURCE_DIR}/ext
|
||||
${CMAKE_SOURCE_DIR}/ext/imgui
|
||||
${CMAKE_SOURCE_DIR}/incl
|
||||
${PROJECT_BINARY_DIR}
|
||||
)
|
||||
@@ -75,8 +75,8 @@ target_precompile_headers(yaze_app_core_lib PRIVATE
|
||||
target_include_directories(yaze_app_core_lib PUBLIC
|
||||
${CMAKE_SOURCE_DIR}/src
|
||||
${CMAKE_SOURCE_DIR}/src/app
|
||||
${CMAKE_SOURCE_DIR}/src/lib
|
||||
${CMAKE_SOURCE_DIR}/src/lib/imgui
|
||||
${CMAKE_SOURCE_DIR}/ext
|
||||
${CMAKE_SOURCE_DIR}/ext/imgui
|
||||
${CMAKE_SOURCE_DIR}/incl
|
||||
${SDL2_INCLUDE_DIR}
|
||||
${PROJECT_BINARY_DIR}
|
||||
@@ -96,15 +96,15 @@ target_link_libraries(yaze_app_core_lib PUBLIC
|
||||
|
||||
# Link nativefiledialog-extended for Windows/Linux file dialogs
|
||||
if(WIN32 OR (UNIX AND NOT APPLE))
|
||||
add_subdirectory(${CMAKE_SOURCE_DIR}/src/lib/nativefiledialog-extended ${CMAKE_BINARY_DIR}/nfd EXCLUDE_FROM_ALL)
|
||||
add_subdirectory(${CMAKE_SOURCE_DIR}/ext/nativefiledialog-extended ${CMAKE_BINARY_DIR}/nfd EXCLUDE_FROM_ALL)
|
||||
target_link_libraries(yaze_app_core_lib PUBLIC nfd)
|
||||
target_include_directories(yaze_app_core_lib PUBLIC ${CMAKE_SOURCE_DIR}/src/lib/nativefiledialog-extended/src/include)
|
||||
target_include_directories(yaze_app_core_lib PUBLIC ${CMAKE_SOURCE_DIR}/ext/nativefiledialog-extended/src/include)
|
||||
endif()
|
||||
|
||||
# gRPC Services (Optional)
|
||||
if(YAZE_WITH_GRPC)
|
||||
target_include_directories(yaze_app_core_lib PRIVATE
|
||||
${CMAKE_SOURCE_DIR}/third_party/json/include)
|
||||
${CMAKE_SOURCE_DIR}/ext/json/include)
|
||||
target_compile_definitions(yaze_app_core_lib PRIVATE YAZE_WITH_JSON)
|
||||
|
||||
# Link to consolidated gRPC support library
|
||||
|
||||
@@ -57,7 +57,7 @@ set(
|
||||
app/editor/ui/workspace_manager.cc
|
||||
)
|
||||
|
||||
if(YAZE_ENABLE_GRPC)
|
||||
if(YAZE_BUILD_AGENT_UI)
|
||||
list(APPEND YAZE_APP_EDITOR_SRC
|
||||
app/editor/agent/agent_editor.cc
|
||||
app/editor/agent/agent_chat_widget.cc
|
||||
@@ -95,9 +95,9 @@ target_precompile_headers(yaze_editor PRIVATE
|
||||
|
||||
target_include_directories(yaze_editor PUBLIC
|
||||
${CMAKE_SOURCE_DIR}/src
|
||||
${CMAKE_SOURCE_DIR}/src/lib
|
||||
${CMAKE_SOURCE_DIR}/src/lib/imgui
|
||||
${CMAKE_SOURCE_DIR}/src/lib/imgui_test_engine
|
||||
${CMAKE_SOURCE_DIR}/ext
|
||||
${CMAKE_SOURCE_DIR}/ext/imgui
|
||||
${CMAKE_SOURCE_DIR}/ext/imgui_test_engine
|
||||
${CMAKE_SOURCE_DIR}/incl
|
||||
${SDL2_INCLUDE_DIR}
|
||||
${PROJECT_BINARY_DIR}
|
||||
@@ -114,11 +114,13 @@ target_link_libraries(yaze_editor PUBLIC
|
||||
ImGui
|
||||
)
|
||||
|
||||
# Link agent library for AI features (always available when not in minimal build)
|
||||
if(NOT YAZE_MINIMAL_BUILD)
|
||||
# Link agent runtime only when agent UI panels are enabled
|
||||
if(YAZE_BUILD_AGENT_UI AND NOT YAZE_MINIMAL_BUILD)
|
||||
if(TARGET yaze_agent)
|
||||
target_link_libraries(yaze_editor PUBLIC yaze_agent)
|
||||
message(STATUS "✓ yaze_editor linked to yaze_agent")
|
||||
message(STATUS "✓ yaze_editor linked to yaze_agent (UI panels)")
|
||||
else()
|
||||
message(WARNING "Agent UI requested but yaze_agent target not found")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@@ -126,7 +128,7 @@ endif()
|
||||
|
||||
if(YAZE_WITH_JSON)
|
||||
target_include_directories(yaze_editor PUBLIC
|
||||
${CMAKE_SOURCE_DIR}/third_party/json/include)
|
||||
${CMAKE_SOURCE_DIR}/ext/json/include)
|
||||
|
||||
if(TARGET nlohmann_json::nlohmann_json)
|
||||
target_link_libraries(yaze_editor PUBLIC nlohmann_json::nlohmann_json)
|
||||
|
||||
@@ -29,10 +29,10 @@ target_precompile_headers(yaze_net PRIVATE
|
||||
|
||||
target_include_directories(yaze_net PUBLIC
|
||||
${CMAKE_SOURCE_DIR}/src
|
||||
${CMAKE_SOURCE_DIR}/src/lib
|
||||
${CMAKE_SOURCE_DIR}/src/lib/imgui
|
||||
${CMAKE_SOURCE_DIR}/third_party/json/include
|
||||
${CMAKE_SOURCE_DIR}/third_party/httplib
|
||||
${CMAKE_SOURCE_DIR}/ext
|
||||
${CMAKE_SOURCE_DIR}/ext/imgui
|
||||
${CMAKE_SOURCE_DIR}/ext/json/include
|
||||
${CMAKE_SOURCE_DIR}/ext/httplib
|
||||
${PROJECT_BINARY_DIR}
|
||||
)
|
||||
|
||||
@@ -47,7 +47,7 @@ target_link_libraries(yaze_net PUBLIC
|
||||
if(YAZE_WITH_JSON)
|
||||
# Link nlohmann_json which provides the include directories automatically
|
||||
target_link_libraries(yaze_net PUBLIC nlohmann_json::nlohmann_json)
|
||||
target_include_directories(yaze_net PUBLIC ${CMAKE_SOURCE_DIR}/third_party/httplib)
|
||||
target_include_directories(yaze_net PUBLIC ${CMAKE_SOURCE_DIR}/ext/httplib)
|
||||
target_compile_definitions(yaze_net PUBLIC YAZE_WITH_JSON)
|
||||
|
||||
# Add threading support (cross-platform)
|
||||
|
||||
@@ -21,10 +21,6 @@ set(
|
||||
# Test infrastructure
|
||||
app/test/test_recorder.cc
|
||||
app/test/test_script_parser.cc
|
||||
|
||||
# CLI agent gRPC client code (only files that actually exist)
|
||||
cli/service/planning/tile16_proposal_generator.cc
|
||||
cli/service/gui/gui_automation_client.cc
|
||||
)
|
||||
|
||||
add_library(yaze_grpc_support STATIC ${YAZE_GRPC_SOURCES})
|
||||
@@ -36,9 +32,9 @@ target_precompile_headers(yaze_grpc_support PRIVATE
|
||||
target_include_directories(yaze_grpc_support PUBLIC
|
||||
${CMAKE_SOURCE_DIR}/src
|
||||
${CMAKE_SOURCE_DIR}/src/app
|
||||
${CMAKE_SOURCE_DIR}/src/lib
|
||||
${CMAKE_SOURCE_DIR}/src/lib/imgui
|
||||
${CMAKE_SOURCE_DIR}/src/lib/imgui_test_engine
|
||||
${CMAKE_SOURCE_DIR}/ext
|
||||
${CMAKE_SOURCE_DIR}/ext/imgui
|
||||
${CMAKE_SOURCE_DIR}/ext/imgui_test_engine
|
||||
${CMAKE_SOURCE_DIR}/incl
|
||||
${SDL2_INCLUDE_DIR}
|
||||
${PROJECT_BINARY_DIR}
|
||||
@@ -60,7 +56,7 @@ target_link_libraries(yaze_grpc_support PUBLIC
|
||||
# Add JSON support
|
||||
if(YAZE_WITH_JSON)
|
||||
target_include_directories(yaze_grpc_support PUBLIC
|
||||
${CMAKE_SOURCE_DIR}/third_party/json/include)
|
||||
${CMAKE_SOURCE_DIR}/ext/json/include)
|
||||
target_compile_definitions(yaze_grpc_support PUBLIC YAZE_WITH_JSON)
|
||||
endif()
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ target_precompile_headers(yaze_test_support PRIVATE
|
||||
target_include_directories(yaze_test_support PUBLIC
|
||||
${CMAKE_SOURCE_DIR}/src
|
||||
${CMAKE_SOURCE_DIR}/incl
|
||||
${CMAKE_SOURCE_DIR}/src/lib
|
||||
${CMAKE_SOURCE_DIR}/ext
|
||||
${PROJECT_BINARY_DIR}
|
||||
)
|
||||
|
||||
@@ -43,7 +43,7 @@ target_link_libraries(yaze_test_support PUBLIC
|
||||
# Add gRPC dependencies if test harness is enabled
|
||||
if(YAZE_WITH_GRPC)
|
||||
target_include_directories(yaze_test_support PRIVATE
|
||||
${CMAKE_SOURCE_DIR}/third_party/json/include)
|
||||
${CMAKE_SOURCE_DIR}/ext/json/include)
|
||||
target_compile_definitions(yaze_test_support PRIVATE YAZE_WITH_JSON)
|
||||
|
||||
# Link to consolidated gRPC support library
|
||||
|
||||
@@ -1,4 +1,21 @@
|
||||
set(YAZE_AGENT_SOURCES
|
||||
set(_YAZE_NEEDS_AGENT FALSE)
|
||||
if(YAZE_ENABLE_AGENT_CLI AND (YAZE_BUILD_CLI OR YAZE_BUILD_Z3ED))
|
||||
set(_YAZE_NEEDS_AGENT TRUE)
|
||||
endif()
|
||||
if(YAZE_BUILD_AGENT_UI)
|
||||
set(_YAZE_NEEDS_AGENT TRUE)
|
||||
endif()
|
||||
if(YAZE_BUILD_TESTS AND NOT YAZE_MINIMAL_BUILD)
|
||||
set(_YAZE_NEEDS_AGENT TRUE)
|
||||
endif()
|
||||
|
||||
if(NOT _YAZE_NEEDS_AGENT)
|
||||
add_library(yaze_agent INTERFACE)
|
||||
message(STATUS "yaze_agent stubbed out (agent CLI/UI disabled)")
|
||||
return()
|
||||
endif()
|
||||
|
||||
set(YAZE_AGENT_CORE_SOURCES
|
||||
# Core infrastructure
|
||||
cli/flags.cc
|
||||
cli/handlers/agent.cc
|
||||
@@ -30,31 +47,19 @@ set(YAZE_AGENT_SOURCES
|
||||
cli/handlers/rom/rom_commands.cc
|
||||
cli/handlers/tools/gui_commands.cc
|
||||
cli/handlers/tools/resource_commands.cc
|
||||
cli/service/agent/advanced_routing.cc
|
||||
cli/service/agent/agent_pretraining.cc
|
||||
cli/service/agent/conversational_agent_service.cc
|
||||
cli/service/agent/enhanced_tui.cc
|
||||
cli/service/agent/learned_knowledge_service.cc
|
||||
cli/service/agent/prompt_manager.cc
|
||||
cli/service/agent/proposal_executor.cc
|
||||
cli/service/agent/simple_chat_session.cc
|
||||
cli/service/agent/todo_manager.cc
|
||||
cli/service/agent/tool_dispatcher.cc
|
||||
cli/service/agent/vim_mode.cc
|
||||
cli/service/ai/ai_action_parser.cc
|
||||
cli/service/ai/ai_gui_controller.cc
|
||||
cli/service/ai/ai_service.cc
|
||||
cli/service/ai/ollama_ai_service.cc
|
||||
cli/service/ai/prompt_builder.cc
|
||||
cli/service/ai/service_factory.cc
|
||||
cli/service/ai/vision_action_refiner.cc
|
||||
cli/service/command_registry.cc
|
||||
cli/service/gui/gui_action_generator.cc
|
||||
cli/service/gui/gui_automation_client.cc
|
||||
cli/service/net/z3ed_network_client.cc
|
||||
cli/service/planning/policy_evaluator.cc
|
||||
cli/service/planning/proposal_registry.cc
|
||||
cli/service/planning/tile16_proposal_generator.cc
|
||||
cli/service/resources/command_context.cc
|
||||
cli/service/resources/command_handler.cc
|
||||
cli/service/resources/resource_catalog.cc
|
||||
@@ -70,16 +75,36 @@ set(YAZE_AGENT_SOURCES
|
||||
# ROM commands
|
||||
)
|
||||
|
||||
# gRPC-dependent sources (only added when gRPC is enabled)
|
||||
if(YAZE_ENABLE_GRPC)
|
||||
# AI runtime sources
|
||||
if(YAZE_ENABLE_AI_RUNTIME)
|
||||
list(APPEND YAZE_AGENT_CORE_SOURCES
|
||||
cli/service/agent/advanced_routing.cc
|
||||
cli/service/agent/agent_pretraining.cc
|
||||
cli/service/agent/proposal_executor.cc
|
||||
cli/service/ai/ai_action_parser.cc
|
||||
cli/service/ai/ai_gui_controller.cc
|
||||
cli/service/ai/ai_service.cc
|
||||
cli/service/ai/ollama_ai_service.cc
|
||||
cli/service/ai/prompt_builder.cc
|
||||
cli/service/ai/service_factory.cc
|
||||
cli/service/ai/vision_action_refiner.cc
|
||||
)
|
||||
endif()
|
||||
|
||||
set(YAZE_AGENT_SOURCES ${YAZE_AGENT_CORE_SOURCES})
|
||||
|
||||
# gRPC-dependent sources (only added when remote automation is enabled)
|
||||
if(YAZE_ENABLE_REMOTE_AUTOMATION)
|
||||
list(APPEND YAZE_AGENT_SOURCES
|
||||
cli/service/agent/agent_control_server.cc
|
||||
cli/service/agent/emulator_service_impl.cc
|
||||
cli/handlers/tools/emulator_commands.cc
|
||||
cli/service/gui/gui_automation_client.cc
|
||||
cli/service/planning/tile16_proposal_generator.cc
|
||||
)
|
||||
endif()
|
||||
|
||||
if(YAZE_ENABLE_JSON)
|
||||
if(YAZE_ENABLE_AI_RUNTIME AND YAZE_ENABLE_JSON)
|
||||
list(APPEND YAZE_AGENT_SOURCES cli/service/ai/gemini_ai_service.cc)
|
||||
endif()
|
||||
|
||||
@@ -106,23 +131,26 @@ target_include_directories(yaze_agent
|
||||
PUBLIC
|
||||
${CMAKE_SOURCE_DIR}/src
|
||||
${CMAKE_SOURCE_DIR}/incl
|
||||
${CMAKE_SOURCE_DIR}/third_party/httplib
|
||||
${CMAKE_SOURCE_DIR}/third_party/json/include
|
||||
${CMAKE_SOURCE_DIR}/ext/httplib
|
||||
${CMAKE_SOURCE_DIR}/src/lib
|
||||
${CMAKE_SOURCE_DIR}/src/cli/handlers
|
||||
)
|
||||
|
||||
if(YAZE_ENABLE_AI_RUNTIME AND YAZE_ENABLE_JSON)
|
||||
target_include_directories(yaze_agent PUBLIC ${CMAKE_SOURCE_DIR}/ext/json/include)
|
||||
endif()
|
||||
|
||||
if(SDL2_INCLUDE_DIR)
|
||||
target_include_directories(yaze_agent PUBLIC ${SDL2_INCLUDE_DIR})
|
||||
endif()
|
||||
|
||||
if(YAZE_ENABLE_JSON)
|
||||
if(YAZE_ENABLE_AI_RUNTIME AND YAZE_ENABLE_JSON)
|
||||
target_link_libraries(yaze_agent PUBLIC nlohmann_json::nlohmann_json)
|
||||
target_compile_definitions(yaze_agent PUBLIC YAZE_WITH_JSON)
|
||||
|
||||
# Only link OpenSSL if gRPC is NOT enabled (to avoid duplicate symbol errors)
|
||||
# When gRPC is enabled, it brings its own OpenSSL which we'll use instead
|
||||
if(NOT YAZE_ENABLE_GRPC)
|
||||
if(NOT YAZE_ENABLE_REMOTE_AUTOMATION)
|
||||
find_package(OpenSSL)
|
||||
if(OpenSSL_FOUND)
|
||||
target_compile_definitions(yaze_agent PUBLIC CPPHTTPLIB_OPENSSL_SUPPORT)
|
||||
@@ -150,7 +178,7 @@ if(YAZE_ENABLE_JSON)
|
||||
endif()
|
||||
|
||||
# Add gRPC support for GUI automation
|
||||
if(YAZE_ENABLE_GRPC)
|
||||
if(YAZE_ENABLE_REMOTE_AUTOMATION)
|
||||
# Link to consolidated gRPC support library
|
||||
target_link_libraries(yaze_agent PUBLIC yaze_grpc_support)
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
# Add ASAR library subdirectory
|
||||
# TODO: Fix ASAR CMakeLists.txt macro errors
|
||||
# add_subdirectory(${CMAKE_SOURCE_DIR}/src/lib/asar/src/asar ${CMAKE_BINARY_DIR}/asar)
|
||||
# add_subdirectory(${CMAKE_SOURCE_DIR}/ext/asar/src/asar ${CMAKE_BINARY_DIR}/asar)
|
||||
|
||||
# Core library sources
|
||||
set(YAZE_CORE_LIB_SOURCES
|
||||
@@ -28,10 +28,10 @@ target_compile_features(yaze_core_lib PUBLIC cxx_std_20)
|
||||
target_include_directories(yaze_core_lib PUBLIC
|
||||
${CMAKE_SOURCE_DIR}/src
|
||||
${CMAKE_SOURCE_DIR}/src/app # Needed for app/gui/core/icons.h temporarily
|
||||
${CMAKE_SOURCE_DIR}/src/lib/asar/src
|
||||
${CMAKE_SOURCE_DIR}/src/lib/asar/src/asar
|
||||
${CMAKE_SOURCE_DIR}/src/lib/asar/src/asar-dll-bindings/c
|
||||
${CMAKE_SOURCE_DIR}/src/lib/imgui # Needed for ImGui in project.cc temporarily
|
||||
${CMAKE_SOURCE_DIR}/ext/asar/src
|
||||
${CMAKE_SOURCE_DIR}/ext/asar/src/asar
|
||||
${CMAKE_SOURCE_DIR}/ext/asar/src/asar-dll-bindings/c
|
||||
${CMAKE_SOURCE_DIR}/ext/imgui # Needed for ImGui in project.cc temporarily
|
||||
${CMAKE_SOURCE_DIR}/incl
|
||||
${PROJECT_BINARY_DIR}
|
||||
)
|
||||
|
||||
@@ -936,9 +936,9 @@
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
05318E0E274C397200A8DE2E /* GameController.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GameController.framework; path = System/Library/Frameworks/GameController.framework; sourceTree = SDKROOT; };
|
||||
07A82ED62139413C0078D120 /* imgui_internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = imgui_internal.h; path = ../../yaze/src/lib/imgui/imgui_internal.h; sourceTree = "<group>"; };
|
||||
07A82ED72139413C0078D120 /* imgui_widgets.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = imgui_widgets.cpp; path = /Users/scawful/Code/yaze/src/lib/imgui/imgui_widgets.cpp; sourceTree = "<absolute>"; };
|
||||
5079822D257677DB0038A28D /* imgui_tables.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = imgui_tables.cpp; path = /Users/scawful/Code/yaze/src/lib/imgui/imgui_tables.cpp; sourceTree = "<absolute>"; };
|
||||
07A82ED62139413C0078D120 /* imgui_internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = imgui_internal.h; path = ../../yaze/ext/imgui/imgui_internal.h; sourceTree = "<group>"; };
|
||||
07A82ED72139413C0078D120 /* imgui_widgets.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = imgui_widgets.cpp; path = /Users/scawful/Code/yaze/ext/imgui/imgui_widgets.cpp; sourceTree = "<absolute>"; };
|
||||
5079822D257677DB0038A28D /* imgui_tables.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = imgui_tables.cpp; path = /Users/scawful/Code/yaze/ext/imgui/imgui_tables.cpp; sourceTree = "<absolute>"; };
|
||||
8307E7C420E9F9C900473790 /* yaze.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = yaze.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
8307E7DA20E9F9C900473790 /* yaze.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = yaze.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
8309BD8E253CCAAA0045E2A1 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; };
|
||||
@@ -955,9 +955,9 @@
|
||||
83BBE9EA20EB471700295997 /* MetalKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MetalKit.framework; path = System/Library/Frameworks/MetalKit.framework; sourceTree = SDKROOT; };
|
||||
83BBE9EB20EB471700295997 /* Metal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Metal.framework; path = System/Library/Frameworks/Metal.framework; sourceTree = SDKROOT; };
|
||||
83BBE9EE20EB471C00295997 /* ModelIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ModelIO.framework; path = System/Library/Frameworks/ModelIO.framework; sourceTree = SDKROOT; };
|
||||
83BBEA0120EB54E700295997 /* imgui_draw.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = imgui_draw.cpp; path = /Users/scawful/Code/yaze/src/lib/imgui/imgui_draw.cpp; sourceTree = "<absolute>"; };
|
||||
83BBEA0220EB54E700295997 /* imgui_demo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = imgui_demo.cpp; path = /Users/scawful/Code/yaze/src/lib/imgui/imgui_demo.cpp; sourceTree = "<absolute>"; };
|
||||
83BBEA0320EB54E700295997 /* imgui.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = imgui.cpp; path = /Users/scawful/Code/yaze/src/lib/imgui/imgui.cpp; sourceTree = "<absolute>"; };
|
||||
83BBEA0120EB54E700295997 /* imgui_draw.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = imgui_draw.cpp; path = /Users/scawful/Code/yaze/ext/imgui/imgui_draw.cpp; sourceTree = "<absolute>"; };
|
||||
83BBEA0220EB54E700295997 /* imgui_demo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = imgui_demo.cpp; path = /Users/scawful/Code/yaze/ext/imgui/imgui_demo.cpp; sourceTree = "<absolute>"; };
|
||||
83BBEA0320EB54E700295997 /* imgui.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = imgui.cpp; path = /Users/scawful/Code/yaze/ext/imgui/imgui.cpp; sourceTree = "<absolute>"; };
|
||||
83BBEA0420EB54E700295997 /* imconfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = imconfig.h; sourceTree = "<group>"; };
|
||||
E318D8472C59C08300091322 /* app_delegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = app_delegate.h; sourceTree = "<group>"; };
|
||||
E318D8482C59C08300091322 /* app_delegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = app_delegate.mm; sourceTree = "<group>"; };
|
||||
@@ -1066,10 +1066,10 @@
|
||||
E318D8F22C59C08300091322 /* common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = common.h; sourceTree = "<group>"; };
|
||||
E318D8F62C59C08300091322 /* rom.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = rom.cc; sourceTree = "<group>"; };
|
||||
E318D8F72C59C08300091322 /* rom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rom.h; sourceTree = "<group>"; };
|
||||
E318D9942C59CDF800091322 /* imgui_impl_sdl2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = imgui_impl_sdl2.cpp; path = ../../yaze/src/lib/imgui/backends/imgui_impl_sdl2.cpp; sourceTree = "<group>"; };
|
||||
E318D9972C59D0C400091322 /* imgui_impl_sdlrenderer2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = imgui_impl_sdlrenderer2.cpp; path = ../../yaze/src/lib/imgui/backends/imgui_impl_sdlrenderer2.cpp; sourceTree = "<group>"; };
|
||||
E318D99B2C59D0E500091322 /* imgui_stdlib.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = imgui_stdlib.cpp; path = ../../yaze/src/lib/imgui/misc/cpp/imgui_stdlib.cpp; sourceTree = "<group>"; };
|
||||
E318D99C2C59D0E500091322 /* imgui_stdlib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = imgui_stdlib.h; path = ../../yaze/src/lib/imgui/misc/cpp/imgui_stdlib.h; sourceTree = "<group>"; };
|
||||
E318D9942C59CDF800091322 /* imgui_impl_sdl2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = imgui_impl_sdl2.cpp; path = ../../yaze/ext/imgui/backends/imgui_impl_sdl2.cpp; sourceTree = "<group>"; };
|
||||
E318D9972C59D0C400091322 /* imgui_impl_sdlrenderer2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = imgui_impl_sdlrenderer2.cpp; path = ../../yaze/ext/imgui/backends/imgui_impl_sdlrenderer2.cpp; sourceTree = "<group>"; };
|
||||
E318D99B2C59D0E500091322 /* imgui_stdlib.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = imgui_stdlib.cpp; path = ../../yaze/ext/imgui/misc/cpp/imgui_stdlib.cpp; sourceTree = "<group>"; };
|
||||
E318D99C2C59D0E500091322 /* imgui_stdlib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = imgui_stdlib.h; path = ../../yaze/ext/imgui/misc/cpp/imgui_stdlib.h; sourceTree = "<group>"; };
|
||||
E318D9A02C59DFD200091322 /* libpng16.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libpng16.a; path = "../../../opt/anaconda3/pkgs/libpng-1.6.37-ha441bb4_0/lib/libpng16.a"; sourceTree = "<group>"; };
|
||||
E318D9A32C5A4FBD00091322 /* algorithm_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = algorithm_test.cc; sourceTree = "<group>"; };
|
||||
E318D9A42C5A4FBD00091322 /* algorithm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = algorithm.h; sourceTree = "<group>"; };
|
||||
|
||||
@@ -31,6 +31,7 @@ target_include_directories(yaze_util PUBLIC
|
||||
${CMAKE_SOURCE_DIR}/src
|
||||
${CMAKE_SOURCE_DIR}/incl
|
||||
${CMAKE_SOURCE_DIR}/src/lib
|
||||
${CMAKE_SOURCE_DIR}/ext
|
||||
${PROJECT_BINARY_DIR}
|
||||
)
|
||||
|
||||
|
||||
@@ -13,13 +13,13 @@ if(YAZE_BUILD_TESTS)
|
||||
${CMAKE_SOURCE_DIR}/src
|
||||
${CMAKE_SOURCE_DIR}/incl
|
||||
${CMAKE_SOURCE_DIR}/test
|
||||
${CMAKE_SOURCE_DIR}/src/lib
|
||||
${CMAKE_SOURCE_DIR}/src/lib/imgui
|
||||
${CMAKE_SOURCE_DIR}/src/lib/imgui/backends
|
||||
${CMAKE_SOURCE_DIR}/src/lib/imgui_test_engine
|
||||
${CMAKE_SOURCE_DIR}/src/lib/SDL/include
|
||||
${CMAKE_SOURCE_DIR}/third_party/json/include
|
||||
${CMAKE_BINARY_DIR}/src/lib/SDL/include
|
||||
${CMAKE_SOURCE_DIR}/ext
|
||||
${CMAKE_SOURCE_DIR}/ext/imgui
|
||||
${CMAKE_SOURCE_DIR}/ext/imgui/backends
|
||||
${CMAKE_SOURCE_DIR}/ext/imgui_test_engine
|
||||
${CMAKE_SOURCE_DIR}/ext/SDL/include
|
||||
${CMAKE_SOURCE_DIR}/ext/json/include
|
||||
${CMAKE_BINARY_DIR}/ext/SDL/include
|
||||
${PROJECT_BINARY_DIR}
|
||||
)
|
||||
|
||||
|
||||
@@ -93,7 +93,7 @@ Key methods available:
|
||||
- `ctx->LogError("message", ...)` - Log error
|
||||
- `ctx->Yield()` - Yield to allow UI to update
|
||||
|
||||
Full API: `src/lib/imgui_test_engine/imgui_te_engine.h`
|
||||
Full API: `ext/imgui_test_engine/imgui_te_engine.h`
|
||||
|
||||
## Test Logging
|
||||
|
||||
@@ -163,7 +163,7 @@ Potential tests to add:
|
||||
|
||||
## References
|
||||
|
||||
- **ImGui Test Engine**: `src/lib/imgui_test_engine/`
|
||||
- **ImGui Test Engine**: `ext/imgui_test_engine/`
|
||||
- **Test Registration**: `test/yaze_test.cc`
|
||||
- **Test Utilities**: `test/test_utils.h`
|
||||
- **Working Examples**: See existing tests in this directory
|
||||
|
||||
Reference in New Issue
Block a user