File: coverage.cmake

package info (click to toggle)
macaulay2 1.21%2Bds-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 133,096 kB
  • sloc: cpp: 110,377; ansic: 16,306; javascript: 4,193; makefile: 3,821; sh: 3,580; lisp: 764; yacc: 590; xml: 177; python: 140; perl: 114; lex: 65; awk: 3
file content (47 lines) | stat: -rw-r--r-- 1,714 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
###############################################################################
# See https://clang.llvm.org/docs/SourceBasedCodeCoverage.html
find_program(LLVM_PROFDATA	NAMES llvm-profdata)
find_program(LLVM_COV		NAMES clang-format)

set(_coverage_dir ${CMAKE_BINARY_DIR}/coverage)

FUNCTION (_ADD_COVERAGE _target)
  if(NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang")
    message(FATAL_ERROR "Clang compiler is required for code coverage")
  endif()
  message("## Setting up source-based code coverage flags for target ${_target} ...")

  target_compile_options(${_target} PRIVATE
    -fprofile-instr-generate
    -fcoverage-mapping)
  target_link_options(${_target} PRIVATE
    -fprofile-instr-generate
    -fcoverage-mapping)

  get_target_property(TYPE ${_target} TYPE)

  if(TYPE STREQUAL EXECUTABLE)
    message("## Run the following before running the ${_target} executable:
     export LLVM_PROFILE_FILE=\"${_coverage_dir}/${_target}-%p.profraw\"")

    add_custom_target(coverage-merge-${_target}
      COMMENT "Merging raw coverage data"
      COMMAND llvm-profdata merge ${_target}-*.profraw -o ${_target}.profdata #  -sparse
      WORKING_DIRECTORY ${_coverage_dir}
      )

    add_custom_target(coverage-show-${_target}
      COMMENT "Showing coverage data"
      COMMAND llvm-cov show $<TARGET_FILE:${_target}> -instr-profile=${_target}.profdata
      WORKING_DIRECTORY ${_coverage_dir}
      USES_TERMINAL
      )

    add_custom_target(coverage-report-${_target}
      COMMENT "Reporting coverage data"
      COMMAND llvm-cov report $<TARGET_FILE:${_target}> -instr-profile=${_target}.profdata
      WORKING_DIRECTORY ${_coverage_dir}
      USES_TERMINAL
      )
  endif()
ENDFUNCTION (_ADD_COVERAGE)