From 38ab28e27cd7da59f4a241b09d3ac734c4f8b575 Mon Sep 17 00:00:00 2001 From: Yiyang Wu Date: Wed, 25 Jan 2023 11:14:27 +0800 Subject: dev-util/hip: Backport fixes for clang directories search Closes: https://bugs.gentoo.org/891013 Signed-off-by: Yiyang Wu Signed-off-by: Benda Xu --- ...0-hipcc-fails-to-parse-version-of-clang-i.patch | 70 +++++++++ ...8-LLVM-pkg-search-directly-using-find_dep.patch | 163 +++++++++++++++++++ ...DEV-355608-Remove-clang-include-path-2996.patch | 51 ++++++ ...8-Removed-relative-path-based-CLANG-inclu.patch | 173 +++++++++++++++++++++ dev-util/hip/files/hipvars-5.3.3.pm | 20 +++ dev-util/hip/hip-5.3.3-r2.ebuild | 17 +- 6 files changed, 483 insertions(+), 11 deletions(-) create mode 100644 dev-util/hip/files/0001-SWDEV-344620-hipcc-fails-to-parse-version-of-clang-i.patch create mode 100644 dev-util/hip/files/0001-SWDEV-352878-LLVM-pkg-search-directly-using-find_dep.patch create mode 100644 dev-util/hip/files/0002-SWDEV-355608-Remove-clang-include-path-2996.patch create mode 100644 dev-util/hip/files/0003-SWDEV-352878-Removed-relative-path-based-CLANG-inclu.patch create mode 100644 dev-util/hip/files/hipvars-5.3.3.pm diff --git a/dev-util/hip/files/0001-SWDEV-344620-hipcc-fails-to-parse-version-of-clang-i.patch b/dev-util/hip/files/0001-SWDEV-344620-hipcc-fails-to-parse-version-of-clang-i.patch new file mode 100644 index 000000000000..b9a1329e5931 --- /dev/null +++ b/dev-util/hip/files/0001-SWDEV-344620-hipcc-fails-to-parse-version-of-clang-i.patch @@ -0,0 +1,70 @@ +From 73430b62a5437d1ba6c36a1d812a1434d1ad9df7 Mon Sep 17 00:00:00 2001 +From: ROCm CI Service Account <66695075+rocm-ci@users.noreply.github.com> +Date: Tue, 20 Dec 2022 06:51:12 +0530 +Subject: [PATCH 1/3] SWDEV-344620 - hipcc fails to parse version of clang in + some cases (#3119) + +Change-Id: I46f716c82a7500b9a2bcaf5f9ff4ad8a8f982770 +Signed-off-by: Yiyang Wu +--- + bin/hipcc.pl | 22 +++++++--------------- + 1 file changed, 7 insertions(+), 15 deletions(-) + +diff --git a/bin/hipcc.pl b/bin/hipcc.pl +index 645ae62d..2a01dcc3 100755 +--- a/bin/hipcc.pl ++++ b/bin/hipcc.pl +@@ -144,7 +144,7 @@ if ($HIP_PLATFORM eq "amd") { + $execExtension = ""; + if($isWindows) { + $execExtension = ".exe"; +- } ++ } + $HIPCC="$HIP_CLANG_PATH/clang++" . $execExtension; + + # If $HIPCC clang++ is not compiled, use clang instead +@@ -157,13 +157,10 @@ if ($HIP_PLATFORM eq "amd") { + $HIPLDFLAGS .= " -fuse-ld=lld"; + $HIPLDFLAGS .= " --ld-path=$HIP_CLANG_PATH/lld-link.exe"; + } +- $HIP_CLANG_VERSION = `$HIPCC --version`; +- $HIP_CLANG_VERSION=~/.*clang version (\S+).*/; +- $HIP_CLANG_VERSION=$1; + +- # Figure out the target with which llvm is configured +- $HIP_CLANG_TARGET = `$HIPCC -print-target-triple`; +- $HIP_CLANG_TARGET = chomp($HIP_CLANG_TARGET); ++ # get Clang RT Builtin path ++ $HIP_CLANG_RT_LIB = `$HIPCC --print-runtime-dir`; ++ chomp($HIP_CLANG_RT_LIB); + + if (! defined $HIP_CLANG_INCLUDE_PATH) { + $HIP_CLANG_INCLUDE_PATH = abs_path("$HIP_CLANG_PATH/../lib/clang/$HIP_CLANG_VERSION/include"); +@@ -184,7 +181,7 @@ if ($HIP_PLATFORM eq "amd") { + print ("HIP_INCLUDE_PATH=$HIP_INCLUDE_PATH\n"); + print ("HIP_LIB_PATH=$HIP_LIB_PATH\n"); + print ("DEVICE_LIB_PATH=$DEVICE_LIB_PATH\n"); +- print ("HIP_CLANG_TARGET=$HIP_CLANG_TARGET\n"); ++ print ("HIP_CLANG_RT_LIB=$HIP_CLANG_RT_LIB\n"); + } + + if ($isWindows) { +@@ -715,13 +712,8 @@ if ($HIP_PLATFORM eq "amd") { + } else { + $toolArgs = ${toolArgs} . " -Wl,--enable-new-dtags -Wl,-rpath=$HIP_LIB_PATH:$ROCM_PATH/lib -lamdhip64 "; + } +- # To support __fp16 and _Float16, explicitly link with compiler-rt +- $HIP_CLANG_BUILTIN_LIB="$HIP_CLANG_PATH/../lib/clang/$HIP_CLANG_VERSION/lib/$HIP_CLANG_TARGET/libclang_rt.builtins.a"; +- if (-e $HIP_CLANG_BUILTIN_LIB) { +- $toolArgs .= " -L$HIP_CLANG_PATH/../lib/clang/$HIP_CLANG_VERSION/lib/$HIP_CLANG_TARGET -lclang_rt.builtins " +- } else { +- $toolArgs .= " -L$HIP_CLANG_PATH/../lib/clang/$HIP_CLANG_VERSION/lib/linux -lclang_rt.builtins-x86_64 " +- } ++ ++ $toolArgs .= " -L$HIP_CLANG_RT_LIB -lclang_rt.builtins-x86_64 " + } + } + +-- +2.38.1 + diff --git a/dev-util/hip/files/0001-SWDEV-352878-LLVM-pkg-search-directly-using-find_dep.patch b/dev-util/hip/files/0001-SWDEV-352878-LLVM-pkg-search-directly-using-find_dep.patch new file mode 100644 index 000000000000..9dbfe8a55395 --- /dev/null +++ b/dev-util/hip/files/0001-SWDEV-352878-LLVM-pkg-search-directly-using-find_dep.patch @@ -0,0 +1,163 @@ +From 6c12b045bc3c434dd13e74bf124ed54afec668c6 Mon Sep 17 00:00:00 2001 +From: AravindanC +Date: Fri, 26 Aug 2022 15:02:09 -0700 +Subject: [PATCH] SWDEV-352878 - LLVM pkg search directly using find_dep() for + CLANG Include path + +Change-Id: I355e39890757be07de8b9332deca159f35039dfd +Signed-off-by: Yiyang Wu +--- + hip-config.cmake.in | 108 ++++++++++++++++++++++++++------------------ + 1 file changed, 64 insertions(+), 44 deletions(-) + +diff --git a/hip-config.cmake.in b/hip-config.cmake.in +index 89d1224e..67d898d8 100755 +--- a/hip-config.cmake.in ++++ b/hip-config.cmake.in +@@ -147,41 +147,62 @@ if(HIP_COMPILER STREQUAL "clang") + if(NOT HIP_CXX_COMPILER) + set(HIP_CXX_COMPILER ${CMAKE_CXX_COMPILER}) + endif() +- if(HIP_CXX_COMPILER MATCHES ".*hipcc" OR HIP_CXX_COMPILER MATCHES ".*clang\\+\\+") +- execute_process(COMMAND ${HIP_CXX_COMPILER} --version ++ ++ # Use HIP_CXX_COMPILER option -print-resource-dir ++ # To fetch the clang include path ++ execute_process( ++ COMMAND ${HIP_CXX_COMPILER} -print-resource-dir ++ OUTPUT_VARIABLE HIP_CLANG_INCLUDE_PATH ++ OUTPUT_STRIP_TRAILING_WHITESPACE ++ RESULT_VARIABLE CLANG_INCLUDE_PATH_FETCH_EXIT_CODE) ++ ++ if( NOT "${CLANG_INCLUDE_PATH_FETCH_EXIT_CODE}" STREQUAL "0" ) ++ if(HIP_CXX_COMPILER MATCHES ".*hipcc" OR HIP_CXX_COMPILER MATCHES ".*clang\\+\\+") ++ # IF not successful in fetching HIP_CLANG_INCLUDE_PATH using ++ # HIP_CXX_COMPILER binary command options -print-resource-dir ++ # fallback to old method of getting include by finding HIP_CLANG_ROOT ++ # and from predefined relative path of HIP_CLANG_ROOT ++ execute_process(COMMAND ${HIP_CXX_COMPILER} --version + OUTPUT_STRIP_TRAILING_WHITESPACE + OUTPUT_VARIABLE HIP_CXX_COMPILER_VERSION_OUTPUT) +- # Capture the repo, branch and patch level details of the HIP CXX Compiler. +- # Ex. clang version 13.0.0 (https://github.com/ROCm-Developer-Tools/HIP main 12345 COMMIT_HASH) +- # HIP_CLANG_REPO: https://github.com/ROCm-Developer-Tools/HIP +- # HIP_CLANG_BRANCH: main +- # HIP_CLANG_PATCH_LEVEL: 12345 +- if(${HIP_CXX_COMPILER_VERSION_OUTPUT} MATCHES "clang version [0-9]+\\.[0-9]+\\.[0-9]+ \\(([^ \n]*) ([^ \n]*) ([^ \n]*)") +- set(HIP_CLANG_REPO ${CMAKE_MATCH_1}) +- set(HIP_CLANG_BRANCH ${CMAKE_MATCH_2}) +- set(HIP_CLANG_PATCH_LEVEL ${CMAKE_MATCH_3}) +- endif() +- endif() +- if(HIP_CXX_COMPILER MATCHES ".*hipcc") +- if(HIP_CXX_COMPILER_VERSION_OUTPUT MATCHES "InstalledDir:[ \t]*([^\n]*)") +- get_filename_component(HIP_CLANG_ROOT "${CMAKE_MATCH_1}" DIRECTORY) +- endif() +- elseif (HIP_CXX_COMPILER MATCHES ".*clang\\+\\+") +- get_filename_component(_HIP_CLANG_REAL_PATH "${HIP_CXX_COMPILER}" REALPATH) +- get_filename_component(_HIP_CLANG_BIN_PATH "${_HIP_CLANG_REAL_PATH}" DIRECTORY) +- get_filename_component(HIP_CLANG_ROOT "${_HIP_CLANG_BIN_PATH}" DIRECTORY) +- endif() +- file(GLOB HIP_CLANG_INCLUDE_SEARCH_PATHS ${HIP_CLANG_ROOT}/lib/clang/*/include) +- find_path(HIP_CLANG_INCLUDE_PATH stddef.h +- HINTS ++ # Capture the repo, branch and patch level details of the HIP CXX Compiler. ++ # Ex. clang version 13.0.0 (https://github.com/ROCm-Developer-Tools/HIP main 12345 COMMIT_HASH) ++ # HIP_CLANG_REPO: https://github.com/ROCm-Developer-Tools/HIP ++ # HIP_CLANG_BRANCH: main ++ # HIP_CLANG_PATCH_LEVEL: 12345 ++ if(${HIP_CXX_COMPILER_VERSION_OUTPUT} MATCHES "clang version [0-9]+\\.[0-9]+\\.[0-9]+ \\(([^ \n]*) ([^ \n]*) ([^ \n]*)") ++ set(HIP_CLANG_REPO ${CMAKE_MATCH_1}) ++ set(HIP_CLANG_BRANCH ${CMAKE_MATCH_2}) ++ set(HIP_CLANG_PATCH_LEVEL ${CMAKE_MATCH_3}) ++ endif() ++ if(HIP_CXX_COMPILER MATCHES ".*hipcc") ++ if(HIP_CXX_COMPILER_VERSION_OUTPUT MATCHES "InstalledDir:[ \t]*([^\n]*)") ++ get_filename_component(HIP_CLANG_ROOT "${CMAKE_MATCH_1}" DIRECTORY) ++ endif() ++ elseif (HIP_CXX_COMPILER MATCHES ".*clang\\+\\+") ++ get_filename_component(_HIP_CLANG_REAL_PATH "${HIP_CXX_COMPILER}" REALPATH) ++ get_filename_component(_HIP_CLANG_BIN_PATH "${_HIP_CLANG_REAL_PATH}" DIRECTORY) ++ get_filename_component(HIP_CLANG_ROOT "${_HIP_CLANG_BIN_PATH}" DIRECTORY) ++ endif() ++ ++ ++ file(GLOB HIP_CLANG_INCLUDE_SEARCH_PATHS ${HIP_CLANG_ROOT}/lib/clang/*/include) ++ find_path(HIP_CLANG_INCLUDE_PATH stddef.h ++ HINTS + ${HIP_CLANG_INCLUDE_SEARCH_PATHS} +- NO_DEFAULT_PATH) ++ NO_DEFAULT_PATH) ++ # Since INTERFACE_INCLUDE_DIRECTORIES need to set the parent directory ++ # of HIP_CLANG_INCLUDE_PATH incase using find_path() of stddefs.h ++ set(HIP_CLANG_INCLUDE_PATH "${HIP_CLANG_INCLUDE_PATH}/..") ++ endif() # HIP_CXX_COMPILER Check ++ endif() # CLANG_INCLUDE_PATH_FETCH_EXIT_CODE Check ++ + if(NOT WIN32) + find_dependency(AMDDeviceLibs) + endif() + set(AMDGPU_TARGETS "gfx900;gfx906;gfx908;gfx90a;gfx1030" CACHE STRING "AMD GPU targets to compile for") + set(GPU_TARGETS "${AMDGPU_TARGETS}" CACHE STRING "GPU targets to compile for") +-endif() ++endif() # HIP_COMPILER check + + if(NOT WIN32) + find_dependency(amd_comgr) +@@ -263,11 +284,11 @@ if(HIP_COMPILER STREQUAL "clang") + hip_add_interface_link_flags(hip::device --hip-link) + + set_property(TARGET hip::device APPEND PROPERTY +- INTERFACE_INCLUDE_DIRECTORIES "${HIP_CLANG_INCLUDE_PATH}/.." ++ INTERFACE_INCLUDE_DIRECTORIES "${HIP_CLANG_INCLUDE_PATH}" + ) + + set_property(TARGET hip::device APPEND PROPERTY +- INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${HIP_CLANG_INCLUDE_PATH}/.." ++ INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${HIP_CLANG_INCLUDE_PATH}" + ) + + foreach(GPU_TARGET ${GPU_TARGETS}) +@@ -291,25 +312,24 @@ if(HIP_COMPILER STREQUAL "clang") + endif() + endif() + +- file(GLOB HIP_CLANGRT_LIB_SEARCH_PATHS "${HIP_CLANG_ROOT}/lib/clang/*/lib/*") +- find_library(CLANGRT_BUILTINS +- NAMES +- clang_rt.builtins +- clang_rt.builtins-x86_64 +- PATHS +- ${HIP_CLANGRT_LIB_SEARCH_PATHS} +- ${HIP_CLANG_INCLUDE_PATH}/../lib/linux +- ${HIP_CLANG_INCLUDE_PATH}/../lib/windows +- NO_DEFAULT_PATH) ++ ++ # Use HIP_CXX option -print-libgcc-file-name --rtlib=compiler-rt ++ # To fetch the compiler rt library file name. ++ execute_process( ++ COMMAND ${HIP_CXX_COMPILER} -print-libgcc-file-name --rtlib=compiler-rt ++ OUTPUT_VARIABLE CLANGRT_BUILTINS ++ OUTPUT_STRIP_TRAILING_WHITESPACE ++ RESULT_VARIABLE CLANGRT_BUILTINS_FETCH_EXIT_CODE) + + # Add support for __fp16 and _Float16, explicitly link with compiler-rt +- if(NOT CLANGRT_BUILTINS) +- message(FATAL_ERROR "clangrt builtins lib not found") +- else() ++ if( "${CLANGRT_BUILTINS_FETCH_EXIT_CODE}" STREQUAL "0" ) ++ # CLANG_RT Builtins found Successfully Set interface link libraries property + set_property(TARGET hip::host APPEND PROPERTY INTERFACE_LINK_LIBRARIES "${CLANGRT_BUILTINS}") + set_property(TARGET hip::device APPEND PROPERTY INTERFACE_LINK_LIBRARIES "${CLANGRT_BUILTINS}") +- endif() +-endif() ++ else() ++ message(STATUS "clangrt builtins lib not found: ${CLANGRT_BUILTINS_FETCH_EXIT_CODE}") ++ endif() # CLANGRT_BUILTINS_FETCH_EXIT_CODE Check ++endif() # HIP_COMPILER Check + + set( hip_LIBRARIES hip::host hip::device) + set( hip_LIBRARY ${hip_LIBRARIES}) +-- +2.38.1 + diff --git a/dev-util/hip/files/0002-SWDEV-355608-Remove-clang-include-path-2996.patch b/dev-util/hip/files/0002-SWDEV-355608-Remove-clang-include-path-2996.patch new file mode 100644 index 000000000000..6d64ad8c9fd8 --- /dev/null +++ b/dev-util/hip/files/0002-SWDEV-355608-Remove-clang-include-path-2996.patch @@ -0,0 +1,51 @@ +From 7613e00fe0299d6584d3ee67e5d4010e7fc0866a Mon Sep 17 00:00:00 2001 +From: ROCm CI Service Account <66695075+rocm-ci@users.noreply.github.com> +Date: Fri, 14 Oct 2022 16:02:40 +0530 +Subject: [PATCH 2/3] SWDEV-355608 - Remove clang include path (#2996) + +Clang doesn't need to be told where to find the clang headers + +Change-Id: I175781731c43647676d91eedc8a915124f2479ab +Signed-off-by: Yiyang Wu +--- + bin/hipcc.pl | 11 ----------- + 1 file changed, 11 deletions(-) + +diff --git a/bin/hipcc.pl b/bin/hipcc.pl +index 2a01dcc3..7e82cad8 100755 +--- a/bin/hipcc.pl ++++ b/bin/hipcc.pl +@@ -162,9 +162,6 @@ if ($HIP_PLATFORM eq "amd") { + $HIP_CLANG_RT_LIB = `$HIPCC --print-runtime-dir`; + chomp($HIP_CLANG_RT_LIB); + +- if (! defined $HIP_CLANG_INCLUDE_PATH) { +- $HIP_CLANG_INCLUDE_PATH = abs_path("$HIP_CLANG_PATH/../lib/clang/$HIP_CLANG_VERSION/include"); +- } + if (! defined $HIP_INCLUDE_PATH) { + $HIP_INCLUDE_PATH = "$HIP_PATH/include"; + } +@@ -177,20 +174,12 @@ if ($HIP_PLATFORM eq "amd") { + print ("HIP_ROCCLR_HOME=$HIP_ROCCLR_HOME\n"); + } + print ("HIP_CLANG_PATH=$HIP_CLANG_PATH\n"); +- print ("HIP_CLANG_INCLUDE_PATH=$HIP_CLANG_INCLUDE_PATH\n"); + print ("HIP_INCLUDE_PATH=$HIP_INCLUDE_PATH\n"); + print ("HIP_LIB_PATH=$HIP_LIB_PATH\n"); + print ("DEVICE_LIB_PATH=$DEVICE_LIB_PATH\n"); + print ("HIP_CLANG_RT_LIB=$HIP_CLANG_RT_LIB\n"); + } + +- if ($isWindows) { +- $HIPCXXFLAGS .= " -std=c++14 -fms-extensions -fms-compatibility"; +- } else { +- $HIPCXXFLAGS .= " -std=c++11"; +- } +- $HIPCXXFLAGS .= " -isystem \"$HIP_CLANG_INCLUDE_PATH/..\""; +- $HIPCFLAGS .= " -isystem \"$HIP_CLANG_INCLUDE_PATH/..\""; + $HIPLDFLAGS .= " -L\"$HIP_LIB_PATH\""; + if ($isWindows) { + $HIPLDFLAGS .= " -lamdhip64"; +-- +2.38.1 + diff --git a/dev-util/hip/files/0003-SWDEV-352878-Removed-relative-path-based-CLANG-inclu.patch b/dev-util/hip/files/0003-SWDEV-352878-Removed-relative-path-based-CLANG-inclu.patch new file mode 100644 index 000000000000..f92cce4cf8d8 --- /dev/null +++ b/dev-util/hip/files/0003-SWDEV-352878-Removed-relative-path-based-CLANG-inclu.patch @@ -0,0 +1,173 @@ +From fddbcef9a5a45ab63d4805c53d1f8fcf5c30d095 Mon Sep 17 00:00:00 2001 +From: ROCm CI Service Account <66695075+rocm-ci@users.noreply.github.com> +Date: Fri, 6 Jan 2023 02:37:15 +0530 +Subject: [PATCH 3/3] SWDEV-352878 - Removed relative path based CLANG include, + CLANGRT dependencies (#3124) + +Change-Id: Ifdcd117679bff548a6351ba915a8272689e647de +Signed-off-by: Yiyang Wu +--- + cmake/FindHIP.cmake | 37 ++++++++++++++++++++++++++++- + hip-lang-config.cmake.in | 51 +++++++++++++++++++++------------------- + 2 files changed, 63 insertions(+), 25 deletions(-) + +diff --git a/cmake/FindHIP.cmake b/cmake/FindHIP.cmake +index 8b196dea..109c9f65 100644 +--- a/cmake/FindHIP.cmake ++++ b/cmake/FindHIP.cmake +@@ -48,6 +48,29 @@ mark_as_advanced(HIP_HOST_COMPILATION_CPP) + # FIND: HIP and associated helper binaries + ############################################################################### + ++if(NOT HIP_CXX_COMPILER) ++ set(HIP_CXX_COMPILER ${CMAKE_CXX_COMPILER}) ++endif() ++ ++# Approach: To find HIP_CLANG_PATH using HIP_CXX_COMPILER options ++# Using --version option of HIP_CXX_COMPILER get the Install Directory ++# This install directory is set as the HIP_CLANG_PATH. ++# IF not successful in getting the Install Directory using HIP_CXX_COMPILER ++# fallback to Old Method to find HIP_CLANG_PATH from ENV Vars, ROCMPATH, HIPPATH etc. ++execute_process(COMMAND ${HIP_CXX_COMPILER} --version ++ OUTPUT_STRIP_TRAILING_WHITESPACE ++ OUTPUT_VARIABLE HIP_CXX_COMPILER_VERSION_OUTPUT) ++if(HIP_CXX_COMPILER MATCHES ".*hipcc") ++ if(HIP_CXX_COMPILER_VERSION_OUTPUT MATCHES "InstalledDir:[ \t]*([^\n]*)") ++ get_filename_component(HIP_CLANG_INSTALL_DIR "${CMAKE_MATCH_1}" DIRECTORY) ++ endif() ++elseif (HIP_CXX_COMPILER MATCHES ".*clang\\+\\+") ++ get_filename_component(_HIP_CLANG_REAL_PATH "${HIP_CXX_COMPILER}" REALPATH) ++ get_filename_component(_HIP_CLANG_BIN_PATH "${_HIP_CLANG_REAL_PATH}" DIRECTORY) ++ get_filename_component(HIP_CLANG_INSTALL_DIR "${_HIP_CLANG_BIN_PATH}" DIRECTORY) ++endif() ++ ++ + get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_DIR}/../" REALPATH) + + # HIP is currently not supported for apple +@@ -230,6 +253,10 @@ if("${HIP_COMPILER}" STREQUAL "nvcc") + elseif("${HIP_COMPILER}" STREQUAL "clang") + #Set HIP_CLANG_PATH + if("x${HIP_CLANG_PATH}" STREQUAL "x") ++ # IF HIP_CLANG_INSTALL_DIR is Found ++ if( HIP_CLANG_INSTALL_DIR ) ++ set(HIP_CLANG_PATH ${HIP_CLANG_INSTALL_DIR}) ++ else() # IF HIP_CLANG_INSTALL_DIR is not found + if(DEFINED ENV{HIP_CLANG_PATH}) + set(HIP_CLANG_PATH $ENV{HIP_CLANG_PATH}) + elseif(DEFINED ENV{ROCM_PATH}) +@@ -252,7 +279,9 @@ elseif("${HIP_COMPILER}" STREQUAL "clang") + else() + message(FATAL_ERROR "Unable to find the clang compiler path. Set ROCM_PATH or HIP_PATH in env ") + endif() +- endif() ++ endif() # HIP_CLANG_INSTALL_DIR Check ++ endif() # Set HIP_CLANG_PATH ++ + #Number of parallel jobs by default is 1 + if(NOT DEFINED HIP_CLANG_NUM_PARALLEL_JOBS) + set(HIP_CLANG_NUM_PARALLEL_JOBS 1) +@@ -660,6 +689,10 @@ macro(HIP_ADD_EXECUTABLE hip_target) + endif() + if("${HIP_COMPILER}" STREQUAL "clang") + if("x${HIP_CLANG_PATH}" STREQUAL "x") ++ # IF HIP_CLANG_INSTALL_DIR is Found ++ if( HIP_CLANG_INSTALL_DIR ) ++ set(HIP_CLANG_PATH ${HIP_CLANG_INSTALL_DIR}) ++ else() # IF HIP_CLANG_INSTALL_DIR is not found + if(DEFINED ENV{HIP_CLANG_PATH}) + set(HIP_CLANG_PATH $ENV{HIP_CLANG_PATH}) + elseif(DEFINED ENV{ROCM_PATH}) +@@ -682,7 +715,9 @@ macro(HIP_ADD_EXECUTABLE hip_target) + else() + message(FATAL_ERROR "Unable to find the clang compiler path. Set ROCM_PATH or HIP_PATH in env") + endif() ++ endif() # HIP_CLANG_INSTALL_DIR Check + endif() ++ + set(CMAKE_HIP_LINK_EXECUTABLE "${HIP_HIPCC_CMAKE_LINKER_HELPER} ${HIP_CLANG_PATH} ${HIP_CLANG_PARALLEL_BUILD_LINK_OPTIONS} -o ") + else() + set(CMAKE_HIP_LINK_EXECUTABLE "${HIP_HIPCC_CMAKE_LINKER_HELPER} -o ") +diff --git a/hip-lang-config.cmake.in b/hip-lang-config.cmake.in +index 9250a68a..1cf4e40f 100644 +--- a/hip-lang-config.cmake.in ++++ b/hip-lang-config.cmake.in +@@ -70,15 +70,6 @@ get_filename_component(_DIR "${CMAKE_CURRENT_LIST_DIR}" REALPATH) + 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") +-find_path(HIP_CLANG_INCLUDE_PATH __clang_cuda_math.h +- HINTS ${HIP_CLANG_INCLUDE_SEARCH_PATHS} +- ${HIP_CLANG_INCLUDE_SEARCH_PATHS_REORG} +- NO_DEFAULT_PATH) +-get_filename_component(HIP_CLANG_INCLUDE_PATH "${HIP_CLANG_INCLUDE_PATH}" DIRECTORY) +- + #If HIP isnot installed under ROCm, need this to find HSA assuming HSA is under ROCm + if( DEFINED ENV{ROCM_PATH} ) + set(ROCM_PATH "$ENV{ROCM_PATH}") +@@ -96,18 +87,10 @@ if (NOT HSA_HEADER) + message (FATAL_ERROR "HSA header not found! ROCM_PATH environment not set") + 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/*") +-find_library(CLANGRT_BUILTINS +- NAMES +- clang_rt.builtins +- clang_rt.builtins-x86_64 +- PATHS +- ${HIP_CLANGRT_LIB_SEARCH_PATHS} +- ${HIP_CLANG_INCLUDE_PATH}/../lib/linux) ++ + set_target_properties(hip-lang::device PROPERTIES +- INTERFACE_INCLUDE_DIRECTORIES "$<$:${_IMPORT_PREFIX}/include;${HIP_CLANG_INCLUDE_PATH}>" +- INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "$<$:${_IMPORT_PREFIX}/include;${HIP_CLANG_INCLUDE_PATH}>" ++ INTERFACE_INCLUDE_DIRECTORIES "$<$:${_IMPORT_PREFIX}/include>" ++ INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "$<$:${_IMPORT_PREFIX}/include>" + ) + + set_target_properties(hip-lang::amdhip64 PROPERTIES +@@ -133,13 +116,33 @@ set_property(TARGET hip-lang::device APPEND PROPERTY + INTERFACE_LINK_OPTIONS "$<$:--hip-link>" + ) + ++# Approach: Check CLANGRT LIB support for CMAKE_HIP_COMPILER ++# Use CMAKE_HIP_COMPILER option -print-libgcc-file-name --rtlib=compiler-rt ++# Note: For Linux add additional option -unwindlib=libgcc also ++# To fetch the compiler rt library file name and confirm. ++# If unsuccessful in getting clangrt using this option then ++# FATAL_ERROR message send since compiler-rt linkage dependency is mandatory. ++# If successful then --rtlib=compiler-rt (and -unwindlib=libgcc for non windows) ++# added to Target's INTERFACE_LINK_LIBRARIES property ++if (NOT WIN32) ++ set(CLANGRT_LINUX_OPTION "-unwindlib=libgcc") ++endif() ++ ++execute_process( ++ COMMAND ${CMAKE_HIP_COMPILER} -print-libgcc-file-name --rtlib=compiler-rt ${CLANGRT_LINUX_OPTION} ++ OUTPUT_VARIABLE CLANGRT_BUILTINS ++ OUTPUT_STRIP_TRAILING_WHITESPACE ++ RESULT_VARIABLE CLANGRT_BUILTINS_FETCH_EXIT_CODE) ++ + # Add support for __fp16 and _Float16, explicitly link with compiler-rt +-if(NOT CLANGRT_BUILTINS) +- message(FATAL_ERROR "clangrt builtins lib not found") +-else() ++if( "${CLANGRT_BUILTINS_FETCH_EXIT_CODE}" STREQUAL "0" ) + set_property(TARGET hip-lang::device APPEND PROPERTY +- INTERFACE_LINK_LIBRARIES "$<$:${CLANGRT_BUILTINS}>" ++ INTERFACE_LINK_OPTIONS $<$:--rtlib=compiler-rt ${CLANGRT_LINUX_OPTION}> + ) ++else() ++ # FATAL_ERROR send if not successfull on compiler-rt linkage dependency ++ message(FATAL_ERROR ++ "${CMAKE_FIND_PACKAGE_NAME} Error:${CLANGRT_BUILTINS_FETCH_EXIT_CODE} - clangrt builtins lib could not be found.") + endif() + + # Approved by CMake to use this name. This is used so that HIP can +-- +2.38.1 + diff --git a/dev-util/hip/files/hipvars-5.3.3.pm b/dev-util/hip/files/hipvars-5.3.3.pm new file mode 100644 index 000000000000..fd1403661efb --- /dev/null +++ b/dev-util/hip/files/hipvars-5.3.3.pm @@ -0,0 +1,20 @@ +#!/usr/bin/perl -w +package hipvars; + +$HIP_BASE_VERSION_MAJOR = "@HIP_BASE_VERSION_MAJOR@"; +$HIP_BASE_VERSION_MINOR = "@HIP_BASE_VERSION_MINOR@"; + +$isWindows = 0; +$HIP_PATH='/usr'; +$ROCM_PATH='/usr'; +$CUDA_PATH='/opt/cuda'; +$HSA_PATH='/usr'; +$HIP_CLANG_PATH='@CLANG_PATH@'; +$HIP_ROCCLR_HOME=$HIP_PATH; +$HIP_PLATFORM='amd'; +$HIP_COMPILER = "clang"; +$HIP_RUNTIME = "rocclr"; +$HIP_VERSION_MAJOR = $HIP_BASE_VERSION_MAJOR; +$HIP_VERSION_MINOR = $HIP_BASE_VERSION_MINOR; +$HIP_VERSION_PATCH = "@HIP_VERSION_PATCH@"; +$HIP_VERSION="$HIP_VERSION_MAJOR.$HIP_VERSION_MINOR.$HIP_VERSION_PATCH"; diff --git a/dev-util/hip/hip-5.3.3-r2.ebuild b/dev-util/hip/hip-5.3.3-r2.ebuild index 23778ce69cb9..d52892ff9c6f 100644 --- a/dev-util/hip/hip-5.3.3-r2.ebuild +++ b/dev-util/hip/hip-5.3.3-r2.ebuild @@ -47,6 +47,7 @@ PATCHES=( "${FILESDIR}/${PN}-5.0.1-hip_vector_types.patch" "${FILESDIR}/${PN}-5.0.2-set-build-id.patch" "${FILESDIR}/${PN}-5.3.3-remove-cmake-doxygen-commands.patch" + "${FILESDIR}/0001-SWDEV-352878-LLVM-pkg-search-directly-using-find_dep.patch" ) python_check_deps() { @@ -74,7 +75,6 @@ src_prepare() { # correctly find HIP_CLANG_INCLUDE_PATH using cmake local LLVM_PREFIX="$(get_llvm_prefix "${LLVM_MAX_SLOT}")" - local CLANG_RESOURCE_DIR=$("${LLVM_PREFIX}/bin/clang" -print-resource-dir) sed -e "/set(HIP_CLANG_ROOT/s:\"\${ROCM_PATH}/llvm\":${LLVM_PREFIX}:" -i hip-config.cmake.in || die # correct libs and cmake install dir @@ -84,18 +84,18 @@ src_prepare() { -e "/CPACK_RESOURCE_FILE_LICENSE/d" -i packaging/CMakeLists.txt || die pushd ${HIP_S} || die - eapply "${FILESDIR}/${PN}-5.1.3-clang-include-path.patch" eapply "${FILESDIR}/${PN}-5.1.3-rocm-path.patch" eapply "${FILESDIR}/${PN}-5.1.3-fno-stack-protector.patch" + eapply "${FILESDIR}/0001-SWDEV-344620-hipcc-fails-to-parse-version-of-clang-i.patch" + eapply "${FILESDIR}/0002-SWDEV-355608-Remove-clang-include-path-2996.patch" + eapply "${FILESDIR}/0003-SWDEV-352878-Removed-relative-path-based-CLANG-inclu.patch" # Setting HSA_PATH to "/usr" results in setting "-isystem /usr/include" # which makes "stdlib.h" not found when using "#include_next" in header files; sed -e "/FLAGS .= \" -isystem \$HSA_PATH/d" \ -e "/HIP.*FLAGS.*isystem.*HIP_INCLUDE_PATH/d" \ -e "s:\$ENV{'DEVICE_LIB_PATH'}:'${EPREFIX}/usr/lib/amdgcn/bitcode':" \ -e "s:\$ENV{'HIP_LIB_PATH'}:'${EPREFIX}/usr/$(get_libdir)':" \ - -e "/rpath/s,--rpath=[^ ]*,," \ - -e "s,\$HIP_CLANG_PATH/../lib/clang/\$HIP_CLANG_VERSION/,${CLANG_RESOURCE_DIR}/,g" \ - -i bin/hipcc.pl || die + -e "/rpath/s,--rpath=[^ ]*,," -i bin/hipcc.pl || die # change --hip-device-lib-path to "/usr/lib/amdgcn/bitcode", must align with "dev-libs/rocm-device-libs" sed -e "s:\${AMD_DEVICE_LIBS_PREFIX}/lib:${EPREFIX}/usr/lib/amdgcn/bitcode:" \ @@ -105,15 +105,10 @@ src_prepare() { hprefixify $(grep -rl --exclude-dir=build/ --exclude="hip-config.cmake.in" "/usr" "${S}") hprefixify $(grep -rl --exclude-dir=build/ --exclude="hipcc.pl" "/usr" "${HIP_S}") - cp "$(prefixify_ro "${FILESDIR}"/hipvars-5.1.3.pm)" bin/hipvars.pm || die "failed to replace hipvars.pm" + cp "$(prefixify_ro "${FILESDIR}"/hipvars-5.3.3.pm)" bin/hipvars.pm || die "failed to replace hipvars.pm" sed -e "s,@HIP_BASE_VERSION_MAJOR@,$(ver_cut 1)," -e "s,@HIP_BASE_VERSION_MINOR@,$(ver_cut 2)," \ -e "s,@HIP_VERSION_PATCH@,$(ver_cut 3)," \ - -e "s,@CLANG_INCLUDE_PATH@,${CLANG_RESOURCE_DIR}/include," \ -e "s,@CLANG_PATH@,${LLVM_PREFIX}/bin," -i bin/hipvars.pm || die - - sed -e "/HIP_CLANG_INCLUDE_SEARCH_PATHS/s,\${_IMPORT_PREFIX}.*/include,${CLANG_RESOURCE_DIR}/include," -i hip-lang-config.cmake.in || die - popd || die - sed -e "/HIP_CLANG_INCLUDE_SEARCH_PATHS/s,\${HIP_CLANG_ROOT}.*/include,${CLANG_RESOURCE_DIR}/include," -i hip-config.cmake.in || die } src_configure() { -- cgit v1.2.3-65-gdbad