mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-11 08:20:18 -06:00
FindCUDAToolkit: Fix cross-compiling without CMAKE_SYSTEM_PROCESSOR
Previously we relied on the cross-compiling toolchain file to set `CMAKE_SYSTEM_PROCESSOR` to a value consistent with the CUDA compiler's target architecture. When a compiled language is enabled, we now have its target architecture in `CMAKE_<LANG>_COMPILER_ARCHITECTURE_ID`. Use that to select the CUDA toolkit's corresponding target directory. If no language is enabled, or the compiler's target architecture is not known, fall back to `CMAKE_SYSTEM_PROCESSOR`. If that is not set, fail with an explicit error make clear what is wrong.
This commit is contained in:
@@ -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}")
|
||||
|
||||
Reference in New Issue
Block a user