CoverageInclude.cmake.in raw
1 # Copyright (c) 2024-present The Bitcoin Core developers
2 # Distributed under the MIT software license, see the accompanying
3 # file COPYING or https://opensource.org/license/mit/.
4
5 if("@CMAKE_CXX_COMPILER_ID@" STREQUAL "Clang")
6 find_program(LLVM_COV_EXECUTABLE llvm-cov REQUIRED)
7 set(COV_TOOL "${LLVM_COV_EXECUTABLE} gcov")
8 else()
9 find_program(GCOV_EXECUTABLE gcov REQUIRED)
10 set(COV_TOOL "${GCOV_EXECUTABLE}")
11 endif()
12
13 # COV_TOOL is used to replace a placeholder.
14 configure_file(
15 ${CMAKE_CURRENT_LIST_DIR}/cov_tool_wrapper.sh.in ${CMAKE_CURRENT_LIST_DIR}/cov_tool_wrapper.sh
16 FILE_PERMISSIONS OWNER_READ OWNER_EXECUTE
17 GROUP_READ GROUP_EXECUTE
18 WORLD_READ
19 @ONLY
20 )
21
22 find_program(LCOV_EXECUTABLE lcov REQUIRED)
23 separate_arguments(LCOV_OPTS)
24 set(LCOV_COMMAND ${LCOV_EXECUTABLE} --gcov-tool ${CMAKE_CURRENT_LIST_DIR}/cov_tool_wrapper.sh ${LCOV_OPTS})
25
26 find_program(GENHTML_EXECUTABLE genhtml REQUIRED)
27 set(GENHTML_COMMAND ${GENHTML_EXECUTABLE} --show-details ${LCOV_OPTS})
28
29 find_program(GREP_EXECUTABLE grep REQUIRED)
30 find_program(AWK_EXECUTABLE awk REQUIRED)
31
32 set(LCOV_FILTER_COMMAND ./filter-lcov.py)
33 list(APPEND LCOV_FILTER_COMMAND -p "/usr/local/")
34 list(APPEND LCOV_FILTER_COMMAND -p "/usr/include/")
35 list(APPEND LCOV_FILTER_COMMAND -p "/usr/lib/")
36 list(APPEND LCOV_FILTER_COMMAND -p "/usr/lib64/")
37 list(APPEND LCOV_FILTER_COMMAND -p "src/leveldb/")
38 list(APPEND LCOV_FILTER_COMMAND -p "src/crc32c/")
39 list(APPEND LCOV_FILTER_COMMAND -p "src/bench/")
40 list(APPEND LCOV_FILTER_COMMAND -p "src/crypto/ctaes")
41 list(APPEND LCOV_FILTER_COMMAND -p "src/minisketch")
42 list(APPEND LCOV_FILTER_COMMAND -p "src/secp256k1")
43 list(APPEND LCOV_FILTER_COMMAND -p "depends")
44
45 execute_process(
46 COMMAND ${LCOV_COMMAND} --capture --initial --directory src --output-file baseline.info
47 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
48 COMMAND_ERROR_IS_FATAL ANY
49 )
50 execute_process(
51 COMMAND ${LCOV_FILTER_COMMAND} baseline.info baseline_filtered.info
52 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
53 COMMAND_ERROR_IS_FATAL ANY
54 )
55 execute_process(
56 COMMAND ${LCOV_COMMAND} --add-tracefile baseline_filtered.info --output-file baseline_filtered.info
57 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
58 COMMAND_ERROR_IS_FATAL ANY
59 )
60