You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
3.8 KiB
100 lines
3.8 KiB
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
|
# file Copyright.txt or https://cmake.org/licensing for details.
|
|
|
|
|
|
function(_CMAKE_FIND_HIP_RUNTIME )
|
|
# Determined when hipcc is the HIP compiler
|
|
set(_CMAKE_HIP_COMPILER_ROCM_ROOT "@_CMAKE_HIP_COMPILER_ROCM_ROOT@")
|
|
|
|
# Forward facing value that can be provided by the user
|
|
set(CMAKE_HIP_COMPILER_TOOLKIT_ROOT @CMAKE_HIP_COMPILER_TOOLKIT_ROOT@)
|
|
|
|
if(NOT DEFINED _CMAKE_HIP_DEVICE_RUNTIME_TARGET)
|
|
set(message_on_found TRUE)
|
|
endif()
|
|
|
|
set(explicit_search_only FALSE)
|
|
set(rocm_root_dirs )
|
|
if(DEFINED CMAKE_HIP_COMPILER_TOOLKIT_ROOT)
|
|
set(rocm_root_dirs "${CMAKE_HIP_COMPILER_TOOLKIT_ROOT}")
|
|
set(explicit_search_only TRUE)
|
|
set(error_message_location "the variable CMAKE_HIP_COMPILER_TOOLKIT_ROOT [\"${CMAKE_HIP_COMPILER_TOOLKIT_ROOT}\"]")
|
|
elseif(DEFINED ENV{CMAKE_HIP_COMPILER_TOOLKIT_ROOT})
|
|
set(rocm_root_dirs "$ENV{CMAKE_HIP_COMPILER_TOOLKIT_ROOT}")
|
|
set(explicit_search_only TRUE)
|
|
set(error_message_location "CMAKE_HIP_COMPILER_TOOLKIT_ROOT")
|
|
set(error_message_location "the environment variable CMAKE_HIP_COMPILER_TOOLKIT_ROOT [\"$ENV{CMAKE_HIP_COMPILER_TOOLKIT_ROOT}\"]")
|
|
elseif(DEFINED _CMAKE_HIP_COMPILER_ROCM_ROOT)
|
|
set(rocm_root_dirs "${_CMAKE_HIP_COMPILER_ROCM_ROOT}")
|
|
set(explicit_search_only TRUE)
|
|
set(error_message_location "the associated hipconfig --rocmpath [\"${_CMAKE_HIP_COMPILER_ROCM_ROOT}\"]")
|
|
endif()
|
|
|
|
# Guess on where rocm is installed
|
|
if(NOT rocm_root_dirs AND (UNIX AND NOT APPLE))
|
|
set(platform_base "/opt/rocm-")
|
|
|
|
# Finad all default rocm installations
|
|
file(GLOB possible_paths "${platform_base}*")
|
|
|
|
set(versions)
|
|
foreach(p ${possible_paths})
|
|
# Extract version number from end of string
|
|
string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+$" p_version ${p})
|
|
if(IS_DIRECTORY ${p} AND p_version)
|
|
list(APPEND versions ${p_version})
|
|
endif()
|
|
endforeach()
|
|
|
|
# Sort numerically in descending order, so we try the newest versions first.
|
|
list(SORT versions COMPARE NATURAL ORDER DESCENDING)
|
|
|
|
# With a descending list of versions, populate possible paths to search.
|
|
set(rocm_root_dirs "/opt/rocm")
|
|
foreach(v IN LISTS versions)
|
|
list(APPEND rocm_root_dirs "${platform_base}${v}")
|
|
endforeach()
|
|
endif()
|
|
|
|
set(search_rel_path "/lib/cmake/hip-lang/")
|
|
list(TRANSFORM rocm_root_dirs APPEND "${search_rel_path}")
|
|
|
|
find_package(hip-lang
|
|
CONFIG
|
|
PATHS ${rocm_root_dirs}
|
|
QUIET
|
|
NO_DEFAULT_PATH
|
|
)
|
|
if(NOT DEFINED _CMAKE_HIP_DEVICE_RUNTIME_TARGET AND NOT explicit_search_only)
|
|
find_package(hip-lang CONFIG QUIET)
|
|
endif()
|
|
|
|
if(DEFINED _CMAKE_HIP_DEVICE_RUNTIME_TARGET)
|
|
set(CMAKE_HIP_RUNTIME_LIBRARIES_STATIC
|
|
${CMAKE_HIP_RUNTIME_LIBRARIES_STATIC}
|
|
${_CMAKE_HIP_DEVICE_RUNTIME_TARGET} PARENT_SCOPE)
|
|
set(CMAKE_HIP_RUNTIME_LIBRARIES_SHARED
|
|
${CMAKE_HIP_RUNTIME_LIBRARIES_SHARED}
|
|
${_CMAKE_HIP_DEVICE_RUNTIME_TARGET} PARENT_SCOPE)
|
|
endif()
|
|
|
|
if(DEFINED _CMAKE_HIP_DEVICE_RUNTIME_TARGET AND message_on_found)
|
|
message(STATUS "Found HIP runtime: ${hip-lang_DIR}")
|
|
elseif(NOT DEFINED _CMAKE_HIP_DEVICE_RUNTIME_TARGET)
|
|
if(explicit_search_only)
|
|
set(error_message "Failed to find the HIP runtime, Could not find hip-lang-config.cmake at the following location(s):\n")
|
|
foreach(p IN LISTS rocm_root_dirs)
|
|
string(APPEND error_message "\t${p}\n")
|
|
endforeach()
|
|
string(APPEND "which are computed from the location specified by ${error_message_location}. \
|
|
Please specify CMAKE_HIP_COMPILER_TOOLKIT_ROOT to the location of")
|
|
message(FATAL_ERROR "${error_message}")
|
|
else()
|
|
message(FATAL_ERROR
|
|
"Failed to find the HIP runtime, Could not find hip-lang-config.cmake.\
|
|
Try setting CMAKE_HIP_COMPILER_TOOLKIT_ROOT")
|
|
endif()
|
|
endif()
|
|
|
|
endfunction()
|