Skip to content

Commit d6214ad

Browse files
authored
[SYCL][UR][CUDA] Fix CMake CUPTI config (#17457)
Fix-up for #17315 which used incorrect CMake variables for CUPTI: * `CUDAToolkit_cupti_INCLUDE_DIR` should be `CUDAToolkit_CUPTI_INCLUDE_DIR` * `CUDAToolkit_cupti_LIBRARY` should be `CUDA_cupti_LIBRARY` In addition, we discovered that FindCUDAToolkit: * does not set the INCLUDE_DIR variable until CMake 3.24 (while we support back to 3.20) * fails to find the library in CUDA toolkits installed from runfile (https://gitlab.kitware.com/cmake/cmake/-/issues/26770) Fix the variable names and retry the searches with extra paths if the header/library are not found. The REQUIRED option is enabled in the retry, which ensures that if CUPTI is not found then the build fails at CMake configuration instead of later during compilation or linking.
1 parent f85999b commit d6214ad

File tree

2 files changed

+49
-3
lines changed

2 files changed

+49
-3
lines changed

sycl/tools/sycl-trace/CMakeLists.txt

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,15 +94,48 @@ if(SYCL_BUILD_BACKEND_CUDA)
9494

9595
target_compile_definitions(cuda_trace_collector PRIVATE USE_UR_CUDA)
9696

97+
# CUDAToolkit_CUPTI_INCLUDE_DIR is provided by FindCUDAToolkit since CMake
98+
# 3.24, but we support versions back to 3.20. Find it if not found already.
99+
if (NOT CUDAToolkit_CUPTI_INCLUDE_DIR)
100+
find_path(CUDAToolkit_CUPTI_INCLUDE_DIR cupti.h PATHS
101+
"${CUDAToolkit_ROOT_DIR}/extras/CUPTI/include"
102+
${CUDAToolkit_INCLUDE_DIRS}
103+
PATH_SUFFIXES "../extras/CUPTI/include"
104+
"../../../extras/CUPTI/include"
105+
REQUIRED
106+
NO_DEFAULT_PATH)
107+
endif()
108+
97109
target_include_directories(cuda_trace_collector
98110
PRIVATE
99-
${CUDAToolkit_cupti_INCLUDE_DIR}
111+
${CUDAToolkit_CUPTI_INCLUDE_DIR}
100112
)
101113

114+
# FindCUDATookit fails to find CUPTI in CUDA installations from runfile.
115+
# See https://gitlab.kitware.com/cmake/cmake/-/issues/26770
116+
# Retry the search with extra paths if not found already.
117+
if (NOT CUDA_cupti_LIBRARY)
118+
get_filename_component(CUDAToolkit_LIBRARY_DIR ${CUDA_CUDART} DIRECTORY ABSOLUTE)
119+
find_library(CUDA_cupti_LIBRARY
120+
NAMES cupti
121+
HINTS ${CUDAToolkit_ROOT}
122+
${CUDAToolkit_ROOT}/lib64
123+
${CUDAToolkit_ROOT}/lib
124+
${CUDAToolkit_LIBRARY_DIR}
125+
${CUDAToolkit_LIBRARY_DIR}/..
126+
${CUDAToolkit_LIBRARY_DIR}/../../..
127+
${CUDAToolkit_LIBRARY_DIR}/../../../../..
128+
ENV CUDA_PATH
129+
PATH_SUFFIXES lib64 lib/x64 lib
130+
extras/CUPTI/lib64/
131+
extras/CUPTI/lib/
132+
REQUIRED
133+
)
134+
endif()
102135
target_link_libraries(cuda_trace_collector
103136
PRIVATE
104137
cudadrv
105-
${CUDAToolkit_cupti_LIBRARY}
138+
${CUDA_cupti_LIBRARY}
106139
)
107140

108141
find_path(GEN_CUDA_META_H_DIR generated_cuda_meta.h PATHS

unified-runtime/source/adapters/cuda/CMakeLists.txt

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,22 @@ if (UR_ENABLE_TRACING AND UNIX)
9393
XPTI_ENABLE_INSTRUMENTATION
9494
XPTI_STATIC_LIBRARY
9595
)
96+
97+
# CUDAToolkit_CUPTI_INCLUDE_DIR is provided by FindCUDAToolkit since CMake
98+
# 3.24, but we support versions back to 3.20. Find it if not found already.
99+
if (NOT CUDAToolkit_CUPTI_INCLUDE_DIR)
100+
find_path(CUDAToolkit_CUPTI_INCLUDE_DIR cupti.h PATHS
101+
"${CUDAToolkit_ROOT_DIR}/extras/CUPTI/include"
102+
${CUDAToolkit_INCLUDE_DIRS}
103+
PATH_SUFFIXES "../extras/CUPTI/include"
104+
"../../../extras/CUPTI/include"
105+
REQUIRED
106+
NO_DEFAULT_PATH)
107+
endif()
108+
96109
target_include_directories(${TARGET_NAME} PRIVATE
97110
${XPTI_INCLUDES}
98-
${CUDAToolkit_cupti_INCLUDE_DIR}
111+
${CUDAToolkit_CUPTI_INCLUDE_DIR}
99112
)
100113
target_sources(${TARGET_NAME} PRIVATE ${XPTI_PROXY_SRC})
101114
endif()

0 commit comments

Comments
 (0)