diff options
Diffstat (limited to 'sys-devel/llvm-roc/files/llvm-roc-4.3.0-hip-location.patch')
-rw-r--r-- | sys-devel/llvm-roc/files/llvm-roc-4.3.0-hip-location.patch | 198 |
1 files changed, 0 insertions, 198 deletions
diff --git a/sys-devel/llvm-roc/files/llvm-roc-4.3.0-hip-location.patch b/sys-devel/llvm-roc/files/llvm-roc-4.3.0-hip-location.patch deleted file mode 100644 index f3d22b996915..000000000000 --- a/sys-devel/llvm-roc/files/llvm-roc-4.3.0-hip-location.patch +++ /dev/null @@ -1,198 +0,0 @@ -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( -@@ -397,7 +272,7 @@ void RocmInstallationDetector::detectDev - // - ${ROCM_ROOT}/lib/bitcode/* - // so try to detect these layouts. - static constexpr std::array<const char *, 2> SubDirsList[] = { -- {"amdgcn", "bitcode"}, -+ {"lib/amdgcn", "bitcode"}, - {"lib", ""}, - {"lib", "bitcode"}, - }; -@@ -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 { |