diff --git a/Modules/FindCUDAToolkit.cmake b/Modules/FindCUDAToolkit.cmake index a133998372..184922cafe 100644 --- a/Modules/FindCUDAToolkit.cmake +++ b/Modules/FindCUDAToolkit.cmake @@ -869,6 +869,28 @@ else() endif() endfunction() + macro(_CUDAToolkit_find_failure_message _CUDAToolkit_fail_mode) + # Declare error messages now, print later depending on find_package args. + if("${_CUDAToolkit_fail_mode}" STREQUAL "GUESS") + set(_CUDAToolkit_fail_message "Could not find `nvcc` executable in any searched paths, please set CUDAToolkit_ROOT") + elseif("${_CUDAToolkit_fail_mode}" STREQUAL "VARIABLE") + set(_CUDAToolkit_fail_message "Could not find `nvcc` executable in path specified by variable CUDAToolkit_ROOT=${CUDAToolkit_ROOT}") + else() + set(_CUDAToolkit_fail_message "Could not find `nvcc` executable in path specified by environment variable CUDAToolkit_ROOT=$ENV{CUDAToolkit_ROOT}") + endif() + + if(CUDAToolkit_FIND_REQUIRED) + message(FATAL_ERROR ${_CUDAToolkit_fail_message}) + else() + if(NOT CUDAToolkit_FIND_QUIETLY) + message(STATUS ${_CUDAToolkit_fail_message}) + endif() + set(CUDAToolkit_FOUND FALSE) + unset(_CUDAToolkit_fail_message) + return() + endif() + endmacro() + # For NVCC we can easily deduce the SDK binary directory from the compiler path. if(CMAKE_CUDA_COMPILER_LOADED AND NOT CUDAToolkit_BIN_DIR AND CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA") get_filename_component(CUDAToolkit_BIN_DIR "${CMAKE_CUDA_COMPILER}" DIRECTORY) @@ -888,44 +910,17 @@ else() endif() # If the user specified CUDAToolkit_ROOT but the toolkit could not be found, this is an error. - if(NOT CUDAToolkit_ROOT_DIR AND (DEFINED CUDAToolkit_ROOT OR DEFINED ENV{CUDAToolkit_ROOT})) - # Declare error messages now, print later depending on find_package args. - set(fail_base "Could not find nvcc executable in path specified by") - set(cuda_root_fail "${fail_base} CUDAToolkit_ROOT=${CUDAToolkit_ROOT}") - set(env_cuda_root_fail "${fail_base} environment variable CUDAToolkit_ROOT=$ENV{CUDAToolkit_ROOT}") - - if(CUDAToolkit_FIND_REQUIRED) - if(DEFINED CUDAToolkit_ROOT) - message(FATAL_ERROR ${cuda_root_fail}) - elseif(DEFINED ENV{CUDAToolkit_ROOT}) - message(FATAL_ERROR ${env_cuda_root_fail}) - endif() - else() - if(NOT CUDAToolkit_FIND_QUIETLY) - if(DEFINED CUDAToolkit_ROOT) - message(STATUS ${cuda_root_fail}) - elseif(DEFINED ENV{CUDAToolkit_ROOT}) - message(STATUS ${env_cuda_root_fail}) - endif() - endif() - set(CUDAToolkit_FOUND FALSE) - unset(fail_base) - unset(cuda_root_fail) - unset(env_cuda_root_fail) - return() - endif() + if(NOT CUDAToolkit_ROOT_DIR AND DEFINED CUDAToolkit_ROOT) + _CUDAToolkit_find_failure_message(VARIABLE) + elseif(NOT CUDAToolkit_ROOT_DIR AND DEFINED ENV{CUDAToolkit_ROOT}) + _CUDAToolkit_find_failure_message(ENV) endif() + # Try guessing where CUDA is installed if(NOT CUDAToolkit_ROOT_DIR) _CUDAToolkit_guess_root_dir() if(NOT CUDAToolkit_ROOT_DIR) - set(CUDAToolkit_FOUND FALSE) - if(CUDAToolkit_FIND_REQUIRED) - message(FATAL_ERROR "Could not find `nvcc`, please set CUDAToolkit_ROOT.") - elseif(NOT CUDAToolkit_FIND_QUIETLY) - message(STATUS "Could not find `nvcc`, please set CUDAToolkit_ROOT.") - endif() - return() + _CUDAToolkit_find_failure_message(GUESS) endif() endif()