CoverageFuzz.cmake 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 include(${CMAKE_CURRENT_LIST_DIR}/CoverageInclude.cmake)
6
7 if(NOT DEFINED FUZZ_CORPORA_DIR)
8 set(FUZZ_CORPORA_DIR ${CMAKE_CURRENT_SOURCE_DIR}/qa-assets/fuzz_corpora)
9 endif()
10
11 set(fuzz_test_runner test/fuzz/test_runner.py ${FUZZ_CORPORA_DIR})
12 if(DEFINED JOBS)
13 list(APPEND fuzz_test_runner -j ${JOBS})
14 endif()
15
16 execute_process(
17 COMMAND ${fuzz_test_runner} --loglevel DEBUG
18 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
19 COMMAND_ERROR_IS_FATAL ANY
20 )
21 execute_process(
22 COMMAND ${LCOV_COMMAND} --capture --directory src --test-name fuzz-tests --output-file fuzz.info
23 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
24 COMMAND_ERROR_IS_FATAL ANY
25 )
26 execute_process(
27 COMMAND ${LCOV_COMMAND} --zerocounters --directory src
28 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
29 COMMAND_ERROR_IS_FATAL ANY
30 )
31 execute_process(
32 COMMAND ${LCOV_FILTER_COMMAND} fuzz.info fuzz_filtered.info
33 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
34 COMMAND_ERROR_IS_FATAL ANY
35 )
36 execute_process(
37 COMMAND ${LCOV_COMMAND} --add-tracefile fuzz_filtered.info --output-file fuzz_filtered.info
38 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
39 COMMAND_ERROR_IS_FATAL ANY
40 )
41 execute_process(
42 COMMAND ${LCOV_COMMAND} --add-tracefile baseline_filtered.info --add-tracefile fuzz_filtered.info --output-file fuzz_coverage.info
43 COMMAND ${GREP_EXECUTABLE} "%"
44 COMMAND ${AWK_EXECUTABLE} "{ print substr($3,2,50) \"/\" $5 }"
45 OUTPUT_FILE coverage_percent.txt
46 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
47 COMMAND_ERROR_IS_FATAL ANY
48 )
49 execute_process(
50 COMMAND ${GENHTML_COMMAND} fuzz_coverage.info --output-directory fuzz.coverage
51 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
52 COMMAND_ERROR_IS_FATAL ANY
53 )
54