@@ -7,18 +7,23 @@ if(NOT LLVM_PROFDATA_PATH)
77 message (FATAL_ERROR "llvm-profdata not found! Aborting." )
88endif ()
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
1414function (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
6377endfunction()
0 commit comments