Merge topic 'cuda-cross-targets'

4f2482700b FindCUDAToolkit: Fix cross-compiling without CMAKE_SYSTEM_PROCESSOR

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !10541
This commit is contained in:
Brad King
2025-03-31 13:48:48 +00:00
committed by Kitware Robot

View File

@@ -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}")