Skip to content

Commit 03d34cf

Browse files
Avoid recompiling DPCTLSyclInterface sources for coverage tests
llvm-cov is able to generate coverage for code in shared object library so long of object files used to link it are passed with -object argument to `llvm-cov report`. These arguments are generated using CMake generator expression, specifically TARGET_OBJECTS:DPCTLSyclInterface.
1 parent 0232bed commit 03d34cf

File tree

2 files changed

+36
-41
lines changed

2 files changed

+36
-41
lines changed

libsyclinterface/CMakeLists.txt

Lines changed: 30 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -156,12 +156,42 @@ file(GLOB_RECURSE helper_sources
156156
${CMAKE_CURRENT_SOURCE_DIR}/helper/source/*.cpp
157157
)
158158

159+
# Enable code coverage related settings
160+
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)
167+
# Turn on DPCTL_BUILD_CAPI_TESTS as building tests is needed to generate
168+
# coverage reports.
169+
set(DPCTL_BUILD_CAPI_TESTS "ON")
170+
if(DPCTL_COVERAGE_REPORT_OUTPUT_DIR)
171+
set(COVERAGE_OUTPUT_DIR ${DPCTL_COVERAGE_REPORT_OUTPUT_DIR})
172+
else()
173+
set(COVERAGE_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR})
174+
endif()
175+
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+
)
181+
endif()
182+
159183
add_library(DPCTLSyclInterface
160184
SHARED
161185
${sources}
162186
${helper_sources}
163187
)
164188

189+
if(DPCTL_GENERATE_COVERAGE)
190+
target_link_options(DPCTLSyclInterface
191+
PRIVATE -fprofile-instr-generate -fcoverage-mapping
192+
)
193+
endif()
194+
165195
target_include_directories(DPCTLSyclInterface
166196
PUBLIC
167197
${CMAKE_CURRENT_SOURCE_DIR}/include/
@@ -247,25 +277,6 @@ install(
247277
DESTINATION ${_include_destination}/Config
248278
)
249279

250-
# Enable code coverage related settings
251-
if(DPCTL_GENERATE_COVERAGE)
252-
# check if lcov is available
253-
find_package(Lcov REQUIRED)
254-
# check if llvm-cov version 11 is available
255-
find_package(LLVMCov 11 REQUIRED)
256-
# check if llvm-profdata is available
257-
find_package(LLVMProfdata REQUIRED)
258-
# Turn on DPCTL_BUILD_CAPI_TESTS as building tests is needed to generate
259-
# coverage reports.
260-
set(DPCTL_BUILD_CAPI_TESTS "ON")
261-
if(DPCTL_COVERAGE_REPORT_OUTPUT_DIR)
262-
set(COVERAGE_OUTPUT_DIR ${DPCTL_COVERAGE_REPORT_OUTPUT_DIR})
263-
else()
264-
set(COVERAGE_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR})
265-
endif()
266-
message(STATUS "Coverage reports to be saved at ${COVERAGE_OUTPUT_DIR}")
267-
endif()
268-
269280
# Add sub-directory to build the dpctl C API test cases
270281
if(DPCTL_BUILD_CAPI_TESTS)
271282
add_subdirectory(tests)

libsyclinterface/tests/CMakeLists.txt

Lines changed: 6 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -25,30 +25,12 @@ if(DPCTL_GENERATE_COVERAGE)
2525
file(GLOB_RECURSE
2626
sources ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
2727
)
28-
file(GLOB_RECURSE
29-
dpctl_sources ${CMAKE_CURRENT_SOURCE_DIR}/../source/*.cpp
30-
)
31-
file(GLOB_RECURSE
32-
helper_sources ${CMAKE_CURRENT_SOURCE_DIR}/../helper/source/*.cpp
33-
)
34-
# Exclude from sources
35-
list(REMOVE_ITEM
36-
dpctl_sources
37-
"${CMAKE_CURRENT_SOURCE_DIR}/../source/dpctl_vector_templ.cpp"
38-
)
39-
40-
# Add profiling flags
41-
set(CMAKE_CXX_FLAGS
42-
"${CMAKE_CXX_FLAGS} -fprofile-instr-generate -fcoverage-mapping -fno-sycl-use-footer -DDPCTL_COVERAGE"
43-
)
4428

4529
# Add all dpctl sources into a single executable so that we can run coverage
4630
# analysis and generate a report.
4731
add_executable(dpctl_c_api_tests
4832
EXCLUDE_FROM_ALL
4933
${sources}
50-
${dpctl_sources}
51-
${helper_sources}
5234
)
5335
target_include_directories(dpctl_c_api_tests
5436
PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../helper/include"
@@ -57,9 +39,11 @@ if(DPCTL_GENERATE_COVERAGE)
5739
target_link_libraries(dpctl_c_api_tests
5840
${CMAKE_THREAD_LIBS_INIT}
5941
GTest::GTest
42+
DPCTLSyclInterface
6043
${IntelSycl_OPENCL_LIBRARY}
6144
${CMAKE_DL_LIBS}
6245
)
46+
set(object_arg "-object;")
6347
add_custom_target(llvm-cov
6448
COMMAND ${CMAKE_COMMAND} -E env DPCTL_VERBOSITY=warning ${CMAKE_CURRENT_BINARY_DIR}/dpctl_c_api_tests
6549
COMMAND ${LLVMProfdata_EXE}
@@ -71,10 +55,10 @@ if(DPCTL_GENERATE_COVERAGE)
7155
report
7256
${CMAKE_CURRENT_BINARY_DIR}/dpctl_c_api_tests
7357
-instr-profile=dpctl.profdata
74-
${dpctl_sources}
75-
${helper_sources}
58+
"${object_arg}$<JOIN:$<TARGET_OBJECTS:DPCTLSyclInterface>,;${object_arg}>"
7659
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
77-
DEPENDS dpctl_c_api_tests
60+
COMMAND_EXPAND_LISTS
61+
DEPENDS dpctl_c_api_tests
7862
)
7963

8064
add_custom_target(lcov-genhtml
@@ -90,7 +74,7 @@ if(DPCTL_GENERATE_COVERAGE)
9074
--output-directory
9175
${COVERAGE_OUTPUT_DIR}/dpctl-c-api-coverage
9276
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
93-
DEPENDS llvm-cov
77+
DEPENDS llvm-cov
9478
)
9579
else()
9680
file(GLOB_RECURSE sources ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)

0 commit comments

Comments
 (0)