gnu: clang-runtime: New package, propagated by clang.

* gnu/packages/llvm.scm (clang-runtime-from-llvm): New function.
  (clang-from-llvm): Add clang-runtime argument and propagate clang-runtime
  input.
  (clang-runtime, clang-runtime-3.5): New variables.
  (clang, clang-3.5): Adapt to propagate clang-runtime modules.
This commit is contained in:
Andy Wingo 2015-08-17 09:21:09 +02:00 committed by Mark H Weaver
parent 22d0e9b792
commit b81f56932e
1 changed files with 51 additions and 8 deletions

View File

@ -62,7 +62,34 @@ languages is in development. The compiler infrastructure includes mirror sets
of programming tools as well as libraries with equivalent functionality.") of programming tools as well as libraries with equivalent functionality.")
(license ncsa))) (license ncsa)))
(define (clang-from-llvm llvm hash) (define (clang-runtime-from-llvm llvm hash)
(package
(name "clang-runtime")
(version (package-version llvm))
(source
(origin
(method url-fetch)
(uri (string-append "http://llvm.org/releases/"
version "/compiler-rt-" version ".src.tar.xz"))
(sha256 (base32 hash))))
(build-system cmake-build-system)
(native-inputs (package-native-inputs llvm))
(inputs
`(("llvm" ,llvm)))
(arguments
`(;; Don't use '-g' during the build to save space.
#:build-type "Release"))
(home-page "http://compiler-rt.llvm.org")
(synopsis "Runtime library for Clang/LLVM")
(description
"The \"clang-runtime\" library provides the implementations of run-time
functions for C and C++ programs. It also provides header files that allow C
and C++ source code to interface with the \"sanitization\" passes of the clang
compiler. In LLVM this library is called \"compiler-rt\".")
(license ncsa)))
(define (clang-from-llvm llvm clang-runtime hash)
(package (package
(name "clang") (name "clang")
(version (package-version llvm)) (version (package-version llvm))
@ -83,7 +110,8 @@ of programming tools as well as libraries with equivalent functionality.")
("gcc-lib" ,gcc "lib") ("gcc-lib" ,gcc "lib")
,@(package-inputs llvm))) ,@(package-inputs llvm)))
(propagated-inputs (propagated-inputs
`(("llvm" ,llvm))) `(("llvm" ,llvm)
("clang-runtime" ,clang-runtime)))
(arguments (arguments
`(#:configure-flags `(#:configure-flags
(list "-DCLANG_INCLUDE_TESTS=True" (list "-DCLANG_INCLUDE_TESTS=True"
@ -104,13 +132,18 @@ of programming tools as well as libraries with equivalent functionality.")
(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"))
;; Patch the 'getLinuxDynamicLinker' function to that (compiler-rt (assoc-ref inputs "clang-runtime")))
;; it uses the right dynamic linker file name.
(substitute* "lib/Driver/Tools.cpp" (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") (("/lib64/ld-linux-x86-64.so.2")
(string-append libc (string-append libc
,(glibc-dynamic-linker)))) ,(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 ;; Same for libc's libdir, to allow crt1.o & co. to be
;; found. ;; found.
@ -136,8 +169,13 @@ project includes the Clang front end, the Clang static analyzer, and several
code analysis tools.") code analysis tools.")
(license ncsa))) (license ncsa)))
(define-public clang-runtime
(clang-runtime-from-llvm
llvm
"04bbn946jninynkrjyp337xqs8ihn4fkz5xgvmywxkddwmwznjbz"))
(define-public clang (define-public clang
(clang-from-llvm llvm (clang-from-llvm llvm clang-runtime
"0b8825mvdhfk5r9gwcwp1j2dl9kw5glgyk7pybq2dzhrh4vnj3my")) "0b8825mvdhfk5r9gwcwp1j2dl9kw5glgyk7pybq2dzhrh4vnj3my"))
(define-public llvm-3.5 (define-public llvm-3.5
@ -152,6 +190,11 @@ code analysis tools.")
(base32 (base32
"00swb43mzlvda8306arlg2jw7g6k3acwfccgf1k4c2pgd3rrkq98")))))) "00swb43mzlvda8306arlg2jw7g6k3acwfccgf1k4c2pgd3rrkq98"))))))
(define-public clang-runtime-3.5
(clang-runtime-from-llvm
llvm-3.5
"0dl1kbrhz96djsxqr61iw5h788s7ncfpfb7aayixky1bhdaydcx4"))
(define-public clang-3.5 (define-public clang-3.5
(clang-from-llvm llvm-3.5 (clang-from-llvm llvm-3.5 clang-runtime-3.5
"12yv3jwdjcbkrx7zjm8wh4jrvb59v8fdw4mnmz3zc1jb00p9k07w")) "12yv3jwdjcbkrx7zjm8wh4jrvb59v8fdw4mnmz3zc1jb00p9k07w"))