diff --git a/cmake/Makefile.coverage.in b/cmake/Makefile.coverage.in deleted file mode 100644 index d4c148c3acac390f3160e73d562ecad591b60b9b..0000000000000000000000000000000000000000 --- a/cmake/Makefile.coverage.in +++ /dev/null @@ -1,40 +0,0 @@ -####################################################################################################################### -# -# Additional make target for generating a code coverage report. -# -# ATTENTION: This file has bee deprecated in project-template and will no longer be maintained. -# DO NOT MODIFY THIS FILE IN THE PROJECT TEMPLATE! -# Use make_coverage.sh.in instead! -# -####################################################################################################################### - -####################################################################################################################### -# -# IMPORTANT NOTE: -# -# DO NOT MODIFY THIS FILE inside a project. Instead update the project-template repository and pull the change from -# there. Make sure to keep the file generic, since it will be used by other projects, too. -# -# If you have modified this file inside a project despite this warning, make sure to cherry-pick all your changes -# into the project-template repository immediately. -# -####################################################################################################################### - -coverage: - echo ATTENTION: Using Makefile.coverage.in in your CMake project is deprecated. Please change to make_coverage.sh.in - rm -f `find . -name "*\.gcda"` - make test - lcov --capture --directory . --output-file coverage_all.info - #lcov capture also includes external stuff like glibc, boost etc. - #only extract the reports for this project - lcov --extract coverage_all.info "@CMAKE_SOURCE_DIR@*" -o coverage_incl_build.info - #Some projects install the library and its headers for testing in the build directory - #and compile tests and examples against it. This leads to double - #counting and untested lines in the coverage report. That's why we - #exclude the build directory from the coverage report (needed if the - #build directory is in the source tree). - #Attention: If you make an 'in sorce build' the coverage report will - #be empty! - lcov --remove coverage_incl_build.info "@PROJECT_BINARY_DIR@/*" -o coverage.info - genhtml coverage.info --output-directory coverage_html - echo ATTENTION: Using Makefile.coverage.in in your CMake project is deprecated. Please change to make_coverage.sh.in diff --git a/cmake/enable_code_coverage_report.cmake b/cmake/enable_code_coverage_report.cmake index f668dd9b08f9e030a45922289d267402e9a02d39..c64bf8467bfc71c94ef6dc2cbe6bbedb5bfdee38 100644 --- a/cmake/enable_code_coverage_report.cmake +++ b/cmake/enable_code_coverage_report.cmake @@ -25,16 +25,24 @@ # ####################################################################################################################### -set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 --coverage") # The make coverage command is only available in debug mode. Also # factor in that cmake treats CMAKE_BUILD_TYPE string as case # insensitive. + +option(ENABLE_COVERAGE_REPORT "Create coverage target to generate code coverage reports" ON) + string(TOUPPER "${CMAKE_BUILD_TYPE}" build_type_uppercase) -IF(build_type_uppercase STREQUAL "DEBUG") +IF(build_type_uppercase STREQUAL "DEBUG" AND ENABLE_COVERAGE_REPORT) + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} --coverage") + set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} --coverage") configure_file(cmake/make_coverage.sh.in - ${PROJECT_BINARY_DIR}/make_coverage.sh @ONLY) + ${PROJECT_BINARY_DIR}/make_coverage.sh @ONLY) add_custom_target(coverage - ./make_coverage.sh - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - COMMENT "Generating test coverage documentation" VERBATIM) + ./make_coverage.sh + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMENT "Generating test coverage documentation" VERBATIM) + add_custom_target(clean-gcda + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + COMMAND find -name "*.gcda" -exec rm {} \; + COMMENT "Removing old coverage files" VERBATIM) ENDIF() diff --git a/cmake/make_coverage.sh.in b/cmake/make_coverage.sh.in index 0f3620e438e16070de72a5fbc1436170beea8098..8634e958b8845fec58ac88ab468c44dd2071c2d1 100755 --- a/cmake/make_coverage.sh.in +++ b/cmake/make_coverage.sh.in @@ -23,7 +23,7 @@ # ####################################################################################################################### -rm -f `find . -name "*\.gcda"` +cmake --build . --target clean-gcda cmake --build . --target test lcov --capture --directory . --output-file coverage_all.info --ignore-errors gcov diff --git a/cmake/set_default_flags.cmake b/cmake/set_default_flags.cmake index 5723e64d1dbb5c34fcc60ac89b774a2746e180ee..068cafa83b8e96679f566c7f28a89fe24b60bc58 100644 --- a/cmake/set_default_flags.cmake +++ b/cmake/set_default_flags.cmake @@ -23,25 +23,17 @@ include(cmake/enable_latest_cxx_support.cmake) -option(BUILD_COVERAGE_ON_DEBUG "Generate coverage information when compiling in debug mode" ON) - -if (BUILD_COVERAGE_ON_DEBUG) - set(CTK_COVERAGE_FLAGS "--coverage") -else() - set(CTK_COVERAGE_FLAGS "") -endif() - set(CMAKE_CONFIGURATION_TYPES "Debug;Release;RelWithDebInfo;asan;tsan") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${${PROJECT_NAME}_CXX_FLAGS} -Wall -Wextra -Wshadow -pedantic -Wuninitialized") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3") set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -O3 -g") -set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -O0 ${CTK_COVERAGE_FLAGS}") +set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -O0") set(CMAKE_CXX_FLAGS_TSAN "${CMAKE_CXX_FLAGS} -g -O1 -fsanitize=thread") set(CMAKE_CXX_FLAGS_ASAN "${CMAKE_CXX_FLAGS} -g -O0 -fsanitize=address -fsanitize=undefined -fsanitize=leak") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${${PROJECT_NAME}_C_FLAGS} -Wall -Wextra -Wshadow -pedantic -Wuninitialized") set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3") set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -O3 -g") -set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -g -O0 ${CTK_COVERAGE_FLAGS}") +set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -g -O0") set(CMAKE_C_FLAGS_TSAN "${CMAKE_C_FLAGS} -g -O1 -fsanitize=thread") set(CMAKE_C_FLAGS_ASAN "${CMAKE_C_FLAGS} -g -O0 -fsanitize=address -fsanitize=undefined -fsanitize=leak")