Skip to content

Commit

Permalink
back to old pattern
Browse files Browse the repository at this point in the history
  • Loading branch information
havogt committed Sep 24, 2024
1 parent 2b262f0 commit 4d3da87
Showing 1 changed file with 48 additions and 44 deletions.
92 changes: 48 additions & 44 deletions cmake/public/detect_features.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -46,67 +46,71 @@ endfunction()
# - Clang-CUDA: Try Clang-CUDA or fail.
# - NVCC-CUDA: Try NVCC-CUDA or fail.
function(detect_cuda_type cuda_type mode)
if(NOT mode)
set(mode AUTO)
endif()
string(TOLOWER "${mode}" _lower_case_mode)
if(_lower_case_mode STREQUAL "clang-cuda")
try_clang_cuda(gt_result)
if(gt_result)
set(${cuda_type} ${gt_result} PARENT_SCOPE)
return()
else()
message(FATAL_ERROR "Clang-CUDA mode was selected, but doesn't work.")
endif()
elseif(_lower_case_mode STREQUAL "nvcc-cuda")
if(NOT CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
try_nvcc_cuda(gt_result)
if(gt_result)
set(${cuda_type} ${gt_result} PARENT_SCOPE)
return()
else()
message(FATAL_ERROR "NVCC-CUDA mode was selected, but doesn't work.")
endif()
elseif(_lower_case_mode STREQUAL "hip")
try_hip(gt_result)
if(gt_result)
set(${cuda_type} ${gt_result} PARENT_SCOPE)
return()
else()
message(FATAL_ERROR "HIP mode was selected, but doesn't work.")
endif()
elseif(_lower_case_mode STREQUAL "auto") # AUTO
get_property(languages GLOBAL PROPERTY ENABLED_LANGUAGES)
if("CUDA" IN_LIST languages) # CUDA language is already enabled, prefer it
set(${cuda_type} NVCC-CUDA PARENT_SCOPE)
return()
elseif("HIP" IN_LIST languages) # HIP language is already enabled, prefer it
set(${cuda_type} HIPCC-AMDGPU PARENT_SCOPE)
return()
else()
# Prefer Clang-CUDA
set(${cuda_type} ${gt_result} PARENT_SCOPE)
return()
else()
string(TOLOWER "${mode}" _lower_case_mode)
if(_lower_case_mode STREQUAL "clang-cuda")
try_clang_cuda(gt_result)
if(gt_result)
set(${cuda_type} ${gt_result} PARENT_SCOPE)
return()
else()
message(FATAL_ERROR "Clang-CUDA mode was selected, but doesn't work.")
endif()

# Clang-CUDA doesn't work, try NVCC
elseif(_lower_case_mode STREQUAL "nvcc-cuda")
try_nvcc_cuda(gt_result)
if(gt_result)
set(${cuda_type} ${gt_result} PARENT_SCOPE)
return()
else()
message(FATAL_ERROR "NVCC-CUDA mode was selected, but doesn't work.")
endif()

# No CUDA variant works, try HIP
elseif(_lower_case_mode STREQUAL "hip")
try_hip(gt_result)
if(gt_result)
set(${cuda_type} ${gt_result} PARENT_SCOPE)
return()
else()
message(FATAL_ERROR "HIP mode was selected, but doesn't work.")
endif()
elseif(_lower_case_mode STREQUAL "auto") # AUTO
get_property(languages GLOBAL PROPERTY ENABLED_LANGUAGES)
if("CUDA" IN_LIST languages) # CUDA language is already enabled, prefer it
set(${cuda_type} NVCC-CUDA PARENT_SCOPE)
return()
elseif("HIP" IN_LIST languages) # HIP language is already enabled, prefer it
set(${cuda_type} HIPCC-AMDGPU PARENT_SCOPE)
return()
else()
# Prefer Clang-CUDA
try_clang_cuda(gt_result)
if(gt_result)
set(${cuda_type} ${gt_result} PARENT_SCOPE)
return()
endif()

# Clang-CUDA doesn't work, try NVCC
try_nvcc_cuda(gt_result)
if(gt_result)
set(${cuda_type} ${gt_result} PARENT_SCOPE)
return()
endif()

# No CUDA variant works, try HIP
try_hip(gt_result)
if(gt_result)
set(${cuda_type} ${gt_result} PARENT_SCOPE)
return()
endif()

set(${cuda_type} NOTFOUND PARENT_SCOPE)
set(${cuda_type} NOTFOUND PARENT_SCOPE)
endif()
else()
message(FATAL_ERROR "CUDA/HIP mode set to invalid value ${mode}")
endif()
else()
message(FATAL_ERROR "CUDA/HIP mode set to invalid value ${mode}")
set(${cuda_type} NOTFOUND PARENT_SCOPE)
endif()
endfunction()

0 comments on commit 4d3da87

Please sign in to comment.