| # 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() |