From e3d748a92bec86330d1ab86a1836bbf4386cff06 Mon Sep 17 00:00:00 2001 From: Robin Voetter Date: Sun, 11 Sep 2022 22:51:09 +0200 Subject: [PATCH] hip: fix hip cmake config Update paths in cmake config files provided by HIP and hipamd to the proper location in the Nix store. Previously these files were trying to find headers in a way that assumes the typical ROCm installation (where everything is in /opt/rocm). This resulted in a bunch of errors when trying to compile HIP projects that are configured with cmake, like include paths that were set incorrectly or header paths that were not found. --- pkgs/development/compilers/hip/default.nix | 17 +++++++ .../compilers/hip/hip-config-paths.patch | 36 ++++++++++++++ .../compilers/hip/hipamd-config-paths.patch | 47 +++++++++++++++++++ 3 files changed, 100 insertions(+) create mode 100644 pkgs/development/compilers/hip/hip-config-paths.patch create mode 100644 pkgs/development/compilers/hip/hipamd-config-paths.patch diff --git a/pkgs/development/compilers/hip/default.nix b/pkgs/development/compilers/hip/default.nix index a459d30dbc95..329d523ddc23 100644 --- a/pkgs/development/compilers/hip/default.nix +++ b/pkgs/development/compilers/hip/default.nix @@ -21,6 +21,7 @@ , rocm-runtime , rocm-thunk , rocminfo +, substituteAll , writeScript , writeText }: @@ -37,6 +38,14 @@ let hash = "sha256-QaN666Rku2Tkio2Gm5/3RD8D5JgmCZLe0Yun1fGxa8U="; }; + patches = [ + (substituteAll { + src = ./hip-config-paths.patch; + inherit llvm; + rocm_runtime = rocm-runtime; + }) + ]; + # - fix bash paths # - fix path to rocm_agent_enumerator # - fix hcc path @@ -121,6 +130,14 @@ stdenv.mkDerivation rec { rocminfo ]; + patches = [ + (substituteAll { + src = ./hipamd-config-paths.patch; + inherit llvm hip; + rocm_runtime = rocm-runtime; + }) + ]; + preConfigure = '' export HIP_CLANG_PATH=${clang}/bin export DEVICE_LIB_PATH=${rocm-device-libs}/lib diff --git a/pkgs/development/compilers/hip/hip-config-paths.patch b/pkgs/development/compilers/hip/hip-config-paths.patch new file mode 100644 index 000000000000..71e804c74482 --- /dev/null +++ b/pkgs/development/compilers/hip/hip-config-paths.patch @@ -0,0 +1,36 @@ +diff --git a/hip-lang-config.cmake.in b/hip-lang-config.cmake.in +index 1a72643a..7f35031f 100644 +--- a/hip-lang-config.cmake.in ++++ b/hip-lang-config.cmake.in +@@ -72,8 +72,8 @@ get_filename_component(_IMPORT_PREFIX "${_DIR}/../../../" REALPATH) + + + #need _IMPORT_PREFIX to be set #FILE_REORG_BACKWARD_COMPATIBILITY +-file(GLOB HIP_CLANG_INCLUDE_SEARCH_PATHS "${_IMPORT_PREFIX}/../llvm/lib/clang/*/include") +-file(GLOB HIP_CLANG_INCLUDE_SEARCH_PATHS_REORG "${_IMPORT_PREFIX}/llvm/lib/clang/*/include") ++file(GLOB HIP_CLANG_INCLUDE_SEARCH_PATHS "@llvm@/lib/clang/*/include") ++file(GLOB HIP_CLANG_INCLUDE_SEARCH_PATHS_REORG "@llvm@/lib/clang/*/include") + find_path(HIP_CLANG_INCLUDE_PATH __clang_cuda_math.h + HINTS ${HIP_CLANG_INCLUDE_SEARCH_PATHS} + ${HIP_CLANG_INCLUDE_SEARCH_PATHS_REORG} +@@ -88,10 +88,7 @@ endif() + #if HSA is not under ROCm then provide CMAKE_PREFIX_PATH= + find_path(HSA_HEADER hsa/hsa.h + PATHS +- "${_IMPORT_PREFIX}/../include" #FILE_REORG_BACKWARD_COMPATIBILITY +- "${_IMPORT_PREFIX}/include" +- "${ROCM_PATH}/include" +- /opt/rocm/include ++ "@rocm_runtime@/include" + ) + + if (HSA_HEADER-NOTFOUND) +@@ -99,7 +96,7 @@ if (HSA_HEADER-NOTFOUND) + endif() + + get_filename_component(HIP_COMPILER_INSTALL_PATH ${CMAKE_HIP_COMPILER} DIRECTORY) +-file(GLOB HIP_CLANGRT_LIB_SEARCH_PATHS "${HIP_COMPILER_INSTALL_PATH}/../lib/clang/*/lib/*") ++file(GLOB HIP_CLANGRT_LIB_SEARCH_PATHS "@llvm@/lib/clang/*/lib/*") + find_library(CLANGRT_BUILTINS + NAMES + clang_rt.builtins diff --git a/pkgs/development/compilers/hip/hipamd-config-paths.patch b/pkgs/development/compilers/hip/hipamd-config-paths.patch new file mode 100644 index 000000000000..605b73f75c7a --- /dev/null +++ b/pkgs/development/compilers/hip/hipamd-config-paths.patch @@ -0,0 +1,47 @@ +diff --git a/hip-config.cmake.in b/hip-config.cmake.in +index 89d1224e..120b68c6 100755 +--- a/hip-config.cmake.in ++++ b/hip-config.cmake.in +@@ -142,7 +142,7 @@ if(HIP_COMPILER STREQUAL "clang") + file(TO_CMAKE_PATH "${HIP_PATH}/../lc" HIP_CLANG_ROOT) + endif() + else() +- set(HIP_CLANG_ROOT "${ROCM_PATH}/llvm") ++ set(HIP_CLANG_ROOT "@llvm@") + endif() + if(NOT HIP_CXX_COMPILER) + set(HIP_CXX_COMPILER ${CMAKE_CXX_COMPILER}) +@@ -206,10 +206,7 @@ if(NOT WIN32) + #if HSA is not under ROCm then provide CMAKE_PREFIX_PATH= + find_path(HSA_HEADER hsa/hsa.h + PATHS +- "${_IMPORT_PREFIX}/include" +- #FILE_REORG_BACKWARD_COMPATIBILITY ${_IMPORT_PREFIX}/../include is for Backward compatibility +- "${_IMPORT_PREFIX}/../include" +- ${ROCM_PATH}/include ++ "@rocm_runtime@/include" + ) + + if (NOT HSA_HEADER) +@@ -224,8 +221,8 @@ set_target_properties(hip::host PROPERTIES + + if(HIP_RUNTIME MATCHES "rocclr") + set_target_properties(hip::amdhip64 PROPERTIES +- INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include;${HSA_HEADER}" +- INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include;${HSA_HEADER}" ++ INTERFACE_INCLUDE_DIRECTORIES "@hip@/include;${HSA_HEADER}" ++ INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "@hip@/include;${HSA_HEADER}" + ) + + get_target_property(amdhip64_type hip::amdhip64 TYPE) +@@ -233,8 +230,8 @@ if(HIP_RUNTIME MATCHES "rocclr") + + if(NOT WIN32) + set_target_properties(hip::device PROPERTIES +- INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" +- INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" ++ INTERFACE_INCLUDE_DIRECTORIES "@hip@/include" ++ INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "@hip@/include" + ) + endif() + endif()