Skip to content

Commit 3ae541a

Browse files
committed
Add coverage and gcovr reporting support
Add gcovr pip install and cmake targets and configurations for running coverage and collecting and processing the results.
1 parent 34cc7c3 commit 3ae541a

15 files changed

+78
-2
lines changed

CMakeLists.txt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,3 +55,13 @@ install(
5555
FILES ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}Config.cmake
5656
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}ConfigVersion.cmake
5757
DESTINATION ${INSTALL_CONFIGDIR})
58+
59+
# Coverage
60+
configure_file("cmake/gcovr.cfg.in" gcovr.cfg @ONLY)
61+
62+
add_custom_target(
63+
process_coverage
64+
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
65+
COMMENT "Running gcovr to process coverage results"
66+
COMMAND mkdir -p coverage
67+
COMMAND gcovr --config gcovr.cfg .)

Makefile

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,12 @@ export
2727
ifeq ($(strip $(TOOLCHAIN)),)
2828
_build_name?=build-system/
2929
_build_dir?=.build/
30-
_configuration_types?="RelWithDebInfo;Debug;Tsan;Asan"
30+
_configuration_types?="RelWithDebInfo;Debug;Tsan;Asan;Gcov"
3131
_cmake_args=-DCMAKE_TOOLCHAIN_FILE=$(CURDIR)/etc/toolchain.cmake
3232
else
3333
_build_name?=build-$(TOOLCHAIN)
3434
_build_dir?=.build/
35-
_configuration_types?="RelWithDebInfo;Debug;Tsan;Asan"
35+
_configuration_types?="RelWithDebInfo;Debug;Tsan;Asan;Gcov"
3636
_cmake_args=-DCMAKE_TOOLCHAIN_FILE=$(CURDIR)/etc/$(TOOLCHAIN)-toolchain.cmake
3737
endif
3838

@@ -152,6 +152,10 @@ lint: venv
152152
lint: ## Run all configured tools in pre-commit
153153
$(PRE_COMMIT) run -a
154154

155+
coverage: venv
156+
$(MAKE) CONFIG=Gcov test
157+
$(ACTIVATE) cmake --build $(_build_path) --config $(CONFIG) --target process_coverage
158+
155159
# Help target
156160
.PHONY: help
157161
help: ## Show this help.

cmake/gcovr.cfg.in

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
root = @CMAKE_SOURCE_DIR@
2+
cobertura = @CMAKE_BINARY_DIR@/coverage/cobertura.xml
3+
sonarqube = @CMAKE_BINARY_DIR@/coverage/sonarqube.xml
4+
html-details = @CMAKE_BINARY_DIR@/coverage/coverage.html
5+
gcov-executable = @GCOV_EXECUTABLE@
6+
gcov-parallel = yes
7+
html-theme = github.dark-blue
8+
html-self-contained = yes
9+
print-summary = yes
10+
filter = .*/Beman/Optional26/.*
11+
exclude = .*\.t\.cpp

etc/clang-16-toolchain.cmake

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,8 @@ include_guard(GLOBAL)
22

33
set(CMAKE_C_COMPILER clang-16)
44
set(CMAKE_CXX_COMPILER clang++-16)
5+
set(GCOV_EXECUTABLE
6+
"llvm-cov-16 gcov"
7+
CACHE STRING "GCOV executable" FORCE)
58

69
include("${CMAKE_CURRENT_LIST_DIR}/clang-flags.cmake")

etc/clang-17-toolchain.cmake

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,8 @@ include_guard(GLOBAL)
22

33
set(CMAKE_C_COMPILER clang-17)
44
set(CMAKE_CXX_COMPILER clang++-17)
5+
set(GCOV_EXECUTABLE
6+
"llvm-cov-17 gcov"
7+
CACHE STRING "GCOV executable" FORCE)
58

69
include("${CMAKE_CURRENT_LIST_DIR}/clang-flags.cmake")

etc/clang-18-toolchain.cmake

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,8 @@ include_guard(GLOBAL)
22

33
set(CMAKE_C_COMPILER clang-18)
44
set(CMAKE_CXX_COMPILER clang++-18)
5+
set(GCOV_EXECUTABLE
6+
"llvm-cov-18 gcov"
7+
CACHE STRING "GCOV executable" FORCE)
58

69
include("${CMAKE_CURRENT_LIST_DIR}/clang-flags.cmake")

etc/clang-19-toolchain.cmake

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,8 @@ include_guard(GLOBAL)
22

33
set(CMAKE_C_COMPILER clang-19)
44
set(CMAKE_CXX_COMPILER clang++-19)
5+
set(GCOV_EXECUTABLE
6+
"llvm-cov-19 gcov"
7+
CACHE STRING "GCOV executable" FORCE)
58

69
include("${CMAKE_CURRENT_LIST_DIR}/clang-flags.cmake")

etc/clang-flags.cmake

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,9 @@ set(CMAKE_CXX_FLAGS_TSAN
2121
set(CMAKE_CXX_FLAGS_ASAN
2222
"-O3 -g -DNDEBUG -fsanitize=address,undefined,leak"
2323
CACHE STRING "C++ ASAN Flags" FORCE)
24+
set(CMAKE_CXX_FLAGS_GCOV
25+
"-O0 -fno-inline -g --coverage"
26+
CACHE STRING "C++ GCOV Flags" FORCE)
27+
set(CMAKE_LINKER_FLAGS_GCOV
28+
"--coverage"
29+
CACHE STRING "Linker GCOV Flags" FORCE)

etc/gcc-11-toolchain.cmake

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,6 @@ include("${CMAKE_CURRENT_LIST_DIR}/gcc-flags.cmake")
44

55
set(CMAKE_C_COMPILER gcc-11)
66
set(CMAKE_CXX_COMPILER g++-11)
7+
set(GCOV_EXECUTABLE
8+
"gcov-11"
9+
CACHE STRING "GCOV executable" FORCE)

etc/gcc-12-toolchain.cmake

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,6 @@ include("${CMAKE_CURRENT_LIST_DIR}/gcc-flags.cmake")
44

55
set(CMAKE_C_COMPILER gcc-12)
66
set(CMAKE_CXX_COMPILER g++-12)
7+
set(GCOV_EXECUTABLE
8+
"gcov-12"
9+
CACHE STRING "GCOV executable" FORCE)

0 commit comments

Comments
 (0)