blob: ff993cf9ffef7629168222f92e0935ee3ba9e467 (
plain)
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
|
# detect-coverage.cmake -- Detect supported compiler coverage flags
# Licensed under the Zlib license, see LICENSE.md for details
# Attempt to enable gcov-style code coverage
macro(add_code_coverage)
# Check for --coverage flag support
set(CMAKE_REQUIRED_LINK_OPTIONS -coverage)
check_c_compiler_flag("--coverage" HAVE_COVERAGE)
set(CMAKE_REQUIRED_LINK_OPTIONS)
if(HAVE_COVERAGE)
# Check for --coverage -fcondition-coverage flag support
set(CMAKE_REQUIRED_LINK_OPTIONS -coverage -fcondition-coverage)
check_c_compiler_flag("--coverage -fcondition-coverage -Wno-coverage-too-many-conditions" HAVE_CONDITION_COVERAGE)
set(CMAKE_REQUIRED_LINK_OPTIONS)
if(HAVE_CONDITION_COVERAGE)
# Both --coverage and -fcondition-coverage supported
add_link_options(-coverage -fcondition-coverage)
add_compile_options(--coverage -fcondition-coverage -Wno-coverage-too-many-conditions)
message(STATUS "Code coverage enabled using: --coverage -fcondition-coverage")
else()
# Only --coverage supported.
add_link_options(-coverage)
add_compile_options(--coverage)
message(STATUS "Code coverage enabled using: --coverage")
endif()
else()
# Some versions of GCC don't support --coverage shorthand
set(CMAKE_REQUIRED_LINK_OPTIONS -lgcov -fprofile-arcs)
check_c_compiler_flag("-ftest-coverage -fprofile-arcs" HAVE_TEST_COVERAGE)
set(CMAKE_REQUIRED_LINK_OPTIONS)
if(HAVE_TEST_COVERAGE)
add_link_options(-lgcov -fprofile-arcs)
add_compile_options(-ftest-coverage -fprofile-arcs)
message(STATUS "Code coverage enabled using: -ftest-coverage -fprofile-arcs")
else()
# Failed to enable coverage, this is fatal to avoid silent failures in CI
message(FATAL_ERROR "WITH_CODE_COVERAGE requested, but unable to turn on code coverage with compiler/linker")
set(WITH_CODE_COVERAGE OFF)
endif()
endif()
# Set optimization level to zero for code coverage builds
if (WITH_CODE_COVERAGE)
# Use CMake compiler flag variables due to add_compile_options failure on Windows GCC
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0")
endif()
endmacro()
|