-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCodeCoverage.cmake
More file actions
81 lines (71 loc) · 2.94 KB
/
Copy pathCodeCoverage.cmake
File metadata and controls
81 lines (71 loc) · 2.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
function(add_gcovr_target_html _target)
find_program(GCOVR_EXECUTABLE gcovr)
mark_as_advanced(GCOVR_EXECUTABLE)
if(NOT GCOVR_EXECUTABLE)
message(FATAL_ERROR "gcovr not found!")
endif()
set(options "")
set(one_value_keywords TEST_TARGET SOURCE_DIR)
set(multi_value_args "")
cmake_parse_arguments(arg "${options}" "${one_value_keywords}" "${multi_value_args}" ${ARGN})
if(NOT arg_TEST_TARGET)
message(FATAL_ERROR "No TEST_TARGET specified in add_gcovr_target_html(${_target} ...)")
endif()
if(NOT arg_SOURCE_DIR)
message(FATAL_ERROR "No SOURCE_DIR specified in add_gcovr_target_html(${_target} ...)")
endif()
set (gcovr_command ${GCOVR_EXECUTABLE}
--root=${PROJECT_SOURCE_DIR}
--filter=${arg_SOURCE_DIR}
--html
--html-details
-o "$<TARGET_FILE_DIR:${arg_TEST_TARGET}>/$<TARGET_FILE_NAME:${arg_TEST_TARGET}>-coverage.html"
$<TARGET_FILE_DIR:${arg_TEST_TARGET}>
)
add_custom_target(${_target}
COMMAND $<TARGET_FILE:${arg_TEST_TARGET}>
COMMAND ${gcovr_command}
WORKING_DIRECTORY $<TARGET_FILE_DIR:${arg_TEST_TARGET}>
COMMENT "Generate gcovr HTML report for ${arg_TEST_TARGET}"
)
endfunction()
function(add_gcovr_target_xml _target)
find_program(GCOVR_EXECUTABLE gcovr)
mark_as_advanced(GCOVR_EXECUTABLE)
if(NOT GCOVR_EXECUTABLE)
message(FATAL_ERROR "gcovr not found!")
endif()
set(options "")
set(one_value_keywords TEST_TARGET SOURCE_DIR)
set(multi_value_args "")
cmake_parse_arguments(arg "${options}" "${one_value_keywords}" "${multi_value_args}" ${ARGN})
if(NOT arg_TEST_TARGET)
message(FATAL_ERROR "No TEST_TARGET specified in add_gcovr_target_html(${_target} ...)")
endif()
if(NOT arg_SOURCE_DIR)
message(FATAL_ERROR "No SOURCE_DIR specified in add_gcovr_target_html(${_target} ...)")
endif()
set (gcovr_command ${GCOVR_EXECUTABLE}
--root=${PROJECT_SOURCE_DIR}
--filter=${arg_SOURCE_DIR}
--xml
-o "$<TARGET_FILE_DIR:${arg_TEST_TARGET}>/$<TARGET_FILE_NAME:${arg_TEST_TARGET}>-coverage.xml"
$<TARGET_FILE_DIR:${arg_TEST_TARGET}>
)
add_custom_target(${_target}
COMMAND $<TARGET_FILE:${arg_TEST_TARGET}>
COMMAND ${gcovr_command}
WORKING_DIRECTORY $<TARGET_FILE_DIR:${arg_TEST_TARGET}>
COMMENT "Generate gcovr XML report for ${arg_TEST_TARGET}"
)
endfunction()
if(NOT (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") AND
NOT (CMAKE_CXX_COMPILER_ID STREQUAL "GNU"))
message(FATAL_ERROR "Coverage report not supported for compiler: ${CMAKE_CXX_COMPILER_ID}")
elseif(NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
message(FATAL_ERROR "Coverage report not supported for build type: ${CMAKE_CXX_COMPILER_ID}")
else()
add_compile_options(-O0 -w -fprofile-arcs -ftest-coverage --coverage)
add_link_options(-lgcov --coverage)
message(STATUS "Coverage build enabled")
endif()