aboutsummaryrefslogtreecommitdiff
path: root/cmake/script/CoverageInclude.cmake.in
diff options
context:
space:
mode:
Diffstat (limited to 'cmake/script/CoverageInclude.cmake.in')
-rw-r--r--cmake/script/CoverageInclude.cmake.in56
1 files changed, 56 insertions, 0 deletions
diff --git a/cmake/script/CoverageInclude.cmake.in b/cmake/script/CoverageInclude.cmake.in
new file mode 100644
index 0000000000..7a8bf2f0af
--- /dev/null
+++ b/cmake/script/CoverageInclude.cmake.in
@@ -0,0 +1,56 @@
+# Copyright (c) 2024-present The Bitcoin Core developers
+# Distributed under the MIT software license, see the accompanying
+# file COPYING or https://opensource.org/license/mit/.
+
+if("@CMAKE_CXX_COMPILER_ID@" STREQUAL "Clang")
+ find_program(LLVM_COV_EXECUTABLE llvm-cov REQUIRED)
+ set(COV_TOOL "${LLVM_COV_EXECUTABLE} gcov")
+else()
+ find_program(GCOV_EXECUTABLE gcov REQUIRED)
+ set(COV_TOOL "${GCOV_EXECUTABLE}")
+endif()
+
+# COV_TOOL is used to replace a placeholder.
+configure_file(
+ cmake/cov_tool_wrapper.sh.in ${CMAKE_CURRENT_LIST_DIR}/cov_tool_wrapper.sh
+ FILE_PERMISSIONS OWNER_READ OWNER_EXECUTE
+ GROUP_READ GROUP_EXECUTE
+ WORLD_READ
+ @ONLY
+)
+
+find_program(LCOV_EXECUTABLE lcov REQUIRED)
+separate_arguments(LCOV_OPTS)
+set(LCOV_COMMAND ${LCOV_EXECUTABLE} --gcov-tool ${CMAKE_CURRENT_LIST_DIR}/cov_tool_wrapper.sh ${LCOV_OPTS})
+
+find_program(GENHTML_EXECUTABLE genhtml REQUIRED)
+set(GENHTML_COMMAND ${GENHTML_EXECUTABLE} --show-details ${LCOV_OPTS})
+
+find_program(GREP_EXECUTABLE grep REQUIRED)
+find_program(AWK_EXECUTABLE awk REQUIRED)
+
+set(LCOV_FILTER_COMMAND ./filter-lcov.py)
+list(APPEND LCOV_FILTER_COMMAND -p "/usr/local/")
+list(APPEND LCOV_FILTER_COMMAND -p "/usr/include/")
+list(APPEND LCOV_FILTER_COMMAND -p "/usr/lib/")
+list(APPEND LCOV_FILTER_COMMAND -p "/usr/lib64/")
+list(APPEND LCOV_FILTER_COMMAND -p "src/leveldb/")
+list(APPEND LCOV_FILTER_COMMAND -p "src/crc32c/")
+list(APPEND LCOV_FILTER_COMMAND -p "src/bench/")
+list(APPEND LCOV_FILTER_COMMAND -p "src/crypto/ctaes")
+list(APPEND LCOV_FILTER_COMMAND -p "src/minisketch")
+list(APPEND LCOV_FILTER_COMMAND -p "src/secp256k1")
+list(APPEND LCOV_FILTER_COMMAND -p "depends")
+
+execute_process(
+ COMMAND ${LCOV_COMMAND} --capture --initial --directory src --output-file baseline.info
+ WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
+)
+execute_process(
+ COMMAND ${LCOV_FILTER_COMMAND} baseline.info baseline_filtered.info
+ WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
+)
+execute_process(
+ COMMAND ${LCOV_COMMAND} --add-tracefile baseline_filtered.info --output-file baseline_filtered.info
+ WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
+)