unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
* [bug#31025] [core-updates] LLVM 6.0
@ 2018-04-02 16:46 Marius Bakke
  2018-04-04 11:50 ` Ludovic Courtès
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Marius Bakke @ 2018-04-02 16:46 UTC (permalink / raw)
  To: 31025


[-- Attachment #1.1: Type: text/plain, Size: 325 bytes --]

Hello!

This is an update for LLVM and Clang.  I haven't yet found a package
that actually works with this new version; the consumers I've tested
does not support LLVM >4.

However they can keep using the old version, and if there turns out to
be a problem with 6.0 we can fix it later since there are no dependents.

WDYT?


[-- Attachment #1.2: 0001-gnu-llvm-clang-Update-to-6.0.0.patch --]
[-- Type: text/x-patch, Size: 13782 bytes --]

From 28e48a152c99c4c0911c794dd449c4df5ed193f5 Mon Sep 17 00:00:00 2001
From: Marius Bakke <mbakke@fastmail.com>
Date: Sat, 31 Mar 2018 22:04:44 +0200
Subject: [PATCH] gnu: llvm, clang: Update to 6.0.0.

* gnu/packages/llvm.scm (llvm, clang-runtime, clang): Update to 6.0.0.
(clang-from-llvm)(patches): Set to empty list.
[arguments]: Set CLANG_RESOURCE_DIR in #:configure-flags.  Adjust
substitutions depending on major version.
(llvm-3.8, clang-runtime-3.8, clang-3.8): New public variables.
(clang-3.7, clang-3.6, clang-3.5)(patches): Add 'clang-3.5-libc-search-path.patch'.
(clang-3.9.1)(patches): Add 'clang-3.8-libc-search-path.patch'.
* gnu/packages/patches/clang-6.0-libc-search-path.patch: New file.
* gnu/packages/patches/clang-libc-search-path.patch: Rename to ...
* gnu/packages/patches/clang-3.5-libc-search-path.patch: ... this.
* gnu/local.mk (dist_patch_DATA): Adjust accordingly.

Add CLANG_RESOURCE_DIR (not sure if needed).
---
 gnu/local.mk                                       |   3 +-
 gnu/packages/llvm.scm                              | 100 +++++++++++++++------
 ...path.patch => clang-3.5-libc-search-path.patch} |   0
 .../patches/clang-6.0-libc-search-path.patch       |  67 ++++++++++++++
 4 files changed, 142 insertions(+), 28 deletions(-)
 rename gnu/packages/patches/{clang-libc-search-path.patch => clang-3.5-libc-search-path.patch} (100%)
 create mode 100644 gnu/packages/patches/clang-6.0-libc-search-path.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 2705fb37a..cf66d4bdf 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -590,8 +590,9 @@ dist_patch_DATA =						\
   %D%/packages/patches/ceph-skip-collect-sys-info-test.patch	\
   %D%/packages/patches/ceph-skip-unittest_blockdev.patch	\
   %D%/packages/patches/chmlib-inttypes.patch			\
-  %D%/packages/patches/clang-libc-search-path.patch		\
+  %D%/packages/patches/clang-3.5-libc-search-path.patch		\
   %D%/packages/patches/clang-3.8-libc-search-path.patch		\
+  %D%/packages/patches/clang-6.0-libc-search-path.patch		\
   %D%/packages/patches/clang-runtime-asan-build-fixes.patch	\
   %D%/packages/patches/clang-runtime-esan-build-fixes.patch	\
   %D%/packages/patches/classpath-aarch64-support.patch		\
diff --git a/gnu/packages/llvm.scm b/gnu/packages/llvm.scm
index 2dddbc436..6c20ce496 100644
--- a/gnu/packages/llvm.scm
+++ b/gnu/packages/llvm.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2016 Dennis Mungai <dmngaie@gmail.com>
 ;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 Roel Janssen <roel@gnu.org>
+;;; Copyright © 2018 Marius Bakke <mbakke@fastmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -40,7 +41,7 @@
 (define-public llvm
   (package
     (name "llvm")
-    (version "3.8.1")
+    (version "6.0.0")
     (source
      (origin
       (method url-fetch)
@@ -48,7 +49,7 @@
                           version "/llvm-" version ".src.tar.xz"))
       (sha256
        (base32
-        "1ybmnid4pw2hxn12ax5qa5kl1ldfns0njg8533y3mzslvd5cx0kf"))))
+        "0224xvfg6h40y5lrbnb9qaq3grmdc5rg00xq03s1wxjfbf8krx8z"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("python" ,python-2) ;bytes->str conversion in clang>=3.7 needs python-2
@@ -131,7 +132,7 @@ compiler.  In LLVM this library is called \"compiler-rt\".")
     (supported-systems (delete "mips64el-linux" %supported-systems))))
 
 (define* (clang-from-llvm llvm clang-runtime hash
-                          #:key (patches '("clang-libc-search-path.patch")))
+                          #:key (patches '()))
   (package
     (name "clang")
     (version (package-version llvm))
@@ -158,6 +159,10 @@ compiler.  In LLVM this library is called \"compiler-rt\".")
      `(#:configure-flags
        (list "-DCLANG_INCLUDE_TESTS=True"
 
+             ;; Link to libclang_rt files from clang-runtime.
+             (string-append "-DCLANG_RESOURCE_DIR="
+                            (assoc-ref %build-inputs "clang-runtime"))
+
              ;; Find libgcc_s, crtbegin.o, and crtend.o.
              (string-append "-DGCC_INSTALL_PREFIX="
                             (assoc-ref %build-inputs "gcc-lib"))
@@ -176,22 +181,37 @@ compiler.  In LLVM this library is called \"compiler-rt\".")
                    (lambda* (#:key inputs #:allow-other-keys)
                      (let ((libc (assoc-ref inputs "libc"))
                            (compiler-rt (assoc-ref inputs "clang-runtime")))
-                       (substitute* "lib/Driver/Tools.cpp"
-                         ;; Patch the 'getLinuxDynamicLinker' function to that
-                         ;; it uses the right dynamic linker file name.
-                         (("/lib64/ld-linux-x86-64.so.2")
-                          (string-append libc
-                                         ,(glibc-dynamic-linker)))
-
-                         ;; Link to libclang_rt files from clang-runtime.
-                         (("TC\\.getDriver\\(\\)\\.ResourceDir")
-                          (string-append "\"" compiler-rt "\"")))
-
-                       ;; Same for libc's libdir, to allow crt1.o & co. to be
-                       ;; found.
-                       (substitute* "lib/Driver/ToolChains.cpp"
-                         (("@GLIBC_LIBDIR@")
-                          (string-append libc "/lib")))))))))
+                       (case (string->number ,(version-major (package-version
+                                                              clang-runtime)))
+                         ((6)
+                          ;; Make "LibDir" refer to <glibc>/lib so that it
+                          ;; uses the right dynamic linker file name.
+                          (substitute* "lib/Driver/ToolChains/Linux.cpp"
+                            (("(^[[:blank:]]+LibDir = ).*" _ declaration)
+                             (string-append declaration "\"" libc "/lib\";\n"))
+
+                            ;; Make sure libc's libdir is on the search path, to
+                            ;; allow crt1.o & co. to be found.
+                            (("@GLIBC_LIBDIR@")
+                             (string-append libc "/lib"))))
+                         ((3)
+                          (substitute* "lib/Driver/Tools.cpp"
+                            ;; Patch the 'getLinuxDynamicLinker' function so that
+                            ;; it uses the right dynamic linker file name.
+                            (("/lib64/ld-linux-x86-64.so.2")
+                             (string-append libc
+                                            ,(glibc-dynamic-linker)))
+
+                            ;; Link to libclang_rt files from clang-runtime.
+                            (("TC\\.getDriver\\(\\)\\.ResourceDir")
+                             (string-append "\"" compiler-rt "\"")))
+
+                          ;; Same for libc's libdir, to allow crt1.o & co. to be
+                          ;; found.
+                          (substitute* "lib/Driver/ToolChains.cpp"
+                            (("@GLIBC_LIBDIR@")
+                             (string-append libc "/lib")))))
+                       #t))))))
 
     ;; Clang supports the same environment variables as GCC.
     (native-search-paths
@@ -214,13 +234,12 @@ code analysis tools.")
 (define-public clang-runtime
   (clang-runtime-from-llvm
    llvm
-   "0p0y85c7izndbpg2l816z7z7558axq11d5pwkm4h11sdw7d13w0d"
-   '("clang-runtime-asan-build-fixes.patch")))
+   "16m7rvh3w6vq10iwkjrr1nn293djld3xm62l5zasisaprx117k6h"))
 
 (define-public clang
   (clang-from-llvm llvm clang-runtime
-                   "1prc72xmkgx8wrzmrr337776676nhsp1qd3mw2bvb22bzdnq7lsc"
-                   #:patches '("clang-3.8-libc-search-path.patch")))
+                   "0cnznvfyl3hgbg8gj58pmwf0pvd2sv5k3ccbivy6q6ggv7c6szg0"
+                   #:patches '("clang-6.0-libc-search-path.patch")))
 
 (define-public llvm-3.9.1
   (package (inherit llvm)
@@ -245,7 +264,31 @@ code analysis tools.")
 (define-public clang-3.9.1
   (clang-from-llvm llvm-3.9.1 clang-runtime-3.9.1
                    "0qsyyb40iwifhhlx9a3drf8z6ni6zwyk3bvh0kx2gs6yjsxwxi76"
-                   #:patches '()))
+                   #:patches '("clang-3.8-libc-search-path.patch")))
+
+(define-public llvm-3.8
+  (package (inherit llvm)
+    (name "llvm")
+    (version "3.8.1")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "https://llvm.org/releases/"
+                          version "/llvm-" version ".src.tar.xz"))
+      (sha256
+       (base32
+        "1ybmnid4pw2hxn12ax5qa5kl1ldfns0njg8533y3mzslvd5cx0kf"))))))
+
+(define-public clang-runtime-3.8
+  (clang-runtime-from-llvm
+   llvm-3.8
+   "0p0y85c7izndbpg2l816z7z7558axq11d5pwkm4h11sdw7d13w0d"
+   '("clang-runtime-asan-build-fixes.patch")))
+
+(define-public clang-3.8
+  (clang-from-llvm llvm-3.8 clang-runtime-3.8
+                   "1prc72xmkgx8wrzmrr337776676nhsp1qd3mw2bvb22bzdnq7lsc"
+                   #:patches '("clang-3.8-libc-search-path.patch")))
 
 (define-public llvm-3.7
   (package (inherit llvm)
@@ -267,7 +310,8 @@ code analysis tools.")
 
 (define-public clang-3.7
   (clang-from-llvm llvm-3.7 clang-runtime-3.7
-                   "0x065d0w9b51xvdjxwfzjxng0gzpbx45fgiaxpap45ragi61dqjn"))
+                   "0x065d0w9b51xvdjxwfzjxng0gzpbx45fgiaxpap45ragi61dqjn"
+                   #:patches '("clang-3.5-libc-search-path.patch")))
 
 (define-public llvm-3.6
   (package (inherit llvm)
@@ -289,7 +333,8 @@ code analysis tools.")
 
 (define-public clang-3.6
   (clang-from-llvm llvm-3.6 clang-runtime-3.6
-                   "1wwr8s6lzr324hv4s1k6na4j5zv6n9kdhi14s4kb9b13d93814df"))
+                   "1wwr8s6lzr324hv4s1k6na4j5zv6n9kdhi14s4kb9b13d93814df"
+                   #:patches '("clang-3.5-libc-search-path.patch")))
 
 (define-public llvm-3.5
   (package (inherit llvm)
@@ -313,7 +358,8 @@ code analysis tools.")
 
 (define-public clang-3.5
   (clang-from-llvm llvm-3.5 clang-runtime-3.5
-                   "0846h8vn3zlc00jkmvrmy88gc6ql6014c02l4jv78fpvfigmgssg"))
+                   "0846h8vn3zlc00jkmvrmy88gc6ql6014c02l4jv78fpvfigmgssg"
+                   #:patches '("clang-3.5-libc-search-path.patch")))
 
 (define-public llvm-for-extempore
   (package (inherit llvm-3.7)
diff --git a/gnu/packages/patches/clang-libc-search-path.patch b/gnu/packages/patches/clang-3.5-libc-search-path.patch
similarity index 100%
rename from gnu/packages/patches/clang-libc-search-path.patch
rename to gnu/packages/patches/clang-3.5-libc-search-path.patch
diff --git a/gnu/packages/patches/clang-6.0-libc-search-path.patch b/gnu/packages/patches/clang-6.0-libc-search-path.patch
new file mode 100644
index 000000000..a62e8063c
--- /dev/null
+++ b/gnu/packages/patches/clang-6.0-libc-search-path.patch
@@ -0,0 +1,67 @@
+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.
+
+--- cfe-6.0.0.src/lib/Driver/ToolChains/Linux.cpp
++++ cfe-6.0.0.src/lib/Driver/ToolChains/Linux.cpp
+@@ -207,7 +207,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()) {
+@@ -255,6 +257,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.
+@@ -329,14 +332,12 @@
+     addPathIfExists(D, D.Dir + "/../" + OSLibDir, Paths);
+   }
+ 
+-  addPathIfExists(D, SysRoot + "/lib/" + MultiarchTriple, Paths);
+-  addPathIfExists(D, SysRoot + "/lib/../" + OSLibDir, Paths);
+-  addPathIfExists(D, SysRoot + "/usr/lib/" + MultiarchTriple, Paths);
+-  addPathIfExists(D, SysRoot + "/usr/lib/../" + OSLibDir, Paths);
+-
+   // Try walking via the GCC triple path in case of biarch or multiarch GCC
+   // installations with strange symlinks.
+   if (GCCInstallation.isValid()) {
++    // The following code would end up adding things like
++    // "/usr/lib/x86_64-unknown-linux-gnu/../../lib64" to the search path.
++#if 0
+     addPathIfExists(D,
+                     SysRoot + "/usr/lib/" + GCCInstallation.getTriple().str() +
+                         "/../../" + OSLibDir,
+@@ -349,6 +350,7 @@
+                              BiarchSibling.gccSuffix(),
+                       Paths);
+     }
++#endif
+ 
+     // See comments above on the multilib variant for details of why this is
+     // included even from outside the sysroot.
+@@ -373,8 +375,9 @@
+   if (StringRef(D.Dir).startswith(SysRoot))
+     addPathIfExists(D, D.Dir + "/../lib", Paths);
+ 
+-  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; }
-- 
2.16.3


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 487 bytes --]

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [bug#31025] [core-updates] LLVM 6.0
  2018-04-02 16:46 [bug#31025] [core-updates] LLVM 6.0 Marius Bakke
@ 2018-04-04 11:50 ` Ludovic Courtès
  2018-04-04 14:55   ` Marius Bakke
  2018-04-04 13:27 ` Eric Bavier
  2018-04-05  8:47 ` Pjotr Prins
  2 siblings, 1 reply; 8+ messages in thread
From: Ludovic Courtès @ 2018-04-04 11:50 UTC (permalink / raw)
  To: Marius Bakke; +Cc: 31025

Hello!

Marius Bakke <mbakke@fastmail.com> skribis:

> This is an update for LLVM and Clang.  I haven't yet found a package
> that actually works with this new version; the consumers I've tested
> does not support LLVM >4.
>
> However they can keep using the old version, and if there turns out to
> be a problem with 6.0 we can fix it later since there are no dependents.

Sounds good!

> From 28e48a152c99c4c0911c794dd449c4df5ed193f5 Mon Sep 17 00:00:00 2001
> From: Marius Bakke <mbakke@fastmail.com>
> Date: Sat, 31 Mar 2018 22:04:44 +0200
> Subject: [PATCH] gnu: llvm, clang: Update to 6.0.0.
>
> * gnu/packages/llvm.scm (llvm, clang-runtime, clang): Update to 6.0.0.
> (clang-from-llvm)(patches): Set to empty list.
> [arguments]: Set CLANG_RESOURCE_DIR in #:configure-flags.  Adjust
> substitutions depending on major version.
> (llvm-3.8, clang-runtime-3.8, clang-3.8): New public variables.
> (clang-3.7, clang-3.6, clang-3.5)(patches): Add 'clang-3.5-libc-search-path.patch'.
> (clang-3.9.1)(patches): Add 'clang-3.8-libc-search-path.patch'.
> * gnu/packages/patches/clang-6.0-libc-search-path.patch: New file.
> * gnu/packages/patches/clang-libc-search-path.patch: Rename to ...
> * gnu/packages/patches/clang-3.5-libc-search-path.patch: ... this.
> * gnu/local.mk (dist_patch_DATA): Adjust accordingly.
>
> Add CLANG_RESOURCE_DIR (not sure if needed).

Hmm?

Otherwise LGTM!

Does this change the derivation of ‘llvm’ proper?  If not, this could
even go to ‘master’.

Thanks,
Ludo’.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [bug#31025] [core-updates] LLVM 6.0
  2018-04-02 16:46 [bug#31025] [core-updates] LLVM 6.0 Marius Bakke
  2018-04-04 11:50 ` Ludovic Courtès
@ 2018-04-04 13:27 ` Eric Bavier
  2018-04-05  8:47 ` Pjotr Prins
  2 siblings, 0 replies; 8+ messages in thread
From: Eric Bavier @ 2018-04-04 13:27 UTC (permalink / raw)
  To: Marius Bakke; +Cc: 31025

[-- Attachment #1: Type: text/plain, Size: 524 bytes --]

On Mon, 02 Apr 2018 18:46:59 +0200
Marius Bakke <mbakke@fastmail.com> wrote:

> Hello!
> 
> This is an update for LLVM and Clang.  I haven't yet found a package
> that actually works with this new version; the consumers I've tested
> does not support LLVM >4.

Thanks for all the work here.  It builds fine for me.

> 
> However they can keep using the old version, and if there turns out to
> be a problem with 6.0 we can fix it later since there are no dependents.
> 
> WDYT?
> 

Sounds good.

`~Eric

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [bug#31025] [core-updates] LLVM 6.0
  2018-04-04 11:50 ` Ludovic Courtès
@ 2018-04-04 14:55   ` Marius Bakke
  2018-04-05  8:20     ` Ludovic Courtès
  0 siblings, 1 reply; 8+ messages in thread
From: Marius Bakke @ 2018-04-04 14:55 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 31025


[-- Attachment #1.1: Type: text/plain, Size: 2439 bytes --]

Ludovic Courtès <ludo@gnu.org> writes:

> Hello!
>
> Marius Bakke <mbakke@fastmail.com> skribis:
>
>> This is an update for LLVM and Clang.  I haven't yet found a package
>> that actually works with this new version; the consumers I've tested
>> does not support LLVM >4.
>>
>> However they can keep using the old version, and if there turns out to
>> be a problem with 6.0 we can fix it later since there are no dependents.
>
> Sounds good!
>
>> From 28e48a152c99c4c0911c794dd449c4df5ed193f5 Mon Sep 17 00:00:00 2001
>> From: Marius Bakke <mbakke@fastmail.com>
>> Date: Sat, 31 Mar 2018 22:04:44 +0200
>> Subject: [PATCH] gnu: llvm, clang: Update to 6.0.0.
>>
>> * gnu/packages/llvm.scm (llvm, clang-runtime, clang): Update to 6.0.0.
>> (clang-from-llvm)(patches): Set to empty list.
>> [arguments]: Set CLANG_RESOURCE_DIR in #:configure-flags.  Adjust
>> substitutions depending on major version.
>> (llvm-3.8, clang-runtime-3.8, clang-3.8): New public variables.
>> (clang-3.7, clang-3.6, clang-3.5)(patches): Add 'clang-3.5-libc-search-path.patch'.
>> (clang-3.9.1)(patches): Add 'clang-3.8-libc-search-path.patch'.
>> * gnu/packages/patches/clang-6.0-libc-search-path.patch: New file.
>> * gnu/packages/patches/clang-libc-search-path.patch: Rename to ...
>> * gnu/packages/patches/clang-3.5-libc-search-path.patch: ... this.
>> * gnu/local.mk (dist_patch_DATA): Adjust accordingly.
>>
>> Add CLANG_RESOURCE_DIR (not sure if needed).
>
> Hmm?

Oops, squashing error.  It turns out that was not needed and removed in
the updated patch below.

The updated patch fixes another problem: in 3.8 (the current "clang"
variable) and 3.9, the getDriver.ResourceDir substitution was actually
ineffective, so "clang-runtime" would never be referenced.

> Does this change the derivation of ‘llvm’ proper?  If not, this could
> even go to ‘master’.

LLVM is unaffected by this patch, only "clang" is changed.  So I believe
master is fine indeed.

However as it stands, many packages would break since the "clang"
variable changes from 3.8 to 6.0.  I'll test out each dependent and
see if they can be updated or change back to 3.8/3.9 for those.

I'm busy today, but can probably commit this tomorrow.  Meanwhile, how
does the updated patch look?

FWIW I've managed to build much of Chromium 65 with this new Clang; it
still fails, but I at least get further than with GCC 5 :-/


[-- Attachment #1.2: 0001-gnu-llvm-clang-Update-to-6.0.0.patch --]
[-- Type: text/x-patch, Size: 14011 bytes --]

From f070313904415cdb486a07215ae3c5011d468573 Mon Sep 17 00:00:00 2001
From: Marius Bakke <mbakke@fastmail.com>
Date: Sat, 31 Mar 2018 22:04:44 +0200
Subject: [PATCH] gnu: llvm, clang: Update to 6.0.0.

* gnu/packages/llvm.scm (llvm, clang-runtime, clang): Update to 6.0.0.
(clang-from-llvm)(patches): Set to empty list.
[arguments]: Adjust substitutions depending on major version.
(llvm-3.8, clang-runtime-3.8, clang-3.8): New public variables.
(clang-3.7, clang-3.6, clang-3.5)(patches): Add 'clang-3.5-libc-search-path.patch'.
(clang-3.9.1)(patches): Add 'clang-3.8-libc-search-path.patch'.
* gnu/packages/patches/clang-6.0-libc-search-path.patch: New file.
* gnu/packages/patches/clang-libc-search-path.patch: Rename to ...
* gnu/packages/patches/clang-3.5-libc-search-path.patch: ... this.
* gnu/local.mk (dist_patch_DATA): Adjust accordingly.
---
 gnu/local.mk                                  |   3 +-
 gnu/packages/llvm.scm                         | 109 +++++++++++++-----
 ...patch => clang-3.5-libc-search-path.patch} |   0
 .../patches/clang-6.0-libc-search-path.patch  |  67 +++++++++++
 4 files changed, 151 insertions(+), 28 deletions(-)
 rename gnu/packages/patches/{clang-libc-search-path.patch => clang-3.5-libc-search-path.patch} (100%)
 create mode 100644 gnu/packages/patches/clang-6.0-libc-search-path.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 270aee26b..91668fc29 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -593,8 +593,9 @@ dist_patch_DATA =						\
   %D%/packages/patches/chmlib-inttypes.patch			\
   %D%/packages/patches/chromium-gcc5.patch			\
   %D%/packages/patches/chromium-remove-default-history.patch	\
-  %D%/packages/patches/clang-libc-search-path.patch		\
+  %D%/packages/patches/clang-3.5-libc-search-path.patch		\
   %D%/packages/patches/clang-3.8-libc-search-path.patch		\
+  %D%/packages/patches/clang-6.0-libc-search-path.patch		\
   %D%/packages/patches/clang-runtime-asan-build-fixes.patch	\
   %D%/packages/patches/clang-runtime-esan-build-fixes.patch	\
   %D%/packages/patches/classpath-aarch64-support.patch		\
diff --git a/gnu/packages/llvm.scm b/gnu/packages/llvm.scm
index 2dddbc436..98592ad09 100644
--- a/gnu/packages/llvm.scm
+++ b/gnu/packages/llvm.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2016 Dennis Mungai <dmngaie@gmail.com>
 ;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 Roel Janssen <roel@gnu.org>
+;;; Copyright © 2018 Marius Bakke <mbakke@fastmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -40,7 +41,7 @@
 (define-public llvm
   (package
     (name "llvm")
-    (version "3.8.1")
+    (version "6.0.0")
     (source
      (origin
       (method url-fetch)
@@ -48,7 +49,7 @@
                           version "/llvm-" version ".src.tar.xz"))
       (sha256
        (base32
-        "1ybmnid4pw2hxn12ax5qa5kl1ldfns0njg8533y3mzslvd5cx0kf"))))
+        "0224xvfg6h40y5lrbnb9qaq3grmdc5rg00xq03s1wxjfbf8krx8z"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("python" ,python-2) ;bytes->str conversion in clang>=3.7 needs python-2
@@ -131,7 +132,7 @@ compiler.  In LLVM this library is called \"compiler-rt\".")
     (supported-systems (delete "mips64el-linux" %supported-systems))))
 
 (define* (clang-from-llvm llvm clang-runtime hash
-                          #:key (patches '("clang-libc-search-path.patch")))
+                          #:key (patches '()))
   (package
     (name "clang")
     (version (package-version llvm))
@@ -176,22 +177,50 @@ compiler.  In LLVM this library is called \"compiler-rt\".")
                    (lambda* (#:key inputs #:allow-other-keys)
                      (let ((libc (assoc-ref inputs "libc"))
                            (compiler-rt (assoc-ref inputs "clang-runtime")))
-                       (substitute* "lib/Driver/Tools.cpp"
-                         ;; Patch the 'getLinuxDynamicLinker' function to that
-                         ;; it uses the right dynamic linker file name.
-                         (("/lib64/ld-linux-x86-64.so.2")
-                          (string-append libc
-                                         ,(glibc-dynamic-linker)))
-
-                         ;; Link to libclang_rt files from clang-runtime.
-                         (("TC\\.getDriver\\(\\)\\.ResourceDir")
-                          (string-append "\"" compiler-rt "\"")))
-
-                       ;; Same for libc's libdir, to allow crt1.o & co. to be
-                       ;; found.
-                       (substitute* "lib/Driver/ToolChains.cpp"
-                         (("@GLIBC_LIBDIR@")
-                          (string-append libc "/lib")))))))))
+                       (case (string->number ,(version-major
+                                               (package-version clang-runtime)))
+                         ((6)
+                          ;; Link to libclang_rt files from clang-runtime.
+                          (substitute* "lib/Driver/ToolChain.cpp"
+                            (("getDriver\\(\\)\\.ResourceDir")
+                             (string-append "\"" compiler-rt "\"")))
+
+                          ;; Make "LibDir" refer to <glibc>/lib so that it
+                          ;; uses the right dynamic linker file name.
+                          (substitute* "lib/Driver/ToolChains/Linux.cpp"
+                            (("(^[[:blank:]]+LibDir = ).*" _ declaration)
+                             (string-append declaration "\"" libc "/lib\";\n"))
+
+                            ;; Make sure libc's libdir is on the search path, to
+                            ;; allow crt1.o & co. to be found.
+                            (("@GLIBC_LIBDIR@")
+                             (string-append libc "/lib"))))
+                         ((3)
+                          (substitute* "lib/Driver/Tools.cpp"
+                            ;; Patch the 'getLinuxDynamicLinker' function so that
+                            ;; it uses the right dynamic linker file name.
+                            (("/lib64/ld-linux-x86-64.so.2")
+                             (string-append libc
+                                            ,(glibc-dynamic-linker))))
+
+                          ;; Link to libclang_rt files from clang-runtime.
+                          ;; This substitution needed slight adjustment in 3.8.
+                          (if (< 3.8 (string->number ,(version-major+minor
+                                                       (package-version
+                                                        clang-runtime))))
+                              (substitute* "lib/Driver/Tools.cpp"
+                                (("TC\\.getDriver\\(\\)\\.ResourceDir")
+                                 (string-append "\"" compiler-rt "\"")))
+                              (substitute* "lib/Driver/ToolChain.cpp"
+                                (("getDriver\\(\\)\\.ResourceDir")
+                                 (string-append "\"" compiler-rt "\""))))
+
+                          ;; Make sure libc's libdir is on the search path, to
+                          ;; allow crt1.o & co. to be found.
+                          (substitute* "lib/Driver/ToolChains.cpp"
+                            (("@GLIBC_LIBDIR@")
+                             (string-append libc "/lib")))))
+                       #t))))))
 
     ;; Clang supports the same environment variables as GCC.
     (native-search-paths
@@ -214,13 +243,12 @@ code analysis tools.")
 (define-public clang-runtime
   (clang-runtime-from-llvm
    llvm
-   "0p0y85c7izndbpg2l816z7z7558axq11d5pwkm4h11sdw7d13w0d"
-   '("clang-runtime-asan-build-fixes.patch")))
+   "16m7rvh3w6vq10iwkjrr1nn293djld3xm62l5zasisaprx117k6h"))
 
 (define-public clang
   (clang-from-llvm llvm clang-runtime
-                   "1prc72xmkgx8wrzmrr337776676nhsp1qd3mw2bvb22bzdnq7lsc"
-                   #:patches '("clang-3.8-libc-search-path.patch")))
+                   "0cnznvfyl3hgbg8gj58pmwf0pvd2sv5k3ccbivy6q6ggv7c6szg0"
+                   #:patches '("clang-6.0-libc-search-path.patch")))
 
 (define-public llvm-3.9.1
   (package (inherit llvm)
@@ -245,7 +273,31 @@ code analysis tools.")
 (define-public clang-3.9.1
   (clang-from-llvm llvm-3.9.1 clang-runtime-3.9.1
                    "0qsyyb40iwifhhlx9a3drf8z6ni6zwyk3bvh0kx2gs6yjsxwxi76"
-                   #:patches '()))
+                   #:patches '("clang-3.8-libc-search-path.patch")))
+
+(define-public llvm-3.8
+  (package (inherit llvm)
+    (name "llvm")
+    (version "3.8.1")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "https://llvm.org/releases/"
+                          version "/llvm-" version ".src.tar.xz"))
+      (sha256
+       (base32
+        "1ybmnid4pw2hxn12ax5qa5kl1ldfns0njg8533y3mzslvd5cx0kf"))))))
+
+(define-public clang-runtime-3.8
+  (clang-runtime-from-llvm
+   llvm-3.8
+   "0p0y85c7izndbpg2l816z7z7558axq11d5pwkm4h11sdw7d13w0d"
+   '("clang-runtime-asan-build-fixes.patch")))
+
+(define-public clang-3.8
+  (clang-from-llvm llvm-3.8 clang-runtime-3.8
+                   "1prc72xmkgx8wrzmrr337776676nhsp1qd3mw2bvb22bzdnq7lsc"
+                   #:patches '("clang-3.8-libc-search-path.patch")))
 
 (define-public llvm-3.7
   (package (inherit llvm)
@@ -267,7 +319,8 @@ code analysis tools.")
 
 (define-public clang-3.7
   (clang-from-llvm llvm-3.7 clang-runtime-3.7
-                   "0x065d0w9b51xvdjxwfzjxng0gzpbx45fgiaxpap45ragi61dqjn"))
+                   "0x065d0w9b51xvdjxwfzjxng0gzpbx45fgiaxpap45ragi61dqjn"
+                   #:patches '("clang-3.5-libc-search-path.patch")))
 
 (define-public llvm-3.6
   (package (inherit llvm)
@@ -289,7 +342,8 @@ code analysis tools.")
 
 (define-public clang-3.6
   (clang-from-llvm llvm-3.6 clang-runtime-3.6
-                   "1wwr8s6lzr324hv4s1k6na4j5zv6n9kdhi14s4kb9b13d93814df"))
+                   "1wwr8s6lzr324hv4s1k6na4j5zv6n9kdhi14s4kb9b13d93814df"
+                   #:patches '("clang-3.5-libc-search-path.patch")))
 
 (define-public llvm-3.5
   (package (inherit llvm)
@@ -313,7 +367,8 @@ code analysis tools.")
 
 (define-public clang-3.5
   (clang-from-llvm llvm-3.5 clang-runtime-3.5
-                   "0846h8vn3zlc00jkmvrmy88gc6ql6014c02l4jv78fpvfigmgssg"))
+                   "0846h8vn3zlc00jkmvrmy88gc6ql6014c02l4jv78fpvfigmgssg"
+                   #:patches '("clang-3.5-libc-search-path.patch")))
 
 (define-public llvm-for-extempore
   (package (inherit llvm-3.7)
diff --git a/gnu/packages/patches/clang-libc-search-path.patch b/gnu/packages/patches/clang-3.5-libc-search-path.patch
similarity index 100%
rename from gnu/packages/patches/clang-libc-search-path.patch
rename to gnu/packages/patches/clang-3.5-libc-search-path.patch
diff --git a/gnu/packages/patches/clang-6.0-libc-search-path.patch b/gnu/packages/patches/clang-6.0-libc-search-path.patch
new file mode 100644
index 000000000..a62e8063c
--- /dev/null
+++ b/gnu/packages/patches/clang-6.0-libc-search-path.patch
@@ -0,0 +1,67 @@
+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.
+
+--- cfe-6.0.0.src/lib/Driver/ToolChains/Linux.cpp
++++ cfe-6.0.0.src/lib/Driver/ToolChains/Linux.cpp
+@@ -207,7 +207,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()) {
+@@ -255,6 +257,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.
+@@ -329,14 +332,12 @@
+     addPathIfExists(D, D.Dir + "/../" + OSLibDir, Paths);
+   }
+ 
+-  addPathIfExists(D, SysRoot + "/lib/" + MultiarchTriple, Paths);
+-  addPathIfExists(D, SysRoot + "/lib/../" + OSLibDir, Paths);
+-  addPathIfExists(D, SysRoot + "/usr/lib/" + MultiarchTriple, Paths);
+-  addPathIfExists(D, SysRoot + "/usr/lib/../" + OSLibDir, Paths);
+-
+   // Try walking via the GCC triple path in case of biarch or multiarch GCC
+   // installations with strange symlinks.
+   if (GCCInstallation.isValid()) {
++    // The following code would end up adding things like
++    // "/usr/lib/x86_64-unknown-linux-gnu/../../lib64" to the search path.
++#if 0
+     addPathIfExists(D,
+                     SysRoot + "/usr/lib/" + GCCInstallation.getTriple().str() +
+                         "/../../" + OSLibDir,
+@@ -349,6 +350,7 @@
+                              BiarchSibling.gccSuffix(),
+                       Paths);
+     }
++#endif
+ 
+     // See comments above on the multilib variant for details of why this is
+     // included even from outside the sysroot.
+@@ -373,8 +375,9 @@
+   if (StringRef(D.Dir).startswith(SysRoot))
+     addPathIfExists(D, D.Dir + "/../lib", Paths);
+ 
+-  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; }
-- 
2.17.0


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 487 bytes --]

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [bug#31025] [core-updates] LLVM 6.0
  2018-04-04 14:55   ` Marius Bakke
@ 2018-04-05  8:20     ` Ludovic Courtès
  2018-04-06 18:24       ` bug#31025: " Marius Bakke
  0 siblings, 1 reply; 8+ messages in thread
From: Ludovic Courtès @ 2018-04-05  8:20 UTC (permalink / raw)
  To: Marius Bakke; +Cc: 31025

Marius Bakke <mbakke@fastmail.com> skribis:

> Ludovic Courtès <ludo@gnu.org> writes:

[...]

>> Does this change the derivation of ‘llvm’ proper?  If not, this could
>> even go to ‘master’.
>
> LLVM is unaffected by this patch, only "clang" is changed.  So I believe
> master is fine indeed.
>
> However as it stands, many packages would break since the "clang"
> variable changes from 3.8 to 6.0.  I'll test out each dependent and
> see if they can be updated or change back to 3.8/3.9 for those.

Right, we could keep 3.8 as the default for now.

> I'm busy today, but can probably commit this tomorrow.  Meanwhile, how
> does the updated patch look?

LGTM, thanks!

Ludo’.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [bug#31025] [core-updates] LLVM 6.0
  2018-04-02 16:46 [bug#31025] [core-updates] LLVM 6.0 Marius Bakke
  2018-04-04 11:50 ` Ludovic Courtès
  2018-04-04 13:27 ` Eric Bavier
@ 2018-04-05  8:47 ` Pjotr Prins
  2 siblings, 0 replies; 8+ messages in thread
From: Pjotr Prins @ 2018-04-05  8:47 UTC (permalink / raw)
  To: Marius Bakke; +Cc: 31025

On Mon, Apr 02, 2018 at 06:46:59PM +0200, Marius Bakke wrote:
> Hello!
> 
> This is an update for LLVM and Clang.  I haven't yet found a package
> that actually works with this new version; the consumers I've tested
> does not support LLVM >4.
> 
> However they can keep using the old version, and if there turns out to
> be a problem with 6.0 we can fix it later since there are no dependents.
> 
> WDYT?

Excellent. dlang ldc supports 6.0. I'll have a go soon. I want that!

Pj.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* bug#31025: [core-updates] LLVM 6.0
  2018-04-05  8:20     ` Ludovic Courtès
@ 2018-04-06 18:24       ` Marius Bakke
  2018-04-06 20:58         ` [bug#31025] " Ludovic Courtès
  0 siblings, 1 reply; 8+ messages in thread
From: Marius Bakke @ 2018-04-06 18:24 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 31025-done

[-- Attachment #1: Type: text/plain, Size: 760 bytes --]

Ludovic Courtès <ludo@gnu.org> writes:

> Marius Bakke <mbakke@fastmail.com> skribis:
>
>> Ludovic Courtès <ludo@gnu.org> writes:
>
> [...]
>
>>> Does this change the derivation of ‘llvm’ proper?  If not, this could
>>> even go to ‘master’.
>>
>> LLVM is unaffected by this patch, only "clang" is changed.  So I believe
>> master is fine indeed.
>>
>> However as it stands, many packages would break since the "clang"
>> variable changes from 3.8 to 6.0.  I'll test out each dependent and
>> see if they can be updated or change back to 3.8/3.9 for those.
>
> Right, we could keep 3.8 as the default for now.

I built all dependents and only two packages needed 3.8, so I changed
those instead.  Pushed to master with 9bdbabe9.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 487 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [bug#31025] [core-updates] LLVM 6.0
  2018-04-06 18:24       ` bug#31025: " Marius Bakke
@ 2018-04-06 20:58         ` Ludovic Courtès
  0 siblings, 0 replies; 8+ messages in thread
From: Ludovic Courtès @ 2018-04-06 20:58 UTC (permalink / raw)
  To: Marius Bakke; +Cc: 31025-done

Marius Bakke <mbakke@fastmail.com> skribis:

> Ludovic Courtès <ludo@gnu.org> writes:
>
>> Marius Bakke <mbakke@fastmail.com> skribis:
>>
>>> Ludovic Courtès <ludo@gnu.org> writes:
>>
>> [...]
>>
>>>> Does this change the derivation of ‘llvm’ proper?  If not, this could
>>>> even go to ‘master’.
>>>
>>> LLVM is unaffected by this patch, only "clang" is changed.  So I believe
>>> master is fine indeed.
>>>
>>> However as it stands, many packages would break since the "clang"
>>> variable changes from 3.8 to 6.0.  I'll test out each dependent and
>>> see if they can be updated or change back to 3.8/3.9 for those.
>>
>> Right, we could keep 3.8 as the default for now.
>
> I built all dependents and only two packages needed 3.8, so I changed
> those instead.  Pushed to master with 9bdbabe9.

Woohoo, thanks!

Ludo'.

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2018-04-06 20:59 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-04-02 16:46 [bug#31025] [core-updates] LLVM 6.0 Marius Bakke
2018-04-04 11:50 ` Ludovic Courtès
2018-04-04 14:55   ` Marius Bakke
2018-04-05  8:20     ` Ludovic Courtès
2018-04-06 18:24       ` bug#31025: " Marius Bakke
2018-04-06 20:58         ` [bug#31025] " Ludovic Courtès
2018-04-04 13:27 ` Eric Bavier
2018-04-05  8:47 ` Pjotr Prins

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).