Merge topic 'cuda-arch-off' into release-3.23

7024596a26 Tests: Fix testing CMAKE_CUDA_ARCHITECTURES=OFF with Clang
2a79b647fa CUDA: Restore support for CMAKE_CUDA_ARCHITECTURES=OFF

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !7058
This commit is contained in:
Brad King
2022-03-10 14:07:58 +00:00
committed by Kitware Robot
5 changed files with 27 additions and 3 deletions

View File

@@ -289,7 +289,7 @@ if(NOT CMAKE_CUDA_COMPILER_ID_RUN)
set(architectures_test ${CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR})
endif()
endif()
else()
elseif(CMAKE_CUDA_ARCHITECTURES OR "${CMAKE_CUDA_ARCHITECTURES}" STREQUAL "")
# Explicit architectures. Test them during detection.
set(architectures_explicit TRUE)
set(architectures_test ${CMAKE_CUDA_ARCHITECTURES})
@@ -633,7 +633,7 @@ if("${CMAKE_CUDA_ARCHITECTURES}" STREQUAL "")
message(FATAL_ERROR "Failed to detect a default CUDA architecture.\n\nCompiler output:\n${CMAKE_CUDA_COMPILER_PRODUCED_OUTPUT}")
endif()
endif()
elseif(NOT "${architectures_tested}" MATCHES "^(all|all-major)$")
elseif(CMAKE_CUDA_ARCHITECTURES AND NOT "${architectures_tested}" MATCHES "^(all|all-major)$")
# Sort since order mustn't matter.
list(SORT architectures_detected)
list(SORT architectures_tested)

View File

@@ -495,7 +495,7 @@ Id flags: ${testflags} ${CMAKE_${lang}_COMPILER_ID_FLAGS_ALWAYS}
if(CMAKE_VS_PLATFORM_NAME STREQUAL x64)
set(cuda_target "<TargetMachinePlatform>64</TargetMachinePlatform>")
endif()
if(NOT CMAKE_CUDA_ARCHITECTURES MATCHES "^(all|all-major)$")
if(CMAKE_CUDA_ARCHITECTURES AND NOT CMAKE_CUDA_ARCHITECTURES MATCHES "^(all|all-major)$")
foreach(arch ${CMAKE_CUDA_ARCHITECTURES})
string(REGEX MATCH "[0-9]+" arch_name "${arch}")
string(APPEND cuda_codegen "compute_${arch_name},sm_${arch_name};")

View File

@@ -4,3 +4,18 @@ run_cmake(architectures-all)
run_cmake(architectures-all-major)
run_cmake(architectures-empty)
run_cmake(architectures-invalid)
run_cmake(architectures-not-set)
include("${RunCMake_BINARY_DIR}/architectures-not-set-build/info.cmake" OPTIONAL)
message(STATUS " CMAKE_CUDA_COMPILER_ID='${CMAKE_CUDA_COMPILER_ID}'")
message(STATUS " CMAKE_CUDA_COMPILER_VERSION='${CMAKE_CUDA_COMPILER_VERSION}'")
message(STATUS " CMAKE_CUDA_ARCHITECTURES='${CMAKE_CUDA_ARCHITECTURES}'")
if(CMAKE_CUDA_COMPILER_ID STREQUAL "Clang" AND CMAKE_CUDA_ARCHITECTURES)
list(GET CMAKE_CUDA_ARCHITECTURES 0 arch)
set(CMAKE_CUDA_FLAGS --cuda-gpu-arch=sm_${arch})
message(STATUS "Adding CMAKE_CUDA_FLAGS='${CMAKE_CUDA_FLAGS}' for CMAKE_CUDA_ARCHITECTURES=OFF with Clang.")
set(RunCMake_TEST_OPTIONS "-DCMAKE_CUDA_FLAGS=${CMAKE_CUDA_FLAGS}")
endif()
run_cmake(architectures-off)
unset(RunCMake_TEST_OPTIONS)

View File

@@ -0,0 +1,7 @@
unset(CMAKE_CUDA_ARCHITECTURES)
enable_language(CUDA)
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/info.cmake" "
set(CMAKE_CUDA_COMPILER_ID \"${CMAKE_CUDA_COMPILER_ID}\")
set(CMAKE_CUDA_COMPILER_VERSION \"${CMAKE_CUDA_COMPILER_VERSION}\")
set(CMAKE_CUDA_ARCHITECTURES \"${CMAKE_CUDA_ARCHITECTURES}\")
")

View File

@@ -0,0 +1,2 @@
set(CMAKE_CUDA_ARCHITECTURES OFF)
enable_language(CUDA)