First commit

This commit is contained in:
2025-12-23 21:24:06 +00:00
parent 2a30c0d77b
commit f5dc0ccbc9
52 changed files with 1663 additions and 208 deletions
+5 -149
View File
@@ -1,14 +1,11 @@
# CMakeList.txt : Top-level CMake project file, do global configuration
# and include sub-projects here.
#
cmake_minimum_required (VERSION 3.10)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/tools/cmake)
include(SubDirList)
cmake_minimum_required (VERSION 3.16)
get_filename_component(PROJECT_DIR ${CMAKE_CURRENT_SOURCE_DIR} NAME)
string(REPLACE " " "_" PROJECT_DIR ${PROJECT_DIR})
project(${PROJECT_DIR})
project(${PROJECT_DIR} LANGUAGES C CXX)
set(PROJECT_VERSION_MAJOR 0)
set(PROJECT_VERSION_MINOR 1)
@@ -42,150 +39,9 @@ set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/install)
set(CMAKE_CACHEFILE_DIR ${CMAKE_SOURCE_DIR}/build)
include(CTest)
enable_testing()
set(CMAKE_CXX_STANDARD 20)
set(CPACK_PROJECT_NAME ${${PROJECT_NAME}_NAME})
set(CPACK_PROJECT_VERSION ${${PROJECT_NAME}_VERSION})
include(CPack)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
option(${PROJECT_NAME}_BUILD_ENGINE "Build engine library" ON)
option(${PROJECT_NAME}_BUILD_APPS "Build supplimentary applications" ON)
option(${PROJECT_NAME}_BUILD_DEPS "Build dependencies" ON)
set(INCLUDE_BASE_DIR ${PROJECT_SOURCE_DIR}/src)
option(ONLY_COVERAGE "Build only tests necessary for coverage" OFF)
option(LIBCPP "Build with libc++" OFF)
option(ENABLE_COVERAGE "Enable coverage reporting for gcc/clang" OFF)
option(ENABLE_ASAN "Enable address sanitizer" OFF)
option(BUILD_SHARED_LIBS "Enable compilation of shared libraries" OFF)
option(ENABLE_TESTING "Enable the building of the test" OFF)
option(ENABLE_CLANG_TIDY "Enable testing with clang-tidy" OFF)
option(ENABLE_CPPCHECK "Enable testing with cppcheck" OFF)
option(SIMPLE_BUILD "Build the project as minimally as possible" OFF)
option(BUILD_DOC "Build the project's documentation" OFF)
option(FORCE_COLORED_OUTPUT "Always produce ANSI-colored output (GNU/Clang only)." OFF)
option(DEBUG_LOGGING "Enabling debug logging" OFF)
add_library(project_warnings INTERFACE)
add_library(project_options INTERFACE)
if(ONLY_COVERAGE OR ENABLE_COVERAGE)
target_compile_options(project_options INTERFACE --coverage -O0 -g)
target_link_libraries(project_options INTERFACE --coverage)
endif()
if(ENABLE_ASAN)
target_compile_options(project_options INTERFACE -fsanitize=address)
target_link_libraries(project_options INTERFACE -fsanitize=address)
endif()
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
target_compile_options(project_warnings
INTERFACE
-Wall
-Wextra
-Wshadow
-Wnon-virtual-dtor
-Wold-style-cast
-Wcast-align
-Wunused
-Woverloaded-virtual
-Wpedantic
-Wconversion
-Wsign-conversion
-Wnull-dereference
-Wdouble-promotion
-Wformat=2)
endif()
# some GCC specific warnings. These flags are added only if the used compiler is GCC.
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
target_compile_options(project_warnings
INTERFACE
-Wmisleading-indentation
-Wduplicated-cond
-Wlogical-op
-Wuseless-cast
)
target_link_libraries(project_options INTERFACE stdc++fs)
endif()
if (${FORCE_COLORED_OUTPUT})
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
target_compile_options(project_options INTERFACE -fdiagnostics-color=always)
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
target_compile_options(project_options INTERFACE -fcolor-diagnostics)
endif ()
endif ()
find_program(CCACHE ccache)
if(CCACHE)
set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE})
endif()
if(ENABLE_CPPCHECK)
find_program(CPPCHECK cppcheck)
if(CPPCHECK)
set(CMAKE_CXX_CPPCHECK
${CPPCHECK}
--suppress=syntaxError
--enable=all
--inconclusive)
else()
message(SEND_ERROR "cppcheck requested but executable not found")
endif()
endif()
if(ENABLE_CLANG_TIDY)
find_program(CLANGTIDY clang-tidy)
if(CLANGTIDY)
set(CMAKE_CXX_CLANG_TIDY ${CLANGTIDY})
else()
message(SEND_ERROR "clang-tidy requested but executable not found")
endif()
endif()
if(BUILD_DOC)
find_package(Doxygen)
if (DOXYGEN_FOUND)
SET(DOXYGEN_IN ${CMAKE_CURRENT_SOURCE_DIR}/doc/Doxyfile.in)
SET(DOXYGEN_OUT ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile)
configure_file(${DOXYGEN_IN} ${DOXYGEN_OUT} @ONLY)
add_custom_target(doc ALL
COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_OUT}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMENT "Buidling Doxygen documentation"
VERBATIM )
else (DOXYGEN_FOUND)
message("No doxygen binary found on the system.")
SET(${BUILD_DOC} OFF)
endif ()
endif()
message(STATUS "")
message(STATUS "Summary")
#message(STATUS "")
#message(STATUS "Build libs: \t ${${PROJECT_NAME}_BUILD_DEPS}")
#message(STATUS "Build src: \t ${${PROJECT_NAME}_BUILD_ENGINE}")
message(STATUS "")
message(STATUS "Build type: \t ${CMAKE_BUILD_TYPE}")
message(STATUS "Install prefix: \t ${CMAKE_INSTALL_PREFIX}")
message(STATUS "Testing enabled: \t ${ENABLE_TESTING}")
message(STATUS "Clang-tidy: \t ${ENABLE_CLANG_TIDY}")
message(STATUS "Cppcheck: \t ${ENABLE_CPPCHECK}")
message(STATUS "Compiler: \t ${CMAKE_CXX_COMPILER_ID}")
message(STATUS "Sanizizers: \t ${ENABLE_ASAN}")
message(STATUS "Shared libs: \t ${BUILD_SHARED_LIBS}")
message(STATUS "Build libcpp: \t ${LIBCPP}")
message(STATUS "CCache executable:\t ${CCACHE}")
message(STATUS "Building doc: \t ${BUILD_DOC}")
message(STATUS "Force color output:\t ${FORCE_COLORED_OUTPUT}")
message(STATUS "")
message(STATUS "Version: \t ${${PROJECT_NAME}_VERSION}")
message(STATUS "")
add_subdirectory("libs")
add_subdirectory("srcs")
add_subdirectory("src")