Skip to content

Commit 14eb3c7

Browse files
SetGPUArchs updated to work around a CMake FindCUDAToolkit issue (rapidsai#695)
CMake < 3.20 has a bug in FindCUDAToolkit where it won't properly detect the `CUDAToolkit` version when `find_package(CUDAToolkit)` occurs before `enable_language(CUDA)` Authors: - Robert Maynard (@robertmaynard) - Mike Wendt (@mike-wendt) Approvers: - Keith Kraus (@kkraus14) - Mark Harris (@harrism) URL: rapidsai#695
1 parent 729918c commit 14eb3c7

File tree

1 file changed

+16
-3
lines changed

1 file changed

+16
-3
lines changed

cmake/Modules/SetGPUArchs.cmake

+16-3
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,28 @@ else()
2525
list(REMOVE_ITEM SUPPORTED_CUDA_ARCHITECTURES "62" "72")
2626
endif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64")
2727

28+
# CMake < 3.20 has a bug in FindCUDAToolkit where it won't properly detect the CUDAToolkit version
29+
# when find_package(CUDAToolkit) occurs before enable_language(CUDA)
30+
if(NOT DEFINED CUDAToolkit_VERSION AND CMAKE_CUDA_COMPILER)
31+
execute_process(COMMAND ${CMAKE_CUDA_COMPILER} "--version" OUTPUT_VARIABLE NVCC_OUT)
32+
if(NVCC_OUT MATCHES [=[ V([0-9]+)\.([0-9]+)\.([0-9]+)]=])
33+
set(CUDAToolkit_VERSION_MAJOR "${CMAKE_MATCH_1}")
34+
set(CUDAToolkit_VERSION_MINOR "${CMAKE_MATCH_2}")
35+
set(CUDAToolkit_VERSION_PATCH "${CMAKE_MATCH_3}")
36+
set(CUDAToolkit_VERSION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}")
37+
endif()
38+
unset(NVCC_OUT)
39+
endif()
40+
2841
if(CUDAToolkit_VERSION_MAJOR LESS 11)
2942
list(REMOVE_ITEM SUPPORTED_CUDA_ARCHITECTURES "80")
30-
endif(CUDAToolkit_VERSION_MAJOR LESS 11)
43+
endif()
3144
if(CUDAToolkit_VERSION_MAJOR LESS 10)
3245
list(REMOVE_ITEM SUPPORTED_CUDA_ARCHITECTURES "75")
33-
endif(CUDAToolkit_VERSION_MAJOR LESS 10)
46+
endif()
3447
if(CUDAToolkit_VERSION_MAJOR LESS 9)
3548
list(REMOVE_ITEM SUPPORTED_CUDA_ARCHITECTURES "70")
36-
endif(CUDAToolkit_VERSION_MAJOR LESS 9)
49+
endif()
3750

3851
# If `CMAKE_CUDA_ARCHITECTURES` is not defined, build for all supported architectures. If
3952
# `CMAKE_CUDA_ARCHITECTURES` is set to an empty string (""), build for only the current

0 commit comments

Comments
 (0)