- Removed the code checkout step from the custom setup action and added it directly in the CI workflow steps for better clarity and control.
- This change ensures that the code is checked out before the build environment is set up, improving the overall workflow execution.
Benefits:
- Enhances the CI process by making the code checkout explicit and easier to manage within the workflow.
- Modified `.vscode/settings.json` to use workspace-relative paths for `compileCommands` and `buildDirectory`, enhancing portability across different environments.
- Updated task labels in `tasks.json` for clarity, renaming them to reflect their specific CMake operations.
- Added new tasks for cleaning builds and running tests, streamlining the development workflow.
Benefits:
- Improves the development experience by ensuring configurations are adaptable and tasks are clearly defined, facilitating easier project management.
- Added new entries to `.pre-commit-config.yaml`, `cmake-format.yaml`, and `.github/dependabot.yml` to improve code quality checks and dependency updates.
- Enhanced GitHub Actions workflows by adding new steps for testing and build retention.
- Introduced support for the nlohmann_json library in CMake, allowing for conditional inclusion based on the `YAZE_ENABLE_JSON` option.
- Updated CMake configurations to streamline SDL2 and gRPC integration, ensuring proper linking and target management.
Benefits:
- Improves code quality and consistency through automated checks and formatting.
- Enhances dependency management and build reliability across platforms.
- Provides flexibility for users to enable optional features, improving overall functionality.
- 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.
- Added gRPC installation to the macOS section of the CI workflow, ensuring that the necessary dependencies are available for builds.
- Updated the GitHub path to include the gRPC prefix, improving accessibility for subsequent build steps.
Benefits:
- Enhances the CI process by ensuring all required tools are installed, leading to more reliable builds.
- Modified the CI workflow to remove the `build/_deps` directory during the clean-up process, ensuring a more thorough cache reset.
- Updated gRPC CMake configuration to disable reflection support, further optimizing the build process by preventing unnecessary proto generation.
Benefits:
- Enhances the CI workflow by ensuring a clean build environment.
- Improves build efficiency by reducing unnecessary steps in gRPC integration.
- Added `yaze_app_core_lib` and `yaze_editor` to the linking of the `yaze_emu_test` target in the CMake configuration.
- This change enhances the test's access to core application functionalities, improving test coverage and reliability.
Benefits:
- Ensures that the emulator tests have the necessary dependencies linked, facilitating more comprehensive testing of the emulator's features.
- Introduced a new file for Linux CI package dependencies to streamline the installation process.
- Updated gRPC CMake configuration to disable C++ reflection support, reducing unnecessary proto generation.
Benefits:
- Enhances the CI workflow by clearly defining required packages for Linux builds.
- Improves build efficiency by avoiding extra generation steps in gRPC integration.
- Modified the CI configuration to enhance the installation of Linux packages by using a more efficient command.
- Updated macOS dependency installation to include LLVM version 18 and set the LLVM_PREFIX in the GitHub path for better accessibility.
Benefits:
- Streamlines the CI process for Linux and macOS, improving build reliability and ensuring necessary tools are available for the build environment.
- Introduced new CMake presets for Linux release and AI builds, enhancing cross-platform support.
- Updated CI workflows to include Linux build configurations, ensuring consistent build processes across platforms.
- Added a new release packaging script to streamline artifact creation for different operating systems.
Benefits:
- Improves build flexibility and reliability for Linux users.
- Simplifies the release process by automating artifact packaging and checksum generation.
- Added logic to handle gRPC target resolution, allowing for fallback to bare names when using FetchContent or vcpkg.
- Updated the handling of CMAKE_CROSSCOMPILING to ensure proper configuration for host builds, preventing issues with protoc binary location.
- Adjusted target_add_protobuf function to use generator expressions for better compatibility and maintainability.
Benefits:
- Improves build reliability and flexibility when integrating gRPC support.
- Ensures correct handling of cross-compilation scenarios, enhancing compatibility across platforms.
- Added optional gRPC support in CMake, allowing for conditional inclusion based on the `YAZE_WITH_GRPC` option.
- Updated the handling of the FTXUI library to ensure it is fetched if not found, improving build reliability.
- Streamlined dependency management by including the `dependencies.cmake` file in the appropriate location.
Benefits:
- Provides flexibility for users to enable gRPC support, enhancing functionality.
- Improves build process by ensuring necessary libraries are available and properly configured.
- Added settings to disable x86-specific optimizations in the CMake configuration for ARM64 macOS builds, ensuring compatibility and stability.
- Removed redundant x86-specific settings that were previously included, streamlining the configuration.
Benefits:
- Enhances build compatibility for ARM64 macOS users by preventing the inclusion of incompatible optimizations.
- Introduced a new `yaze_grpc_support` library to centralize all gRPC and protobuf usage, addressing Windows linker errors and improving build stability.
- Updated CMake configurations across various components to link against the new support library instead of individual protobuf targets, simplifying the linking process.
- Removed legacy whole-archive linking logic, ensuring a cleaner and more maintainable build setup.
Benefits:
- Reduces complexity in CMake files and enhances compatibility across platforms.
- Prevents potential linker errors by consolidating gRPC and protobuf dependencies into a single library.
- Introduced a new document detailing the overworld entity system, including its architecture, core components, and critical bug fixes.
- Outlined the ongoing refactor plan aimed at modularizing the system for improved maintainability and compatibility with ZScream features.
- Documented specific bug fixes related to entity interaction, property management, and coordinate systems to enhance functionality.
Benefits:
- Provides a comprehensive reference for developers working on the overworld entity system.
- Facilitates understanding of recent changes and future development directions.
- Updated CMake configuration to conditionally apply whole-archive linking for the `yaze_agent` target on Unix-like systems, ensuring all necessary symbols are included.
- Maintained standard linking for Windows while improving compatibility across platforms.
Benefits:
- Increases build stability and ensures proper symbol inclusion for test support libraries, reducing potential linker errors.
- Enhanced CMake configuration to conditionally apply /WHOLEARCHIVE linking for protobuf targets, ensuring only library targets are included.
- Updated linking logic across multiple components including `yaze`, `yaze_emu`, `z3ed`, and test suites to improve compatibility and prevent linker errors.
Benefits:
- Increases build stability and clarity by ensuring only relevant targets are linked, reducing potential conflicts during the build process.
- Modified CMakeLists.txt for test helper executables to use PRIVATE visibility for linked libraries, ensuring encapsulation of dependencies.
- This change enhances build clarity and prevents unintended linkage of libraries in other targets.
Benefits:
- Improves modularity and maintainability of the build configuration for test helpers.
- Adjusted CMake files to conditionally link protobuf using /WHOLEARCHIVE on Windows to include internal symbols while avoiding LNK1241 errors.
- Updated linking logic for `yaze`, `yaze_editor`, `yaze_emu`, `z3ed`, and test suites to ensure compatibility across platforms.
Benefits:
- Improves build stability and compatibility for Windows users by ensuring proper symbol inclusion without resource duplication issues.
- Refactored `OverworldMap` to utilize `OverworldVersionHelper` for version checks, enhancing clarity and maintainability.
- Updated logic for loading area information and handling custom overworld data based on versioning.
- Cleaned up includes and namespace declarations for better organization and readability.
Benefits:
- Streamlines version handling, reducing code duplication and potential errors.
- Enhances overall code structure, making it easier to navigate and maintain.
- Added /WHOLEARCHIVE linking for protobuf in various CMake files to ensure internal symbols are included while preventing resource duplication.
- Updated linking options for `yaze`, `yaze_emu`, `z3ed`, and test suites to apply this option conditionally on Windows with MSVC.
Benefits:
- Ensures proper inclusion of protobuf symbols in executables, improving compatibility and functionality across platforms.
- Updated caching keys in CI and release workflows from v2 to v3 for gRPC dependencies to improve cache management.
- Enhanced linking options for `yaze_editor` and `yaze_agent` to ensure test symbols are included correctly across different platforms.
Benefits:
- Streamlines the build process by ensuring proper versioning and linking of test support libraries.
- Improves cache efficiency in CI workflows, reducing build times.
- Updated `UpdateMapProperties` methods across various entities (entrances, exits, items, sprites) to include an optional context parameter for improved area size detection.
- Introduced `OverworldVersionHelper` for centralized ROM version detection and feature gating, replacing scattered inline checks.
- Refactored coordinate calculations to utilize normalized map IDs, ensuring consistency and preventing data corruption.
- Enhanced exit properties to sync player positions and calculate scroll/camera values based on the overworld context.
Benefits:
- Streamlines entity property updates and improves compatibility with different ROM versions.
- Reduces code duplication and enhances maintainability by centralizing version checks.
- Ensures accurate coordinate calculations for overworld entities, improving overall functionality.
- Upgraded gRPC version from v1.68.0 to v1.75.1 for improved compatibility across all platforms.
- Removed /WHOLEARCHIVE linking for protobuf to prevent duplicate version resource errors in the dependency chain.
- Updated status messages to reflect the latest gRPC version and build optimizations.
Benefits:
- Enhances build stability and compatibility with modern toolchains.
- Simplifies linking process by avoiding unnecessary options that cause conflicts.
- Changed gRPC version from v1.75.1 to v1.68.0 to resolve linker errors related to protobuf resource files on Windows.
- Updated compatibility notes to reflect the stable version and reasons for the downgrade.
Benefits:
- Improves build stability on Windows by avoiding LNK1241 errors during linking.
- Ensures better compatibility with clang-cl and MSVC toolchains.
- Modified CI workflow to correctly format the toolchain file argument for CMake.
- Updated release workflow to enhance the release creation process, ensuring the latest release is marked appropriately.
- Added configuration to disable protobuf version resource on Windows to prevent duplicate resource errors during linking.
Benefits:
- Improves build reliability and consistency across different environments.
- Streamlines the release process, making it more intuitive for developers.
- Upgraded gRPC from v1.67.1 to v1.75.1 for improved Windows compatibility.
- Disabled BoringSSL ASM optimizations for better clang-cl support.
- Updated documentation to reflect changes in build times and reasons for using FetchContent over vcpkg for gRPC.
- Removed unused gRPC and protobuf dependencies from `vcpkg.json`.
- Updated CI configuration to enable vcpkg installation for SDL2 and yaml-cpp.
- Added support for MSVC in CI workflows and improved caching strategies for vcpkg packages.
- Enhanced logging in build steps to provide better feedback on dependency status and build progress.
- Changed `x_camera_` and `y_camera_` in `OverworldExit` from `uint8_t` to `uint16_t` for consistency and to accommodate larger values.
- Updated the `DrawExitEditorPopup` function to use `InputHexWord` for camera positions, reflecting the new data type.
- Added `ImGui::PushID` and `ImGui::PopID` calls in various popup functions to resolve duplicate ID warnings, enhancing the stability of the UI.
Benefits:
- Ensures proper handling of camera coordinates in the overworld editor.
- Improves UI robustness by addressing ID conflicts in popups.
- Replaced the legacy ContextMenuItem structure with a new CanvasMenuItem across various files, enhancing consistency in context menu management.
- Introduced CanvasMenuBuilder for fluent menu construction, allowing for easier addition of items and submenus.
- Updated Canvas and related components to utilize the new menu system, improving organization and maintainability of context menus.
Benefits:
- Streamlines context menu item management, making it more intuitive and flexible.
- Enhances code readability and reduces duplication, facilitating future enhancements.
- Introduced a new `PopupRegistry` class to manage persistent popups, improving the organization and lifecycle handling of popups within the canvas.
- Added `canvas_menu.cc` and `canvas_menu.h` to define menu item and section structures, along with rendering functions for a more declarative menu system.
- Updated `canvas.cc` to utilize the new popup registry, ensuring backward compatibility with legacy popup handling during the migration phase.
Benefits:
- Streamlines popup management, enhancing usability and maintainability of the canvas UI.
- Facilitates the addition of complex menu structures and interactions, improving overall user experience.
- Introduced new files `canvas_interaction.cc` and `canvas_interaction.h` to encapsulate event-driven logic for tile painting, rectangle selection, and entity interactions.
- Refactored `CanvasInteractionHandler` to utilize the new event-based functions, improving code organization and maintainability.
- Added `canvas_events.h` to define event payload structures for various canvas interactions, enhancing clarity and usability.
Benefits:
- Streamlines interaction handling by separating concerns and reducing stateful dependencies.
- Improves testability and readability of the canvas interaction logic, facilitating future enhancements.
- Added new files `canvas_geometry.cc`, `canvas_geometry.h`, `canvas_rendering.cc`, and `canvas_rendering.h` to encapsulate canvas geometry calculations and rendering logic.
- Refactored `Canvas::DrawBackground` and related methods to utilize the new geometry and rendering helpers, improving code organization and readability.
- Introduced `CanvasState` to consolidate canvas state management, gradually replacing scattered state members.
Benefits:
- Enhances maintainability and clarity of canvas-related code.
- Streamlines rendering operations and geometry calculations, improving overall performance and usability.
- Added inclusion of `overworld_item.h` in both `overworld_map.h` and `overworld.cc` to facilitate item management within the overworld.
- Enhanced the `SaveItems` function to reset bomb door lookup tables and update item pointers, ensuring proper handling of overworld items.
- Improved data writing logic for overworld items, including adjustments for pointer reuse and metadata updates.
Benefits:
- Streamlines item management in the overworld, enhancing functionality and maintainability.
- Ensures compatibility with expanded ROM structures, improving overall game experience.
- Introduced new `entity_operations.cc` and `entity_operations.h` files to handle the insertion of entrances, exits, sprites, and items in the overworld editor.
- Updated `map_properties.cc` to include a context menu for entity insertion, allowing users to add various entities directly from the canvas.
- Enhanced `overworld_editor.cc` to manage entity insertion callbacks and streamline the editing process.
Benefits:
- Improves the functionality of the overworld editor by enabling direct manipulation of entities.
- Provides a more intuitive user experience with context-sensitive menus for entity operations.
- Adjusted gRPC versioning in `grpc.cmake` to use platform-specific versions: v1.75.1 for macOS/Linux and v1.67.1 for Windows MSVC.
- Added detailed logging to indicate the selected gRPC version and its compatibility rationale.
Benefits:
- Enhances compatibility with modern compilers and platforms, improving overall build reliability.
- Added detailed logging for vcpkg toolchain detection and gRPC target verification in `grpc_windows.cmake`.
- Updated gRPC version to v1.67.1 for improved MSVC compatibility and stability.
- Enhanced target checks for `protoc` and `grpc_cpp_plugin`, providing fallbacks and clearer error messages.
- Streamlined the export of gRPC and protobuf targets to ensure proper linking in Windows builds.
Benefits:
- Improves build diagnostics and error handling for gRPC integration on Windows.
- Ensures compatibility with modern compilers and enhances overall build reliability.
- Added `grpc` and `protobuf` as dependencies in `vcpkg.json` for Windows platform support.
- Updated CI workflows to ensure build and configuration failures are reported with detailed logs for better diagnostics.
- Enhanced the logging mechanism to capture and upload build logs on failure across all platforms.
Benefits:
- Improves the visibility of build issues, facilitating quicker troubleshooting.
- Ensures necessary dependencies are included for Windows builds, enhancing overall functionality.
- Updated the vcpkg baseline and commit ID across configuration files to the latest version for improved compatibility.
- Added SDL2 as a dependency in `vcpkg.json` for Windows platform support.
- Adjusted CI and release workflows to reflect the new vcpkg commit ID, ensuring consistency in the build process.
Benefits:
- Ensures the project utilizes the latest features and fixes from vcpkg, enhancing overall stability and reliability.
- Streamlines the integration of SDL2, improving support for Windows builds.
- Eliminated the custom vcpkg overlay for SDL2, which was previously used to address installation issues on Windows.
- Updated `vcpkg.json` to remove SDL2 dependency and related configurations from CI and release workflows.
- Deleted associated documentation and files for the SDL2 overlay to streamline the project structure.
Benefits:
- Simplifies the vcpkg configuration by removing unnecessary overlays, improving maintainability.
- Reduces complexity in the CI and release processes, enhancing overall build reliability.
- Introduced custom vcpkg port overlays to address SDL2 installation issues on Windows by skipping pkgconfig fixup.
- Updated CI and release workflows to include the new `VCPKG_OVERLAY_PORTS` configuration for enhanced build reliability.
- Added documentation for the overlays, detailing their purpose and usage.
Benefits:
- Prevents build failures related to SDL2 on Windows, improving the overall stability of the build process.
- Streamlines the integration of patched ports without forking the vcpkg repository, enhancing maintainability.
- Modified CMake presets to include static triplet for vcpkg in Windows configurations, enhancing build consistency.
- Updated vcpkg baseline and commit ID across configuration files to ensure compatibility with the latest package versions.
- Enhanced CI workflows to utilize the new vcpkg toolchain file, improving the setup process for Windows builds.
Benefits:
- Ensures the project leverages the latest features and fixes from vcpkg, enhancing overall stability.
- Streamlines the Windows build process by consolidating vcpkg configurations, reducing potential discrepancies during builds.
- Removed the `core_library.cmake` file and integrated its components into `app.cmake` to streamline the application structure.
- Updated the CMake configuration to reflect the new organization, ensuring proper inclusion of core components such as ROM management and application controller.
- Enhanced build messages to clarify the status of the application core library configuration.
Benefits:
- Simplifies the CMake structure by consolidating related components, improving maintainability and clarity.
- Promotes a clearer separation of concerns within the application architecture.
- Moved the gRPC test harness proto and services to `yaze_test_support` to avoid circular dependencies and improve modularity.
- Updated the core library CMake configuration to reflect the new structure, ensuring proper inclusion of ROM service and canvas automation.
- Enhanced the build messages to clarify the status of gRPC services and test harness integration.
Benefits:
- Streamlines the build process by clearly separating core and test functionalities.
- Improves maintainability and clarity in the CMake configuration for gRPC services.
- Modified the cache key in the CI workflow to include `src/**/*.cmake`, ensuring that changes in CMake files are properly accounted for in the caching mechanism.
- This adjustment enhances the efficiency of the CI process by improving cache hit rates and reducing unnecessary rebuilds.
Benefits:
- Optimizes the CI workflow by ensuring that all relevant CMake configurations are considered, leading to faster build times and more reliable dependency management.
- Enhanced the clang-tidy configuration to better align with Google C++ style and specific needs for ROM hacking workflows.
- Added and adjusted checks for performance, readability, modernize, bug-prone, and miscellaneous categories to accommodate ROM-specific coding practices.
- Updated naming conventions and function size limits to reflect the requirements of ROM development.
- Included additional options for Abseil and Google style checks to ensure compatibility with the project's coding standards.
Benefits:
- Improves static analysis and code quality by tailoring clang-tidy settings to the unique requirements of the project.
- Facilitates better adherence to coding standards while allowing for the flexibility needed in ROM hacking scenarios.