mirror of
https://github.com/Kitware/CMake.git
synced 2026-05-04 13:19:51 -05:00
CUDA: Factor out helper for detecting native CUDA architectures
Prepare to use it for other languages.
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||
# file Copyright.txt or https://cmake.org/licensing for details.
|
||||
|
||||
function(cmake_cuda_architectures_native lang)
|
||||
# Run the test binary to detect the native architectures.
|
||||
execute_process(COMMAND "${CMAKE_PLATFORM_INFO_DIR}/CMakeDetermineCompilerABI_${lang}.bin"
|
||||
RESULT_VARIABLE archs_result
|
||||
OUTPUT_VARIABLE archs_output
|
||||
ERROR_VARIABLE archs_output
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
if(archs_result EQUAL 0)
|
||||
if("$ENV{CMAKE_CUDA_ARCHITECTURES_NATIVE_CLAMP}")
|
||||
# Undocumented hook used by CMake's CI.
|
||||
# Clamp native architecture to version range supported by this CUDA.
|
||||
list(GET CMAKE_${lang}_ARCHITECTURES_ALL 0 arch_min)
|
||||
list(GET CMAKE_${lang}_ARCHITECTURES_ALL -1 arch_max)
|
||||
set(CMAKE_CUDA_ARCHITECTURES_NATIVE "")
|
||||
foreach(arch IN LISTS archs_output)
|
||||
if(arch LESS arch_min)
|
||||
set(arch "${arch_min}")
|
||||
endif()
|
||||
if(arch GREATER arch_max)
|
||||
set(arch "${arch_max}")
|
||||
endif()
|
||||
list(APPEND CMAKE_CUDA_ARCHITECTURES_NATIVE ${arch})
|
||||
endforeach()
|
||||
unset(arch)
|
||||
unset(arch_min)
|
||||
unset(arch_max)
|
||||
else()
|
||||
set(CMAKE_CUDA_ARCHITECTURES_NATIVE "${archs_output}")
|
||||
endif()
|
||||
list(REMOVE_DUPLICATES CMAKE_CUDA_ARCHITECTURES_NATIVE)
|
||||
list(TRANSFORM CMAKE_CUDA_ARCHITECTURES_NATIVE APPEND "-real")
|
||||
else()
|
||||
if(NOT archs_result MATCHES "[0-9]+")
|
||||
set(archs_status " (${archs_result})")
|
||||
else()
|
||||
set(archs_status "")
|
||||
endif()
|
||||
string(REPLACE "\n" "\n " archs_output " ${archs_output}")
|
||||
message(CONFIGURE_LOG
|
||||
"Detecting the CUDA native architecture(s) failed with "
|
||||
"the following output${archs_status}:\n${archs_output}\n\n")
|
||||
endif()
|
||||
|
||||
set(CMAKE_${lang}_ARCHITECTURES_NATIVE "${CMAKE_CUDA_ARCHITECTURES_NATIVE}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
Reference in New Issue
Block a user