# Copyright (c) Advanced Micro Devices, Inc., or its affiliates. # # SPDX-License-Identifier: MIT @PACKAGE_INIT@ include(CheckCXXCompilerFlag) include(CMakeFindDependencyMacro OPTIONAL RESULT_VARIABLE _CMakeFindDependencyMacro_FOUND) if (NOT _CMakeFindDependencyMacro_FOUND) macro(find_dependency dep) if (NOT ${dep}_FOUND) set(cmake_fd_version) if (${ARGC} GREATER 1) set(cmake_fd_version ${ARGV1}) endif() set(cmake_fd_exact_arg) if(${CMAKE_FIND_PACKAGE_NAME}_FIND_VERSION_EXACT) set(cmake_fd_exact_arg EXACT) endif() set(cmake_fd_quiet_arg) if(${CMAKE_FIND_PACKAGE_NAME}_FIND_QUIETLY) set(cmake_fd_quiet_arg QUIET) endif() set(cmake_fd_required_arg) if(${CMAKE_FIND_PACKAGE_NAME}_FIND_REQUIRED) set(cmake_fd_required_arg REQUIRED) endif() find_package(${dep} ${cmake_fd_version} ${cmake_fd_exact_arg} ${cmake_fd_quiet_arg} ${cmake_fd_required_arg} ) string(TOUPPER ${dep} cmake_dep_upper) if (NOT ${dep}_FOUND AND NOT ${cmake_dep_upper}_FOUND) set(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE "${CMAKE_FIND_PACKAGE_NAME} could not be found because dependency ${dep} could not be found.") set(${CMAKE_FIND_PACKAGE_NAME}_FOUND False) return() endif() set(cmake_fd_version) set(cmake_fd_required_arg) set(cmake_fd_quiet_arg) set(cmake_fd_exact_arg) endif() endmacro() endif() set(_HIP_SHELL "SHELL:") if(CMAKE_VERSION VERSION_LESS 3.12) set(_HIP_SHELL "") endif() function(hip_add_interface_compile_flags TARGET) set_property(TARGET ${TARGET} APPEND PROPERTY INTERFACE_COMPILE_OPTIONS "$<$:${_HIP_SHELL}${ARGN}>" ) endfunction() function(hip_add_interface_link_flags TARGET) if(CMAKE_VERSION VERSION_LESS 3.20) set_property(TARGET ${TARGET} APPEND PROPERTY INTERFACE_LINK_LIBRARIES "${ARGN}" ) else() set_property(TARGET ${TARGET} APPEND PROPERTY INTERFACE_LINK_LIBRARIES "$<$:${ARGN}>" ) endif() endfunction() set(HIP_PACKAGE_PREFIX_DIR ${PACKAGE_PREFIX_DIR}) set_and_check( hip_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@" ) set_and_check( hip_INCLUDE_DIRS "${hip_INCLUDE_DIR}" ) set_and_check( hip_LIB_INSTALL_DIR "@PACKAGE_LIB_INSTALL_DIR@" ) set_and_check( hip_BIN_INSTALL_DIR "@PACKAGE_BIN_INSTALL_DIR@" ) if("@HIP_INSTALLS_HIPCC@") if (WIN32) set_and_check(hip_HIPCC_EXECUTABLE "${hip_BIN_INSTALL_DIR}/hipcc.exe") set_and_check(hip_HIPCONFIG_EXECUTABLE "${hip_BIN_INSTALL_DIR}/hipconfig.exe") else() set_and_check(hip_HIPCC_EXECUTABLE "${hip_BIN_INSTALL_DIR}/hipcc") set_and_check(hip_HIPCONFIG_EXECUTABLE "${hip_BIN_INSTALL_DIR}/hipconfig") endif() else() # Fallback: find hipcc relative to this config (e.g. when /opt/rocm/bin did not exist at build time). # hip-config.cmake is in /lib/cmake/hip/, so bin is ../../bin # hip-config.cmake is in /lib/cmake/hip/, so bin is at /bin set(_hip_prefix "${HIP_PACKAGE_PREFIX_DIR}") find_program(hip_HIPCC_EXECUTABLE hipcc PATHS "${_hip_prefix}/bin" NO_DEFAULT_PATH) if(hip_HIPCC_EXECUTABLE) message(STATUS "HIP: Using hipcc from relative path: ${hip_HIPCC_EXECUTABLE}") endif() find_program(hip_HIPCONFIG_EXECUTABLE hipconfig PATHS "${_hip_prefix}/bin" NO_DEFAULT_PATH) unset(_hip_prefix) unset(_hip_config_dir) endif() if(NOT DEFINED HIP_PLATFORM) if(NOT DEFINED ENV{HIP_PLATFORM}) # Try using hip_HIPCONFIG_EXECUTABLE first, if it is available. if(DEFINED hip_HIPCONFIG_EXECUTABLE AND NOT hip_HIPCONFIG_EXECUTABLE STREQUAL "") execute_process( COMMAND ${hip_HIPCONFIG_EXECUTABLE} --platform OUTPUT_VARIABLE HIP_PLATFORM OUTPUT_STRIP_TRAILING_WHITESPACE RESULT_VARIABLE _hipconfig_result ERROR_VARIABLE _hipconfig_error ) if(_hipconfig_result EQUAL 0 AND NOT HIP_PLATFORM STREQUAL "") message(STATUS "HIP_PLATFORM using hip_HIPCONFIG_EXECUTABLE: ${HIP_PLATFORM}") else() message(WARNING "Failed to detect HIP_PLATFORM using hip_HIPCONFIG_EXECUTABLE (${hip_HIPCONFIG_EXECUTABLE}): ${_hipconfig_error}") unset(HIP_PLATFORM) endif() endif() # Fallback to finding a hipconfig executable on PATH if needed. if(NOT DEFINED HIP_PLATFORM OR HIP_PLATFORM STREQUAL "") find_program(HIPCONFIG_EXEC hipconfig) execute_process( COMMAND ${HIPCONFIG_EXEC} --platform OUTPUT_VARIABLE HIP_PLATFORM OUTPUT_STRIP_TRAILING_WHITESPACE RESULT_VARIABLE _hipconfig_fallback_result ERROR_VARIABLE _hipconfig_fallback_error ) if(_hipconfig_fallback_result EQUAL 0 AND NOT HIP_PLATFORM STREQUAL "") message(STATUS "HIP_PLATFORM using HIPCONFIG_EXEC: ${HIP_PLATFORM}") else() message(FATAL_ERROR "Failed to detect HIP_PLATFORM using HIPCONFIG_EXEC (${HIPCONFIG_EXEC}): ${_hipconfig_fallback_error}") endif() endif() else() set(HIP_PLATFORM $ENV{HIP_PLATFORM} CACHE STRING "HIP Platform") endif() endif() if(HIP_PLATFORM STREQUAL "amd") set(HIP_RUNTIME "rocclr") set(HIP_COMPILER "clang") include( "${hip_LIB_INSTALL_DIR}/cmake/hip/hip-config-amd.cmake" ) elseif(HIP_PLATFORM STREQUAL "nvidia") set(HIP_RUNTIME "cuda") set(HIP_COMPILER "nvcc") include( "${hip_LIB_INSTALL_DIR}/cmake/hip/hip-config-nvidia.cmake" ) else() message(FATAL_ERROR "Unexpected HIP_PLATFORM: ${HIP_PLATFORM}") endif() set( hip_LIBRARIES hip::host hip::device) set( hip_LIBRARY ${hip_LIBRARIES}) set(HIP_INCLUDE_DIR ${hip_INCLUDE_DIR}) set(HIP_INCLUDE_DIRS ${hip_INCLUDE_DIRS}) set(HIP_LIB_INSTALL_DIR ${hip_LIB_INSTALL_DIR}) set(HIP_BIN_INSTALL_DIR ${hip_BIN_INSTALL_DIR}) set(HIP_LIBRARIES ${hip_LIBRARIES}) set(HIP_LIBRARY ${hip_LIBRARY}) set(HIP_HIPCC_EXECUTABLE ${hip_HIPCC_EXECUTABLE}) set(HIP_HIPCONFIG_EXECUTABLE ${hip_HIPCONFIG_EXECUTABLE})