summaryrefslogtreecommitdiff
blob: 9dbfe8a553959b5be8e28b4d179fc23cf436a14d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
From 6c12b045bc3c434dd13e74bf124ed54afec668c6 Mon Sep 17 00:00:00 2001
From: AravindanC <aravindan.cheruvally@amd.com>
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 <xgreenlandforwyy@gmail.com>
---
 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