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.master
parent
f5cc5de8b6
commit
5041cc28cb
|
@ -226,64 +226,59 @@ compiler. In LLVM this library is called \"compiler-rt\".")
|
||||||
(string-append "\"i686-unknown-linux-gnu\", "
|
(string-append "\"i686-unknown-linux-gnu\", "
|
||||||
all)))
|
all)))
|
||||||
#t))
|
#t))
|
||||||
(add-after
|
(add-after 'unpack 'set-glibc-file-names
|
||||||
'unpack 'set-glibc-file-names
|
(lambda* (#:key inputs #:allow-other-keys)
|
||||||
(lambda* (#:key inputs #:allow-other-keys)
|
(let ((libc (assoc-ref inputs "libc"))
|
||||||
(let ((libc (assoc-ref inputs "libc"))
|
(compiler-rt (assoc-ref inputs "clang-runtime"))
|
||||||
(compiler-rt (assoc-ref inputs "clang-runtime"))
|
(gcc (assoc-ref inputs "gcc")))
|
||||||
(gcc (assoc-ref inputs "gcc"))
|
,@(cond
|
||||||
(version
|
((version>=? version "6.0")
|
||||||
(string->number
|
`(;; Link to libclang_rt files from clang-runtime.
|
||||||
,(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 "\"")))
|
|
||||||
(substitute* "lib/Driver/ToolChain.cpp"
|
(substitute* "lib/Driver/ToolChain.cpp"
|
||||||
(("getDriver\\(\\)\\.ResourceDir")
|
(("getDriver\\(\\)\\.ResourceDir")
|
||||||
(string-append "\"" compiler-rt "\""))))
|
(string-append "\"" compiler-rt "\"")))
|
||||||
|
|
||||||
;; Make sure libc's libdir is on the search path, to
|
;; Make "LibDir" refer to <glibc>/lib so that it
|
||||||
;; allow crt1.o & co. to be found.
|
;; uses the right dynamic linker file name.
|
||||||
(substitute* "lib/Driver/ToolChains.cpp"
|
(substitute* "lib/Driver/ToolChains/Linux.cpp"
|
||||||
(("@GLIBC_LIBDIR@")
|
(("(^[[:blank:]]+LibDir = ).*" _ declaration)
|
||||||
(string-append libc "/lib")))))
|
(string-append declaration "\"" libc "/lib\";\n"))
|
||||||
#t)))
|
|
||||||
|
;; 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
|
(add-after 'install 'install-clean-up-/share/clang
|
||||||
(lambda* (#:key outputs #:allow-other-keys)
|
(lambda* (#:key outputs #:allow-other-keys)
|
||||||
(let* ((out (assoc-ref outputs "out"))
|
(let* ((out (assoc-ref outputs "out"))
|
||||||
|
|
Reference in New Issue