Add rocm_cmake dependencies
MODIFY
CMakeLists.txt
CMakeLists.txt
@@ -70,3 +70,24 @@ if(BUILD_TEST)
add_subdirectory(test)
add_subdirectory(testing)
endif()
+
+# Package
+set(CPACK_DEBIAN_PACKAGE_DEPENDS "hip_hcc (>= 1.5.18263)") # 1.5.18263 is HIP version in ROCm 1.8.2
+set(CPACK_RPM_PACKAGE_REQUIRES "hip_hcc >= 1.5.18263")
+if(NOT CPACK_PACKAGING_INSTALL_PREFIX)
+ set(CPACK_PACKAGING_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
+endif()
+
+set(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION "\${CPACK_PACKAGING_INSTALL_PREFIX}" "\${CPACK_PACKAGING_INSTALL_PREFIX}/include" )
+
+rocm_create_package(
+ NAME thrust
+ DESCRIPTION "Radeon Open Compute Thrust library"
+ MAINTAINER "Stream HPC Maintainers <maintainer@streamhpc.com>"
+)
+
+rocm_install_targets(
+ INCLUDE
+ ${CMAKE_SOURCE_DIR}/thrust/
+ PREFIX thrust
+)

MODIFY
cmake/Dependencies.cmake
cmake/Dependencies.cmake
@@ -81,3 +81,38 @@ if(BUILD_TEST)
)
find_package(GTest REQUIRED)
endif()
+
+# Find or download/install rocm-cmake project
+find_package(ROCM QUIET CONFIG PATHS /opt/rocm)
+if(NOT ROCM_FOUND)
+ set(rocm_cmake_tag "master" CACHE STRING "rocm-cmake tag to download")
+ file(
+ DOWNLOAD https://github.com/RadeonOpenCompute/rocm-cmake/archive/${rocm_cmake_tag}.zip
+ ${CMAKE_CURRENT_BINARY_DIR}/rocm-cmake-${rocm_cmake_tag}.zip
+ STATUS rocm_cmake_download_status LOG rocm_cmake_download_log
+ )
+ list(GET rocm_cmake_download_status 0 rocm_cmake_download_error_code)
+ if(rocm_cmake_download_error_code)
+ message(FATAL_ERROR "Error: downloading "
+ "https://github.com/RadeonOpenCompute/rocm-cmake/archive/${rocm_cmake_tag}.zip failed "
+ "error_code: ${rocm_cmake_download_error_code} "
+ "log: ${rocm_cmake_download_log} "
+ )
+ endif()
+
+ execute_process(
+ COMMAND ${CMAKE_COMMAND} -E tar xzf ${CMAKE_CURRENT_BINARY_DIR}/rocm-cmake-${rocm_cmake_tag}.zip
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ RESULT_VARIABLE rocm_cmake_unpack_error_code
+ )
+ if(rocm_cmake_unpack_error_code)
+ message(FATAL_ERROR "Error: unpacking ${CMAKE_CURRENT_BINARY_DIR}/rocm-cmake-${rocm_cmake_tag}.zip failed")
+ endif()
+ find_package(ROCM REQUIRED CONFIG PATHS ${CMAKE_CURRENT_BINARY_DIR}/rocm-cmake-${rocm_cmake_tag})
+endif()
+
+include(ROCMSetupVersion)
+include(ROCMCreatePackage)
+include(ROCMInstallTargets)
+include(ROCMPackageConfigHelpers)
+include(ROCMInstallSymlinks)

MODIFY
cmake/VerifyCompiler.cmake
cmake/VerifyCompiler.cmake
# Find HIP package
find_package(HIP REQUIRED)
-if(HIP_PLATFORM STREQUAL "nvcc")
- message(FATAL_ERROR "`nvcc` is not supported.")
-elseif(HIP_PLATFORM STREQUAL "hcc")
- if(NOT (CMAKE_CXX_COMPILER MATCHES ".*/hcc$"))
- message(FATAL_ERROR "On ROCm platform 'hcc' must be used as C++ compiler.")
+if(HIP_PLATFORM STREQUAL "hcc")
+ if(NOT (CMAKE_CXX_COMPILER MATCHES ".*/hcc$" OR CMAKE_CXX_COMPILER MATCHES ".*/hipcc$"))
+ message(FATAL_ERROR "On ROCm platform 'hcc' or 'clang' must be used as C++ compiler.")
else()
+ # Determine if CXX Compiler is hcc, hip-clang or other
+ execute_process(COMMAND ${CMAKE_CXX_COMPILER} "--version" OUTPUT_VARIABLE CXX_OUTPUT
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ ERROR_STRIP_TRAILING_WHITESPACE)
+ string(REGEX MATCH "[A-Za-z]* ?clang version" TMP_CXX_VERSION ${CXX_OUTPUT})
+ string(REGEX MATCH "[A-Za-z]+" CXX_VERSION_STRING ${TMP_CXX_VERSION})
+ if(CXX_VERSION_STRING MATCHES "HCC")
+ set(HIP_COMPILER "hcc" CACHE STRING "HIP Compiler")
+ elseif(CXX_VERSION_STRING MATCHES "clang")
+ set(HIP_COMPILER "clang" CACHE STRING "HIP Compiler")
+ else()
+ message(FATAL_ERROR "CXX Compiler version ${CXX_VERSION_STRING} unsupported.")
+ endif()
+ message(STATUS "HIP Compiler: " ${HIP_COMPILER})
+
# Workaround until hcc & hip cmake modules fixes symlink logic in their config files.
# (Thanks to rocBLAS devs for finding workaround for this problem.)
list(APPEND CMAKE_PREFIX_PATH /opt/rocm/hcc /opt/rocm/hip)
# Ignore hcc warning: argument unused during compilation: '-isystem /opt/rocm/hip/include'
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-command-line-argument")
+ if(HIP_COMPILER STREQUAL "hcc")
find_package(hcc REQUIRED CONFIG PATHS /opt/rocm)
+ else()
+ find_package(hcc QUIET CONFIG PATHS /opt/rocm)
+ endif()
find_package(hip REQUIRED CONFIG PATHS /opt/rocm)
endif()
else()
- message(FATAL_ERROR "HIP_PLATFORM must be 'hcc' (AMD ROCm platform).")
+ message(FATAL_ERROR "HIP_PLATFORM must be 'hcc' or 'clang' (AMD ROCm platform)")
endif()

Add rocm_cmake dependencies