From e9473ed49b20e4bf95309357cbd77353bdfbbf66 Mon Sep 17 00:00:00 2001 From: Marius Bakke Date: Tue, 5 Apr 2022 13:27:09 +0200 Subject: gnu: LLVM, Clang: Add 14.0.0. * gnu/packages/llvm.scm (%llvm-monorepo-hashes, %llvm-patches, llvm-monorepo): New variables. (clang-runtime-from-llvm): Make HASH optional; use monorepo when not present. (clang-from-llvm): Likewise. (llvm-14, clang-runtime-14, clang-14, clang-toolchain-14, lld-14): New variables. (llvm-13): Inherit from LLVM-14. (lld-13): Inherit from LLD-14. (lld): Turn into alias for LLD-14. * gnu/packages/patches/clang-14.0-libc-search-path.patch: New file. * gnu/local.mk (dist_patch_DATA): Adjust accordingly. * gnu/packages/zig.scm (zig): Change from LLD to LLD-13. --- .../patches/clang-14.0-libc-search-path.patch | 94 ++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 gnu/packages/patches/clang-14.0-libc-search-path.patch (limited to 'gnu/packages/patches/clang-14.0-libc-search-path.patch') diff --git a/gnu/packages/patches/clang-14.0-libc-search-path.patch b/gnu/packages/patches/clang-14.0-libc-search-path.patch new file mode 100644 index 0000000000..7e439cd1ef --- /dev/null +++ b/gnu/packages/patches/clang-14.0-libc-search-path.patch @@ -0,0 +1,94 @@ +Clang attempts to guess file names based on the OS and distro (yes!), +but unfortunately, that doesn't work for us. + +This patch makes it easy to insert libc's $libdir so that Clang passes the +correct absolute file name of crt1.o etc. to 'ld'. It also disables all +the distro-specific stuff and removes the hard-coded FHS directory names +to make sure Clang also works on foreign distros. + +diff --git a/clang/lib/Driver/Distro.cpp b/clang/lib/Driver/Distro.cpp +--- a/clang/lib/Driver/Distro.cpp ++++ b/clang/lib/Driver/Distro.cpp +@@ -96,6 +96,10 @@ static Distro::DistroType DetectLsbRelease(llvm::vfs::FileSystem &VFS) { + } + + static Distro::DistroType DetectDistro(llvm::vfs::FileSystem &VFS) { ++ // The compiler should always behave the same, even when used via Guix on a ++ // foreign distro. ++ return Distro::UnknownDistro; ++ + Distro::DistroType Version = Distro::UnknownDistro; + + // Newer freedesktop.org's compilant systemd-based systems +diff --git a/clang/lib/Driver/ToolChains/Cuda.cpp b/clang/lib/Driver/ToolChains/Cuda.cpp +--- a/clang/lib/Driver/ToolChains/Cuda.cpp ++++ b/clang/lib/Driver/ToolChains/Cuda.cpp +@@ -117,6 +117,9 @@ CudaInstallationDetector::CudaInstallationDetector( + const Driver &D, const llvm::Triple &HostTriple, + const llvm::opt::ArgList &Args) + : D(D) { ++ // Don't look for CUDA in /usr. ++ return; ++ + struct Candidate { + std::string Path; + bool StrictChecking; +diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp +--- a/clang/lib/Driver/ToolChains/Linux.cpp ++++ b/clang/lib/Driver/ToolChains/Linux.cpp +@@ -186,6 +186,10 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) + + Generic_GCC::PushPPaths(PPaths); + ++ // Comment out the distro-specific tweaks so that they don't bite when ++ // using Guix on a foreign distro. ++#if 0 ++ + Distro Distro(D.getVFS(), Triple); + + if (Distro.IsAlpineLinux() || Triple.isAndroid()) { +@@ -250,6 +254,7 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) + + if (IsAndroid || Distro.IsOpenSUSE()) + ExtraOpts.push_back("--enable-new-dtags"); ++#endif + + // The selection of paths to try here is designed to match the patterns which + // the GCC driver itself uses, as this is part of the GCC-compatible driver. +@@ -270,6 +275,7 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) + } + Generic_GCC::AddMultilibPaths(D, SysRoot, OSLibDir, MultiarchTriple, Paths); + ++#if 0 + addPathIfExists(D, SysRoot + "/lib/" + MultiarchTriple, Paths); + addPathIfExists(D, SysRoot + "/lib/../" + OSLibDir, Paths); + +@@ -298,9 +304,11 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) + addPathIfExists(D, SysRoot + "/" + OSLibDir + "/" + ABIName, Paths); + addPathIfExists(D, SysRoot + "/usr/" + OSLibDir + "/" + ABIName, Paths); + } ++#endif + + Generic_GCC::AddMultiarchPaths(D, SysRoot, OSLibDir, Paths); + ++#if 0 + // Similar to the logic for GCC above, if we are currently running Clang + // inside of the requested system root, add its parent library path to those + // searched. +@@ -313,9 +321,14 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) + if (OSLibDir != "lib") + addPathIfExists(D, D.Dir + "/../" + OSLibDir, Paths); + } ++#endif ++ ++ // Add libc's lib/ directory to the search path, so that crt1.o, crti.o, ++ // and friends can be found. ++ addPathIfExists(D, "@GLIBC_LIBDIR@", Paths); + +- addPathIfExists(D, SysRoot + "/lib", Paths); +- addPathIfExists(D, SysRoot + "/usr/lib", Paths); ++ // Add GCC's lib/ directory so libstdc++.so can be found. ++ addPathIfExists(D, GCCInstallation.getParentLibPath(), Paths); + } + + ToolChain::RuntimeLibType Linux::GetDefaultRuntimeLibType() const { -- cgit v1.2.3 From 8d653c08b750c5f28a2faa5d57187a2d2a46dca5 Mon Sep 17 00:00:00 2001 From: Marius Bakke Date: Tue, 31 May 2022 23:39:45 +0200 Subject: gnu: LLVM, Clang, LLD: Update to 14.0.4. * gnu/packages/llvm.scm (%llvm-monorepo-hashes): Adjust for 14.0.4. (%llvm-patches): Likewise. (llvm-14, clang-14, lld-14): Update to 14.0.4. * gnu/packages/patches/clang-14.0-libc-search-path.patch: Adjust for upstream changes. --- gnu/packages/llvm.scm | 10 +++++----- .../patches/clang-14.0-libc-search-path.patch | 21 +++++++++++---------- 2 files changed, 16 insertions(+), 15 deletions(-) (limited to 'gnu/packages/patches/clang-14.0-libc-search-path.patch') diff --git a/gnu/packages/llvm.scm b/gnu/packages/llvm.scm index d3b16f2759..88b582d85b 100644 --- a/gnu/packages/llvm.scm +++ b/gnu/packages/llvm.scm @@ -541,10 +541,10 @@ (define (make-clang-toolchain clang) ("libc-static" ,glibc "static"))))) (define %llvm-monorepo-hashes - '(("14.0.3" . "0makhpbrg46m2gi8wyp5h21ln4mgilahh3clk4d1b2ln2ck3v7m8"))) + '(("14.0.4" . "1y4yvx749cn3gkpc9kf48xbd2wc2lry8x5zdpk3sbrkqs8vrji4q"))) (define %llvm-patches - '(("14.0.3" . ("clang-14.0-libc-search-path.patch")))) + '(("14.0.4" . ("clang-14.0-libc-search-path.patch")))) (define (llvm-monorepo version) (origin @@ -559,7 +559,7 @@ (define (llvm-monorepo version) (define-public llvm-14 (package (name "llvm") - (version "14.0.3") + (version "14.0.4") (source (llvm-monorepo version)) (build-system cmake-build-system) (outputs '("out" "opt-viewer")) @@ -647,7 +647,7 @@ (define-public clang-14 (package-version llvm-14))) (sha256 (base32 - "188hh6l956gkl6hgjzzdraj5jp538zhhhllxvy23gml6slrmbj7j")))))) + "1vcgmvh0r28a1z87p3y4h2326zi8liq7l9mcfvmx22x9bmbcpfn8")))))) (package (inherit template) (arguments @@ -1176,7 +1176,7 @@ (define-public libunwind-headers (define-public lld-14 (package (name "lld") - (version "14.0.3") + (version "14.0.4") (source (llvm-monorepo version)) (build-system cmake-build-system) (inputs diff --git a/gnu/packages/patches/clang-14.0-libc-search-path.patch b/gnu/packages/patches/clang-14.0-libc-search-path.patch index 7e439cd1ef..78b0637cab 100644 --- a/gnu/packages/patches/clang-14.0-libc-search-path.patch +++ b/gnu/packages/patches/clang-14.0-libc-search-path.patch @@ -7,6 +7,7 @@ the distro-specific stuff and removes the hard-coded FHS directory names to make sure Clang also works on foreign distros. diff --git a/clang/lib/Driver/Distro.cpp b/clang/lib/Driver/Distro.cpp +index 5ac38c34d112..2a704b418fdc 100644 --- a/clang/lib/Driver/Distro.cpp +++ b/clang/lib/Driver/Distro.cpp @@ -96,6 +96,10 @@ static Distro::DistroType DetectLsbRelease(llvm::vfs::FileSystem &VFS) { @@ -21,6 +22,7 @@ diff --git a/clang/lib/Driver/Distro.cpp b/clang/lib/Driver/Distro.cpp // Newer freedesktop.org's compilant systemd-based systems diff --git a/clang/lib/Driver/ToolChains/Cuda.cpp b/clang/lib/Driver/ToolChains/Cuda.cpp +index 4a9f6d4c4e3e..0ae13ebebd27 100644 --- a/clang/lib/Driver/ToolChains/Cuda.cpp +++ b/clang/lib/Driver/ToolChains/Cuda.cpp @@ -117,6 +117,9 @@ CudaInstallationDetector::CudaInstallationDetector( @@ -34,6 +36,7 @@ diff --git a/clang/lib/Driver/ToolChains/Cuda.cpp b/clang/lib/Driver/ToolChains/ std::string Path; bool StrictChecking; diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp +index 83cb41159de7..6b920e33d1ef 100644 --- a/clang/lib/Driver/ToolChains/Linux.cpp +++ b/clang/lib/Driver/ToolChains/Linux.cpp @@ -186,6 +186,10 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) @@ -72,21 +75,19 @@ diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains Generic_GCC::AddMultiarchPaths(D, SysRoot, OSLibDir, Paths); +#if 0 - // Similar to the logic for GCC above, if we are currently running Clang - // inside of the requested system root, add its parent library path to those - // searched. -@@ -313,9 +321,14 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) - if (OSLibDir != "lib") - addPathIfExists(D, D.Dir + "/../" + OSLibDir, Paths); - } + // The deprecated -DLLVM_ENABLE_PROJECTS=libcxx configuration installs + // libc++.so in D.Dir+"/../lib/". Detect this path. + // TODO Remove once LLVM_ENABLE_PROJECTS=libcxx is unsupported. +@@ -310,6 +318,14 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) + + addPathIfExists(D, SysRoot + "/lib", Paths); + addPathIfExists(D, SysRoot + "/usr/lib", Paths); +#endif + + // Add libc's lib/ directory to the search path, so that crt1.o, crti.o, + // and friends can be found. + addPathIfExists(D, "@GLIBC_LIBDIR@", Paths); - -- addPathIfExists(D, SysRoot + "/lib", Paths); -- addPathIfExists(D, SysRoot + "/usr/lib", Paths); ++ + // Add GCC's lib/ directory so libstdc++.so can be found. + addPathIfExists(D, GCCInstallation.getParentLibPath(), Paths); } -- cgit v1.2.3