|
|
@@ -44,3 +44,43 @@ if(CMAKE_CUDA_COMPILER_TOOLKIT_VERSION VERSION_GREATER_EQUAL 11.4
|
|
|
AND (NOT CMAKE_CUDA_COMPILER_ID STREQUAL "Clang"))
|
|
|
list(APPEND CMAKE_CUDA_ARCHITECTURES_ALL 87)
|
|
|
endif()
|
|
|
+
|
|
|
+# FIXME(#23161): Detect architectures early since we test them during
|
|
|
+# compiler detection. We already have code to detect them later during
|
|
|
+# compiler testing, so we should not need to do this here.
|
|
|
+if(NOT CMAKE_GENERATOR MATCHES "Visual Studio")
|
|
|
+ set(_CUDA_ARCHS_EXE "${CMAKE_PLATFORM_INFO_DIR}/CMakeDetermineCUDACompilerArchs.bin")
|
|
|
+ execute_process(
|
|
|
+ COMMAND "${_CUDA_NVCC_EXECUTABLE}" -o "${_CUDA_ARCHS_EXE}" --cudart=static "${CMAKE_ROOT}/Modules/CMakeCUDACompilerABI.cu"
|
|
|
+ RESULT_VARIABLE _CUDA_ARCHS_RESULT
|
|
|
+ OUTPUT_VARIABLE _CUDA_ARCHS_OUTPUT
|
|
|
+ ERROR_VARIABLE _CUDA_ARCHS_OUTPUT
|
|
|
+ )
|
|
|
+ if(_CUDA_ARCHS_RESULT EQUAL 0)
|
|
|
+ execute_process(
|
|
|
+ COMMAND "${_CUDA_ARCHS_EXE}"
|
|
|
+ RESULT_VARIABLE _CUDA_ARCHS_RESULT
|
|
|
+ OUTPUT_VARIABLE _CUDA_ARCHS_OUTPUT
|
|
|
+ ERROR_VARIABLE _CUDA_ARCHS_OUTPUT
|
|
|
+ OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
|
+ )
|
|
|
+ endif()
|
|
|
+ if(_CUDA_ARCHS_RESULT EQUAL 0)
|
|
|
+ set(_CUDA_ARCHITECTURES_NATIVE "${_CUDA_ARCHS_OUTPUT}")
|
|
|
+ list(REMOVE_DUPLICATES _CUDA_ARCHITECTURES_NATIVE)
|
|
|
+ else()
|
|
|
+ if (NOT _CUDA_ARCHS_RESULT MATCHES "[0-9]+")
|
|
|
+ set(_CUDA_ARCHS_STATUS " (${_CUDA_ARCHS_RESULT})")
|
|
|
+ else()
|
|
|
+ set(_CUDA_ARCHS_STATUS "")
|
|
|
+ endif()
|
|
|
+ string(REPLACE "\n" "\n " _CUDA_ARCHS_OUTPUT " ${_CUDA_ARCHS_OUTPUT}")
|
|
|
+ file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
|
|
|
+ "Detecting the CUDA native architecture(s) failed with "
|
|
|
+ "the following output:\n${_CUDA_ARCHS_OUTPUT}\n\n")
|
|
|
+ set(_CUDA_ARCHS_OUTPUT "")
|
|
|
+ endif()
|
|
|
+ unset(_CUDA_ARCHS_EXE)
|
|
|
+ unset(_CUDA_ARCHS_RESULT)
|
|
|
+ unset(_CUDA_ARCHS_OUTPUT)
|
|
|
+endif()
|