- Updated `.clangd` configuration to include additional include paths and feature flags tailored for ROM hacking workflows, optimizing IntelliSense support. - Introduced `.pre-commit-config.yaml` for managing code quality checks and formatting, ensuring consistent code style across the project. - Added `cmake-format.yaml` for CMake formatting configuration, promoting adherence to style guidelines. - Enhanced CI workflows to include new actions for testing and building, improving overall reliability and efficiency in the development process. Benefits: - Streamlines development setup and improves code quality through automated checks. - Facilitates better collaboration by ensuring consistent coding standards and configurations.
YAZE Build Scripts
This directory contains build automation and maintenance scripts for the YAZE project.
build_cleaner.py
Automates CMake source list maintenance and header include management with IWYU-style analysis.
Features
- CMake Source List Maintenance: Automatically updates source file lists in CMake files
- Self-Header Includes: Ensures source files include their corresponding headers
- IWYU-Style Analysis: Suggests missing headers based on symbol usage
- .gitignore Support: Respects .gitignore patterns when scanning files
- Auto-Discovery: Can discover CMake libraries that opt-in to auto-maintenance
Usage
# Dry-run to see what would change (recommended first step)
python3 scripts/build_cleaner.py --dry-run
# Update CMake source lists and header includes
python3 scripts/build_cleaner.py
# Run IWYU-style header analysis
python3 scripts/build_cleaner.py --iwyu
# Auto-discover CMake libraries marked for auto-maintenance
python3 scripts/build_cleaner.py --auto-discover
# Update only CMake source lists
python3 scripts/build_cleaner.py --cmake-only
# Update only header includes
python3 scripts/build_cleaner.py --includes-only
Opting-In to Auto-Maintenance
By default, the script only auto-maintains source lists that are explicitly marked. To mark a CMake variable for auto-maintenance, add a comment above the set() statement:
# This list is auto-maintained by scripts/build_cleaner.py
set(
YAZE_APP_EMU_SRC
app/emu/audio/apu.cc
app/emu/cpu/cpu.cc
# ... more files
)
The script looks for comments containing "auto-maintain" (case-insensitive) within 3 lines above the set() statement.
Excluding Files from Processing
To exclude a specific file from all processing (CMake lists, header includes, IWYU), add this token near the top of the file:
// build_cleaner:ignore
.gitignore Support
The script automatically respects .gitignore patterns. To enable this feature, install the pathspec dependency:
pip3 install -r scripts/requirements.txt
# or
pip3 install pathspec
IWYU Configuration
The script includes basic IWYU-style analysis that suggests headers based on symbol prefixes. To customize which headers are suggested, edit the COMMON_HEADERS dictionary in the script:
COMMON_HEADERS = {
'std::': ['<memory>', '<string>', '<vector>', ...],
'absl::': ['<absl/status/status.h>', ...],
'ImGui::': ['<imgui.h>'],
'SDL_': ['<SDL.h>'],
}
Note: The IWYU analysis is conservative and may suggest headers that are already transitively included. Use with care and review suggestions before applying.
Integration with CMake
The script is integrated into the CMake build system:
# Run as a CMake target
cmake --build build --target build_cleaner
Dependencies
- Python 3.7+
pathspec(optional, for .gitignore support):pip3 install pathspec
How It Works
- CMake Maintenance: Scans directories specified in the configuration and updates
set(VAR_NAME ...)blocks with the current list of source files - Self-Headers: For each
.cc/.cppfile, ensures it includes its corresponding.hfile - IWYU Analysis: Scans source files for symbols and suggests appropriate headers based on prefix matching
Current Auto-Maintained Variables
All 20 library source lists are now auto-maintained by default:
- Core:
YAZE_APP_EMU_SRC,YAZE_APP_CORE_SRC,YAZE_APP_EDITOR_SRC,YAZE_APP_ZELDA3_SRC,YAZE_NET_SRC,YAZE_UTIL_SRC - GFX:
GFX_TYPES_SRC,GFX_BACKEND_SRC,GFX_RESOURCE_SRC,GFX_CORE_SRC,GFX_UTIL_SRC,GFX_RENDER_SRC,GFX_DEBUG_SRC - GUI:
GUI_CORE_SRC,CANVAS_SRC,GUI_WIDGETS_SRC,GUI_AUTOMATION_SRC,GUI_APP_SRC - Other:
YAZE_AGENT_SOURCES,YAZE_TEST_SOURCES
The script intelligently preserves conditional blocks (if/endif) and excludes conditional files from the main source list.