Files
hdk/CMakeLists.txt
T
2026-05-14 01:47:20 +00:00

124 lines
3.9 KiB
CMake

cmake_minimum_required(VERSION 3.20)
project(hdk
VERSION 0.0.1
LANGUAGES CXX
DESCRIPTION "holo development kit"
)
option(HDK_TESTS "Build HDK tests" OFF)
option(HDK_EXAMPLES "Build HDK examples" OFF)
option(HDK_COVERAGE "Enable HDK coverage instrumentation and reporting" OFF)
set(HDK_COVERAGE_FAIL_UNDER 90 CACHE STRING "Minimum line coverage percentage required by strict coverage target")
if(HDK_TESTS)
include(CTest)
enable_testing()
include(FetchContent)
FetchContent_Declare(
doctest
GIT_REPOSITORY https://github.com/doctest/doctest.git
GIT_TAG v2.4.12
)
FetchContent_MakeAvailable(doctest)
endif()
if(HDK_COVERAGE)
if(NOT CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
message(WARNING "Coverage requested but compiler '${CMAKE_CXX_COMPILER_ID}' may not support --coverage.")
endif()
add_library(hdk-coverage-flags INTERFACE)
target_compile_options(
hdk-coverage-flags
INTERFACE
-O0
-g
--coverage
-fno-inline
-fno-inline-functions
-fno-default-inline
-fkeep-inline-functions
-fkeep-static-functions
)
target_link_options(hdk-coverage-flags INTERFACE --coverage)
endif()
add_subdirectory(grid)
add_subdirectory(sdl)
add_subdirectory(is3r)
#add_subdirectory(hogl)
if(HDK_TESTS AND HDK_COVERAGE)
find_program(HDK_GCOVR_EXECUTABLE gcovr)
if(HDK_GCOVR_EXECUTABLE)
add_custom_target(
coverage
COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/coverage
COMMAND
${HDK_GCOVR_EXECUTABLE}
--root ${CMAKE_SOURCE_DIR}
--filter ${CMAKE_SOURCE_DIR}/grid/include
--filter ${CMAKE_SOURCE_DIR}/sdl/include
--exclude ${CMAKE_BINARY_DIR}/_deps
--print-summary
--fail-under-function ${HDK_COVERAGE_FAIL_UNDER}
--html-details ${CMAKE_BINARY_DIR}/coverage/index.html
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
COMMENT "Run strict tests+coverage and generate report at ${CMAKE_BINARY_DIR}/coverage/index.html"
VERBATIM
)
else()
message(WARNING "gcovr not found; coverage target will not be available.")
endif()
endif()
# Option: DOCUMENTATION
option(HDK_DOCS "Build documentation" OFF)
if(HDK_DOCS)
# Doxygen
find_package(Doxygen)
if(DOXYGEN_FOUND)
set(DOXYGEN_GENERATE_HTML YES)
set(DOXYGEN_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/docs)
set(DOXYGEN_STRIP_FROM_PATH ${CMAKE_CURRENT_SOURCE_DIR})
set(DOXYGEN_EXTRACT_ALL YES)
set(DOXYGEN_DIRECTORY_GRAPH YES)
set(DOXYGEN_JAVADOC_BANNER YES)
set(DOXYGEN_JAVADOC_AUTOBRIEF YES)
set(DOXYGEN_DOT_IMAGE_FORMAT svg)
set(DOXYGEN_INTERACTIVE_SVG YES)
set(DOXYGEN_INTERNAL_DOCS YES)
set(DOXYGEN_TIMESTAMP YES)
set(DOXYGEN_RECURSIVE YES)
set(DOXYGEN_TAB_SIZE 2)
set(DOXYGEN_BUILTIN_STL_SUPPORT YES)
set(DOXYGEN_HTML_DYNAMIC_SECTIONS YES)
set(DOXYGEN_USE_MDFILE_AS_MAINPAGE INDEX.md)
set(DOXYGEN_GENERATE_TREEVIEW YES)
set(DOXYGEN_FULL_SIDEBAR YES)
set(DOXYGEN_QUIET YES)
set(DOXYGEN_SOURCE_BROWSER YES) # https://www.doxygen.nl/manual/config.html#cfg_source_browser
# https://www.doxygen.nl/manual/config.html#cfg_verbatim_headers
set(DOXYGEN_VERBATIM_HEADERS YES)
set(DOXYGEN_REFERENCED_BY_RELATION YES)
set(DOXYGEN_REFERENCES_RELATION YES)
doxygen_add_docs(docs
${CMAKE_CURRENT_SOURCE_DIR}/INDEX.md
${CMAKE_CURRENT_SOURCE_DIR}/grid/include/
${CMAKE_CURRENT_SOURCE_DIR}/grid/src/
${CMAKE_CURRENT_SOURCE_DIR}/grid/*.md
${CMAKE_CURRENT_SOURCE_DIR}/sdl/include/
${CMAKE_CURRENT_SOURCE_DIR}/sdl/examples/
${CMAKE_CURRENT_SOURCE_DIR}/sdl/src/
${CMAKE_CURRENT_SOURCE_DIR}/sdl/*.md
#USE_STAMP_FILE
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMENT "Generate API")
else()
message(WARNING "Doxygen not found, API documentation will not be generated.")
endif()
endif()