Skip to content

Commit 3fb7fac

Browse files
committed
[cmake] Refactor RadiumCoverage.
1 parent 88072a3 commit 3fb7fac

1 file changed

Lines changed: 46 additions & 32 deletions

File tree

cmake/RadiumCoverage.cmake

Lines changed: 46 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,23 @@ if(NOT LLVM_PROFDATA_PATH)
77
message(FATAL_ERROR "llvm-profdata not found! Aborting.")
88
endif()
99

10-
set(PROF_DIR ${CMAKE_BINARY_DIR}/llvm-cov/prof)
11-
set(REPORT_DIR ${CMAKE_BINARY_DIR}/llvm-cov/report)
12-
set(TEST_ENV_VAR "LLVM_PROFILE_FILE=${PROF_DIR}/unittests/coverage-%Nm-%p.profraw")
10+
set(PROF_DIR ${CMAKE_BINARY_DIR}/coverage/profiling)
11+
set(REPORT_DIR ${CMAKE_BINARY_DIR}/coverage/report)
12+
set(TEST_ENV_VAR "LLVM_PROFILE_FILE=${PROF_DIR}/unittests/coverage-%m-%p.profraw")
1313

1414
function(radium_setup_coverage_targets)
15+
make_directory(${REPORT_DIR})
16+
make_directory(${PROF_DIR})
17+
18+
add_custom_target(
19+
coverage_delete COMMAND find ${PROF_DIR} -name \"*.profraw\" -delete
20+
COMMAND find ${PROF_DIR} -name \"*.profdata\" -delete
21+
)
22+
add_custom_target(coverage_delete_report COMMAND rm -rf ${REPORT_DIR})
23+
add_custom_target(coverage_run COMMAND ${CMAKE_CTEST_COMMAND})
1524
add_custom_target(
16-
llvm_coverage
17-
COMMAND find ${PROF_DIR} -name \"*.profraw\" -delete
18-
COMMAND rm -rf ${REPORT_DIR}
19-
COMMAND ${CMAKE_CTEST_COMMAND}
20-
COMMAND ${LLVM_PROFDATA_PATH} merge -sparse -o ${PROF_DIR}/coverage.profdata `find
21-
${PROF_DIR} -name \"*.profraw\"`
25+
coverage_merge COMMAND ${LLVM_PROFDATA_PATH} merge -sparse -o ${PROF_DIR}/coverage.profdata
26+
`find ${PROF_DIR} -name \"*.profraw\"`
2227
)
2328
2429
# prevent flags on catch2 and examples, add to specific targets
@@ -30,34 +35,43 @@ function(radium_setup_coverage_targets)
3035
target_compile_options(
3136
${TARGET} PRIVATE -fprofile-instr-generate -fcoverage-mapping -O0 -g
3237
)
33-
target_link_options(${TARGET} PRIVATE -fprofile-instr-generate -fcoverage-mapping)
34-
if(NOT ${TARGET} MATCHES "unittests")
35-
list(APPEND LLVM_OBJS "--object"
36-
"$<PATH:RELATIVE_PATH,$<TARGET_FILE:${TARGET}>,${CMAKE_BINARY_DIR}>"
37-
)
38-
endif()
38+
target_link_options(${TARGET} PRIVATE -fprofile-instr-generate)
39+
list(APPEND LLVM_OBJS "-object"
40+
"$<PATH:RELATIVE_PATH,$<TARGET_FILE:${TARGET}>,${CMAKE_BINARY_DIR}>"
41+
)
3942
40-
add_dependencies(llvm_coverage ${TARGET})
43+
add_dependencies(coverage_run ${TARGET})
4144
4245
endif()
4346
endforeach()
4447
45-
set(LLVM_COV
46-
${LLVM_COV_PATH}
47-
show
48-
$<TARGET_FILE:unittests>
49-
${LLVM_OBJS}
50-
-instr-profile=${PROF_DIR}/coverage.profdata
51-
-format=html
52-
-output-dir=${REPORT_DIR}
53-
-show-line-counts-or-regions
54-
-show-directory-coverage
55-
-Xdemangler
56-
c++filt
57-
-Xdemangler
58-
-n
59-
${CMAKE_CURRENT_SOURCE_DIR}
48+
add_custom_target(
49+
coverage_report
50+
COMMAND
51+
${LLVM_COV_PATH} show
52+
$<PATH:RELATIVE_PATH,$<TARGET_FILE:unittests>,${CMAKE_BINARY_DIR}> ${LLVM_OBJS}
53+
-instr-profile=${PROF_DIR}/coverage.profdata -format=html -output-dir=${REPORT_DIR}
54+
-ignore-filename-regex="catch2" -show-line-counts-or-regions -show-directory-coverage
55+
-Xdemangler c++filt -Xdemangler -n -sources ${CMAKE_CURRENT_SOURCE_DIR}
56+
)
57+
add_custom_target(
58+
coverage_export
59+
COMMAND
60+
${LLVM_COV_PATH} export
61+
$<PATH:RELATIVE_PATH,$<TARGET_FILE:unittests>,${CMAKE_BINARY_DIR}> # ${LLVM_OBJS}
62+
-instr-profile=${PROF_DIR}/coverage.profdata -ignore-filename-regex="catch2" -sources
63+
${CMAKE_CURRENT_SOURCE_DIR} -format=lcov > ${CMAKE_BINARY_DIR}/coverage.txt
64+
)
65+
66+
add_custom_target(
67+
coverage
68+
COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target coverage_delete
69+
COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target coverage_delete_report
70+
COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target coverage_run
71+
COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target coverage_merge
72+
COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target coverage_report
73+
COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target coverage_export
74+
COMMENT "Running full coverage pipeline"
6075
)
61-
add_custom_command(TARGET llvm_coverage POST_BUILD COMMAND ${LLVM_COV})
6276
6377
endfunction()

0 commit comments

Comments
 (0)