1
0
Files
wavefront-parser/CMakeLists.txt

58 lines
1.9 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
tests/unit/parse_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()