| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- # detect-coverage.cmake -- Detect supported compiler coverage flags
- # Licensed under the Zlib license, see LICENSE.md for details
- macro(add_code_coverage)
- # Check for -coverage flag support for Clang/GCC
- if(CMAKE_VERSION VERSION_LESS 3.14)
- set(CMAKE_REQUIRED_LIBRARIES -lgcov)
- else()
- set(CMAKE_REQUIRED_LINK_OPTIONS -coverage)
- endif()
- check_c_compiler_flag(-coverage HAVE_COVERAGE)
- set(CMAKE_REQUIRED_LIBRARIES)
- set(CMAKE_REQUIRED_LINK_OPTIONS)
- if(HAVE_COVERAGE)
- add_compile_options(-coverage)
- add_link_options(-coverage)
- message(STATUS "Code coverage enabled using: -coverage")
- else()
- # Some versions of GCC don't support -coverage shorthand
- if(CMAKE_VERSION VERSION_LESS 3.14)
- set(CMAKE_REQUIRED_LIBRARIES -lgcov)
- else()
- set(CMAKE_REQUIRED_LINK_OPTIONS -lgcov -fprofile-arcs)
- endif()
- check_c_compiler_flag("-ftest-coverage -fprofile-arcs -fprofile-values" HAVE_TEST_COVERAGE)
- set(CMAKE_REQUIRED_LIBRARIES)
- set(CMAKE_REQUIRED_LINK_OPTIONS)
- if(HAVE_TEST_COVERAGE)
- add_compile_options(-ftest-coverage -fprofile-arcs -fprofile-values)
- add_link_options(-lgcov -fprofile-arcs)
- message(STATUS "Code coverage enabled using: -ftest-coverage")
- else()
- message(WARNING "Compiler does not support code coverage")
- 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 "-O0 ${CMAKE_C_FLAGS}")
- set(CMAKE_CXX_FLAGS "-O0 ${CMAKE_CXX_FLAGS}")
- endif()
- endmacro()
|