Add initial FnixLib development implementation
This commit is contained in:
commit
84742ae38e
33 files changed
+3340
No files matched your search
@@ -0,0 +1,80 @@
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
|
||||
project(FnixLib
|
||||
VERSION 0.1.0
|
||||
DESCRIPTION "Biblioteca multimedia propia para juegos y aplicaciones 2D/3D"
|
||||
LANGUAGES C)
|
||||
|
||||
# La versión 0.1.0 solo tiene implementación para Linux (X11).
|
||||
if(NOT CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||
message(FATAL_ERROR
|
||||
"FnixLib ${PROJECT_VERSION} solo está implementada para Linux (X11). "
|
||||
"El soporte de Windows todavía no existe.")
|
||||
endif()
|
||||
|
||||
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
||||
set(CMAKE_BUILD_TYPE Release CACHE STRING "Tipo de compilación" FORCE)
|
||||
endif()
|
||||
|
||||
set(CMAKE_C_STANDARD 17)
|
||||
set(CMAKE_C_STANDARD_REQUIRED ON)
|
||||
set(CMAKE_C_EXTENSIONS OFF)
|
||||
|
||||
option(FNIX_BUILD_EXAMPLES "Compilar los ejemplos" ON)
|
||||
option(FNIX_BUILD_TESTS "Compilar las pruebas (ctest)" ON)
|
||||
option(FNIX_WARNINGS_AS_ERRORS "Tratar las advertencias como errores" OFF)
|
||||
option(FNIX_SANITIZE "Compilar con AddressSanitizer y UBSan" OFF)
|
||||
|
||||
if(CMAKE_C_COMPILER_ID MATCHES "GNU|Clang")
|
||||
add_compile_options(-Wall -Wextra -Wpedantic -Wshadow)
|
||||
if(FNIX_WARNINGS_AS_ERRORS)
|
||||
add_compile_options(-Werror)
|
||||
endif()
|
||||
if(FNIX_SANITIZE)
|
||||
add_compile_options(-fsanitize=address,undefined -fno-omit-frame-pointer
|
||||
-fno-sanitize-recover=undefined)
|
||||
add_link_options(-fsanitize=address,undefined)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Única dependencia del sistema: Xlib (libX11).
|
||||
find_package(X11 REQUIRED)
|
||||
|
||||
add_library(fnix
|
||||
src/core/errors.c
|
||||
src/core/window.c
|
||||
src/graphics/canvas.c
|
||||
src/graphics/draw2d.c
|
||||
src/input/input.c
|
||||
src/time/time.c
|
||||
src/platform/linux/x11_keys.c
|
||||
src/platform/linux/x11_window.c)
|
||||
add_library(FnixLib::fnix ALIAS fnix)
|
||||
|
||||
target_include_directories(fnix
|
||||
PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src)
|
||||
target_link_libraries(fnix PRIVATE X11::X11)
|
||||
|
||||
if(FNIX_BUILD_EXAMPLES)
|
||||
add_executable(basic examples/basic/main.c)
|
||||
target_link_libraries(basic PRIVATE fnix)
|
||||
endif()
|
||||
|
||||
if(FNIX_BUILD_TESTS)
|
||||
enable_testing()
|
||||
|
||||
foreach(test_name core draw2d input)
|
||||
add_executable(test_${test_name} tests/test_${test_name}.c)
|
||||
target_link_libraries(test_${test_name} PRIVATE fnix)
|
||||
add_test(NAME ${test_name} COMMAND test_${test_name})
|
||||
endforeach()
|
||||
# test_input comprueba la lógica interna, así que usa cabeceras privadas.
|
||||
target_include_directories(test_input PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src)
|
||||
|
||||
# Necesita un servidor X11; sin DISPLAY termina con el código 77 (omitida).
|
||||
add_executable(test_window_x11 tests/test_window_x11.c)
|
||||
target_link_libraries(test_window_x11 PRIVATE fnix X11::X11)
|
||||
add_test(NAME window_x11 COMMAND test_window_x11)
|
||||
set_tests_properties(window_x11 PROPERTIES SKIP_RETURN_CODE 77)
|
||||
endif()
|
||||
Reference in new issue
Block a user