unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
blob 445b5d17ac7a41b2729a9cd2f1005de29cffe7ce 3199 bytes (raw)
name: gnu/packages/patches/clang-7.0-libc-search-path.patch 	 # note: path name is non-authoritative(*)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
 
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 non-GuixSD systems.

--- a/lib/Driver/ToolChains/Linux.cpp
+++ b/lib/Driver/ToolChains/Linux.cpp
@@ -225,7 +225,9 @@
   PPaths.push_back(Twine(GCCInstallation.getParentLibPath() + "/../" +
                          GCCInstallation.getTriple().str() + "/bin")
                        .str());
-
+  // 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());
 
   if (Distro.IsAlpineLinux()) {
@@ -284,6 +286,7 @@
 
   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.
@@ -431,6 +434,10 @@
 
   addPathIfExists(D, SysRoot + "/lib", Paths);
   addPathIfExists(D, SysRoot + "/usr/lib", Paths);
+
+  // 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);
 }
 
 bool Linux::HasNativeLLVMSupport() const { return true; }
@@ -794,6 +801,34 @@
   addExternCSystemInclude(DriverArgs, CC1Args, SysRoot + "/include");
 
   addExternCSystemInclude(DriverArgs, CC1Args, SysRoot + "/usr/include");
+
+  // Check for configure-time "extra" C include directories. When constructing a
+  // toolchain, @C_EXTRA_INCLUDE_DIRS@ should be replaced with something like a
+  // colon-separated string of the include dirs of libc and kernel headers.
+  //
+  // The reason why we use this mechanism instead of C_INCLUDE_DIRS above is
+  // because when a user supplies clang with --sysroot, the normal expectation
+  // is that clang will detect and add the proper $SYSROOT/$MULTIARCHINCL,
+  // $SYSROOT/include, and $SYSROOT/usr/include to its list of search paths.
+  // However, if C_INCLUDE_DIRS is not empty, this function will return early
+  // and not attempt to add the aforementioned search paths, which is not
+  // desirable.
+  //
+  // By adding our configure-time "extra" C include directories here, after
+  // we've added $SYSROOT/include and $SYSROOT/usr/include, we make sure that IF
+  // --sysroot is supplied on the command line, we pick up the expected search
+  // paths in the $SYSROOT, and that they come before our configure-time "extra"
+  // C include directories.
+  StringRef CExtraIncludeDirs("@C_EXTRA_INCLUDE_DIRS@");
+  if (CExtraIncludeDirs != "") {
+      SmallVector<StringRef, 5> dirs;
+      CExtraIncludeDirs.split(dirs, ":");
+      for (StringRef dir : dirs) {
+          StringRef Prefix =
+              llvm::sys::path::is_absolute(dir) ? StringRef(SysRoot) : "";
+          addExternCSystemInclude(DriverArgs, CC1Args, Prefix + dir);
+      }
+  }
 }
 
 static std::string DetectLibcxxIncludePath(StringRef base) {

debug log:

solving 445b5d17ac ...
found 445b5d17ac in https://yhetil.org/guix-patches/079E8E67-5A3F-4B08-AB9E-2880559C0570@carldong.me/ ||
	https://yhetil.org/guix-patches/20191125180144.1060289-1-contact@carldong.me/
found 07ff8c90bd in https://git.savannah.gnu.org/cgit/guix.git
preparing index
index prepared:
100644 07ff8c90bde94e379bbbe2de2e7d86cd485b8ef2	gnu/packages/patches/clang-7.0-libc-search-path.patch

applying [1/1] https://yhetil.org/guix-patches/079E8E67-5A3F-4B08-AB9E-2880559C0570@carldong.me/
diff --git a/gnu/packages/patches/clang-7.0-libc-search-path.patch b/gnu/packages/patches/clang-7.0-libc-search-path.patch
index 07ff8c90bd..445b5d17ac 100644

1:86: trailing whitespace.
 
1:117: trailing whitespace.
 
Checking patch gnu/packages/patches/clang-7.0-libc-search-path.patch...
Applied patch gnu/packages/patches/clang-7.0-libc-search-path.patch cleanly.
warning: 2 lines add whitespace errors.

skipping https://yhetil.org/guix-patches/20191125180144.1060289-1-contact@carldong.me/ for 445b5d17ac
index at:
100644 445b5d17ac7a41b2729a9cd2f1005de29cffe7ce	gnu/packages/patches/clang-7.0-libc-search-path.patch

(*) Git path names are given by the tree(s) the blob belongs to.
    Blobs themselves have no identifier aside from the hash of its contents.^

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).