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.
This commit is contained in:
Marius Bakke 2020-02-26 21:06:01 +01:00
parent f5cc5de8b6
commit 5041cc28cb
No known key found for this signature in database
GPG key ID: A2A06DF2A33A54FA

View file

@ -226,18 +226,14 @@ (define* (clang-from-llvm llvm clang-runtime hash
(string-append "\"i686-unknown-linux-gnu\", "
all)))
#t))
(add-after
'unpack 'set-glibc-file-names
(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.
(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 "\"")))
@ -252,14 +248,15 @@ (define* (clang-from-llvm llvm clang-runtime hash
;; location.
(("LibStdCXXIncludePathCandidates\\[\\] = \\{")
(string-append
"LibStdCXXIncludePathCandidates[] = { \"" gcc "/include/c++\","))
"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"))))
(string-append libc "/lib")))))
(else
(substitute* "lib/Driver/Tools.cpp"
`((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")
@ -268,21 +265,19 @@ (define* (clang-from-llvm llvm clang-runtime hash
;; 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"
,@(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 "\""))))
'((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")))))
(string-append libc "/lib"))))))
#t)))
(add-after 'install 'install-clean-up-/share/clang
(lambda* (#:key outputs #:allow-other-keys)