diff --git a/debian/changelog b/debian/changelog index 3e6b4916..ce2dde04 100644 --- a/debian/changelog +++ b/debian/changelog @@ -84,14 +84,42 @@ llvm-toolchain-snapshot (1:16~++20220731055325+02b3a358926e-1~exp1) experimental -- Sylvestre Ledru 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 Sun, 15 Jan 2023 10:54:41 +0100 diff --git a/debian/patches/amdgpu/bitcode-multiarch.patch b/debian/patches/amdgpu/bitcode-multiarch.patch new file mode 100644 index 00000000..88e2ef55 --- /dev/null +++ b/debian/patches/amdgpu/bitcode-multiarch.patch @@ -0,0 +1,53 @@ +From efa9394d72968e0c84c2c9283476c70807f60b80 Mon Sep 17 00:00:00 2001 +From: Cordell Bloor +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//amdgcn/bitcode/* + // - ${ROCM_ROOT}/lib/bitcode/* +- // so try to detect these layouts. +- static constexpr std::array 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 SubDirsList[] = { ++ {"amdgcn", "bitcode", "", ""}, ++ {"lib", "", "", ""}, ++ {"lib", Multiarch, "amdgcn", "bitcode"}, ++ {"lib", "bitcode", "", ""}, + }; + + // Make a path by appending sub-directories to InstallPath. +- auto MakePath = [&](const llvm::ArrayRef &SubDirs) { ++ auto MakePath = [&](const llvm::ArrayRef &SubDirs) { + auto Path = CandidatePath; + for (auto SubDir : SubDirs) + llvm::sys::path::append(Path, SubDir); diff --git a/debian/patches/amdgpu/nonlinux.patch b/debian/patches/amdgpu/nonlinux.patch new file mode 100644 index 00000000..2c0098ed --- /dev/null +++ b/debian/patches/amdgpu/nonlinux.patch @@ -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() diff --git a/debian/patches/amdgpu/usr-search-paths.patch b/debian/patches/amdgpu/usr-search-paths.patch new file mode 100644 index 00000000..96e21c1f --- /dev/null +++ b/debian/patches/amdgpu/usr-search-paths.patch @@ -0,0 +1,122 @@ +From 082593ff7aff68060bd66dccfa43493d07d9c255 Mon Sep 17 00:00:00 2001 +From: "Yaxun (Sam) Liu" +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> 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> 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 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 diff --git a/debian/patches/series b/debian/patches/series index f2744617..f32f47c4 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -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 diff --git a/debian/patches/wasm-compiler-rt-default.diff b/debian/patches/wasm-compiler-rt-default.diff deleted file mode 100644 index 351fcc79..00000000 --- a/debian/patches/wasm-compiler-rt-default.diff +++ /dev/null @@ -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, diff --git a/debian/patches/wasm-sysroot-usr.diff b/debian/patches/wasm-sysroot-usr.diff deleted file mode 100644 index ae73057b..00000000 --- a/debian/patches/wasm-sysroot-usr.diff +++ /dev/null @@ -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 diff --git a/debian/patches/wasm/wasm-sysroot-usr.diff b/debian/patches/wasm/wasm-sysroot-usr.diff index e3270aa2..6587c1bd 100644 --- a/debian/patches/wasm/wasm-sysroot-usr.diff +++ b/debian/patches/wasm/wasm-sysroot-usr.diff @@ -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: diff --git a/debian/qualify-clang.sh b/debian/qualify-clang.sh index 1804077f..f247d0e5 100755 --- a/debian/qualify-clang.sh +++ b/debian/qualify-clang.sh @@ -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 < +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 diff --git a/debian/rules b/debian/rules index 4fb91d4f..88d8754d 100755 --- a/debian/rules +++ b/debian/rules @@ -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/ && \