summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorRobert Maynard <robert.maynard@kitware.com>2020-09-02 18:53:41 (GMT)
committerZack Galbreath <zack.galbreath@kitware.com>2021-06-07 19:25:33 (GMT)
commit947dbed0aa502c70a9e165757450bd8409036980 (patch)
tree0a45b31986184368c7ad6df72d9f9186c7a24b4c /Modules
parentb50bfc89131e55685aa41146254b37d26049b4d5 (diff)
downloadCMake-947dbed0aa502c70a9e165757450bd8409036980.zip
CMake-947dbed0aa502c70a9e165757450bd8409036980.tar.gz
CMake-947dbed0aa502c70a9e165757450bd8409036980.tar.bz2
HIP: Automatically inject the `hip::device` runtime target
Any target that might need to link to hip code needs the `hip::device` target
Diffstat (limited to 'Modules')
-rw-r--r--Modules/CMakeHIPCompiler.cmake.in5
-rw-r--r--Modules/CMakeHIPInformation.cmake7
-rw-r--r--Modules/CMakeHIPRuntime.cmake.in99
-rw-r--r--Modules/CMakeTestHIPCompiler.cmake21
-rw-r--r--Modules/Compiler/Clang-HIP.cmake4
-rw-r--r--Modules/Compiler/ROCMClang-HIP.cmake4
6 files changed, 137 insertions, 3 deletions
diff --git a/Modules/CMakeHIPCompiler.cmake.in b/Modules/CMakeHIPCompiler.cmake.in
index eeb51b2..9a30a45 100644
--- a/Modules/CMakeHIPCompiler.cmake.in
+++ b/Modules/CMakeHIPCompiler.cmake.in
@@ -22,7 +22,7 @@ set(CMAKE_HIP_COMPILER_ENV_VAR "HIPCXX")
set(CMAKE_HIP_COMPILER_LOADED 1)
set(CMAKE_HIP_COMPILER_ID_RUN 1)
set(CMAKE_HIP_SOURCE_FILE_EXTENSIONS hip)
-set(CMAKE_HIP_LINKER_PREFERENCE 15)
+set(CMAKE_HIP_LINKER_PREFERENCE 90)
set(CMAKE_HIP_LINKER_PREFERENCE_PROPAGATES 1)
set(CMAKE_HIP_SIZEOF_DATA_PTR "@CMAKE_HIP_SIZEOF_DATA_PTR@")
@@ -48,8 +48,7 @@ set(CMAKE_HIP_IMPLICIT_LINK_LIBRARIES "@CMAKE_HIP_IMPLICIT_LINK_LIBRARIES@")
set(CMAKE_HIP_IMPLICIT_LINK_DIRECTORIES "@CMAKE_HIP_IMPLICIT_LINK_DIRECTORIES@")
set(CMAKE_HIP_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "@CMAKE_HIP_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES@")
-set(CMAKE_HIP_COMPILER_DEVICE_LIBRARY_ROOT_DIR "@CMAKE_HIP_COMPILER_DEVICE_LIBRARY_ROOT_DIR@")
-@_SET_CMAKE_HIP_DEVICE_LIBRARY_INCLUSION@
+set(CMAKE_HIP_RUNTIME_LIBRARY_DEFAULT "SHARED")
set(CMAKE_AR "@CMAKE_AR@")
set(CMAKE_HIP_COMPILER_AR "@CMAKE_HIP_COMPILER_AR@")
diff --git a/Modules/CMakeHIPInformation.cmake b/Modules/CMakeHIPInformation.cmake
index df1d98a..ec37e1c 100644
--- a/Modules/CMakeHIPInformation.cmake
+++ b/Modules/CMakeHIPInformation.cmake
@@ -130,3 +130,10 @@ if(NOT CMAKE_HIP_LINK_EXECUTABLE)
endif()
set(CMAKE_HIP_INFORMATION_LOADED 1)
+
+# Load the file and find the relevant HIP runtime.
+# This file will only exist after all compiler detection has finished
+include(${CMAKE_PLATFORM_INFO_DIR}/CMakeHIPRuntime.cmake OPTIONAL)
+if(COMMAND _CMAKE_FIND_HIP_RUNTIME)
+ _CMAKE_FIND_HIP_RUNTIME()
+endif()
diff --git a/Modules/CMakeHIPRuntime.cmake.in b/Modules/CMakeHIPRuntime.cmake.in
new file mode 100644
index 0000000..ade26bb
--- /dev/null
+++ b/Modules/CMakeHIPRuntime.cmake.in
@@ -0,0 +1,99 @@
+# 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()
diff --git a/Modules/CMakeTestHIPCompiler.cmake b/Modules/CMakeTestHIPCompiler.cmake
index da70f8d..d9fcc9d 100644
--- a/Modules/CMakeTestHIPCompiler.cmake
+++ b/Modules/CMakeTestHIPCompiler.cmake
@@ -78,6 +78,20 @@ unset(__CMAKE_HIP_FLAGS)
include(${CMAKE_ROOT}/Modules/CMakeDetermineCompileFeatures.cmake)
CMAKE_DETERMINE_COMPILE_FEATURES(HIP)
+
+# Setup the following:
+# Configure the new template file CMakeHipRuntime.cmake to
+# - ${CMAKE_PLATFORM_INFO_DIR}/
+# This file will do the actual find_package query. We than have
+# CMakeHIPInformation.cmake include `CMakeHipRuntime`
+# So it is included once system information has been finished
+#
+configure_file(
+ ${CMAKE_ROOT}/Modules/CMakeHIPRuntime.cmake.in
+ ${CMAKE_PLATFORM_INFO_DIR}/CMakeHIPRuntime.cmake
+ @ONLY
+)
+
# Re-configure to save learned information.
configure_file(
${CMAKE_ROOT}/Modules/CMakeHIPCompiler.cmake.in
@@ -96,3 +110,10 @@ endif()
set(CMAKE_TRY_COMPILE_TARGET_TYPE ${__CMAKE_SAVED_TRY_COMPILE_TARGET_TYPE})
unset(__CMAKE_SAVED_TRY_COMPILE_TARGET_TYPE)
unset(__CMAKE_HIP_COMPILER_OUTPUT)
+
+# Load the file and find the relevant HIP runtime.
+# This file will only exist after all compiler detection has finished
+include(${CMAKE_PLATFORM_INFO_DIR}/CMakeHIPRuntime.cmake)
+if(COMMAND _CMAKE_FIND_HIP_RUNTIME)
+ _CMAKE_FIND_HIP_RUNTIME()
+endif()
diff --git a/Modules/Compiler/Clang-HIP.cmake b/Modules/Compiler/Clang-HIP.cmake
index 6ac39de..1030a43 100644
--- a/Modules/Compiler/Clang-HIP.cmake
+++ b/Modules/Compiler/Clang-HIP.cmake
@@ -14,3 +14,7 @@ endif()
set(CMAKE_HIP_RUNTIME_LIBRARY_DEFAULT "SHARED")
set(CMAKE_HIP_RUNTIME_LIBRARY_LINK_OPTIONS_STATIC "")
set(CMAKE_HIP_RUNTIME_LIBRARY_LINK_OPTIONS_SHARED "")
+
+# Populated by CMakeHIPRuntime.cmake
+set(CMAKE_HIP_RUNTIME_LIBRARIES_STATIC "")
+set(CMAKE_HIP_RUNTIME_LIBRARIES_SHARED "")
diff --git a/Modules/Compiler/ROCMClang-HIP.cmake b/Modules/Compiler/ROCMClang-HIP.cmake
index 9e792b5..7af7699 100644
--- a/Modules/Compiler/ROCMClang-HIP.cmake
+++ b/Modules/Compiler/ROCMClang-HIP.cmake
@@ -42,4 +42,8 @@ set(CMAKE_HIP_RUNTIME_LIBRARY_DEFAULT "SHARED")
set(CMAKE_HIP_RUNTIME_LIBRARY_LINK_OPTIONS_STATIC "")
set(CMAKE_HIP_RUNTIME_LIBRARY_LINK_OPTIONS_SHARED "")
+# Populated by CMakeHIPRuntime.cmake
+set(CMAKE_HIP_RUNTIME_LIBRARIES_STATIC "")
+set(CMAKE_HIP_RUNTIME_LIBRARIES_SHARED "")
+
__compiler_check_default_language_standard(HIP 3.5 11)