mirror of
https://github.com/Kitware/CMake.git
synced 2025-12-31 02:39:48 -06:00
CUDA: Simplify CMAKE_CUDA_ARCHITECTURES special value logic
Refactor the logic checking `CMAKE_CUDA_ARCHITECTURES` special values. Switch on the value first, and then make other decisions for each case. This makes room for other special values to be added later.
This commit is contained in:
@@ -272,26 +272,24 @@ if(NOT CMAKE_CUDA_COMPILER_ID_RUN)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Detect explicit architectures and add them during detection.
|
||||
if(DEFINED CMAKE_CUDA_ARCHITECTURES AND NOT "${CMAKE_CUDA_ARCHITECTURES}" STREQUAL "all" AND NOT "${CMAKE_CUDA_ARCHITECTURES}" STREQUAL "all-major")
|
||||
set(architectures_explicit TRUE)
|
||||
set(architectures_test ${CMAKE_CUDA_ARCHITECTURES})
|
||||
endif()
|
||||
|
||||
# For sufficiently new NVCC we can just use the all and all-major flags.
|
||||
# For VS we don't test since we can't figure out the version this early (see #23161).
|
||||
# For others select based on version.
|
||||
if(CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA" AND CMAKE_CUDA_COMPILER_TOOLKIT_VERSION VERSION_GREATER_EQUAL 11.5)
|
||||
if("${CMAKE_CUDA_ARCHITECTURES}" STREQUAL "all")
|
||||
string(APPEND nvcc_test_flags " -arch=all")
|
||||
elseif("${CMAKE_CUDA_ARCHITECTURES}" STREQUAL "all-major")
|
||||
string(APPEND nvcc_test_flags " -arch=all-major")
|
||||
endif()
|
||||
elseif(NOT CMAKE_GENERATOR MATCHES "Visual Studio")
|
||||
if("${CMAKE_CUDA_ARCHITECTURES}" STREQUAL "all")
|
||||
set(architectures_test ${CMAKE_CUDA_ARCHITECTURES_ALL})
|
||||
elseif("${CMAKE_CUDA_ARCHITECTURES}" STREQUAL "all-major")
|
||||
set(architectures_test ${CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR})
|
||||
if(DEFINED CMAKE_CUDA_ARCHITECTURES)
|
||||
if(CMAKE_CUDA_ARCHITECTURES MATCHES "^(all|all-major)$")
|
||||
# For sufficiently new NVCC we can just use the all and all-major flags.
|
||||
# For VS we don't test since we can't figure out the version this early (see #23161).
|
||||
# For others select based on version.
|
||||
if(CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA" AND CMAKE_CUDA_COMPILER_TOOLKIT_VERSION VERSION_GREATER_EQUAL 11.5)
|
||||
string(APPEND nvcc_test_flags " -arch=${CMAKE_CUDA_ARCHITECTURES}")
|
||||
elseif(NOT CMAKE_GENERATOR MATCHES "Visual Studio")
|
||||
if(CMAKE_CUDA_ARCHITECTURES STREQUAL "all")
|
||||
set(architectures_test ${CMAKE_CUDA_ARCHITECTURES_ALL})
|
||||
elseif(CMAKE_CUDA_ARCHITECTURES STREQUAL "all-major")
|
||||
set(architectures_test ${CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR})
|
||||
endif()
|
||||
endif()
|
||||
else()
|
||||
# Explicit architectures. Test them during detection.
|
||||
set(architectures_explicit TRUE)
|
||||
set(architectures_test ${CMAKE_CUDA_ARCHITECTURES})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
||||
@@ -3447,22 +3447,22 @@ void cmGeneratorTarget::AddCUDAArchitectureFlags(std::string& flags) const
|
||||
this->Makefile->GetSafeDefinition("CMAKE_CUDA_COMPILER_ID");
|
||||
|
||||
// Check for special modes: `all`, `all-major`.
|
||||
if (compiler == "NVIDIA" &&
|
||||
cmSystemTools::VersionCompare(
|
||||
cmSystemTools::OP_GREATER_EQUAL,
|
||||
this->Makefile->GetDefinition("CMAKE_CUDA_COMPILER_VERSION"),
|
||||
"11.5")) {
|
||||
if (property == "all" || property == "all-major") {
|
||||
if (property == "all" || property == "all-major") {
|
||||
if (compiler == "NVIDIA" &&
|
||||
cmSystemTools::VersionCompare(
|
||||
cmSystemTools::OP_GREATER_EQUAL,
|
||||
this->Makefile->GetDefinition("CMAKE_CUDA_COMPILER_VERSION"),
|
||||
"11.5")) {
|
||||
flags = cmStrCat(flags, " -arch=", property);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (property == "all") {
|
||||
property = *this->Makefile->GetDefinition("CMAKE_CUDA_ARCHITECTURES_ALL");
|
||||
} else if (property == "all-major") {
|
||||
property =
|
||||
*this->Makefile->GetDefinition("CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR");
|
||||
if (property == "all") {
|
||||
property =
|
||||
*this->Makefile->GetDefinition("CMAKE_CUDA_ARCHITECTURES_ALL");
|
||||
} else if (property == "all-major") {
|
||||
property =
|
||||
*this->Makefile->GetDefinition("CMAKE_CUDA_ARCHITECTURES_ALL_MAJOR");
|
||||
}
|
||||
}
|
||||
|
||||
struct CudaArchitecture
|
||||
|
||||
Reference in New Issue
Block a user