cmake/Coverage.cmake (56 lines of code) (raw):
# ++
#
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT license.
#
# Module Name:
#
# Coverage.cmake
#
# Abstract:
#
# Sets up the options for capturing code coverage from unit tests
#
# --
#
# Define cmake options and their defaults
#
find_program( GCOV_PATH gcov )
find_program( LCOV_PATH lcov )
find_program( GENHTML_PATH genhtml )
set(COVERAGE_COMPILER_FLAGS "-g -O0 --coverage -fprofile-arcs -ftest-coverage"
CACHE INTERNAL "")
add_custom_command(
TARGET ${TARGET_NAME}
COMMAND ${LCOV_PATH} --directory . --zerocounters -q
)
set(CMAKE_CXX_FLAGS_COVERAGE
${COVERAGE_COMPILER_FLAGS}
CACHE STRING "Flags used by the C++ compiler during coverage builds."
FORCE )
set(CMAKE_C_FLAGS_COVERAGE
${COVERAGE_COMPILER_FLAGS}
CACHE STRING "Flags used by the C compiler during coverage builds."
FORCE )
mark_as_advanced(CMAKE_CXX_FLAGS_COVERAGE CMAKE_C_FLAGS_COVERAGE)
if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
link_libraries(gcov)
else()
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage")
endif()
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${COVERAGE_COMPILER_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COVERAGE_COMPILER_FLAGS}")
function(SETUP_TARGET_FOR_COVERAGE)
set(options NONE)
set(oneValueArgs NAME)
set(multiValueArgs EXECUTABLE EXECUTABLE_ARGS DEPENDENCIES)
cmake_parse_arguments(Coverage "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
add_custom_target(${Coverage_NAME}
# Run tests
COMMENT "Running unit tests and generating coverage report"
COMMAND ${Coverage_EXECUTABLE}
COMMAND ${LCOV_PATH} -c -d ${PROJECT_BINARY_DIR}/CMakeFiles -o coverage.info -q
COMMAND ${LCOV_PATH} --remove coverage.info "*/testing/*" "*/mbedtls*" -o coverage.info -q
COMMAND ${GENHTML_PATH} coverage.info --output-directory ${PROJECT_BINARY_DIR}/coverage_report -q
)
endfunction() # SETUP_TARGET_FOR_COVERAGE