myxx/MyxxCMake/lib/Coverage.cmake

53 lines
1.8 KiB
CMake
Raw Normal View History

2022-10-06 04:57:47 +00:00
option(MYXX_CODE_COVERAGE "MyxxCMake: enable code coverage" OFF)
if(MYXX_CODE_COVERAGE)
find_program(LCOV_EXE NAMES lcov)
find_program(GENHTML_EXE NAMES genhtml)
endif()
2022-10-09 18:15:35 +00:00
function(myxx_code_coverage TARGET_NAME)
2022-10-06 04:57:47 +00:00
if(NOT MYXX_CODE_COVERAGE)
return()
endif()
2022-10-19 13:59:18 +00:00
if(NOT ${PROJECT_BINARY_DIR} STREQUAL ${CMAKE_BINARY_DIR})
return()
endif()
2022-10-06 04:57:47 +00:00
2022-10-06 18:07:22 +00:00
set(options)
set(oneValueArgs)
set(multiValueArgs EXCLUDE)
cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
2022-10-09 18:15:35 +00:00
set_property(TARGET ${TARGET_NAME} APPEND PROPERTY
2022-10-06 18:07:22 +00:00
COMPILE_OPTIONS --coverage)
2022-10-09 18:15:35 +00:00
set_property(TARGET ${TARGET_NAME} APPEND PROPERTY LINK_FLAGS --coverage)
2022-10-06 04:57:47 +00:00
endif()
2022-10-06 18:07:22 +00:00
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
2022-10-09 18:15:35 +00:00
set_property(TARGET ${TARGET_NAME} APPEND PROPERTY
2022-10-06 18:07:22 +00:00
COMPILE_OPTIONS -fprofile-instr-generate -fcoverage-mapping)
2022-10-09 18:15:35 +00:00
set_property(TARGET ${TARGET_NAME} APPEND PROPERTY LINK_FLAGS --coverage)
2022-10-06 04:57:47 +00:00
endif()
if(LCOV_EXE)
2022-10-09 18:15:35 +00:00
add_custom_target(${TARGET_NAME}-coverage
2022-10-06 04:57:47 +00:00
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
2022-10-09 18:15:35 +00:00
COMMAND ${LCOV_EXE} --test-name ${TARGET_NAME} --output "${TARGET_NAME}.lcov"
2022-10-06 18:07:22 +00:00
--capture
2022-10-06 04:57:47 +00:00
--no-external
--base-directory ${CMAKE_SOURCE_DIR}
2022-10-06 18:07:22 +00:00
--directory ${CMAKE_BINARY_DIR}
2022-10-06 04:57:47 +00:00
--exclude "/usr/\\\*"
2022-10-06 18:07:22 +00:00
--exclude "${CMAKE_BINARY_DIR}/\\\*")
2022-10-09 18:15:35 +00:00
add_dependencies(${TARGET_NAME}-coverage ${TARGET_NAME})
2022-10-06 04:57:47 +00:00
if(GENHTML_EXE)
2022-10-09 18:15:35 +00:00
add_custom_target(${TARGET_NAME}-coverage-report
2022-10-06 04:57:47 +00:00
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
2022-10-09 18:15:35 +00:00
COMMAND ${GENHTML_EXE} --output-directory "${TARGET_NAME}-coverage-html" "${TARGET_NAME}.lcov")
add_dependencies(${TARGET_NAME}-coverage-report ${TARGET_NAME}-coverage)
2022-10-06 04:57:47 +00:00
endif()
endif()
endfunction()