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