mirror of
https://gitlab.kitware.com/cmake/cmake.git
synced 2026-09-25 04:09:36 +03:00
FindCUDAToolkit: Detect target processor even when not cross-compiling
This commit is contained in:
committed by
Brad King
parent
a733b2c1ce
commit
afb9e1eab8
@@ -1053,19 +1053,24 @@ else()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Figure out the target directory when either crosscompiling
|
||||
# Figure out the target processor which is required to determine
|
||||
# our target dir ( linux ) or our lib dir ( windows )
|
||||
#
|
||||
# When a language is enabled we can use its compiler's target architecture.
|
||||
if(CMAKE_CUDA_COMPILER_LOADED AND CMAKE_CUDA_COMPILER_ARCHITECTURE_ID)
|
||||
set(_CUDA_TARGET_PROCESSOR "${CMAKE_CUDA_COMPILER_ARCHITECTURE_ID}")
|
||||
elseif(CMAKE_CXX_COMPILER_LOADED AND CMAKE_CXX_COMPILER_ARCHITECTURE_ID)
|
||||
set(_CUDA_TARGET_PROCESSOR "${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}")
|
||||
elseif(CMAKE_C_COMPILER_LOADED AND CMAKE_C_COMPILER_ARCHITECTURE_ID)
|
||||
set(_CUDA_TARGET_PROCESSOR "${CMAKE_C_COMPILER_ARCHITECTURE_ID}")
|
||||
elseif(CMAKE_SYSTEM_PROCESSOR)
|
||||
set(_CUDA_TARGET_PROCESSOR "${CMAKE_SYSTEM_PROCESSOR}")
|
||||
endif()
|
||||
|
||||
# Figure out our crosscompiling targets dir
|
||||
# or if we don't have `nvcc` and need to deduce the target arch
|
||||
if(CMAKE_CROSSCOMPILING OR NOT CUDAToolkit_NVCC_EXECUTABLE)
|
||||
# When a language is enabled we can use its compiler's target architecture.
|
||||
if(CMAKE_CUDA_COMPILER_LOADED AND CMAKE_CUDA_COMPILER_ARCHITECTURE_ID)
|
||||
set(_CUDA_TARGET_PROCESSOR "${CMAKE_CUDA_COMPILER_ARCHITECTURE_ID}")
|
||||
elseif(CMAKE_CXX_COMPILER_LOADED AND CMAKE_CXX_COMPILER_ARCHITECTURE_ID)
|
||||
set(_CUDA_TARGET_PROCESSOR "${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}")
|
||||
elseif(CMAKE_C_COMPILER_LOADED AND CMAKE_C_COMPILER_ARCHITECTURE_ID)
|
||||
set(_CUDA_TARGET_PROCESSOR "${CMAKE_C_COMPILER_ARCHITECTURE_ID}")
|
||||
elseif(CMAKE_SYSTEM_PROCESSOR)
|
||||
set(_CUDA_TARGET_PROCESSOR "${CMAKE_SYSTEM_PROCESSOR}")
|
||||
elseif(CMAKE_CROSSCOMPILING)
|
||||
if(CMAKE_CROSSCOMPILING AND NOT _CUDA_TARGET_PROCESSOR)
|
||||
message(FATAL_ERROR "Cross-compiling with the CUDA toolkit requires CMAKE_SYSTEM_PROCESSOR to be set.")
|
||||
endif()
|
||||
# Keep in sync with equivalent table in CMakeDetermineCUDACompiler and FindCUDA!
|
||||
@@ -1085,7 +1090,6 @@ if(CMAKE_CROSSCOMPILING OR NOT CUDAToolkit_NVCC_EXECUTABLE)
|
||||
elseif(_CUDA_TARGET_PROCESSOR STREQUAL "x86_64")
|
||||
set(CUDAToolkit_TARGET_NAMES "x86_64-linux")
|
||||
endif()
|
||||
unset(_CUDA_TARGET_PROCESSOR)
|
||||
|
||||
foreach(CUDAToolkit_TARGET_NAME IN LISTS CUDAToolkit_TARGET_NAMES)
|
||||
if(EXISTS "${CUDAToolkit_ROOT_DIR}/targets/${CUDAToolkit_TARGET_NAME}")
|
||||
@@ -1116,6 +1120,8 @@ if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
unset(_CUDA_TARGET_PROCESSOR)
|
||||
|
||||
# We don't need to verify the cuda_runtime header when we are using `nvcc` include paths
|
||||
# as the compiler being enabled means the header was found
|
||||
if(NOT CUDAToolkit_INCLUDE_DIRECTORIES)
|
||||
|
||||
Reference in New Issue
Block a user