mirror of
https://github.com/Kitware/CMake.git
synced 2026-04-29 02:19:18 -05:00
FindCUDAToolkit: Robust version checks when CUDA lang is not enabled
Previously if you set `CMAKE_CUDA_COMPILER` but hadn't enabled the CUDA language, FindCUDAToolkit would not correctly compute the version information.
This commit is contained in:
committed by
Brad King
parent
b06a480b57
commit
cd89d1c328
@@ -738,6 +738,7 @@ elseif(NOT CUDAToolkit_FIND_QUIETLY)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(CUDAToolkit_NVCC_EXECUTABLE AND
|
if(CUDAToolkit_NVCC_EXECUTABLE AND
|
||||||
|
CMAKE_CUDA_COMPILER_VERSION AND
|
||||||
CUDAToolkit_NVCC_EXECUTABLE STREQUAL CMAKE_CUDA_COMPILER)
|
CUDAToolkit_NVCC_EXECUTABLE STREQUAL CMAKE_CUDA_COMPILER)
|
||||||
# Need to set these based off the already computed CMAKE_CUDA_COMPILER_VERSION value
|
# Need to set these based off the already computed CMAKE_CUDA_COMPILER_VERSION value
|
||||||
# This if statement will always match, but is used to provide variables for MATCH 1,2,3...
|
# This if statement will always match, but is used to provide variables for MATCH 1,2,3...
|
||||||
|
|||||||
@@ -5,6 +5,10 @@ project(Toolkit CXX)
|
|||||||
# Validate that we can use CUDAToolkit to find cuda include paths
|
# Validate that we can use CUDAToolkit to find cuda include paths
|
||||||
find_package(CUDAToolkit REQUIRED)
|
find_package(CUDAToolkit REQUIRED)
|
||||||
|
|
||||||
|
if(NOT DEFINED CUDAToolkit_VERSION)
|
||||||
|
message(FATAL_ERROR "expected CUDAToolkit variable CUDAToolkit_VERSION not found")
|
||||||
|
endif()
|
||||||
|
|
||||||
message(STATUS "CUDAToolkit_VERSION: ${CUDAToolkit_VERSION}")
|
message(STATUS "CUDAToolkit_VERSION: ${CUDAToolkit_VERSION}")
|
||||||
message(STATUS "CUDAToolkit_VERSION_MAJOR: ${CUDAToolkit_VERSION_MAJOR}")
|
message(STATUS "CUDAToolkit_VERSION_MAJOR: ${CUDAToolkit_VERSION_MAJOR}")
|
||||||
message(STATUS "CUDAToolkit_VERSION_MINOR: ${CUDAToolkit_VERSION_MINOR}")
|
message(STATUS "CUDAToolkit_VERSION_MINOR: ${CUDAToolkit_VERSION_MINOR}")
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ add_cuda_test_macro(CudaOnly.ExportPTX CudaOnlyExportPTX)
|
|||||||
add_cuda_test_macro(CudaOnly.SharedRuntimePlusToolkit CudaOnlySharedRuntimePlusToolkit)
|
add_cuda_test_macro(CudaOnly.SharedRuntimePlusToolkit CudaOnlySharedRuntimePlusToolkit)
|
||||||
add_cuda_test_macro(CudaOnly.Standard98 CudaOnlyStandard98)
|
add_cuda_test_macro(CudaOnly.Standard98 CudaOnlyStandard98)
|
||||||
add_cuda_test_macro(CudaOnly.Toolkit CudaOnlyToolkit)
|
add_cuda_test_macro(CudaOnly.Toolkit CudaOnlyToolkit)
|
||||||
|
add_cuda_test_macro(CudaOnly.ToolkitBeforeLang CudaOnlyToolkitBeforeLang)
|
||||||
add_cuda_test_macro(CudaOnly.WithDefs CudaOnlyWithDefs)
|
add_cuda_test_macro(CudaOnly.WithDefs CudaOnlyWithDefs)
|
||||||
add_cuda_test_macro(CudaOnly.CircularLinkLine CudaOnlyCircularLinkLine)
|
add_cuda_test_macro(CudaOnly.CircularLinkLine CudaOnlyCircularLinkLine)
|
||||||
add_cuda_test_macro(CudaOnly.ResolveDeviceSymbols CudaOnlyResolveDeviceSymbols)
|
add_cuda_test_macro(CudaOnly.ResolveDeviceSymbols CudaOnlyResolveDeviceSymbols)
|
||||||
|
|||||||
@@ -2,6 +2,10 @@ cmake_minimum_required(VERSION 3.15)
|
|||||||
project(CudaOnlyToolkit CUDA)
|
project(CudaOnlyToolkit CUDA)
|
||||||
find_package(CUDAToolkit REQUIRED)
|
find_package(CUDAToolkit REQUIRED)
|
||||||
|
|
||||||
|
if(NOT DEFINED CUDAToolkit_VERSION)
|
||||||
|
message(FATAL_ERROR "expected CUDAToolkit variable CUDAToolkit_VERSION not found")
|
||||||
|
endif()
|
||||||
|
|
||||||
message(STATUS "CUDAToolkit_VERSION: ${CUDAToolkit_VERSION}")
|
message(STATUS "CUDAToolkit_VERSION: ${CUDAToolkit_VERSION}")
|
||||||
message(STATUS "CUDAToolkit_VERSION_MAJOR: ${CUDAToolkit_VERSION_MAJOR}")
|
message(STATUS "CUDAToolkit_VERSION_MAJOR: ${CUDAToolkit_VERSION_MAJOR}")
|
||||||
message(STATUS "CUDAToolkit_VERSION_MINOR: ${CUDAToolkit_VERSION_MINOR}")
|
message(STATUS "CUDAToolkit_VERSION_MINOR: ${CUDAToolkit_VERSION_MINOR}")
|
||||||
|
|||||||
@@ -0,0 +1,26 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.15)
|
||||||
|
project(CudaOnlyToolkitBeforeLang CXX)
|
||||||
|
|
||||||
|
# Validate that CUDAToolkit gets the correct version
|
||||||
|
# when called before CUDA the language is enabled
|
||||||
|
find_package(CUDAToolkit REQUIRED)
|
||||||
|
enable_language(CUDA)
|
||||||
|
|
||||||
|
if(NOT DEFINED CUDAToolkit_VERSION)
|
||||||
|
message(FATAL_ERROR "expected CUDAToolkit variable CUDAToolkit_VERSION not found")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(cuda_libs cudart cuda_driver)
|
||||||
|
|
||||||
|
# Verify that all the CUDA:: targets and variables exist
|
||||||
|
foreach (cuda_lib IN LISTS cuda_libs)
|
||||||
|
if(NOT CUDA_${cuda_lib}_LIBRARY)
|
||||||
|
message(FATAL_ERROR "expected CUDAToolkit variable CUDA_${cuda_lib}_LIBRARY not found")
|
||||||
|
endif()
|
||||||
|
if(NOT TARGET CUDA::${cuda_lib})
|
||||||
|
message(FATAL_ERROR "expected CUDAToolkit target CUDA::${cuda_lib} not found")
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
add_executable(CudaOnlyToolkitBeforeLang main.cu)
|
||||||
|
target_link_libraries(CudaOnlyToolkitBeforeLang PRIVATE CUDA::toolkit)
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
// Only thing we care about is that these headers are found
|
||||||
|
#include <cuda.h>
|
||||||
|
#include <cuda_runtime_api.h>
|
||||||
|
|
||||||
|
int main(int argc, char** argv)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user