diff options
author | Christopher Baines <mail@cbaines.net> | 2024-04-20 11:47:50 +0100 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2024-04-20 11:47:50 +0100 |
commit | da77ea23daa0bfa4a73290dff99b22d6825ff80b (patch) | |
tree | 748d24e62b93c8ab8f999d6415d9f65c3d317da2 /gnu/packages/patches/clang-18.0-libc-search-path.patch | |
parent | 4eeb6922449285f9bce615f6e4ffe4375fa0233f (diff) | |
parent | 949f97f7f98ac74306b9de79c93790337d804e32 (diff) | |
download | guix-chris-core-updates-no-duplicates-attempt.tar guix-chris-core-updates-no-duplicates-attempt.tar.gz |
Merge commit '949f97f7f9' into core-update-new-2chris-core-updates-no-duplicates-attempt
Change-Id: Ibbd851541da42cc052ba58195fee033daadd57e5
Conflicts:
gnu/local.mk
gnu/packages/bioinformatics.scm
gnu/packages/dictionaries.scm
gnu/packages/display-managers.scm
gnu/packages/engineering.scm
gnu/packages/geo.scm
gnu/packages/gl.scm
gnu/packages/glib.scm
gnu/packages/gnome-xyz.scm
gnu/packages/gnome.scm
gnu/packages/gtk.scm
gnu/packages/image-processing.scm
gnu/packages/linux.scm
gnu/packages/llvm.scm
gnu/packages/mail.scm
gnu/packages/patches/eudev-rules-directory.patch
gnu/packages/plotutils.scm
gnu/packages/sdl.scm
gnu/packages/syndication.scm
Diffstat (limited to 'gnu/packages/patches/clang-18.0-libc-search-path.patch')
-rw-r--r-- | gnu/packages/patches/clang-18.0-libc-search-path.patch | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/gnu/packages/patches/clang-18.0-libc-search-path.patch b/gnu/packages/patches/clang-18.0-libc-search-path.patch new file mode 100644 index 0000000000..e3c673bf80 --- /dev/null +++ b/gnu/packages/patches/clang-18.0-libc-search-path.patch @@ -0,0 +1,90 @@ +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 +index a7e7f169dc14..0564003352a4 100644 +--- a/clang/lib/Driver/Distro.cpp ++++ b/clang/lib/Driver/Distro.cpp +@@ -100,6 +100,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 +index 1462576ca870..1078dba8f481 100644 +--- a/clang/lib/Driver/ToolChains/Cuda.cpp ++++ b/clang/lib/Driver/ToolChains/Cuda.cpp +@@ -132,6 +132,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 +index 4300a2bdff17..ac3b29d0fc13 100644 +--- a/clang/lib/Driver/ToolChains/Linux.cpp ++++ b/clang/lib/Driver/ToolChains/Linux.cpp +@@ -224,6 +224,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()) { +@@ -284,6 +288,7 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) + + #ifdef ENABLE_LINKER_BUILD_ID + ExtraOpts.push_back("--build-id"); ++#endif + #endif + + // The selection of paths to try here is designed to match the patterns which +@@ -305,6 +310,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, concat(SysRoot, "/lib", MultiarchTriple), Paths); + addPathIfExists(D, concat(SysRoot, "/lib/..", OSLibDir), Paths); + +@@ -333,11 +339,21 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) + addPathIfExists(D, concat(SysRoot, "/", OSLibDir, ABIName), Paths); + addPathIfExists(D, concat(SysRoot, "/usr", OSLibDir, ABIName), Paths); + } ++#endif + + Generic_GCC::AddMultiarchPaths(D, SysRoot, OSLibDir, Paths); + ++#if 0 + addPathIfExists(D, concat(SysRoot, "/lib"), Paths); + addPathIfExists(D, concat(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); ++ ++ // Add GCC's lib/ directory so libstdc++.so can be found. ++ addPathIfExists(D, GCCInstallation.getParentLibPath(), Paths); + } + + ToolChain::RuntimeLibType Linux::GetDefaultRuntimeLibType() const { |