summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarius Bakke <mbakke@fastmail.com>2020-02-26 21:06:01 +0100
committerMarius Bakke <mbakke@fastmail.com>2020-02-26 21:52:47 +0100
commit5041cc28cb33a714ea40c91e14e55706d6dbb9dc (patch)
tree77a11636be7feda3ebe607799ba97cf620db8e57
parentf5cc5de8b6c542295b08c108d9a6f1ca52cdc37a (diff)
downloadpatches-5041cc28cb33a714ea40c91e14e55706d6dbb9dc.tar
patches-5041cc28cb33a714ea40c91e14e55706d6dbb9dc.tar.gz
gnu: clang: Move version conditionals out of the builder.
* gnu/packages/llvm.scm (clang-from-llvm)[arguments]: Rewrite phase 'set-glibc-file-names' to use VERSION>=? from (guix utils) and splice in the relevant build code, instead of doing the comparison at build time.
-rw-r--r--gnu/packages/llvm.scm107
1 files changed, 51 insertions, 56 deletions
diff --git a/gnu/packages/llvm.scm b/gnu/packages/llvm.scm
index 4a1a1239d7..41217d14f0 100644
--- a/gnu/packages/llvm.scm
+++ b/gnu/packages/llvm.scm
@@ -226,64 +226,59 @@ compiler. In LLVM this library is called \"compiler-rt\".")
(string-append "\"i686-unknown-linux-gnu\", "
all)))
#t))
- (add-after
- 'unpack 'set-glibc-file-names
- (lambda* (#:key inputs #:allow-other-keys)
- (let ((libc (assoc-ref inputs "libc"))
- (compiler-rt (assoc-ref inputs "clang-runtime"))
- (gcc (assoc-ref inputs "gcc"))
- (version
- (string->number
- ,(version-major (package-version clang-runtime)))))
- (cond
- ((> version 3)
- ;; 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 clang look for libstdc++ in the right
- ;; location.
- (("LibStdCXXIncludePathCandidates\\[\\] = \\{")
- (string-append
- "LibStdCXXIncludePathCandidates[] = { \"" gcc "/include/c++\","))
-
- ;; Make sure libc's libdir is on the search path, to
- ;; allow crt1.o & co. to be found.
- (("@GLIBC_LIBDIR@")
- (string-append libc "/lib"))))
- (else
- (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 "\"")))
+ (add-after 'unpack 'set-glibc-file-names
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let ((libc (assoc-ref inputs "libc"))
+ (compiler-rt (assoc-ref inputs "clang-runtime"))
+ (gcc (assoc-ref inputs "gcc")))
+ ,@(cond
+ ((version>=? version "6.0")
+ `(;; Link to libclang_rt files from clang-runtime.
(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)))
+ (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 clang look for libstdc++ in the right
+ ;; location.
+ (("LibStdCXXIncludePathCandidates\\[\\] = \\{")
+ (string-append
+ "LibStdCXXIncludePathCandidates[] = { \"" gcc
+ "/include/c++\","))
+
+ ;; Make sure libc's libdir is on the search path, to
+ ;; allow crt1.o & co. to be found.
+ (("@GLIBC_LIBDIR@")
+ (string-append libc "/lib")))))
+ (else
+ `((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 (version>=? version "3.8")
+ '((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)))
(add-after 'install 'install-clean-up-/share/clang
(lambda* (#:key outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))