Skip to content

Commit 17df762

Browse files
authored
[SYCL][UR][CUDA] Use FindCUDAToolkit CMake module instead of FindCUDA (#17315)
`find_package(CUDA)` is deprecated since CMake 3.10 and the functionality we need is provided by `find_package(CUDAToolkit)` since CMake 3.17. Thanks to SYCL configuration now requiring CMake >3.20 (#13664), we can rely on `find_package(CUDAToolkit)` working in all setups. Changes: * Remove the deprecated calls and replace them with the recommended one. * Clean up all extra CMake code dealing with finding CUPTI as that is also now handled correctly by the FindCUDAToolkit module. * Replace all variables from the old module with corresponding ones from the new one, where they differ. * Update documentation on specifying custom CUDA installation path. This solves multiple issues with finding libraries, notably including the failure to find libcuda.so automatically on systems where the CUDA driver is not installed and only the toolkit is available. This is a reasonable use case for building DPC++ on a build machine without a GPU and distributing for use on GPU machines (easybuilders/easybuild-easyconfigs#22418 (comment)).
1 parent ddea669 commit 17df762

File tree

7 files changed

+21
-90
lines changed

7 files changed

+21
-90
lines changed

sycl/cmake/modules/FindCUDACupti.cmake

Lines changed: 0 additions & 20 deletions
This file was deleted.

sycl/doc/GetStartedGuide.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -219,13 +219,12 @@ Firstly, **do not** add the toolkit to your standard environment variables
219219
(`PATH`, `LD_LIBRARY_PATH`), as to do so will create conflicts with OpenCL
220220
headers.
221221

222-
Secondly, set the `CUDA_LIB_PATH` environment variable and pass the CMake
223-
variable `CUDA_TOOLKIT_ROOT_DIR` as follows:
222+
Secondly pass the CMake variable `CUDAToolkit_ROOT` as follows:
224223

225224
```sh
226-
CUDA_LIB_PATH=/path/to/cuda/toolkit/lib64/stubs CC=gcc CXX=g++ python $DPCPP_HOME/llvm/buildbot/configure.py --cuda --cmake-opt="-DCUDA_TOOLKIT_ROOT_DIR=/path/to/cuda/toolkit"
225+
CC=gcc CXX=g++ python $DPCPP_HOME/llvm/buildbot/configure.py --cuda --cmake-opt="-DCUDAToolkit_ROOT=/path/to/cuda/toolkit"
227226

228-
CUDA_LIB_PATH=/path/to/cuda/toolkit/lib64/stubs CC=gcc CXX=g++ python $DPCPP_HOME/llvm/buildbot/compile.py
227+
CC=gcc CXX=g++ python $DPCPP_HOME/llvm/buildbot/compile.py
229228

230229
$DPCPP_HOME/llvm/build/bin/clang++ -std=c++17 -O3 -fsycl -fsycl-targets=nvptx64-nvidia-cuda --cuda-path=/path/to/cuda/toolkit *.cpp -o a.out
231230

sycl/tools/sycl-trace/CMakeLists.txt

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -90,36 +90,25 @@ target_include_directories(sycl_ur_trace_collector PRIVATE
9090

9191
if(SYCL_BUILD_BACKEND_CUDA)
9292

93-
find_package(CUDA 10.1 REQUIRED)
93+
find_package(CUDAToolkit 10.1 REQUIRED)
9494

9595
target_compile_definitions(cuda_trace_collector PRIVATE USE_UR_CUDA)
9696

97-
# The following two if's can be removed when FindCUDA -> FindCUDAToolkit.
98-
# CUDA_CUPTI_INCLUDE_DIR -> CUDAToolkit_CUPTI_INCLUDE_DIR
99-
include(FindCUDACupti)
100-
if(NOT CUDA_CUPTI_INCLUDE_DIR)
101-
find_cuda_cupti_include_dir()
102-
endif()
103-
# CUDA_cupti_LIBRARY -> CUDAToolkit_cupti_LIBRARY
104-
if(NOT CUDA_cupti_LIBRARY)
105-
find_cuda_cupti_library()
106-
endif()
107-
10897
target_include_directories(cuda_trace_collector
10998
PRIVATE
110-
${CUDA_CUPTI_INCLUDE_DIR}
99+
${CUDAToolkit_cupti_INCLUDE_DIR}
111100
)
112101

113102
target_link_libraries(cuda_trace_collector
114103
PRIVATE
115104
cudadrv
116-
${CUDA_cupti_LIBRARY}
105+
${CUDAToolkit_cupti_LIBRARY}
117106
)
118107

119108
find_path(GEN_CUDA_META_H_DIR generated_cuda_meta.h PATHS
120-
"${CUDA_TOOLKIT_ROOT_DIR}/extras/CUPTI/include"
121-
"${CUDA_INCLUDE_DIRS}/../extras/CUPTI/include"
122-
"${CUDA_INCLUDE_DIRS}"
109+
"${CUDAToolkit_ROOT}/extras/CUPTI/include"
110+
"${CUDAToolkit_INCLUDE_DIRS}/../extras/CUPTI/include"
111+
"${CUDAToolkit_INCLUDE_DIRS}"
123112
NO_DEFAULT_PATH)
124113

125114
if( EXISTS "${GEN_CUDA_META_H_DIR}/generated_cuda_meta.h" )

unified-runtime/cmake/FindCUDACupti.cmake

Lines changed: 0 additions & 26 deletions
This file was deleted.

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

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -54,22 +54,22 @@ set_target_properties(${TARGET_NAME} PROPERTIES
5454
)
5555

5656
find_package(Threads REQUIRED)
57-
find_package(CUDA 10.1 REQUIRED)
57+
find_package(CUDAToolkit 10.1 REQUIRED)
5858

5959
# Make imported library global to use it within the project.
6060
add_library(cudadrv SHARED IMPORTED GLOBAL)
6161

6262
if (WIN32)
6363
set_target_properties(
6464
cudadrv PROPERTIES
65-
IMPORTED_IMPLIB ${CUDA_CUDA_LIBRARY}
66-
INTERFACE_INCLUDE_DIRECTORIES ${CUDA_INCLUDE_DIRS}
65+
IMPORTED_IMPLIB ${CUDA_cuda_driver_LIBRARY}
66+
INTERFACE_INCLUDE_DIRECTORIES ${CUDAToolkit_INCLUDE_DIRS}
6767
)
6868
else()
6969
set_target_properties(
7070
cudadrv PROPERTIES
71-
IMPORTED_LOCATION ${CUDA_CUDA_LIBRARY}
72-
INTERFACE_INCLUDE_DIRECTORIES ${CUDA_INCLUDE_DIRS}
71+
IMPORTED_LOCATION ${CUDA_cuda_driver_LIBRARY}
72+
INTERFACE_INCLUDE_DIRECTORIES ${CUDAToolkit_INCLUDE_DIRS}
7373
)
7474
endif()
7575

@@ -82,17 +82,6 @@ endif()
8282
# Only enable xpti tracing on Linux as tracing tools aren't available on
8383
# Windows yet.
8484
if (UR_ENABLE_TRACING AND UNIX)
85-
include(FindCUDACupti)
86-
# The following two ifs can be removed when FindCUDA -> FindCUDAToolkit.
87-
# CUDA_CUPTI_INCLUDE_DIR -> CUDAToolkit_CUPTI_INCLUDE_DIR
88-
if(NOT CUDA_CUPTI_INCLUDE_DIR)
89-
find_cuda_cupti_include_dir()
90-
endif()
91-
# CUDA_cupti_LIBRARY -> CUDAToolkit_cupti_LIBRARY
92-
if(NOT CUDA_cupti_LIBRARY)
93-
find_cuda_cupti_library()
94-
endif()
95-
9685
if (NOT XPTI_INCLUDES)
9786
get_target_property(XPTI_INCLUDES xpti INCLUDE_DIRECTORIES)
9887
endif()
@@ -106,7 +95,7 @@ if (UR_ENABLE_TRACING AND UNIX)
10695
)
10796
target_include_directories(${TARGET_NAME} PRIVATE
10897
${XPTI_INCLUDES}
109-
${CUDA_CUPTI_INCLUDE_DIR}
98+
${CUDAToolkit_cupti_INCLUDE_DIR}
11099
)
111100
target_sources(${TARGET_NAME} PRIVATE ${XPTI_PROXY_SRC})
112101
endif()

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -155,17 +155,17 @@ if("${UR_HIP_PLATFORM}" STREQUAL "AMD")
155155
target_compile_definitions(${TARGET_NAME} PRIVATE __HIP_PLATFORM_AMD__)
156156
elseif("${UR_HIP_PLATFORM}" STREQUAL "NVIDIA")
157157
# Import CUDA libraries
158-
find_package(CUDA REQUIRED)
158+
find_package(CUDAToolkit REQUIRED)
159159
find_package(Threads REQUIRED)
160160

161-
list(APPEND HIP_HEADERS ${CUDA_INCLUDE_DIRS})
161+
list(APPEND HIP_HEADERS ${CUDAToolkit_INCLUDE_DIRS})
162162

163163
# cudadrv may be defined by the CUDA plugin
164164
if(NOT TARGET cudadrv)
165165
add_library(cudadrv SHARED IMPORTED GLOBAL)
166166
set_target_properties(
167167
cudadrv PROPERTIES
168-
IMPORTED_LOCATION ${CUDA_CUDA_LIBRARY}
168+
IMPORTED_LOCATION ${CUDA_cuda_driver_LIBRARY}
169169
INTERFACE_INCLUDE_DIRECTORIES "${HIP_HEADERS}"
170170
INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${HIP_HEADERS}"
171171
)
@@ -174,7 +174,7 @@ elseif("${UR_HIP_PLATFORM}" STREQUAL "NVIDIA")
174174
add_library(cudart SHARED IMPORTED GLOBAL)
175175
set_target_properties(
176176
cudart PROPERTIES
177-
IMPORTED_LOCATION ${CUDA_CUDART_LIBRARY}
177+
IMPORTED_LOCATION ${CUDA_cudart_LIBRARY}
178178
INTERFACE_INCLUDE_DIRECTORIES "${HIP_HEADERS}"
179179
INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${HIP_HEADERS}"
180180
)

unified-runtime/source/common/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ else()
1212
endif()
1313

1414
if (UR_BUILD_ADAPTER_CUDA)
15-
find_package(CUDA 10.1 REQUIRED)
15+
find_package(CUDAToolkit 10.1 REQUIRED)
1616
set(UMF_BUILD_CUDA_PROVIDER ON CACHE INTERNAL "Build UMF CUDA provider")
17-
set(UMF_CUDA_INCLUDE_DIR "${CUDA_INCLUDE_DIRS}" CACHE INTERNAL "CUDA headers")
17+
set(UMF_CUDA_INCLUDE_DIR "${CUDAToolkit_INCLUDE_DIRS}" CACHE INTERNAL "CUDA headers")
1818
else()
1919
set(UMF_BUILD_CUDA_PROVIDER OFF CACHE INTERNAL "Build UMF CUDA provider")
2020
endif()

0 commit comments

Comments
 (0)