Merge topic 'cuda-cross-targets'

781a67bf5e CUDA/Clang: Determine cross-compiling target from CMAKE_CUDA_COMPILER_TARGET
40eeca77c3 CUDA/Clang: Sync target directory table with FindCUDAToolkit
05efcdd464 FindCUDA: Sync target directory table with FindCUDAToolkit

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !10421
This commit is contained in:
Brad King 2025-03-05 13:27:14 +00:00 committed by Kitware Robot
commit 8295a4ad32
3 changed files with 34 additions and 17 deletions

View File

@ -171,24 +171,40 @@ if(CMAKE_CUDA_COMPILER_ID STREQUAL "Clang")
# Find target directory when crosscompiling.
if(CMAKE_CROSSCOMPILING)
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7-a")
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(_CUDA_TARGET_PROCESSOR STREQUAL "armv7-a")
# Support for NVPACK
set(_CUDA_TARGET_NAME "armv7-linux-androideabi")
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm")
set(_CUDA_TARGET_NAME "armv7-linux-gnueabihf")
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64")
set(_CUDA_TARGET_NAMES "armv7-linux-androideabi")
elseif(_CUDA_TARGET_PROCESSOR MATCHES "arm")
set(_CUDA_TARGET_NAMES "armv7-linux-gnueabihf")
elseif(_CUDA_TARGET_PROCESSOR MATCHES "aarch64")
if(ANDROID_ARCH_NAME STREQUAL "arm64")
set(_CUDA_TARGET_NAME "aarch64-linux-androideabi")
set(_CUDA_TARGET_NAMES "aarch64-linux-androideabi")
elseif (CMAKE_SYSTEM_NAME STREQUAL "QNX")
set(_CUDA_TARGET_NAMES "aarch64-qnx")
else()
set(_CUDA_TARGET_NAME "aarch64-linux")
set(_CUDA_TARGET_NAMES "aarch64-linux" "sbsa-linux")
endif()
elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
set(_CUDA_TARGET_NAME "x86_64-linux")
elseif(_CUDA_TARGET_PROCESSOR STREQUAL "x86_64")
set(_CUDA_TARGET_NAMES "x86_64-linux")
endif()
if(EXISTS "${CMAKE_CUDA_COMPILER_TOOLKIT_ROOT}/targets/${_CUDA_TARGET_NAME}")
set(_CUDA_TARGET_DIR "${CMAKE_CUDA_COMPILER_TOOLKIT_ROOT}/targets/${_CUDA_TARGET_NAME}")
endif()
foreach(_CUDA_TARGET_NAME IN LISTS _CUDA_TARGET_NAMES)
if(EXISTS "${CMAKE_CUDA_COMPILER_TOOLKIT_ROOT}/targets/${_CUDA_TARGET_NAME}")
set(_CUDA_TARGET_DIR "${CMAKE_CUDA_COMPILER_TOOLKIT_ROOT}/targets/${_CUDA_TARGET_NAME}")
break()
endif()
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.
@ -227,7 +243,6 @@ if(CMAKE_CUDA_COMPILER_ID STREQUAL "Clang")
unset(_CUDA_INCLUDE_DIR)
unset(_CUDA_LIBRARY_DIR)
unset(_CUDA_TARGET_DIR)
unset(_CUDA_TARGET_NAME)
elseif(CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA")
include(Internal/CMakeNVCCParseImplicitInfo)
# Parse CMAKE_CUDA_COMPILER_PRODUCED_OUTPUT to get:

View File

@ -891,21 +891,22 @@ endif ()
if(CMAKE_CROSSCOMPILING)
set(CUDA_TOOLKIT_ROOT $ENV{CUDA_TOOLKIT_ROOT})
# Keep in sync with equivalent table in FindCUDAToolkit!
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7-a")
# Support for NVPACK
set (CUDA_TOOLKIT_TARGET_NAMES "armv7-linux-androideabi")
set(CUDA_TOOLKIT_TARGET_NAMES "armv7-linux-androideabi")
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm")
# Support for arm cross compilation
set(CUDA_TOOLKIT_TARGET_NAMES "armv7-linux-gnueabihf")
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64")
# Support for aarch64 cross compilation
if (ANDROID_ARCH_NAME STREQUAL "arm64")
if(ANDROID_ARCH_NAME STREQUAL "arm64")
set(CUDA_TOOLKIT_TARGET_NAMES "aarch64-linux-androideabi")
elseif (CMAKE_SYSTEM_NAME STREQUAL "QNX")
set(CUDA_TOOLKIT_TARGET_NAMES "aarch64-qnx")
else()
set(CUDA_TOOLKIT_TARGET_NAMES "aarch64-linux" "sbsa-linux")
endif()
elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
set(CUDA_TOOLKIT_TARGET_NAMES "x86_64-linux")
endif()
foreach(CUDA_TOOLKIT_TARGET_NAME IN LISTS CUDA_TOOLKIT_TARGET_NAMES)

View File

@ -939,6 +939,7 @@ endif()
# Find target directory when crosscompiling.
if(CMAKE_CROSSCOMPILING)
# Keep in sync with equivalent table in CMakeDetermineCUDACompiler and FindCUDA!
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7-a")
# Support for NVPACK
set(CUDAToolkit_TARGET_NAMES "armv7-linux-androideabi")