| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- # 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()
|