CUDA/Clang: Determine cross-compiling target from CMAKE_CUDA_COMPILER_TARGET

When cross-compiling CUDA with Clang, `CMAKE_CUDA_COMPILER_TARGET` is
typically set to the target triple.  Use it to select the CUDA toolkit
target directory.
This commit is contained in:
Brad King 2025-02-26 16:30:19 -05:00
parent 40eeca77c3
commit 781a67bf5e

View File

@ -171,13 +171,20 @@ if(CMAKE_CUDA_COMPILER_ID STREQUAL "Clang")
# Find target directory when crosscompiling.
if(CMAKE_CROSSCOMPILING)
if(CMAKE_CUDA_COMPILER_TARGET MATCHES "^([^-]+)(-|$)")
set(_CUDA_TARGET_PROCESSOR "${CMAKE_MATCH_1}")
elseif(CMAKE_SYSTEM_PROCESSOR)
set(_CUDA_TARGET_PROCESSOR "${CMAKE_SYSTEM_PROCESSOR}")
else()
message(FATAL_ERROR "Cross-compiling CUDA with Clang requires CMAKE_CUDA_COMPILER_TARGET and/or CMAKE_SYSTEM_PROCESSOR to be set.")
endif()
# Keep in sync with equivalent table in FindCUDAToolkit!
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7-a")
if(_CUDA_TARGET_PROCESSOR STREQUAL "armv7-a")
# Support for NVPACK
set(_CUDA_TARGET_NAMES "armv7-linux-androideabi")
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm")
elseif(_CUDA_TARGET_PROCESSOR MATCHES "arm")
set(_CUDA_TARGET_NAMES "armv7-linux-gnueabihf")
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64")
elseif(_CUDA_TARGET_PROCESSOR MATCHES "aarch64")
if(ANDROID_ARCH_NAME STREQUAL "arm64")
set(_CUDA_TARGET_NAMES "aarch64-linux-androideabi")
elseif (CMAKE_SYSTEM_NAME STREQUAL "QNX")
@ -185,7 +192,7 @@ if(CMAKE_CUDA_COMPILER_ID STREQUAL "Clang")
else()
set(_CUDA_TARGET_NAMES "aarch64-linux" "sbsa-linux")
endif()
elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
elseif(_CUDA_TARGET_PROCESSOR STREQUAL "x86_64")
set(_CUDA_TARGET_NAMES "x86_64-linux")
endif()
@ -197,6 +204,7 @@ if(CMAKE_CUDA_COMPILER_ID STREQUAL "Clang")
endforeach()
unset(_CUDA_TARGET_NAME)
unset(_CUDA_TARGET_NAMES)
unset(_CUDA_TARGET_PROCESSOR)
endif()
# If not already set we can simply use the toolkit root or it's a scattered installation.