57 lines
1.8 KiB
CMake
57 lines
1.8 KiB
CMake
cmake_minimum_required(VERSION 3.16)
|
|
project(wavefront_parser LANGUAGES CXX)
|
|
|
|
set(CMAKE_CXX_STANDARD 20)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-g -O3")
|
|
set(CMAKE_CXX_FLAGS "-fno-threadsafe-statics")
|
|
|
|
option(ENABLE_COVERAGE "Enable coverage instrumentation for tests" OFF)
|
|
|
|
file(GLOB SRC_FILES CONFIGURE_DEPENDS src/*.cpp)
|
|
|
|
set(APP_SOURCES ${SRC_FILES})
|
|
list(REMOVE_ITEM APP_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp)
|
|
|
|
add_executable(wavefront_parser ${SRC_FILES})
|
|
target_include_directories(wavefront_parser PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src)
|
|
|
|
find_package(GTest REQUIRED)
|
|
|
|
enable_testing()
|
|
|
|
add_executable(wavefront_tests
|
|
tests/unit/trim_test.cpp
|
|
tests/unit/settings_test.cpp
|
|
tests/unit/scan_test.cpp
|
|
${APP_SOURCES}
|
|
)
|
|
target_link_libraries(wavefront_tests PRIVATE
|
|
GTest::gtest
|
|
GTest::gmock
|
|
GTest::gtest_main
|
|
)
|
|
target_include_directories(wavefront_tests PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src)
|
|
|
|
if(ENABLE_COVERAGE AND CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
|
|
target_compile_options(wavefront_tests PRIVATE --coverage -O0 -g)
|
|
target_link_options(wavefront_tests PRIVATE --coverage)
|
|
endif()
|
|
|
|
include(GoogleTest)
|
|
gtest_discover_tests(wavefront_tests)
|
|
|
|
find_program(LCOV_EXECUTABLE lcov)
|
|
find_program(GENHTML_EXECUTABLE genhtml)
|
|
if(LCOV_EXECUTABLE AND GENHTML_EXECUTABLE)
|
|
add_custom_target(coverage
|
|
COMMAND ${LCOV_EXECUTABLE} --directory "${CMAKE_BINARY_DIR}" --capture --rc geninfo_unexecuted_blocks=1 --demangle-cpp --ignore-errors inconsistent --keep-going --output-file coverage.info
|
|
COMMAND ${LCOV_EXECUTABLE} --extract coverage.info "${CMAKE_SOURCE_DIR}/src/*" --output-file coverage.info
|
|
COMMAND ${GENHTML_EXECUTABLE} coverage.info --output-directory coverage
|
|
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
|
|
COMMENT "Generating lcov report at \"${CMAKE_BINARY_DIR}/coverage/index.html\""
|
|
VERBATIM
|
|
)
|
|
endif()
|