From 8f92957d6ef26c596e90f2948c4df8500df1a5ef Mon Sep 17 00:00:00 2001 From: Rafal Bielski Date: Thu, 13 Mar 2025 23:03:07 +0000 Subject: [PATCH] [SYCL][UR][CUDA] Fix CMake CUPTI config 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 variable until CMake 3.24 * 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 available in the system then the build fails at CMake configuration instead of later during compilation or linking. --- sycl/tools/sycl-trace/CMakeLists.txt | 37 ++++++++++++++++++- .../source/adapters/cuda/CMakeLists.txt | 15 +++++++- 2 files changed, 49 insertions(+), 3 deletions(-) diff --git a/sycl/tools/sycl-trace/CMakeLists.txt b/sycl/tools/sycl-trace/CMakeLists.txt index e232b6bdeda74..b45ae195b2905 100644 --- a/sycl/tools/sycl-trace/CMakeLists.txt +++ b/sycl/tools/sycl-trace/CMakeLists.txt @@ -94,15 +94,48 @@ if(SYCL_BUILD_BACKEND_CUDA) target_compile_definitions(cuda_trace_collector PRIVATE USE_UR_CUDA) + # CUDAToolkit_CUPTI_INCLUDE_DIR is provided by FindCUDAToolkit since CMake + # 3.24, but we support versions back to 3.20. Find it if not found already. + if (NOT CUDAToolkit_CUPTI_INCLUDE_DIR) + find_path(CUDAToolkit_CUPTI_INCLUDE_DIR cupti.h PATHS + "${CUDAToolkit_ROOT_DIR}/extras/CUPTI/include" + ${CUDAToolkit_INCLUDE_DIRS} + PATH_SUFFIXES "../extras/CUPTI/include" + "../../../extras/CUPTI/include" + REQUIRED + NO_DEFAULT_PATH) + endif() + target_include_directories(cuda_trace_collector PRIVATE - ${CUDAToolkit_cupti_INCLUDE_DIR} + ${CUDAToolkit_CUPTI_INCLUDE_DIR} ) + # FindCUDATookit fails to find CUPTI in CUDA installations from runfile. + # See https://gitlab.kitware.com/cmake/cmake/-/issues/26770 + # Retry the search with extra paths if not found already. + if (NOT CUDA_cupti_LIBRARY) + get_filename_component(CUDAToolkit_LIBRARY_DIR ${CUDA_CUDART} DIRECTORY ABSOLUTE) + find_library(CUDA_cupti_LIBRARY + NAMES cupti + HINTS ${CUDAToolkit_ROOT} + ${CUDAToolkit_ROOT}/lib64 + ${CUDAToolkit_ROOT}/lib + ${CUDAToolkit_LIBRARY_DIR} + ${CUDAToolkit_LIBRARY_DIR}/.. + ${CUDAToolkit_LIBRARY_DIR}/../../.. + ${CUDAToolkit_LIBRARY_DIR}/../../../../.. + ENV CUDA_PATH + PATH_SUFFIXES lib64 lib/x64 lib + extras/CUPTI/lib64/ + extras/CUPTI/lib/ + REQUIRED + ) + endif() target_link_libraries(cuda_trace_collector PRIVATE cudadrv - ${CUDAToolkit_cupti_LIBRARY} + ${CUDA_cupti_LIBRARY} ) find_path(GEN_CUDA_META_H_DIR generated_cuda_meta.h PATHS diff --git a/unified-runtime/source/adapters/cuda/CMakeLists.txt b/unified-runtime/source/adapters/cuda/CMakeLists.txt index e7e2976548338..48305f1adfe0b 100644 --- a/unified-runtime/source/adapters/cuda/CMakeLists.txt +++ b/unified-runtime/source/adapters/cuda/CMakeLists.txt @@ -93,9 +93,22 @@ if (UR_ENABLE_TRACING AND UNIX) XPTI_ENABLE_INSTRUMENTATION XPTI_STATIC_LIBRARY ) + + # CUDAToolkit_CUPTI_INCLUDE_DIR is provided by FindCUDAToolkit since CMake + # 3.24, but we support versions back to 3.20. Find it if not found already. + if (NOT CUDAToolkit_CUPTI_INCLUDE_DIR) + find_path(CUDAToolkit_CUPTI_INCLUDE_DIR cupti.h PATHS + "${CUDAToolkit_ROOT_DIR}/extras/CUPTI/include" + ${CUDAToolkit_INCLUDE_DIRS} + PATH_SUFFIXES "../extras/CUPTI/include" + "../../../extras/CUPTI/include" + REQUIRED + NO_DEFAULT_PATH) + endif() + target_include_directories(${TARGET_NAME} PRIVATE ${XPTI_INCLUDES} - ${CUDAToolkit_cupti_INCLUDE_DIR} + ${CUDAToolkit_CUPTI_INCLUDE_DIR} ) target_sources(${TARGET_NAME} PRIVATE ${XPTI_PROXY_SRC}) endif()