diff --git a/Modules/FindCUDAToolkit.cmake b/Modules/FindCUDAToolkit.cmake index aaa1246663..8c7916cdf9 100644 --- a/Modules/FindCUDAToolkit.cmake +++ b/Modules/FindCUDAToolkit.cmake @@ -939,13 +939,25 @@ endif() # Find target directory when crosscompiling. if(CMAKE_CROSSCOMPILING) + # 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}") + else() + 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! - if(CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7-a") + if(_CUDA_TARGET_PROCESSOR STREQUAL "armv7-a") # Support for NVPACK set(CUDAToolkit_TARGET_NAMES "armv7-linux-androideabi") - elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm") + elseif(_CUDA_TARGET_PROCESSOR MATCHES "arm") set(CUDAToolkit_TARGET_NAMES "armv7-linux-gnueabihf") - elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64") + elseif(_CUDA_TARGET_PROCESSOR MATCHES "aarch64") if(ANDROID_ARCH_NAME STREQUAL "arm64") set(CUDAToolkit_TARGET_NAMES "aarch64-linux-androideabi") elseif (CMAKE_SYSTEM_NAME STREQUAL "QNX") @@ -953,9 +965,10 @@ if(CMAKE_CROSSCOMPILING) else() set(CUDAToolkit_TARGET_NAMES "aarch64-linux" "sbsa-linux") endif() - elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") + 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}")