Skip to content

Commit 9167169

Browse files
propagated DPCTL_GENERATE_COVERAGE to top-level CMakeLists.txt
Decoupled llvm-genhtml and llvm-cov targets. Used object files in llvm-genhtml as it was done in llvm-cov target.
1 parent 84add5d commit 9167169

File tree

4 files changed

+42
-17
lines changed

4 files changed

+42
-17
lines changed

CMakeLists.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,12 @@ project(dpctl
88
set(CMAKE_CXX_STANDARD 17)
99
set(CMAKE_CXX_STANDARD_REQUIRED True)
1010

11+
# Option to generate code coverage report using llvm-cov and lcov.
12+
option(DPCTL_GENERATE_COVERAGE
13+
"Build dpctl with coverage instrumentation"
14+
OFF
15+
)
16+
1117
find_package(IntelDPCPP REQUIRED PATHS ${CMAKE_SOURCE_DIR}/cmake NO_DEFAULT_PATH)
1218

1319
add_subdirectory(libsyclinterface)

libsyclinterface/CMakeLists.txt

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ option(DPCTL_ENABLE_L0_PROGRAM_CREATION
2525
)
2626
# Option to generate code coverage report using llvm-cov and lcov.
2727
option(DPCTL_GENERATE_COVERAGE
28-
"Build dpctl C API with coverage instrumentation instrumentation"
28+
"Build dpctl C API with coverage instrumentation"
2929
OFF
3030
)
3131
# Option to output html coverage report at a specific location.
@@ -158,12 +158,9 @@ file(GLOB_RECURSE helper_sources
158158

159159
# Enable code coverage related settings
160160
if(DPCTL_GENERATE_COVERAGE)
161-
# check if lcov is available
162-
find_package(Lcov REQUIRED)
163-
# check if llvm-cov version 11 is available
164-
find_package(LLVMCov 11 REQUIRED)
165-
# check if llvm-profdata is available
166-
find_package(LLVMProfdata REQUIRED)
161+
include(SetupCoverage)
162+
setup_coverage_generation()
163+
167164
# Turn on DPCTL_BUILD_CAPI_TESTS as building tests is needed to generate
168165
# coverage reports.
169166
set(DPCTL_BUILD_CAPI_TESTS "ON")
@@ -173,11 +170,6 @@ if(DPCTL_GENERATE_COVERAGE)
173170
set(COVERAGE_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR})
174171
endif()
175172
message(STATUS "Coverage reports to be saved at ${COVERAGE_OUTPUT_DIR}")
176-
177-
# Add profiling flags
178-
set(CMAKE_CXX_FLAGS
179-
"${CMAKE_CXX_FLAGS} -fprofile-instr-generate -fcoverage-mapping -fno-sycl-use-footer -DDPCTL_COVERAGE"
180-
)
181173
endif()
182174

183175
add_library(DPCTLSyclInterface
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
2+
function(setup_coverage_generation)
3+
# check if lcov is available
4+
find_package(Lcov REQUIRED)
5+
# check if llvm-cov version 11 is available
6+
find_package(LLVMCov 11 REQUIRED)
7+
# check if llvm-profdata is available
8+
find_package(LLVMProfdata REQUIRED)
9+
10+
string(CONCAT PROFILE_FLAGS
11+
"-fprofile-instr-generate "
12+
"-fcoverage-mapping "
13+
"-fno-sycl-use-footer "
14+
"-DDPCTL_COVERAGE "
15+
)
16+
17+
# Add profiling flags
18+
set(CMAKE_CXX_FLAGS
19+
"${CMAKE_CXX_FLAGS} ${PROFILE_FLAGS}"
20+
PARENT_SCOPE
21+
)
22+
endfunction(setup_coverage_generation)

libsyclinterface/tests/CMakeLists.txt

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ if(DPCTL_GENERATE_COVERAGE)
5353
dpctl.profdata
5454
COMMAND ${LLVMCov_EXE}
5555
report
56-
${CMAKE_CURRENT_BINARY_DIR}/dpctl_c_api_tests
5756
-instr-profile=dpctl.profdata
5857
"${object_arg}$<JOIN:$<TARGET_OBJECTS:DPCTLSyclInterface>,;${object_arg}>"
5958
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
@@ -62,19 +61,25 @@ if(DPCTL_GENERATE_COVERAGE)
6261
)
6362

6463
add_custom_target(lcov-genhtml
64+
COMMAND ${CMAKE_COMMAND} -E env DPCTL_VERBOSITY=warning ${CMAKE_CURRENT_BINARY_DIR}/dpctl_c_api_tests
65+
COMMAND ${LLVMProfdata_EXE}
66+
merge
67+
-sparse default.profraw
68+
-o
69+
dpctl.profdata
6570
COMMAND ${LLVMCov_EXE}
6671
export
6772
-format=lcov
68-
${CMAKE_CURRENT_BINARY_DIR}/dpctl_c_api_tests
6973
-instr-profile=dpctl.profdata
70-
${dpctl_sources}
71-
${helper_sources} > dpctl.lcov
74+
"${object_arg}$<JOIN:$<TARGET_OBJECTS:DPCTLSyclInterface>,;${object_arg}>"
75+
> dpctl.lcov
7276
COMMAND ${GENHTML_EXE}
7377
${CMAKE_CURRENT_BINARY_DIR}/dpctl.lcov
7478
--output-directory
7579
${COVERAGE_OUTPUT_DIR}/dpctl-c-api-coverage
7680
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
77-
DEPENDS llvm-cov
81+
COMMAND_EXPAND_LISTS
82+
DEPENDS dpctl_c_api_tests
7883
)
7984
else()
8085
file(GLOB_RECURSE sources ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)

0 commit comments

Comments
 (0)