diff --git a/CMakeLists.txt b/CMakeLists.txt index 74a0584a6a92a7c8684d09038b01170d7f3acedd..49fbbad45078e443a39d44e1ba6ba6c1747684e3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -427,10 +427,16 @@ if(NOT CHAMELEON_SIMULATION) # CHAMELEON depends on HIP/HIPBLAS #---------------------------------- if (CHAMELEON_USE_HIP) + if (CHAMELEON_USE_HIP_ROC) - find_package(HIP REQUIRED) - find_package(hipblas REQUIRED) + # should define targets: hip::host, hip::device + find_package(hip REQUIRED CONFIG) + message(STATUS "hip target found") + + # should define targets: roc::hipblas + find_package(hipblas REQUIRED CONFIG) + message(STATUS "hipblas target found") elseif(CHAMELEON_USE_HIP_CUDA) @@ -466,56 +472,49 @@ if(NOT CHAMELEON_SIMULATION) if(CHAMELEON_HIPBLAS_PATH) list(APPEND HIPBLAS_INCLUDE_DIRS "${CHAMELEON_HIPBLAS_PATH}/include") list(APPEND HIPBLAS_LIBRARIES "${CHAMELEON_HIPBLAS_PATH}/lib/libhipblas.so") + message(STATUS "HIPBLAS_INCLUDE_DIRS: ${HIP_INCLUDE_DIRS}") + message(STATUS "HIPBLAS_LIBRARIES: ${HIPBLAS_LIBRARIES}") else() message(FATAL_ERROR "Please set CHAMELEON_HIPBLAS_PATH to your HIPBLAS installation.") endif() - endif() - if (HIP_FOUND) - message("-- ${Blue}Add definition CHAMELEON_USE_HIP" - " - Activate HIP in Chameleon${ColourReset}") # create imported target because not provided with old cmake - add_library(HIP::HIP INTERFACE IMPORTED) - add_library(HIP::HIPBLAS INTERFACE IMPORTED) - - if (CHAMELEON_USE_HIP_CUDA) - target_compile_definitions(HIP::HIP INTERFACE "__HIP_PLATFORM_NVIDIA__") - set(HIP_INCLUDE_DIRS "${HIP_INCLUDE_DIRS};${CUDA_INCLUDE_DIRS}") - set(HIP_LIBRARIES "${HIP_LIBRARIES};${CUDA_LIBRARIES}") - endif() + add_library(hip::hip INTERFACE IMPORTED) + add_library(roc::hipblas INTERFACE IMPORTED) + target_compile_definitions(hip::hip INTERFACE "__HIP_PLATFORM_NVIDIA__") + set(HIP_INCLUDE_DIRS "${HIP_INCLUDE_DIRS};${CUDA_INCLUDE_DIRS}") + set(HIP_LIBRARIES "${HIP_LIBRARIES};${CUDA_LIBRARIES}") if (HIP_INCLUDE_DIRS) - set_target_properties(HIP::HIP PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${HIP_INCLUDE_DIRS}") + set_target_properties(hip::hip PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${HIP_INCLUDE_DIRS}") if (HIPBLAS_INCLUDE_DIRS) - set_target_properties(HIP::HIPBLAS PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${HIPBLAS_INCLUDE_DIRS}") + set_target_properties(roc::hipblas PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${HIPBLAS_INCLUDE_DIRS}") else() - message(WARNING "CHAMELEON_USE_HIP requires" + message(WARNING "CHAMELEON_USE_HIP_CUDA requires" "\n HIPBLAS_INCLUDE_DIRS to be found. Be sure you have" "\n hipblas headers with your distribution of HIP.") endif() else() - message(WARNING "CHAMELEON_USE_HIP requires" + message(WARNING "CHAMELEON_USE_HIP_CUDA requires" "\n HIP_INCLUDE_DIRS to be found. Be sure you have" "\n hip headers with your distribution of HIP.") endif() if (HIP_LIBRARIES) - set_target_properties(HIP::HIP PROPERTIES INTERFACE_LINK_LIBRARIES "${HIP_LIBRARIES}") + set_target_properties(hip::hip PROPERTIES INTERFACE_LINK_LIBRARIES "${HIP_LIBRARIES}") if (HIPBLAS_LIBRARIES) - set_target_properties(HIP::HIPBLAS PROPERTIES INTERFACE_LINK_LIBRARIES "${HIPBLAS_LIBRARIES}") - target_link_libraries(HIP::HIPBLAS INTERFACE HIP::HIP) - message("-- ${Blue}Add definition CHAMELEON_USE_HIPBLAS" - " - Use GPU kernels from hipblas${ColourReset}") + set_target_properties(roc::hipblas PROPERTIES INTERFACE_LINK_LIBRARIES "${HIPBLAS_LIBRARIES}") + target_link_libraries(roc::hipblas INTERFACE hip::hip) else() - message(FATAL_ERROR "CHAMELEON_USE_HIP requires" + message(FATAL_ERROR "CHAMELEON_USE_HIP_CUDA requires" "\n HIPBLAS_LIBRARIES to be found. Be sure you have" "\n libhipblas with your distribution of HIP.") endif() else() - message(FATAL_ERROR "CHAMELEON_USE_HIP requires" + message(FATAL_ERROR "CHAMELEON_USE_HIP_CUDA requires" "\n HIP_LIBRARIES to be found. Be sure you have" "\n libamdhip64 with your distribution of ROCm.") endif() - if (CHAMELEON_USE_HIP_CUDA AND NOT CUDA_LIBRARIES) + if (NOT CUDA_LIBRARIES) message(FATAL_ERROR "CHAMELEON_USE_HIP_CUDA requires" "\n CUDA_LIBRARIES to be found. Be sure you have" "\n libcuda with your distribution of CUDA.") @@ -531,17 +530,13 @@ if(NOT CHAMELEON_SIMULATION) message("-- HIPBLAS include path: ${HIPBLAS_INCLUDE_DIRS}") message("-- HIPBLAS libraries: ${HIPBLAS_LIBRARIES}") - morse_export_imported_target(HIP::HIP hip chameleon) - morse_export_imported_target(HIP::HIPBLAS hipblas chameleon) - if (CHAMELEON_USE_HIP_ROC) - morse_export_imported_target(roc::hipblas rochipblas chameleon) - morse_export_imported_target(hip::host hiphost chameleon) - morse_export_imported_target(hip::device hipdevice chameleon) - morse_export_imported_target(hip::amdhip64 hipamdhip64 chameleon) - endif() - else(HIP_FOUND) - message(FATAL_ERROR "CHAMELEON_USE_HIP requires HIP to be found") - endif (HIP_FOUND) + morse_export_imported_target(hip::hip hip chameleon) + morse_export_imported_target(roc::hipblas hipblas chameleon) + + endif() + + message("-- ${Blue}Add definition CHAMELEON_USE_HIP" + " - Activate HIP in Chameleon${ColourReset}") endif(CHAMELEON_USE_HIP) @@ -801,10 +796,19 @@ set(BIN_INSTALL_DIR "bin/" CACHE STRING "where to install executables relative t set(INC_INSTALL_DIR "include/" CACHE STRING "where to install headers relative to prefix" ) set(LIB_INSTALL_DIR "lib/" CACHE STRING "where to install libraries relative to prefix" ) +if (CMAKE_PREFIX_PATH) + list(APPEND PREFIX_PATH ${CMAKE_PREFIX_PATH}) +endif() +if (DEFINED ENV{CMAKE_PREFIX_PATH}) + set(ENV_PREFIX_PATH $ENV{CMAKE_PREFIX_PATH}) + string(REGEX REPLACE ":" ";" ENV_PREFIX_PATH "${ENV_PREFIX_PATH}" ) + list(APPEND PREFIX_PATH ${ENV_PREFIX_PATH}) +endif() + configure_package_config_file(cmake_modules/CHAMELEONConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/CHAMELEONConfig.cmake INSTALL_DESTINATION ${LIB_INSTALL_DIR}/cmake/chameleon - PATH_VARS BIN_INSTALL_DIR INC_INSTALL_DIR LIB_INSTALL_DIR) + PATH_VARS BIN_INSTALL_DIR INC_INSTALL_DIR LIB_INSTALL_DIR PREFIX_PATH) write_basic_package_version_file(CHAMELEONConfigVersion.cmake VERSION ${CHAMELEON_VERSION} COMPATIBILITY AnyNewerVersion) diff --git a/cmake_modules/CHAMELEONConfig.cmake.in b/cmake_modules/CHAMELEONConfig.cmake.in index 2346b326cbf320c2eb6ca3d556ff330b32448e8d..6633cdb444a73f19f447030d0e7f8b994bee84b0 100644 --- a/cmake_modules/CHAMELEONConfig.cmake.in +++ b/cmake_modules/CHAMELEONConfig.cmake.in @@ -9,6 +9,9 @@ set_and_check(CHAMELEON_LIB_DIR "@PACKAGE_LIB_INSTALL_DIR@") check_required_components(CHAMELEON) +# propagate the CMAKE_PREFIX_PATH informations used during chameleon installation to give paths to dependencies +list(APPEND CMAKE_PREFIX_PATH "@PACKAGE_PREFIX_PATH@") + # dependencies of CHAMELEON include("${CMAKE_CURRENT_LIST_DIR}/mTargets.cmake") if (EXISTS "${CMAKE_CURRENT_LIST_DIR}/threadsTargets.cmake") @@ -38,13 +41,13 @@ if (@CHAMELEON_USE_CUDA@ AND NOT @CHAMELEON_SIMULATION@) include("${CMAKE_CURRENT_LIST_DIR}/cublasTargets.cmake") endif() if (@CHAMELEON_USE_HIP@ AND NOT @CHAMELEON_SIMULATION@) - include("${CMAKE_CURRENT_LIST_DIR}/hipTargets.cmake") - include("${CMAKE_CURRENT_LIST_DIR}/hipblasTargets.cmake") if (@CHAMELEON_USE_HIP_ROC@) - include("${CMAKE_CURRENT_LIST_DIR}/rochipblasTargets.cmake") - include("${CMAKE_CURRENT_LIST_DIR}/hiphostTargets.cmake") - include("${CMAKE_CURRENT_LIST_DIR}/hipdeviceTargets.cmake") - include("${CMAKE_CURRENT_LIST_DIR}/hipamdhip64Targets.cmake") + include(CMakeFindDependencyMacro) + find_dependency(hip REQUIRED) + find_dependency(hipblas REQUIRED) + else () + include("${CMAKE_CURRENT_LIST_DIR}/hipTargets.cmake") + include("${CMAKE_CURRENT_LIST_DIR}/hipblasTargets.cmake") endif() endif() diff --git a/compute/CMakeLists.txt b/compute/CMakeLists.txt index 2f78de677afc0afad61272c62f279a6fe42736dc..5626c253c38ebd7d6b2e9357f565174879be2ba9 100644 --- a/compute/CMakeLists.txt +++ b/compute/CMakeLists.txt @@ -375,7 +375,7 @@ endif() if (CHAMELEON_USE_HIP) if (NOT CHAMELEON_SIMULATION) target_link_libraries(chameleon PUBLIC gpuhipblas) - target_link_libraries(chameleon PUBLIC HIP::HIPBLAS) + target_link_libraries(chameleon PUBLIC roc::hipblas) endif() endif() target_link_libraries(chameleon PUBLIC MORSE::M) diff --git a/gpuhipblas/compute/CMakeLists.txt b/gpuhipblas/compute/CMakeLists.txt index c4a2e7ee649f798f251d5197708df61b2abf9025..71703097a6b0727894a6bc958db3e4619515fe75 100644 --- a/gpuhipblas/compute/CMakeLists.txt +++ b/gpuhipblas/compute/CMakeLists.txt @@ -71,7 +71,7 @@ target_include_directories(gpuhipblas PUBLIC set_property(TARGET gpuhipblas PROPERTY INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib") target_link_libraries(gpuhipblas PRIVATE coreblas) -target_link_libraries(gpuhipblas PUBLIC HIP::HIPBLAS) +target_link_libraries(gpuhipblas PUBLIC roc::hipblas) target_link_libraries(gpuhipblas PUBLIC MORSE::M) # export target coreblas diff --git a/runtime/starpu/CMakeLists.txt b/runtime/starpu/CMakeLists.txt index 2fe6b9666dc551c69f5090a0ab52743962442eeb..4fe2a9e765e1bd62b8f6b85df32ddf7630beccd3 100644 --- a/runtime/starpu/CMakeLists.txt +++ b/runtime/starpu/CMakeLists.txt @@ -405,7 +405,7 @@ if (NOT CHAMELEON_SIMULATION) target_link_libraries(chameleon_starpu PUBLIC CUDA::CUBLAS) endif() if (CHAMELEON_USE_HIP) - target_link_libraries(chameleon_starpu PUBLIC HIP::HIPBLAS) + target_link_libraries(chameleon_starpu PUBLIC roc::hipblas) endif() endif()