backend-infra-engineer: Release v0.3.9-hotfix7 snapshot
This commit is contained in:
@@ -26,8 +26,28 @@ CPMAddPackage(
|
||||
# We'll create our own interface target and link when available
|
||||
add_library(yaze_ftxui INTERFACE)
|
||||
|
||||
# Note: FTXUI targets will be available after the build phase
|
||||
# For now, we'll create a placeholder that can be linked later
|
||||
# Link to the actual FTXUI targets
|
||||
if(TARGET ftxui::screen AND TARGET ftxui::dom AND TARGET ftxui::component)
|
||||
target_link_libraries(yaze_ftxui INTERFACE
|
||||
ftxui::screen
|
||||
ftxui::dom
|
||||
ftxui::component
|
||||
)
|
||||
else()
|
||||
# Fallback for when targets aren't namespaced
|
||||
target_link_libraries(yaze_ftxui INTERFACE
|
||||
screen
|
||||
dom
|
||||
component
|
||||
)
|
||||
endif()
|
||||
|
||||
# Add include path with compile options for Ninja Multi-Config compatibility
|
||||
# The -isystem-after flag doesn't work properly with some generator/compiler combinations
|
||||
if(ftxui_SOURCE_DIR)
|
||||
add_compile_options(-I${ftxui_SOURCE_DIR}/include)
|
||||
message(STATUS " Added FTXUI include: ${ftxui_SOURCE_DIR}/include")
|
||||
endif()
|
||||
|
||||
# Export FTXUI targets for use in other CMake files
|
||||
set(YAZE_FTXUI_TARGETS yaze_ftxui)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# gRPC and Protobuf dependency management
|
||||
# Uses CPM.cmake for consistent cross-platform builds
|
||||
# Uses CPM.cmake for consistent cross-platform builds, with optional system package fallback
|
||||
|
||||
if(NOT YAZE_ENABLE_GRPC)
|
||||
return()
|
||||
@@ -9,24 +9,147 @@ endif()
|
||||
include(cmake/CPM.cmake)
|
||||
include(cmake/dependencies.lock)
|
||||
|
||||
message(STATUS "Setting up gRPC ${GRPC_VERSION} with CPM.cmake")
|
||||
message(STATUS "Setting up gRPC ${GRPC_VERSION}")
|
||||
|
||||
# Try to use system packages first if requested
|
||||
if(YAZE_USE_SYSTEM_DEPS)
|
||||
find_package(PkgConfig QUIET)
|
||||
if(PkgConfig_FOUND)
|
||||
pkg_check_modules(GRPC_PC grpc++)
|
||||
if(GRPC_PC_FOUND)
|
||||
message(STATUS "Using system gRPC via pkg-config")
|
||||
add_library(grpc::grpc++ INTERFACE IMPORTED)
|
||||
target_include_directories(grpc::grpc++ INTERFACE ${GRPC_PC_INCLUDE_DIRS})
|
||||
target_link_libraries(grpc::grpc++ INTERFACE ${GRPC_PC_LIBRARIES})
|
||||
target_compile_options(grpc::grpc++ INTERFACE ${GRPC_PC_CFLAGS_OTHER})
|
||||
return()
|
||||
#-----------------------------------------------------------------------
|
||||
# Option: YAZE_PREFER_SYSTEM_GRPC - Use system-installed gRPC/protobuf/abseil
|
||||
# when available (e.g., from Homebrew, apt, vcpkg).
|
||||
#
|
||||
# Benefits: Much faster configure/build times for local development
|
||||
# Trade-off: May have version mismatches between system packages
|
||||
#
|
||||
# Example: cmake --preset mac-ai-fast (uses system packages)
|
||||
#-----------------------------------------------------------------------
|
||||
option(YAZE_PREFER_SYSTEM_GRPC "Prefer system-installed gRPC/protobuf over CPM" OFF)
|
||||
|
||||
if(YAZE_PREFER_SYSTEM_GRPC OR YAZE_USE_SYSTEM_DEPS)
|
||||
message(STATUS "Attempting to use system gRPC/protobuf packages...")
|
||||
|
||||
# Try CMake's find_package first (works with Homebrew on macOS)
|
||||
find_package(gRPC CONFIG QUIET)
|
||||
find_package(Protobuf CONFIG QUIET)
|
||||
find_package(absl CONFIG QUIET)
|
||||
|
||||
if(gRPC_FOUND AND Protobuf_FOUND AND absl_FOUND)
|
||||
message(STATUS "✓ Found system gRPC: ${gRPC_VERSION}")
|
||||
message(STATUS "✓ Found system Protobuf: ${Protobuf_VERSION}")
|
||||
message(STATUS "✓ Found system Abseil")
|
||||
|
||||
# Find protoc and grpc_cpp_plugin executables
|
||||
find_program(PROTOC_EXECUTABLE protoc)
|
||||
find_program(GRPC_CPP_PLUGIN grpc_cpp_plugin)
|
||||
|
||||
if(PROTOC_EXECUTABLE AND GRPC_CPP_PLUGIN)
|
||||
message(STATUS "✓ Found protoc: ${PROTOC_EXECUTABLE}")
|
||||
message(STATUS "✓ Found grpc_cpp_plugin: ${GRPC_CPP_PLUGIN}")
|
||||
|
||||
# Create imported targets for the executables if they don't exist
|
||||
if(NOT TARGET protoc)
|
||||
add_executable(protoc IMPORTED)
|
||||
set_target_properties(protoc PROPERTIES IMPORTED_LOCATION "${PROTOC_EXECUTABLE}")
|
||||
endif()
|
||||
|
||||
if(NOT TARGET grpc_cpp_plugin)
|
||||
add_executable(grpc_cpp_plugin IMPORTED)
|
||||
set_target_properties(grpc_cpp_plugin PROPERTIES IMPORTED_LOCATION "${GRPC_CPP_PLUGIN}")
|
||||
endif()
|
||||
|
||||
# Create convenience interface for basic gRPC linking
|
||||
add_library(yaze_grpc_deps INTERFACE)
|
||||
target_link_libraries(yaze_grpc_deps INTERFACE
|
||||
gRPC::grpc++
|
||||
gRPC::grpc++_reflection
|
||||
protobuf::libprotobuf
|
||||
)
|
||||
|
||||
# Ensure Abseil include directories are available
|
||||
# Homebrew's abseil may not properly export include dirs
|
||||
get_target_property(_ABSL_BASE_INCLUDE absl::base INTERFACE_INCLUDE_DIRECTORIES)
|
||||
if(_ABSL_BASE_INCLUDE)
|
||||
target_include_directories(yaze_grpc_deps INTERFACE ${_ABSL_BASE_INCLUDE})
|
||||
message(STATUS " Added Abseil include: ${_ABSL_BASE_INCLUDE}")
|
||||
elseif(APPLE)
|
||||
# Fallback for Homebrew on macOS
|
||||
target_include_directories(yaze_grpc_deps INTERFACE /opt/homebrew/include)
|
||||
message(STATUS " Added Homebrew Abseil include: /opt/homebrew/include")
|
||||
endif()
|
||||
|
||||
# Create interface libraries for compatibility with CPM target names
|
||||
# CPM gRPC creates lowercase 'grpc++' targets
|
||||
# System gRPC (Homebrew) creates namespaced 'gRPC::grpc++' targets
|
||||
# We create interface libs (not aliases) so we can add include directories
|
||||
if(NOT TARGET grpc++)
|
||||
add_library(grpc++ INTERFACE)
|
||||
target_link_libraries(grpc++ INTERFACE gRPC::grpc++)
|
||||
# Add abseil includes for targets linking to grpc++
|
||||
if(_ABSL_BASE_INCLUDE)
|
||||
target_include_directories(grpc++ INTERFACE ${_ABSL_BASE_INCLUDE})
|
||||
elseif(APPLE)
|
||||
target_include_directories(grpc++ INTERFACE /opt/homebrew/include)
|
||||
endif()
|
||||
endif()
|
||||
if(NOT TARGET grpc++_reflection)
|
||||
add_library(grpc++_reflection INTERFACE)
|
||||
target_link_libraries(grpc++_reflection INTERFACE gRPC::grpc++_reflection)
|
||||
endif()
|
||||
if(NOT TARGET grpc::grpc++)
|
||||
add_library(grpc::grpc++ ALIAS gRPC::grpc++)
|
||||
endif()
|
||||
if(NOT TARGET grpc::grpc++_reflection)
|
||||
add_library(grpc::grpc++_reflection ALIAS gRPC::grpc++_reflection)
|
||||
endif()
|
||||
|
||||
# Export targets
|
||||
set(YAZE_GRPC_TARGETS
|
||||
gRPC::grpc++
|
||||
gRPC::grpc++_reflection
|
||||
protobuf::libprotobuf
|
||||
)
|
||||
|
||||
# Setup protobuf generation directory
|
||||
set(_gRPC_PROTO_GENS_DIR ${CMAKE_BINARY_DIR}/gens CACHE INTERNAL "Protobuf generated files directory")
|
||||
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/gens)
|
||||
|
||||
# Get protobuf include directory from package
|
||||
get_target_property(_PROTOBUF_INCLUDE_DIRS protobuf::libprotobuf INTERFACE_INCLUDE_DIRECTORIES)
|
||||
if(_PROTOBUF_INCLUDE_DIRS)
|
||||
list(GET _PROTOBUF_INCLUDE_DIRS 0 _gRPC_PROTOBUF_WELLKNOWN_INCLUDE_DIR)
|
||||
set(_gRPC_PROTOBUF_WELLKNOWN_INCLUDE_DIR ${_gRPC_PROTOBUF_WELLKNOWN_INCLUDE_DIR} CACHE INTERNAL "Protobuf include directory")
|
||||
endif()
|
||||
|
||||
# Add global include directories for system packages
|
||||
# This ensures all targets can find abseil headers even if target propagation fails
|
||||
# Use add_compile_options for reliable include path propagation with Ninja Multi-Config
|
||||
if(_ABSL_BASE_INCLUDE)
|
||||
add_compile_options(-I${_ABSL_BASE_INCLUDE})
|
||||
message(STATUS " Added Abseil include via compile options: ${_ABSL_BASE_INCLUDE}")
|
||||
elseif(APPLE)
|
||||
add_compile_options(-I/opt/homebrew/include)
|
||||
message(STATUS " Added Homebrew include via compile options: /opt/homebrew/include")
|
||||
endif()
|
||||
|
||||
message(STATUS "✓ Using SYSTEM gRPC stack - fast configure!")
|
||||
message(STATUS " Protobuf gens dir: ${_gRPC_PROTO_GENS_DIR}")
|
||||
message(STATUS " Protobuf include dir: ${_gRPC_PROTOBUF_WELLKNOWN_INCLUDE_DIR}")
|
||||
set(_YAZE_USING_SYSTEM_GRPC TRUE)
|
||||
else()
|
||||
message(STATUS "○ System gRPC found but protoc/grpc_cpp_plugin missing, falling back to CPM")
|
||||
set(_YAZE_USING_SYSTEM_GRPC FALSE)
|
||||
endif()
|
||||
else()
|
||||
message(STATUS "○ System gRPC/protobuf not found, falling back to CPM")
|
||||
set(_YAZE_USING_SYSTEM_GRPC FALSE)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# If we're using system gRPC, skip CPM entirely and jump to function definition
|
||||
if(_YAZE_USING_SYSTEM_GRPC)
|
||||
message(STATUS "Skipping CPM gRPC build - using system packages")
|
||||
else()
|
||||
# CPM build path
|
||||
message(STATUS "Building gRPC from source via CPM (this takes 15-20 minutes on first build)")
|
||||
message(STATUS " Tip: Install gRPC via Homebrew and use -DYAZE_PREFER_SYSTEM_GRPC=ON for faster builds")
|
||||
|
||||
#-----------------------------------------------------------------------
|
||||
# Guard CMake's package lookup so CPM always downloads a consistent gRPC
|
||||
# toolchain instead of picking up partially-installed Homebrew/apt copies.
|
||||
@@ -371,7 +494,10 @@ set(YAZE_PROTOBUF_TARGETS
|
||||
protobuf::libprotobuf
|
||||
)
|
||||
|
||||
endif() # End of CPM build path (if NOT _YAZE_USING_SYSTEM_GRPC)
|
||||
|
||||
# Function to add protobuf/gRPC code generation to a target
|
||||
# This function works with both system and CPM-built gRPC
|
||||
function(target_add_protobuf target)
|
||||
if(NOT TARGET ${target})
|
||||
message(FATAL_ERROR "Target ${target} doesn't exist")
|
||||
@@ -381,6 +507,28 @@ function(target_add_protobuf target)
|
||||
return()
|
||||
endif()
|
||||
|
||||
# Determine protoc and grpc_cpp_plugin paths
|
||||
# For IMPORTED targets (system gRPC), use IMPORTED_LOCATION
|
||||
# For built targets (CPM gRPC), use TARGET_FILE generator expression
|
||||
get_target_property(_PROTOC_IMPORTED protoc IMPORTED)
|
||||
get_target_property(_GRPC_PLUGIN_IMPORTED grpc_cpp_plugin IMPORTED)
|
||||
|
||||
if(_PROTOC_IMPORTED)
|
||||
get_target_property(_PROTOC_EXECUTABLE protoc IMPORTED_LOCATION)
|
||||
set(_PROTOC_DEPENDS "") # No build dependency for system protoc
|
||||
else()
|
||||
set(_PROTOC_EXECUTABLE "$<TARGET_FILE:protoc>")
|
||||
set(_PROTOC_DEPENDS "protoc")
|
||||
endif()
|
||||
|
||||
if(_GRPC_PLUGIN_IMPORTED)
|
||||
get_target_property(_GRPC_PLUGIN_EXECUTABLE grpc_cpp_plugin IMPORTED_LOCATION)
|
||||
set(_GRPC_PLUGIN_DEPENDS "") # No build dependency for system plugin
|
||||
else()
|
||||
set(_GRPC_PLUGIN_EXECUTABLE "$<TARGET_FILE:grpc_cpp_plugin>")
|
||||
set(_GRPC_PLUGIN_DEPENDS "grpc_cpp_plugin")
|
||||
endif()
|
||||
|
||||
set(_protobuf_include_path -I ${CMAKE_SOURCE_DIR}/src -I ${_gRPC_PROTOBUF_WELLKNOWN_INCLUDE_DIR})
|
||||
foreach(FIL ${ARGN})
|
||||
get_filename_component(ABS_FIL ${FIL} ABSOLUTE)
|
||||
@@ -392,7 +540,7 @@ function(target_add_protobuf target)
|
||||
else()
|
||||
set(RELFIL_WE "${REL_DIR}/${FIL_WE}")
|
||||
endif()
|
||||
|
||||
|
||||
message(STATUS " Proto file: ${FIL_WE}")
|
||||
message(STATUS " ABS_FIL = ${ABS_FIL}")
|
||||
message(STATUS " REL_FIL = ${REL_FIL}")
|
||||
@@ -406,13 +554,13 @@ function(target_add_protobuf target)
|
||||
"${_gRPC_PROTO_GENS_DIR}/${RELFIL_WE}_mock.grpc.pb.h"
|
||||
"${_gRPC_PROTO_GENS_DIR}/${RELFIL_WE}.pb.cc"
|
||||
"${_gRPC_PROTO_GENS_DIR}/${RELFIL_WE}.pb.h"
|
||||
COMMAND $<TARGET_FILE:protoc>
|
||||
COMMAND ${_PROTOC_EXECUTABLE}
|
||||
ARGS --grpc_out=generate_mock_code=true:${_gRPC_PROTO_GENS_DIR}
|
||||
--cpp_out=${_gRPC_PROTO_GENS_DIR}
|
||||
--plugin=protoc-gen-grpc=$<TARGET_FILE:grpc_cpp_plugin>
|
||||
--plugin=protoc-gen-grpc=${_GRPC_PLUGIN_EXECUTABLE}
|
||||
${_protobuf_include_path}
|
||||
${ABS_FIL}
|
||||
DEPENDS ${ABS_FIL} protoc grpc_cpp_plugin
|
||||
DEPENDS ${ABS_FIL} ${_PROTOC_DEPENDS} ${_GRPC_PLUGIN_DEPENDS}
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/src
|
||||
COMMENT "Running gRPC C++ protocol buffer compiler on ${FIL}"
|
||||
VERBATIM)
|
||||
|
||||
@@ -6,6 +6,21 @@ message(STATUS "Setting up Dear ImGui from bundled sources")
|
||||
# Use the bundled ImGui from ext/imgui
|
||||
set(IMGUI_DIR ${CMAKE_SOURCE_DIR}/ext/imgui)
|
||||
|
||||
# Select ImGui backend sources based on SDL version
|
||||
if(YAZE_USE_SDL3)
|
||||
set(IMGUI_BACKEND_SOURCES
|
||||
${IMGUI_DIR}/backends/imgui_impl_sdl3.cpp
|
||||
${IMGUI_DIR}/backends/imgui_impl_sdlrenderer3.cpp
|
||||
)
|
||||
message(STATUS "Using ImGui SDL3 backend")
|
||||
else()
|
||||
set(IMGUI_BACKEND_SOURCES
|
||||
${IMGUI_DIR}/backends/imgui_impl_sdl2.cpp
|
||||
${IMGUI_DIR}/backends/imgui_impl_sdlrenderer2.cpp
|
||||
)
|
||||
message(STATUS "Using ImGui SDL2 backend")
|
||||
endif()
|
||||
|
||||
# Create ImGui library with core files from bundled source
|
||||
add_library(ImGui STATIC
|
||||
${IMGUI_DIR}/imgui.cpp
|
||||
@@ -13,9 +28,8 @@ add_library(ImGui STATIC
|
||||
${IMGUI_DIR}/imgui_draw.cpp
|
||||
${IMGUI_DIR}/imgui_tables.cpp
|
||||
${IMGUI_DIR}/imgui_widgets.cpp
|
||||
# SDL2 backend
|
||||
${IMGUI_DIR}/backends/imgui_impl_sdl2.cpp
|
||||
${IMGUI_DIR}/backends/imgui_impl_sdlrenderer2.cpp
|
||||
# SDL backend (version-dependent)
|
||||
${IMGUI_BACKEND_SOURCES}
|
||||
# C++ stdlib helpers (for std::string support)
|
||||
${IMGUI_DIR}/misc/cpp/imgui_stdlib.cpp
|
||||
)
|
||||
@@ -28,8 +42,12 @@ target_include_directories(ImGui PUBLIC
|
||||
# Set C++ standard requirement (ImGui 1.90+ requires C++11, we use C++17 for consistency)
|
||||
target_compile_features(ImGui PUBLIC cxx_std_17)
|
||||
|
||||
# Link to SDL2
|
||||
target_link_libraries(ImGui PUBLIC ${YAZE_SDL2_TARGETS})
|
||||
# Link to SDL (version-dependent)
|
||||
if(YAZE_USE_SDL3)
|
||||
target_link_libraries(ImGui PUBLIC ${YAZE_SDL3_TARGETS})
|
||||
else()
|
||||
target_link_libraries(ImGui PUBLIC ${YAZE_SDL2_TARGETS})
|
||||
endif()
|
||||
|
||||
message(STATUS "Created ImGui target from bundled source at ${IMGUI_DIR}")
|
||||
|
||||
@@ -56,7 +74,11 @@ if(YAZE_BUILD_TESTS)
|
||||
${CMAKE_SOURCE_DIR}/ext
|
||||
)
|
||||
target_compile_features(ImGuiTestEngine PUBLIC cxx_std_17)
|
||||
target_link_libraries(ImGuiTestEngine PUBLIC ImGui ${YAZE_SDL2_TARGETS})
|
||||
if(YAZE_USE_SDL3)
|
||||
target_link_libraries(ImGuiTestEngine PUBLIC ImGui ${YAZE_SDL3_TARGETS})
|
||||
else()
|
||||
target_link_libraries(ImGuiTestEngine PUBLIC ImGui ${YAZE_SDL2_TARGETS})
|
||||
endif()
|
||||
target_compile_definitions(ImGuiTestEngine PUBLIC
|
||||
IMGUI_ENABLE_TEST_ENGINE=1
|
||||
IMGUI_TEST_ENGINE_ENABLE_COROUTINE_STDTHREAD_IMPL=1
|
||||
|
||||
110
cmake/dependencies/sdl3.cmake
Normal file
110
cmake/dependencies/sdl3.cmake
Normal file
@@ -0,0 +1,110 @@
|
||||
# SDL3 dependency management
|
||||
# Uses CPM.cmake for consistent cross-platform builds
|
||||
|
||||
include(cmake/CPM.cmake)
|
||||
include(cmake/dependencies.lock)
|
||||
|
||||
message(STATUS "Setting up SDL3 (experimental) with CPM.cmake")
|
||||
|
||||
# SDL3 specific version (using latest stable 3.2 release)
|
||||
set(SDL3_VERSION "3.2.26")
|
||||
|
||||
# Try to use system packages first if requested
|
||||
if(YAZE_USE_SYSTEM_DEPS)
|
||||
find_package(SDL3 QUIET)
|
||||
if(SDL3_FOUND)
|
||||
message(STATUS "Using system SDL3")
|
||||
if(NOT TARGET yaze_sdl3)
|
||||
add_library(yaze_sdl3 INTERFACE)
|
||||
target_link_libraries(yaze_sdl3 INTERFACE SDL3::SDL3)
|
||||
if(TARGET SDL3::SDL3main)
|
||||
target_link_libraries(yaze_sdl3 INTERFACE SDL3::SDL3main)
|
||||
endif()
|
||||
endif()
|
||||
set(YAZE_SDL3_TARGETS yaze_sdl3 CACHE INTERNAL "")
|
||||
return()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Use CPM to fetch SDL3
|
||||
CPMAddPackage(
|
||||
NAME SDL3
|
||||
VERSION ${SDL3_VERSION}
|
||||
GITHUB_REPOSITORY libsdl-org/SDL
|
||||
GIT_TAG release-${SDL3_VERSION}
|
||||
OPTIONS
|
||||
"SDL_SHARED OFF"
|
||||
"SDL_STATIC ON"
|
||||
"SDL_TEST OFF"
|
||||
"SDL_INSTALL OFF"
|
||||
"SDL_CMAKE_DEBUG_POSTFIX d"
|
||||
"SDL3_DISABLE_INSTALL ON"
|
||||
"SDL3_DISABLE_UNINSTALL ON"
|
||||
)
|
||||
|
||||
# Verify SDL3 targets are available
|
||||
if(NOT TARGET SDL3-static AND NOT TARGET SDL3::SDL3-static AND NOT TARGET SDL3::SDL3)
|
||||
message(FATAL_ERROR "SDL3 target not found after CPM fetch")
|
||||
endif()
|
||||
|
||||
# Create convenience targets for the rest of the project
|
||||
if(NOT TARGET yaze_sdl3)
|
||||
add_library(yaze_sdl3 INTERFACE)
|
||||
# SDL3 from CPM might use SDL3-static or SDL3::SDL3-static
|
||||
if(TARGET SDL3-static)
|
||||
message(STATUS "Using SDL3-static target")
|
||||
target_link_libraries(yaze_sdl3 INTERFACE SDL3-static)
|
||||
# Also explicitly add include directories if they exist
|
||||
if(SDL3_SOURCE_DIR)
|
||||
target_include_directories(yaze_sdl3 INTERFACE ${SDL3_SOURCE_DIR}/include)
|
||||
message(STATUS "Added SDL3 include: ${SDL3_SOURCE_DIR}/include")
|
||||
endif()
|
||||
elseif(TARGET SDL3::SDL3-static)
|
||||
message(STATUS "Using SDL3::SDL3-static target")
|
||||
target_link_libraries(yaze_sdl3 INTERFACE SDL3::SDL3-static)
|
||||
# For local Homebrew SDL3, also add include path explicitly
|
||||
if(APPLE AND EXISTS "/opt/homebrew/opt/sdl3/include/SDL3")
|
||||
target_include_directories(yaze_sdl3 INTERFACE /opt/homebrew/opt/sdl3/include/SDL3)
|
||||
message(STATUS "Added Homebrew SDL3 include path: /opt/homebrew/opt/sdl3/include/SDL3")
|
||||
endif()
|
||||
else()
|
||||
message(STATUS "Using SDL3::SDL3 target")
|
||||
target_link_libraries(yaze_sdl3 INTERFACE SDL3::SDL3)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Add platform-specific libraries
|
||||
if(WIN32)
|
||||
target_link_libraries(yaze_sdl3 INTERFACE
|
||||
winmm
|
||||
imm32
|
||||
version
|
||||
setupapi
|
||||
wbemuuid
|
||||
)
|
||||
target_compile_definitions(yaze_sdl3 INTERFACE SDL_MAIN_HANDLED)
|
||||
elseif(APPLE)
|
||||
target_link_libraries(yaze_sdl3 INTERFACE
|
||||
"-framework Cocoa"
|
||||
"-framework IOKit"
|
||||
"-framework CoreVideo"
|
||||
"-framework CoreHaptics"
|
||||
"-framework ForceFeedback"
|
||||
"-framework GameController"
|
||||
)
|
||||
target_compile_definitions(yaze_sdl3 INTERFACE SDL_MAIN_HANDLED)
|
||||
elseif(UNIX)
|
||||
find_package(PkgConfig REQUIRED)
|
||||
pkg_check_modules(GTK3 REQUIRED gtk+-3.0)
|
||||
target_link_libraries(yaze_sdl3 INTERFACE ${GTK3_LIBRARIES})
|
||||
target_include_directories(yaze_sdl3 INTERFACE ${GTK3_INCLUDE_DIRS})
|
||||
target_compile_options(yaze_sdl3 INTERFACE ${GTK3_CFLAGS_OTHER})
|
||||
endif()
|
||||
|
||||
# Export SDL3 targets for use in other CMake files
|
||||
set(YAZE_SDL3_TARGETS yaze_sdl3)
|
||||
|
||||
# Set a flag to indicate SDL3 is being used
|
||||
set(YAZE_SDL2_TARGETS ${YAZE_SDL3_TARGETS}) # For compatibility with existing code
|
||||
|
||||
message(STATUS "SDL3 setup complete - YAZE_SDL3_TARGETS = ${YAZE_SDL3_TARGETS}")
|
||||
@@ -52,8 +52,22 @@ if(_YAZE_USE_SYSTEM_YAML)
|
||||
find_package(yaml-cpp QUIET)
|
||||
if(yaml-cpp_FOUND)
|
||||
message(STATUS "Using system yaml-cpp")
|
||||
add_library(yaze_yaml INTERFACE IMPORTED)
|
||||
target_link_libraries(yaze_yaml INTERFACE yaml-cpp)
|
||||
add_library(yaze_yaml INTERFACE)
|
||||
if(TARGET yaml-cpp::yaml-cpp)
|
||||
message(STATUS "Linking yaze_yaml against yaml-cpp::yaml-cpp")
|
||||
target_link_libraries(yaze_yaml INTERFACE yaml-cpp::yaml-cpp)
|
||||
|
||||
# HACK: Explicitly add the library directory for Homebrew if detected
|
||||
# This fixes 'ld: library not found for -lyaml-cpp' when the imported target
|
||||
# doesn't propagate the library path correctly to the linker command line
|
||||
if(EXISTS "/opt/homebrew/opt/yaml-cpp/lib")
|
||||
link_directories("/opt/homebrew/opt/yaml-cpp/lib")
|
||||
message(STATUS "Added yaml-cpp link directory: /opt/homebrew/opt/yaml-cpp/lib")
|
||||
endif()
|
||||
else()
|
||||
message(STATUS "Linking yaze_yaml against yaml-cpp (legacy)")
|
||||
target_link_libraries(yaze_yaml INTERFACE yaml-cpp)
|
||||
endif()
|
||||
set(YAZE_YAML_TARGETS yaze_yaml)
|
||||
return()
|
||||
elseif(YAZE_USE_SYSTEM_DEPS)
|
||||
|
||||
Reference in New Issue
Block a user