summaryrefslogtreecommitdiff
path: root/sys-devel/llvm-roc/files/llvm-roc-4.3.0-hip-location.patch
blob: 1fe93a33db362bcbc1fc3fc0f1725896f2f136bd (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
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
replace hardcoded hip finder with Gentoo paths.

It is not necessary to check HIP runtime each time.

Author: Benda Xu <heroxbd@gentoo.org>
Author: Yiyang Wu <xgreenlandforwyy@gmail.com>

--- orig/clang/lib/Driver/ToolChains/AMDGPU.cpp
+++ llvm-project-rocm-4.3.0/clang/lib/Driver/ToolChains/AMDGPU.cpp
@@ -165,133 +165,8 @@ bool RocmInstallationDetector::parseHIPV
 /// cached and populated only once.
 const SmallVectorImpl<RocmInstallationDetector::Candidate> &
 RocmInstallationDetector::getInstallationPathCandidates() {
-
-  // Return the cached candidate list if it has already been populated.
-  if (!ROCmSearchDirs.empty())
-    return ROCmSearchDirs;
-
-  auto DoPrintROCmSearchDirs = [&]() {
-    if (PrintROCmSearchDirs)
-      for (auto Cand : ROCmSearchDirs) {
-        llvm::errs() << "ROCm installation search path";
-        if (Cand.isSPACK())
-          llvm::errs() << " (Spack " << Cand.SPACKReleaseStr << ")";
-        llvm::errs() << ": " << Cand.Path << '\n';
-      }
-  };
-
-  // For candidate specified by --rocm-path we do not do strict check, i.e.,
-  // checking existence of HIP version file and device library files.
-  if (!RocmPathArg.empty()) {
-    ROCmSearchDirs.emplace_back(RocmPathArg.str());
-    DoPrintROCmSearchDirs();
-    return ROCmSearchDirs;
-  } else if (const char *RocmPathEnv = ::getenv("ROCM_PATH")) {
-    if (!StringRef(RocmPathEnv).empty()) {
-      ROCmSearchDirs.emplace_back(RocmPathEnv);
-      DoPrintROCmSearchDirs();
-      return ROCmSearchDirs;
-    }
-  }
-
-  // Try to find relative to the compiler binary.
-  const char *InstallDir = D.getInstalledDir();
-
-  // Check both a normal Unix prefix position of the clang binary, as well as
-  // the Windows-esque layout the ROCm packages use with the host architecture
-  // subdirectory of bin.
-  auto DeduceROCmPath = [](StringRef ClangPath) {
-    // Strip off directory (usually bin)
-    StringRef ParentDir = llvm::sys::path::parent_path(ClangPath);
-    StringRef ParentName = llvm::sys::path::filename(ParentDir);
-
-    // Some builds use bin/{host arch}, so go up again.
-    if (ParentName == "bin") {
-      ParentDir = llvm::sys::path::parent_path(ParentDir);
-      ParentName = llvm::sys::path::filename(ParentDir);
-    }
-
-    // Detect ROCm packages built with SPACK.
-    // clang is installed at
-    // <rocm_root>/llvm-amdgpu-<rocm_release_string>-<hash>/bin directory.
-    // We only consider the parent directory of llvm-amdgpu package as ROCm
-    // installation candidate for SPACK.
-    if (ParentName.startswith("llvm-amdgpu-")) {
-      auto SPACKPostfix =
-          ParentName.drop_front(strlen("llvm-amdgpu-")).split('-');
-      auto SPACKReleaseStr = SPACKPostfix.first;
-      if (!SPACKReleaseStr.empty()) {
-        ParentDir = llvm::sys::path::parent_path(ParentDir);
-        return Candidate(ParentDir.str(), /*StrictChecking=*/true,
-                         SPACKReleaseStr);
-      }
-    }
-
-    // Some versions of the rocm llvm package install to /opt/rocm/llvm/bin
-    // Some versions of the aomp package install to /opt/rocm/aomp/bin
-    if (ParentName == "llvm" || ParentName.startswith("aomp"))
-      ParentDir = llvm::sys::path::parent_path(ParentDir);
-
-    return Candidate(ParentDir.str(), /*StrictChecking=*/true);
-  };
-
-  // Deduce ROCm path by the path used to invoke clang. Do not resolve symbolic
-  // link of clang itself.
-  ROCmSearchDirs.emplace_back(DeduceROCmPath(InstallDir));
-
-  // Deduce ROCm path by the real path of the invoked clang, resolving symbolic
-  // link of clang itself.
-  llvm::SmallString<256> RealClangPath;
-  llvm::sys::fs::real_path(D.getClangProgramPath(), RealClangPath);
-  auto ParentPath = llvm::sys::path::parent_path(RealClangPath);
-  if (ParentPath != InstallDir)
-    ROCmSearchDirs.emplace_back(DeduceROCmPath(ParentPath));
-
-  // Device library may be installed in clang resource directory.
-  ROCmSearchDirs.emplace_back(D.ResourceDir,
-                              /*StrictChecking=*/true);
-
-  ROCmSearchDirs.emplace_back(D.SysRoot + "/opt/rocm",
-                              /*StrictChecking=*/true);
-
-  // Find the latest /opt/rocm-{release} directory.
-  std::error_code EC;
-  std::string LatestROCm;
-  llvm::VersionTuple LatestVer;
-  // Get ROCm version from ROCm directory name.
-  auto GetROCmVersion = [](StringRef DirName) {
-    llvm::VersionTuple V;
-    std::string VerStr = DirName.drop_front(strlen("rocm-")).str();
-    // The ROCm directory name follows the format of
-    // rocm-{major}.{minor}.{subMinor}[-{build}]
-    std::replace(VerStr.begin(), VerStr.end(), '-', '.');
-    V.tryParse(VerStr);
-    return V;
-  };
-  for (llvm::vfs::directory_iterator
-           File = D.getVFS().dir_begin(D.SysRoot + "/opt", EC),
-           FileEnd;
-       File != FileEnd && !EC; File.increment(EC)) {
-    llvm::StringRef FileName = llvm::sys::path::filename(File->path());
-    if (!FileName.startswith("rocm-"))
-      continue;
-    if (LatestROCm.empty()) {
-      LatestROCm = FileName.str();
-      LatestVer = GetROCmVersion(LatestROCm);
-      continue;
-    }
-    auto Ver = GetROCmVersion(FileName);
-    if (LatestVer < Ver) {
-      LatestROCm = FileName.str();
-      LatestVer = Ver;
-    }
-  }
-  if (!LatestROCm.empty())
-    ROCmSearchDirs.emplace_back(D.SysRoot + "/opt/" + LatestROCm,
-                                /*StrictChecking=*/true);
-
-  DoPrintROCmSearchDirs();
-  return ROCmSearchDirs;
+	ROCmSearchDirs.emplace_back(D.SysRoot + "/usr", /*StrictChecking=*/true);
+	return ROCmSearchDirs;
 }
 
 RocmInstallationDetector::RocmInstallationDetector(
@@ -423,42 +298,7 @@ void RocmInstallationDetector::detectDev
 }
 
 void RocmInstallationDetector::detectHIPRuntime() {
-  SmallVector<Candidate, 4> HIPSearchDirs;
-  if (!HIPPathArg.empty())
-    HIPSearchDirs.emplace_back(HIPPathArg.str(), /*StrictChecking=*/true);
-  else
-    HIPSearchDirs.append(getInstallationPathCandidates());
-  auto &FS = D.getVFS();
-
-  for (const auto &Candidate : HIPSearchDirs) {
-    InstallPath = Candidate.Path;
-    if (InstallPath.empty() || !FS.exists(InstallPath))
-      continue;
-    // HIP runtime built by SPACK is installed to
-    // <rocm_root>/hip-<rocm_release_string>-<hash> directory.
-    auto SPACKPath = findSPACKPackage(Candidate, "hip");
-    InstallPath = SPACKPath.empty() ? InstallPath : SPACKPath;
-
-    BinPath = InstallPath;
-    llvm::sys::path::append(BinPath, "bin");
-    IncludePath = InstallPath;
-    llvm::sys::path::append(IncludePath, "include");
-    LibPath = InstallPath;
-    llvm::sys::path::append(LibPath, "lib");
-
-    llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> VersionFile =
-        FS.getBufferForFile(BinPath + "/.hipVersion");
-    if (!VersionFile && Candidate.StrictChecking)
-      continue;
-
-    if (HIPVersionArg.empty() && VersionFile)
-      if (parseHIPVersionFile((*VersionFile)->getBuffer()))
-        continue;
-
-    HasHIPRuntime = true;
-    return;
-  }
-  HasHIPRuntime = false;
+  HasHIPRuntime = true;
 }
 
 void RocmInstallationDetector::print(raw_ostream &OS) const {