1 Commits

Author SHA1 Message Date
scawful
c8289bffda backend-infra-engineer: Release v0.3.8 snapshot 2025-11-22 02:10:38 -05:00
10 changed files with 148 additions and 48 deletions

View File

@@ -87,25 +87,31 @@ jobs:
print("Patched cmake_install.cmake to handle missing dependency install scripts") print("Patched cmake_install.cmake to handle missing dependency install scripts")
EOF EOF
- name: Clean old packages before CPack
shell: bash
run: |
echo "Cleaning old package files to ensure fresh generation"
rm -f build/*.deb build/*.tar.gz build/*.dmg build/*.zip build/*.exe build/packages/*
- name: Package artifacts (Linux) - name: Package artifacts (Linux)
if: matrix.platform == 'linux' if: matrix.platform == 'linux'
run: | run: |
cd build cd build
cpack -G DEB -G TGZ cpack -G DEB -G TGZ
echo "=== Contents of build directory ===" echo "=== Contents of packages directory ==="
ls -la ls -la packages/ 2>/dev/null || echo "No packages directory"
echo "=== Package files created ===" echo "=== Package files created ==="
ls -la *.deb *.tar.gz 2>/dev/null || echo "No packages found in build/" ls -la packages/*.deb packages/*.tar.gz 2>/dev/null || echo "No packages found"
- name: Package artifacts (macOS) - name: Package artifacts (macOS)
if: matrix.platform == 'macos' if: matrix.platform == 'macos'
run: | run: |
cd build cd build
cpack -G DragNDrop cpack -G DragNDrop
echo "=== Contents of build directory ===" echo "=== Contents of packages directory ==="
ls -la ls -la packages/ 2>/dev/null || echo "No packages directory"
echo "=== Package files created ===" echo "=== Package files created ==="
ls -la *.dmg 2>/dev/null || echo "No packages found in build/" ls -la packages/*.dmg 2>/dev/null || echo "No packages found"
- name: Create notarized bundle (macOS) - name: Create notarized bundle (macOS)
if: matrix.platform == 'macos' if: matrix.platform == 'macos'
@@ -114,7 +120,8 @@ jobs:
chmod +x ./scripts/create-macos-bundle.sh chmod +x ./scripts/create-macos-bundle.sh
./scripts/create-macos-bundle.sh ${{ env.VERSION }} yaze-${{ env.VERSION }}-bundle || true ./scripts/create-macos-bundle.sh ${{ env.VERSION }} yaze-${{ env.VERSION }}-bundle || true
if [ -f "yaze-${{ env.VERSION }}-bundle.dmg" ]; then if [ -f "yaze-${{ env.VERSION }}-bundle.dmg" ]; then
mv yaze-${{ env.VERSION }}-bundle.dmg build/ mkdir -p build/packages
mv yaze-${{ env.VERSION }}-bundle.dmg build/packages/
fi fi
- name: Patch cmake_install.cmake (Windows) - name: Patch cmake_install.cmake (Windows)
@@ -135,21 +142,21 @@ jobs:
run: | run: |
cd build cd build
cpack -G NSIS -G ZIP cpack -G NSIS -G ZIP
Write-Host "=== Contents of build directory ===" Write-Host "=== Contents of packages directory ==="
Get-ChildItem Get-ChildItem packages -ErrorAction SilentlyContinue
Write-Host "=== Package files created ===" Write-Host "=== Package files created ==="
Get-ChildItem *.exe, *.zip -ErrorAction SilentlyContinue Get-ChildItem packages/*.exe, packages/*.zip -ErrorAction SilentlyContinue
- name: Upload build artifacts - name: Upload build artifacts
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
with: with:
name: yaze-${{ matrix.platform }}-${{ env.VERSION }} name: yaze-${{ matrix.platform }}-${{ env.VERSION }}
path: | path: |
build/*.deb build/packages/*.deb
build/*.tar.gz build/packages/*.tar.gz
build/*.dmg build/packages/*.dmg
build/*.exe build/packages/*.exe
build/*.zip build/packages/*.zip
if-no-files-found: warn if-no-files-found: warn
retention-days: 30 retention-days: 30

View File

@@ -15,11 +15,11 @@ cmake_policy(SET CMP0077 NEW)
# Enable Objective-C only on macOS where it's actually used # Enable Objective-C only on macOS where it's actually used
if(CMAKE_SYSTEM_NAME MATCHES "Darwin") if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
project(yaze VERSION 0.3.3 project(yaze VERSION 0.3.8
DESCRIPTION "Yet Another Zelda3 Editor" DESCRIPTION "Yet Another Zelda3 Editor"
LANGUAGES CXX C OBJC OBJCXX) LANGUAGES CXX C OBJC OBJCXX)
else() else()
project(yaze VERSION 0.3.3 project(yaze VERSION 0.3.8
DESCRIPTION "Yet Another Zelda3 Editor" DESCRIPTION "Yet Another Zelda3 Editor"
LANGUAGES CXX C) LANGUAGES CXX C)
endif() endif()
@@ -35,10 +35,12 @@ if(CCACHE_FOUND)
set(CMAKE_C_COMPILER_LAUNCHER ccache) set(CMAKE_C_COMPILER_LAUNCHER ccache)
endif() endif()
# Set project metadata # Version is defined in project() above - use those variables
set(YAZE_VERSION_MAJOR 0) # CMake automatically sets: yaze_VERSION, yaze_VERSION_MAJOR, yaze_VERSION_MINOR, yaze_VERSION_PATCH
set(YAZE_VERSION_MINOR 3) # These YAZE_VERSION_* aliases are for compatibility with existing code
set(YAZE_VERSION_PATCH 3) set(YAZE_VERSION_MAJOR ${yaze_VERSION_MAJOR})
set(YAZE_VERSION_MINOR ${yaze_VERSION_MINOR})
set(YAZE_VERSION_PATCH ${yaze_VERSION_PATCH})
# Suppress deprecation warnings from submodules # Suppress deprecation warnings from submodules
set(CMAKE_WARN_DEPRECATED OFF CACHE BOOL "Suppress deprecation warnings") set(CMAKE_WARN_DEPRECATED OFF CACHE BOOL "Suppress deprecation warnings")

View File

@@ -141,23 +141,42 @@ set(CPACK_COMPONENT_DOCUMENTATION_DISPLAY_NAME "Documentation")
set(CPACK_COMPONENT_DOCUMENTATION_DESCRIPTION "User and developer documentation") set(CPACK_COMPONENT_DOCUMENTATION_DESCRIPTION "User and developer documentation")
set(CPACK_COMPONENT_DOCUMENTATION_REQUIRED FALSE) set(CPACK_COMPONENT_DOCUMENTATION_REQUIRED FALSE)
# Platform-specific install paths
# The asset paths must match what platform_paths.cc FindAsset() searches for
if(WIN32)
# Windows: flat structure (exe and assets/ at same level)
set(YAZE_INSTALL_BINDIR ".")
set(YAZE_INSTALL_DATADIR ".")
set(YAZE_INSTALL_DOCDIR ".")
elseif(APPLE)
# macOS: flat structure for DMG (app bundle handles its own resources)
set(YAZE_INSTALL_BINDIR ".")
set(YAZE_INSTALL_DATADIR ".")
set(YAZE_INSTALL_DOCDIR ".")
else()
# Linux: FHS structure - assets at share/yaze/assets (matches FindAsset search)
set(YAZE_INSTALL_BINDIR ${CMAKE_INSTALL_BINDIR})
set(YAZE_INSTALL_DATADIR "${CMAKE_INSTALL_DATADIR}/yaze")
set(YAZE_INSTALL_DOCDIR "${CMAKE_INSTALL_DOCDIR}")
endif()
# Installation components # Installation components
if(APPLE) if(APPLE)
install(TARGETS yaze install(TARGETS yaze
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} RUNTIME DESTINATION ${YAZE_INSTALL_BINDIR}
BUNDLE DESTINATION ${CMAKE_INSTALL_BINDIR} BUNDLE DESTINATION ${YAZE_INSTALL_BINDIR}
COMPONENT applications COMPONENT applications
) )
else() else()
install(TARGETS yaze install(TARGETS yaze
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} RUNTIME DESTINATION ${YAZE_INSTALL_BINDIR}
COMPONENT applications COMPONENT applications
) )
endif() endif()
# Install assets # Install assets
install(DIRECTORY ${CMAKE_SOURCE_DIR}/assets/ install(DIRECTORY ${CMAKE_SOURCE_DIR}/assets/
DESTINATION ${CMAKE_INSTALL_DATADIR}/yaze/assets DESTINATION ${YAZE_INSTALL_DATADIR}/assets
COMPONENT applications COMPONENT applications
PATTERN "*.png" PATTERN "*.png"
PATTERN "*.ttf" PATTERN "*.ttf"
@@ -168,12 +187,12 @@ install(DIRECTORY ${CMAKE_SOURCE_DIR}/assets/
install(FILES install(FILES
${CMAKE_SOURCE_DIR}/README.md ${CMAKE_SOURCE_DIR}/README.md
${CMAKE_SOURCE_DIR}/LICENSE ${CMAKE_SOURCE_DIR}/LICENSE
DESTINATION ${CMAKE_INSTALL_DOCDIR} DESTINATION ${YAZE_INSTALL_DOCDIR}
COMPONENT documentation COMPONENT documentation
) )
install(DIRECTORY ${CMAKE_SOURCE_DIR}/docs/ install(DIRECTORY ${CMAKE_SOURCE_DIR}/docs/
DESTINATION ${CMAKE_INSTALL_DOCDIR} DESTINATION ${YAZE_INSTALL_DOCDIR}
COMPONENT documentation COMPONENT documentation
PATTERN "*.md" PATTERN "*.md"
PATTERN "*.html" PATTERN "*.html"

View File

@@ -1,7 +1,7 @@
# CPack Configuration # CPack Configuration
# Cross-platform packaging using CPack # Cross-platform packaging using CPack
# NOTE: include(CPack) MUST be called at the END of this file,
include(CPack) # after all CPACK_ variables and install() rules are defined.
# Set package information # Set package information
set(CPACK_PACKAGE_NAME "yaze") set(CPACK_PACKAGE_NAME "yaze")
@@ -36,23 +36,42 @@ set(CPACK_COMPONENT_YAZE_DESCRIPTION "Main YAZE application and libraries")
# Install rules - these define what CPack packages # Install rules - these define what CPack packages
include(GNUInstallDirs) include(GNUInstallDirs)
# Platform-specific install paths
# The asset paths must match what platform_paths.cc FindAsset() searches for
if(WIN32)
# Windows: flat structure (exe and assets/ at same level)
set(YAZE_INSTALL_BINDIR ".")
set(YAZE_INSTALL_DATADIR ".")
set(YAZE_INSTALL_DOCDIR ".")
elseif(APPLE)
# macOS: flat structure for DMG (app bundle handles its own resources)
set(YAZE_INSTALL_BINDIR ".")
set(YAZE_INSTALL_DATADIR ".")
set(YAZE_INSTALL_DOCDIR ".")
else()
# Linux: FHS structure - assets at share/yaze/assets (matches FindAsset search)
set(YAZE_INSTALL_BINDIR ${CMAKE_INSTALL_BINDIR})
set(YAZE_INSTALL_DATADIR "${CMAKE_INSTALL_DATADIR}/yaze")
set(YAZE_INSTALL_DOCDIR "${CMAKE_INSTALL_DOCDIR}")
endif()
# Install main executable # Install main executable
if(APPLE) if(APPLE)
install(TARGETS yaze install(TARGETS yaze
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} RUNTIME DESTINATION ${YAZE_INSTALL_BINDIR}
BUNDLE DESTINATION . BUNDLE DESTINATION .
COMPONENT yaze COMPONENT yaze
) )
else() else()
install(TARGETS yaze install(TARGETS yaze
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} RUNTIME DESTINATION ${YAZE_INSTALL_BINDIR}
COMPONENT yaze COMPONENT yaze
) )
endif() endif()
# Install assets # Install assets
install(DIRECTORY ${CMAKE_SOURCE_DIR}/assets/ install(DIRECTORY ${CMAKE_SOURCE_DIR}/assets/
DESTINATION ${CMAKE_INSTALL_DATADIR}/yaze/assets DESTINATION ${YAZE_INSTALL_DATADIR}/assets
COMPONENT yaze COMPONENT yaze
PATTERN "*.png" PATTERN "*.png"
PATTERN "*.ttf" PATTERN "*.ttf"
@@ -63,7 +82,11 @@ install(DIRECTORY ${CMAKE_SOURCE_DIR}/assets/
install(FILES install(FILES
${CMAKE_SOURCE_DIR}/README.md ${CMAKE_SOURCE_DIR}/README.md
${CMAKE_SOURCE_DIR}/LICENSE ${CMAKE_SOURCE_DIR}/LICENSE
DESTINATION ${CMAKE_INSTALL_DOCDIR} DESTINATION ${YAZE_INSTALL_DOCDIR}
COMPONENT yaze COMPONENT yaze
) )
# IMPORTANT: include(CPack) must be called LAST, after all CPACK_ variables
# and install() rules are defined. This is a CPack requirement.
include(CPack)

View File

@@ -9,7 +9,7 @@
* The Legend of Zelda: A Link to the Past. This API allows external * The Legend of Zelda: A Link to the Past. This API allows external
* applications to interact with YAZE's functionality. * applications to interact with YAZE's functionality.
* *
* @version 0.3.3 * @version 0.3.8
* @author YAZE Team * @author YAZE Team
*/ */
@@ -26,13 +26,23 @@ extern "C" {
/** /**
* @defgroup version Version Information * @defgroup version Version Information
* @{ * @{
*
* Version information is generated from CMakeLists.txt project() version.
* When building with CMake, include yaze_config.h (from build directory) for:
* - YAZE_VERSION_MAJOR
* - YAZE_VERSION_MINOR
* - YAZE_VERSION_PATCH
* - YAZE_VERSION_STRING (e.g., "0.3.8")
* - YAZE_VERSION_NUMBER (e.g., 308)
*
* Single source of truth: project(yaze VERSION X.Y.Z) in CMakeLists.txt
*/ */
/** Combined version as a string */ #ifndef YAZE_VERSION_STRING
#define YAZE_VERSION_STRING "0.3.3" /* Fallback if yaze_config.h not included - will be overridden by build */
#define YAZE_VERSION_STRING "0.3.8"
/** Combined version as a number (major * 10000 + minor * 100 + patch) */ #define YAZE_VERSION_NUMBER 308
#define YAZE_VERSION_NUMBER 303 #endif
/** @} */ /** @} */

View File

@@ -18,8 +18,17 @@ endif()
# Yaze Application Executable # Yaze Application Executable
# ============================================================================== # ==============================================================================
# controller.cc is built here (not in yaze_app_core_lib) because it uses
# EditorManager, DockSpaceRenderer, and WidgetIdRegistry from yaze_editor/yaze_gui.
# Including it in yaze_app_core_lib would create a dependency cycle:
# yaze_agent -> yaze_app_core_lib -> yaze_editor -> yaze_agent
set(YAZE_APP_EXECUTABLE_SRC
app/main.cc
app/controller.cc
)
if (APPLE) if (APPLE)
add_executable(yaze MACOSX_BUNDLE app/main.cc ${YAZE_RESOURCE_FILES}) add_executable(yaze MACOSX_BUNDLE ${YAZE_APP_EXECUTABLE_SRC} ${YAZE_RESOURCE_FILES})
set(ICON_FILE "${CMAKE_SOURCE_DIR}/assets/yaze.icns") set(ICON_FILE "${CMAKE_SOURCE_DIR}/assets/yaze.icns")
target_sources(yaze PRIVATE ${ICON_FILE}) target_sources(yaze PRIVATE ${ICON_FILE})
@@ -34,7 +43,7 @@ if (APPLE)
MACOSX_BUNDLE_SHORT_VERSION_STRING "${PROJECT_VERSION}" MACOSX_BUNDLE_SHORT_VERSION_STRING "${PROJECT_VERSION}"
) )
else() else()
add_executable(yaze app/main.cc) add_executable(yaze ${YAZE_APP_EXECUTABLE_SRC})
if(WIN32 OR UNIX) if(WIN32 OR UNIX)
target_sources(yaze PRIVATE ${YAZE_RESOURCE_FILES}) target_sources(yaze PRIVATE ${YAZE_RESOURCE_FILES})
endif() endif()

View File

@@ -13,7 +13,9 @@
set( set(
YAZE_APP_CORE_SRC YAZE_APP_CORE_SRC
app/rom.cc app/rom.cc
app/controller.cc # Note: controller.cc is built directly into the yaze executable (not this library)
# because it depends on yaze_editor and yaze_gui, which would create a cycle:
# yaze_agent -> yaze_app_core_lib -> yaze_editor -> yaze_agent
app/platform/window.cc app/platform/window.cc
) )
@@ -86,10 +88,11 @@ target_link_libraries(yaze_app_core_lib PUBLIC
yaze_core_lib # Foundational core library with project management yaze_core_lib # Foundational core library with project management
yaze_util yaze_util
yaze_gfx yaze_gfx
yaze_gui # Safe to include - yaze_gui doesn't link to yaze_agent
yaze_zelda3 yaze_zelda3
yaze_common yaze_common
# Note: yaze_editor and yaze_gui are linked at executable level to avoid # Note: yaze_editor is linked at executable level to avoid dependency cycle:
# dependency cycle: yaze_agent -> yaze_app_core_lib -> yaze_editor -> yaze_agent # yaze_agent -> yaze_app_core_lib -> yaze_editor -> yaze_agent
ImGui ImGui
${ABSL_TARGETS} ${ABSL_TARGETS}
${YAZE_SDL2_TARGETS} ${YAZE_SDL2_TARGETS}

View File

@@ -5,7 +5,14 @@
if(YAZE_BUILD_EMU AND NOT YAZE_MINIMAL_BUILD) if(YAZE_BUILD_EMU AND NOT YAZE_MINIMAL_BUILD)
if(APPLE) if(APPLE)
add_executable(yaze_emu MACOSX_BUNDLE app/emu/emu.cc app/platform/app_delegate.mm) # Note: controller.cc is included here (not via library) because it depends on
# yaze_editor and yaze_gui. Including it in yaze_app_core_lib would create a cycle:
# yaze_agent -> yaze_app_core_lib -> yaze_editor -> yaze_agent
add_executable(yaze_emu MACOSX_BUNDLE
app/emu/emu.cc
app/platform/app_delegate.mm
app/controller.cc
)
target_link_libraries(yaze_emu PUBLIC "-framework Cocoa") target_link_libraries(yaze_emu PUBLIC "-framework Cocoa")
else() else()
add_executable(yaze_emu app/emu/emu.cc) add_executable(yaze_emu app/emu/emu.cc)

View File

@@ -254,6 +254,17 @@ absl::StatusOr<std::filesystem::path> PlatformPaths::FindAsset(
// Also check parent (for build/bin/yaze case) // Also check parent (for build/bin/yaze case)
search_paths.push_back(cached_exe_dir.parent_path() / "assets" / search_paths.push_back(cached_exe_dir.parent_path() / "assets" /
relative_path); relative_path);
#ifdef __APPLE__
// macOS app bundle: exe is at yaze.app/Contents/MacOS/yaze
// Assets may be at yaze.app/Contents/Resources/assets/ (inside bundle)
// or at ../../../assets/ (same level as .app bundle in DMG)
auto contents_dir = cached_exe_dir.parent_path(); // Contents/
auto bundle_dir = contents_dir.parent_path(); // yaze.app/
auto bundle_parent = bundle_dir.parent_path(); // DMG root
search_paths.push_back(contents_dir / "Resources" / "assets" /
relative_path);
search_paths.push_back(bundle_parent / "assets" / relative_path);
#endif
} catch (...) { } catch (...) {
// Skip if path construction fails // Skip if path construction fails
} }

View File

@@ -1,8 +1,17 @@
// yaze config file // yaze config file - auto-generated from CMakeLists.txt project() version
// Single source of truth for version: project(yaze VERSION X.Y.Z) in CMakeLists.txt
#define YAZE_VERSION_MAJOR @yaze_VERSION_MAJOR@ #define YAZE_VERSION_MAJOR @yaze_VERSION_MAJOR@
#define YAZE_VERSION_MINOR @yaze_VERSION_MINOR@ #define YAZE_VERSION_MINOR @yaze_VERSION_MINOR@
#define YAZE_VERSION_PATCH @yaze_VERSION_PATCH@ #define YAZE_VERSION_PATCH @yaze_VERSION_PATCH@
// Combined version as a string (e.g., "0.3.7")
#define YAZE_VERSION_STRING "@yaze_VERSION_MAJOR@.@yaze_VERSION_MINOR@.@yaze_VERSION_PATCH@"
// Combined version as a number (major * 10000 + minor * 100 + patch)
// e.g., 0.3.7 = 307
#define YAZE_VERSION_NUMBER (@yaze_VERSION_MAJOR@ * 10000 + @yaze_VERSION_MINOR@ * 100 + @yaze_VERSION_PATCH@)
#ifdef __cplusplus #ifdef __cplusplus
#ifndef IMGUI_DEFINE_MATH_OPERATORS #ifndef IMGUI_DEFINE_MATH_OPERATORS
#define IMGUI_DEFINE_MATH_OPERATORS #define IMGUI_DEFINE_MATH_OPERATORS