This commit is contained in:
Clinv committed 2026-10-24 12:01:52 -03:00
1 parent 7f7fcd545d
commit 4d9a339421
114 files changed
+11383 -1837

No files matched your search

+24 -88
View File
@@ -1,98 +1,34 @@
cmake_minimum_required(VERSION 3.16)
project(Tahgibu VERSION 2.0.0 LANGUAGES C CXX)
cmake_minimum_required(VERSION 3.21)
project(Tahgibu VERSION 2.0.0 DESCRIPTION "Editor de animación 2D" LANGUAGES C)
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)
set(CMAKE_C_EXTENSIONS OFF)
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)
option(TAHGIBU_BUILD_APP "Construir la aplicación gráfica (necesita raylib)" ON)
option(TAHGIBU_BUILD_TESTS "Construir las pruebas" ON)
option(TAHGIBU_BUILD_EXAMPLES "Construir la extensión nativa de ejemplo" ON)
option(TAHGIBU_WITH_LUA "Incluir soporte de extensiones Lua (necesita Lua 5.4)" OFF)
option(TAHGIBU_FETCH_DEPS "Descargar raylib si no está instalada (necesita Internet)" OFF)
option(TAHGIBU_SANITIZE "Compilar con AddressSanitizer y UBSan (solo gcc/clang)" OFF)
option(TAHGIBU_WARNINGS_AS_ERRORS "Tratar los avisos como errores" OFF)
option(TAHGIBU_UI_SMOKE "Prueba de la interfaz con un raylib falso (desarrollo)" 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()
list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
include(CompilerOptions)
include(PlatformConfig)
include(Dependencies)
include(BuildTargets)
# ---------------------------------------------------------------------------
# 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()
message(STATUS "Tahgibu ${PROJECT_VERSION}: app=${TAHGIBU_BUILD_APP} tests=${TAHGIBU_BUILD_TESTS} lua=${TAHGIBU_WITH_LUA}")
# ---------------------------------------------------------------------------
# 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()
# Paquetes (cpack): tar.gz y zip del ejecutable instalado. Sin probar todavía: ver docs/STATUS.md.
set(CPACK_PACKAGE_NAME "Tahgibu")
set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION})
set(CPACK_PACKAGE_VENDOR "Autores de Tahgibu")
set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_SOURCE_DIR}/LICENSE)
set(CPACK_GENERATOR "TGZ;ZIP")
include(CPack)