cmake_minimum_required(VERSION 3.16) project(Tahgibu VERSION 2.0.0 LANGUAGES C CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_C_STANDARD 11) set(CMAKE_C_STANDARD_REQUIRED ON) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) set(CMAKE_BUILD_TYPE Release CACHE STRING "Tipo de compilación" FORCE) endif() option(TAHGIBU_BUILD_APP "Compilar el editor (requiere raylib)" ON) option(TAHGIBU_BUILD_TESTS "Compilar las pruebas del núcleo" ON) option(TAHGIBU_FETCH_RAYLIB "Descargar y compilar raylib si no se encuentra (requiere red y git)" OFF) # --------------------------------------------------------------------------- # Núcleo: modelo de datos del proyecto. NO depende de raylib. # --------------------------------------------------------------------------- add_library(tahgibu_core STATIC source/core/Frame.cpp source/core/Project.cpp ) target_include_directories(tahgibu_core PUBLIC source) target_compile_definitions(tahgibu_core PUBLIC TAHGIBU_VERSION="${PROJECT_VERSION}") if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") target_compile_options(tahgibu_core PUBLIC -Wall -Wextra) endif() # --------------------------------------------------------------------------- # Lua: solo se detecta. No se enlaza hasta la etapa 10. # --------------------------------------------------------------------------- find_package(Lua QUIET) if(LUA_FOUND) message(STATUS "Lua ${LUA_VERSION_STRING} encontrado (se usará a partir de la etapa 10)") else() message(STATUS "Lua no encontrado. No hace falta todavía; será necesario en la etapa 10.") endif() # --------------------------------------------------------------------------- # Editor (raylib) # --------------------------------------------------------------------------- if(TAHGIBU_BUILD_APP) set(TAHGIBU_RAYLIB_TARGET "") find_package(raylib QUIET) if(TARGET raylib) set(TAHGIBU_RAYLIB_TARGET raylib) else() find_package(PkgConfig QUIET) if(PKG_CONFIG_FOUND) pkg_check_modules(RAYLIB QUIET IMPORTED_TARGET raylib) if(RAYLIB_FOUND) set(TAHGIBU_RAYLIB_TARGET PkgConfig::RAYLIB) endif() endif() endif() if(NOT TAHGIBU_RAYLIB_TARGET AND TAHGIBU_FETCH_RAYLIB) include(FetchContent) set(BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) FetchContent_Declare(raylib GIT_REPOSITORY https://github.com/raysan5/raylib.git GIT_TAG 5.0 GIT_SHALLOW ON) FetchContent_MakeAvailable(raylib) set(TAHGIBU_RAYLIB_TARGET raylib) endif() if(NOT TAHGIBU_RAYLIB_TARGET) message(FATAL_ERROR "No se encontró raylib.\n" "Opciones:\n" " 1) Instalarla con el gestor de paquetes de tu distribución (ver README.md).\n" " 2) Reconfigurar con -DTAHGIBU_FETCH_RAYLIB=ON (descarga y compila raylib).\n" " 3) Compilar solo el núcleo y las pruebas con -DTAHGIBU_BUILD_APP=OFF.") endif() message(STATUS "raylib: ${TAHGIBU_RAYLIB_TARGET}") add_executable(tahgibu source/main.cpp source/ui/Application.cpp source/ui/Layout.cpp ) target_link_libraries(tahgibu PRIVATE tahgibu_core ${TAHGIBU_RAYLIB_TARGET}) endif() # --------------------------------------------------------------------------- # Pruebas del núcleo (no necesitan raylib ni pantalla) # --------------------------------------------------------------------------- if(TAHGIBU_BUILD_TESTS) enable_testing() add_executable(tahgibu_core_tests tests/core_tests.cpp) target_link_libraries(tahgibu_core_tests PRIVATE tahgibu_core) add_test(NAME core COMMAND tahgibu_core_tests) endif()