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