Merge remote-tracking branch 'origin/15' into 16

This commit is contained in:
Sylvestre Ledru 2023-03-11 10:28:09 +01:00
commit 25f81273d2
10 changed files with 268 additions and 94 deletions

30
debian/changelog vendored
View File

@ -84,14 +84,42 @@ llvm-toolchain-snapshot (1:16~++20220731055325+02b3a358926e-1~exp1) experimental
-- Sylvestre Ledru <sylvestre@debian.org> Wed, 27 Jul 2022 21:36:27 +0200
llvm-toolchain-15 (1:15.0.7-2) UNRELEASED; urgency=medium
llvm-toolchain-15 (1:15.0.7-2) unstable; urgency=medium
<<<<<<<
* Adjust some lintian overrides
* Disable flang on s390x. Seems that it is breaking
[ Gianfranco Costamagna ]
* Update print lldb python patch, following what was done
in automake for newer python
=======
[ Sylvestre Ledru ]
* Yeah, we would like to have this version in bookworm
(Closes: #1032316)
* Adjust some lintian overrides
* Disable flang on s390x. Seems that it is breaking
[ Gianfranco Costamagna ]
* Update print lldb python patch, following what was done
in automake for newer python
[ Samuel Thibault ]
* Fix disabling amdgpu on non-Linux.
[ John Paul Adrian Glaubitz ]
* Don't run chrpath for libclang on powerpc and powerpcspe
[ Faidon Liambotis ]
* Update the wasm-sysroot-usr.diff patch to restore functionality that was
accidentally dropped when the patch was forward-ported from 14 to 15. This
resolves an issue in which clang++ builds would fail if libc++-15-dev was
installed alongside libc++-15-dev-wasm32. (Closes: #1029010, #1032317)
[ Cordell Bloor ]
* Backport support for HIP in /usr and add Debian paths
for rocm-device-libs to search list (Closes: #1031808)
>>>>>>>
-- Sylvestre Ledru <sylvestre@debian.org> Sun, 15 Jan 2023 10:54:41 +0100

View File

@ -0,0 +1,53 @@
From efa9394d72968e0c84c2c9283476c70807f60b80 Mon Sep 17 00:00:00 2001
From: Cordell Bloor <cgmb@slerp.xyz>
Date: Wed, 8 Mar 2023 02:57:51 -0700
Subject: [PATCH] Search for the bitcode libraries in a multiarch directory
The Debian path for the rocm-device-libs is
/usr/lib/$(DEB_HOST_MULTIARCH)/amdgcn/bitcode
Forwarded: not-needed
---
clang/lib/Driver/ToolChains/AMDGPU.cpp | 19 +++++++++++++------
1 file changed, 13 insertions(+), 6 deletions(-)
Index: llvm-toolchain-15-15.0.7/clang/lib/Driver/ToolChains/AMDGPU.cpp
===================================================================
--- llvm-toolchain-15-15.0.7.orig/clang/lib/Driver/ToolChains/AMDGPU.cpp
+++ llvm-toolchain-15-15.0.7/clang/lib/Driver/ToolChains/AMDGPU.cpp
@@ -14,6 +14,7 @@
#include "clang/Driver/DriverDiagnostic.h"
#include "clang/Driver/InputInfo.h"
#include "clang/Driver/Options.h"
+#include "llvm/ADT/Triple.h"
#include "llvm/Option/ArgList.h"
#include "llvm/Support/Error.h"
#include "llvm/Support/FileUtilities.h"
@@ -423,16 +424,21 @@ void RocmInstallationDetector::detectDev
// The possible structures are:
// - ${ROCM_ROOT}/amdgcn/bitcode/*
// - ${ROCM_ROOT}/lib/*
+ // - ${ROCM_ROOT}/lib/<multiarch>/amdgcn/bitcode/*
// - ${ROCM_ROOT}/lib/bitcode/*
- // so try to detect these layouts.
- static constexpr std::array<const char *, 2> SubDirsList[] = {
- {"amdgcn", "bitcode"},
- {"lib", ""},
- {"lib", "bitcode"},
+ // so try to detect these layouts. Note that bitcode is associated with the
+ // compiler that built it (not the target architecture).
+ llvm::Triple HostTriple(llvm::sys::getProcessTriple());
+ std::string Multiarch = Twine(HostTriple.getArchName() + "-linux-gnu").str();
+ static const std::array<std::string, 4> SubDirsList[] = {
+ {"amdgcn", "bitcode", "", ""},
+ {"lib", "", "", ""},
+ {"lib", Multiarch, "amdgcn", "bitcode"},
+ {"lib", "bitcode", "", ""},
};
// Make a path by appending sub-directories to InstallPath.
- auto MakePath = [&](const llvm::ArrayRef<const char *> &SubDirs) {
+ auto MakePath = [&](const llvm::ArrayRef<std::string> &SubDirs) {
auto Path = CandidatePath;
for (auto SubDir : SubDirs)
llvm::sys::path::append(Path, SubDir);

20
debian/patches/amdgpu/nonlinux.patch vendored Normal file
View File

@ -0,0 +1,20 @@
https://reviews.llvm.org/D143017
[Libomptarget] Fix disabling amdgpu on non-Linux.
Previously, on non-Linux, amdgpu would get enabled whatever the CPU
architecture.
Index: llvm-toolchain-15-15.0.7/openmp/libomptarget/plugins/amdgpu/CMakeLists.txt
===================================================================
--- llvm-toolchain-15-15.0.7.orig/openmp/libomptarget/plugins/amdgpu/CMakeLists.txt
+++ llvm-toolchain-15-15.0.7/openmp/libomptarget/plugins/amdgpu/CMakeLists.txt
@@ -27,7 +27,7 @@ if(NOT LIBOMPTARGET_DEP_LIBELF_FOUND)
return()
endif()
-if(NOT CMAKE_SYSTEM_PROCESSOR MATCHES "(x86_64)|(ppc64le)|(aarch64)$" AND CMAKE_SYSTEM_NAME MATCHES "Linux")
+if(NOT (CMAKE_SYSTEM_PROCESSOR MATCHES "(x86_64)|(ppc64le)|(aarch64)$" AND CMAKE_SYSTEM_NAME MATCHES "Linux"))
libomptarget_say("Not building AMDGPU plugin: only support AMDGPU in Linux x86_64, ppc64le, or aarch64 hosts")
return()
endif()

View File

@ -0,0 +1,122 @@
From 082593ff7aff68060bd66dccfa43493d07d9c255 Mon Sep 17 00:00:00 2001
From: "Yaxun (Sam) Liu" <yaxun.liu@amd.com>
Date: Tue, 11 Oct 2022 18:53:59 -0400
Subject: [PATCH] [HIP] Detect HIP for Debian/Fedora
HIP is installed at /usr or /usr/local on Debin/Fedora,
and the version file is at {root}/share/hip/version.
Reviewed by: Artem Belevich
Differential Revision: https://reviews.llvm.org/D135796
---
clang/lib/Driver/ToolChains/AMDGPU.cpp | 42 ++++++++++++++++++++------
clang/lib/Driver/ToolChains/ROCm.h | 1 +
clang/test/Driver/hip-version.hip | 8 +++++
3 files changed, 41 insertions(+), 10 deletions(-)
Index: llvm-toolchain-15-15.0.7/clang/lib/Driver/ToolChains/AMDGPU.cpp
===================================================================
--- llvm-toolchain-15-15.0.7.orig/clang/lib/Driver/ToolChains/AMDGPU.cpp
+++ llvm-toolchain-15-15.0.7/clang/lib/Driver/ToolChains/AMDGPU.cpp
@@ -10,12 +10,14 @@
#include "CommonArgs.h"
#include "clang/Basic/TargetID.h"
#include "clang/Driver/Compilation.h"
+#include "clang/Driver/Distro.h"
#include "clang/Driver/DriverDiagnostic.h"
#include "clang/Driver/InputInfo.h"
#include "clang/Driver/Options.h"
#include "llvm/Option/ArgList.h"
#include "llvm/Support/Error.h"
#include "llvm/Support/FileUtilities.h"
+#include "llvm/Support/Host.h"
#include "llvm/Support/LineIterator.h"
#include "llvm/Support/Path.h"
#include "llvm/Support/VirtualFileSystem.h"
@@ -306,6 +308,14 @@ RocmInstallationDetector::getInstallatio
ROCmSearchDirs.emplace_back(D.SysRoot + "/opt/" + LatestROCm,
/*StrictChecking=*/true);
+ Distro Dist(D.getVFS(), llvm::Triple(llvm::sys::getProcessTriple()));
+ if (Dist.IsDebian() || Dist.IsRedhat()) {
+ ROCmSearchDirs.emplace_back(D.SysRoot + "/usr/local",
+ /*StrictChecking=*/true);
+ ROCmSearchDirs.emplace_back(D.SysRoot + "/usr",
+ /*StrictChecking=*/true);
+ }
+
DoPrintROCmSearchDirs();
return ROCmSearchDirs;
}
@@ -461,18 +471,30 @@ void RocmInstallationDetector::detectHIP
llvm::sys::path::append(IncludePath, "include");
LibPath = InstallPath;
llvm::sys::path::append(LibPath, "lib");
+ SharePath = InstallPath;
+ llvm::sys::path::append(SharePath, "share");
- 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()))
+ // If HIP version file can be found and parsed, use HIP version from there.
+ for (const auto &VersionFilePath :
+ {std::string(SharePath) + "/hip/version",
+ std::string(BinPath) + "/.hipVersion"}) {
+ llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> VersionFile =
+ FS.getBufferForFile(VersionFilePath);
+ if (!VersionFile)
continue;
+ if (HIPVersionArg.empty() && VersionFile)
+ if (parseHIPVersionFile((*VersionFile)->getBuffer()))
+ continue;
- HasHIPRuntime = true;
- return;
+ HasHIPRuntime = true;
+ return;
+ }
+ // Otherwise, if -rocm-path is specified (no strict checking), use the
+ // default HIP version or specified by --hip-version.
+ if (!Candidate.StrictChecking) {
+ HasHIPRuntime = true;
+ return;
+ }
}
HasHIPRuntime = false;
}
Index: llvm-toolchain-15-15.0.7/clang/lib/Driver/ToolChains/ROCm.h
===================================================================
--- llvm-toolchain-15-15.0.7.orig/clang/lib/Driver/ToolChains/ROCm.h
+++ llvm-toolchain-15-15.0.7/clang/lib/Driver/ToolChains/ROCm.h
@@ -107,6 +107,7 @@ private:
SmallString<0> LibPath;
SmallString<0> LibDevicePath;
SmallString<0> IncludePath;
+ SmallString<0> SharePath;
llvm::StringMap<std::string> LibDeviceMap;
// Libraries that are always linked.
Index: llvm-toolchain-15-15.0.7/clang/test/Driver/hip-version.hip
===================================================================
--- llvm-toolchain-15-15.0.7.orig/clang/test/Driver/hip-version.hip
+++ llvm-toolchain-15-15.0.7/clang/test/Driver/hip-version.hip
@@ -9,6 +9,14 @@
// RUN: -target amdgcn-amd-amdhsa \
// RUN: | FileCheck -check-prefixes=FOUND %s
+// RUN: rm -rf %t/Inputs
+// RUN: mkdir -p %t/Inputs
+// RUN: cp -r %S/Inputs/rocm %t/Inputs
+// RUN: mkdir -p %t/Inputs/rocm/share/hip
+// RUN: mv %t/Inputs/rocm/bin/.hipVersion %t/Inputs/rocm/share/hip/version
+// RUN: %clang -v --rocm-path=%t/Inputs/rocm 2>&1 \
+// RUN: | FileCheck -check-prefixes=FOUND %s
+
// FOUND: Found HIP installation: {{.*Inputs.*rocm}}, version 3.6.20214-a2917cd
// When --rocm-path is set and .hipVersion is not found, use default version

View File

@ -148,3 +148,7 @@ unwind-force-pthread-dl.diff
force-sse2-compiler-rt.diff
bolt-disable-emit-relocs.patch
link-grpc.diff
amdgpu/nonlinux.patch
amdgpu/usr-search-paths.patch
amdgpu/bitcode-multiarch.patch

View File

@ -1,31 +0,0 @@
--- a/clang/lib/Driver/ToolChains/WebAssembly.cpp
+++ b/clang/lib/Driver/ToolChains/WebAssembly.cpp
@@ -369,6 +369,18 @@ ToolChain::RuntimeLibType WebAssembly::G
return ToolChain::RLT_CompilerRT;
}
+ToolChain::RuntimeLibType WebAssembly::GetRuntimeLibType(
+ const ArgList &Args) const {
+ if (Arg *A = Args.getLastArg(options::OPT_rtlib_EQ)) {
+ StringRef Value = A->getValue();
+ if (Value != "compiler-rt")
+ getDriver().Diag(clang::diag::err_drv_unsupported_rtlib_for_platform)
+ << Value << "WebAssembly";
+ }
+
+ return ToolChain::RLT_CompilerRT;
+}
+
ToolChain::CXXStdlibType
WebAssembly::GetCXXStdlibType(const ArgList &Args) const {
if (Arg *A = Args.getLastArg(options::OPT_stdlib_EQ)) {
--- a/clang/lib/Driver/ToolChains/WebAssembly.h
+++ b/clang/lib/Driver/ToolChains/WebAssembly.h
@@ -61,6 +61,7 @@ private:
llvm::opt::ArgStringList &CC1Args,
Action::OffloadKind DeviceOffloadKind) const override;
RuntimeLibType GetDefaultRuntimeLibType() const override;
+ RuntimeLibType GetRuntimeLibType(const llvm::opt::ArgList &Args) const override;
CXXStdlibType GetCXXStdlibType(const llvm::opt::ArgList &Args) const override;
void
AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,

View File

@ -1,62 +0,0 @@
--- a/clang/lib/Driver/ToolChains/WebAssembly.cpp
+++ b/clang/lib/Driver/ToolChains/WebAssembly.cpp
@@ -174,7 +174,7 @@ WebAssembly::WebAssembly(const Driver &D
getProgramPaths().push_back(getDriver().getInstalledDir());
- auto SysRoot = getDriver().SysRoot;
+ std::string SysRoot = computeSysRoot();
if (getTriple().getOS() == llvm::Triple::UnknownOS) {
// Theoretically an "unknown" OS should mean no standard libraries, however
// it could also mean that a custom set of libraries is in use, so just add
@@ -402,6 +402,7 @@ void WebAssembly::AddClangSystemIncludeA
return;
const Driver &D = getDriver();
+ std::string SysRoot = computeSysRoot();
if (!DriverArgs.hasArg(options::OPT_nobuiltininc)) {
SmallString<128> P(D.ResourceDir);
@@ -427,10 +428,10 @@ void WebAssembly::AddClangSystemIncludeA
if (getTriple().getOS() != llvm::Triple::UnknownOS) {
const std::string MultiarchTriple =
- getMultiarchTriple(D, getTriple(), D.SysRoot);
- addSystemInclude(DriverArgs, CC1Args, D.SysRoot + "/include/" + MultiarchTriple);
+ getMultiarchTriple(D, getTriple(), SysRoot);
+ addSystemInclude(DriverArgs, CC1Args, SysRoot + "/include/" + MultiarchTriple);
}
- addSystemInclude(DriverArgs, CC1Args, D.SysRoot + "/include");
+ addSystemInclude(DriverArgs, CC1Args, SysRoot + "/include");
}
void WebAssembly::AddClangCXXStdlibIncludeArgs(const ArgList &DriverArgs,
@@ -478,6 +479,17 @@ Tool *WebAssembly::buildLinker() const {
return new tools::wasm::Linker(*this);
}
+std::string WebAssembly::computeSysRoot() const {
+ if (!getDriver().SysRoot.empty())
+ return getDriver().SysRoot;
+
+ std::string Path = "/usr";
+ if (getVFS().exists(Path))
+ return Path;
+
+ return std::string();
+}
+
void WebAssembly::addLibCxxIncludePaths(
const llvm::opt::ArgList &DriverArgs,
llvm::opt::ArgStringList &CC1Args) const {
--- a/clang/lib/Driver/ToolChains/WebAssembly.h
+++ b/clang/lib/Driver/ToolChains/WebAssembly.h
@@ -89,6 +89,8 @@ private:
llvm::opt::ArgStringList &CC1Args) const;
void addLibStdCXXIncludePaths(const llvm::opt::ArgList &DriverArgs,
llvm::opt::ArgStringList &CC1Args) const;
+
+ std::string computeSysRoot() const override;
};
} // end namespace toolchains

View File

@ -57,6 +57,33 @@
void WebAssembly::addLibCxxIncludePaths(
const llvm::opt::ArgList &DriverArgs,
llvm::opt::ArgStringList &CC1Args) const {
@@ -499,7 +519,9 @@ void WebAssembly::addLibCxxIncludePaths(
}
// Second add the generic one.
- addSystemInclude(DriverArgs, CC1Args, LibPath + "/c++/" + Version);
+ // don't include the host architecture's headers in the search path
+ if (!getDriver().SysRoot.empty())
+ addSystemInclude(DriverArgs, CC1Args, LibPath + "/c++/" + Version);
}
void WebAssembly::addLibStdCXXIncludePaths(
@@ -546,8 +568,11 @@ void WebAssembly::addLibStdCXXIncludePat
addSystemInclude(DriverArgs, CC1Args, TargetDir);
}
- // Second add the generic one.
- addSystemInclude(DriverArgs, CC1Args, LibPath + "/c++/" + Version);
- // Third the backward one.
- addSystemInclude(DriverArgs, CC1Args, LibPath + "/c++/" + Version + "/backward");
+ // don't include the host architecture's headers in the search path
+ if (!getDriver().SysRoot.empty()) {
+ // Second add the generic one.
+ addSystemInclude(DriverArgs, CC1Args, LibPath + "/c++/" + Version);
+ // Third the backward one.
+ addSystemInclude(DriverArgs, CC1Args, LibPath + "/c++/" + Version + "/backward");
+ }
}
--- a/clang/lib/Driver/ToolChains/WebAssembly.h
+++ b/clang/lib/Driver/ToolChains/WebAssembly.h
@@ -89,6 +89,8 @@ private:

View File

@ -1665,6 +1665,17 @@ if test ! -f /usr/lib/llvm-$VERSION/lib/libclangBasic.a; then
exit 1
fi
# check that the hip language is functioning
echo "Testing HIP language ..."
if dpkg -l|grep -q hipcc; then
cat > foo.hip <<EOF
#include <hip/hip_runtime_api.h>
int main() { return 0; }
EOF
clang++-$VERSION --rocm-path=/usr -x hip -lamdhip64 foo.hip
rm -f foo.hip hip
fi
#clean up
rm -f a.out bar crash-* foo foo.* lldb-cmd.txt main.* test_fuzzer.cc foo.* o
rm -rf output matmul.* *profraw opt.ll a.json default.profdata test test.cpp

2
debian/rules vendored
View File

@ -1008,8 +1008,10 @@ override_dh_auto_install:
# Only run on executable, not script
chrpath -d `find $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/bin/ -type f -executable -exec file -i '{}' \; | grep 'x-executable; charset=binary'|cut -d: -f1`
ifeq (,$(filter $(DEB_HOST_ARCH), powerpc powerpcspe))
# To fix custom-library-search-path
chrpath -d $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/clang/$(LLVM_VERSION)*/lib/linux/*.so
endif
: # libclang
cd debian/tmp/usr/lib/llvm-$(LLVM_VERSION)/lib/ && \