1
0
mirror of https://github.com/Kitware/CMake.git synced 2025-10-14 02:08:27 +08:00

CUDAToolkit: Refactor find failure error messages to a single macro

This commit is contained in:
Robert Maynard
2025-09-10 10:47:17 -04:00
parent 0ae76a89b1
commit f757721ecd

View File

@@ -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()