Merge branch 'master' into core-updates
[jackhill/guix/guix.git] / gnu / packages / llvm.scm
1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2014, 2016 Eric Bavier <bavier@member.fsf.org>
3 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
4 ;;; Copyright © 2015, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
5 ;;; Copyright © 2016 Dennis Mungai <dmngaie@gmail.com>
6 ;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net>
7 ;;; Copyright © 2017 Roel Janssen <roel@gnu.org>
8 ;;;
9 ;;; This file is part of GNU Guix.
10 ;;;
11 ;;; GNU Guix is free software; you can redistribute it and/or modify it
12 ;;; under the terms of the GNU General Public License as published by
13 ;;; the Free Software Foundation; either version 3 of the License, or (at
14 ;;; your option) any later version.
15 ;;;
16 ;;; GNU Guix is distributed in the hope that it will be useful, but
17 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
18 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 ;;; GNU General Public License for more details.
20 ;;;
21 ;;; You should have received a copy of the GNU General Public License
22 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
23
24 (define-module (gnu packages llvm)
25 #:use-module (guix packages)
26 #:use-module ((guix licenses) #:prefix license:)
27 #:use-module (guix download)
28 #:use-module (guix utils)
29 #:use-module (guix build-system gnu)
30 #:use-module (guix build-system cmake)
31 #:use-module (gnu packages)
32 #:use-module (gnu packages gcc)
33 #:use-module (gnu packages bootstrap) ;glibc-dynamic-linker
34 #:use-module (gnu packages compression)
35 #:use-module (gnu packages libffi)
36 #:use-module (gnu packages perl)
37 #:use-module (gnu packages python)
38 #:use-module (gnu packages xml))
39
40 (define-public llvm
41 (package
42 (name "llvm")
43 (version "3.8.1")
44 (source
45 (origin
46 (method url-fetch)
47 (uri (string-append "http://llvm.org/releases/"
48 version "/llvm-" version ".src.tar.xz"))
49 (sha256
50 (base32
51 "1ybmnid4pw2hxn12ax5qa5kl1ldfns0njg8533y3mzslvd5cx0kf"))))
52 (build-system cmake-build-system)
53 (native-inputs
54 `(("python" ,python-2) ;bytes->str conversion in clang>=3.7 needs python-2
55 ("perl" ,perl)))
56 (inputs
57 `(("libffi" ,libffi)))
58 (propagated-inputs
59 `(("zlib" ,zlib))) ;to use output from llvm-config
60 (arguments
61 `(#:configure-flags '("-DCMAKE_SKIP_BUILD_RPATH=FALSE"
62 "-DCMAKE_BUILD_WITH_INSTALL_RPATH=FALSE"
63 "-DBUILD_SHARED_LIBS:BOOL=TRUE"
64 "-DLLVM_ENABLE_FFI:BOOL=TRUE"
65 "-DLLVM_INSTALL_UTILS=ON") ; Needed for rustc.
66
67 ;; Don't use '-g' during the build, to save space.
68 #:build-type "Release"
69 #:phases (modify-phases %standard-phases
70 (add-before 'build 'shared-lib-workaround
71 ;; Even with CMAKE_SKIP_BUILD_RPATH=FALSE, llvm-tblgen
72 ;; doesn't seem to get the correct rpath to be able to run
73 ;; from the build directory. Set LD_LIBRARY_PATH as a
74 ;; workaround.
75 (lambda _
76 (setenv "LD_LIBRARY_PATH"
77 (string-append (getcwd) "/lib"))
78 #t)))))
79 (home-page "https://www.llvm.org")
80 (synopsis "Optimizing compiler infrastructure")
81 (description
82 "LLVM is a compiler infrastructure designed for compile-time, link-time,
83 runtime, and idle-time optimization of programs from arbitrary programming
84 languages. It currently supports compilation of C and C++ programs, using
85 front-ends derived from GCC 4.0.1. A new front-end for the C family of
86 languages is in development. The compiler infrastructure includes mirror sets
87 of programming tools as well as libraries with equivalent functionality.")
88 (license license:ncsa)))
89
90 (define-public llvm-with-rtti
91 (package (inherit llvm)
92 (name "llvm-with-rtti")
93 (arguments
94 (substitute-keyword-arguments (package-arguments llvm)
95 ((#:configure-flags flags)
96 `(append '("-DCMAKE_SKIP_BUILD_RPATH=FALSE"
97 "-DCMAKE_BUILD_WITH_INSTALL_RPATH=FALSE"
98 "-DLLVM_REQUIRES_RTTI=1")
99 ,flags))))))
100
101 (define* (clang-runtime-from-llvm llvm hash
102 #:optional (patches '()))
103 (package
104 (name "clang-runtime")
105 (version (package-version llvm))
106 (source
107 (origin
108 (method url-fetch)
109 (uri (string-append "http://llvm.org/releases/"
110 version "/compiler-rt-" version ".src.tar.xz"))
111 (sha256 (base32 hash))
112 (patches (map search-patch patches))))
113 (build-system cmake-build-system)
114 (native-inputs (package-native-inputs llvm))
115 (inputs
116 `(("llvm" ,llvm)))
117 (arguments
118 `(;; Don't use '-g' during the build to save space.
119 #:build-type "Release"
120 #:tests? #f)) ; Tests require gtest
121 (home-page "https://compiler-rt.llvm.org")
122 (synopsis "Runtime library for Clang/LLVM")
123 (description
124 "The \"clang-runtime\" library provides the implementations of run-time
125 functions for C and C++ programs. It also provides header files that allow C
126 and C++ source code to interface with the \"sanitization\" passes of the clang
127 compiler. In LLVM this library is called \"compiler-rt\".")
128 (license license:ncsa)
129
130 ;; <https://compiler-rt.llvm.org/> doesn't list MIPS as supported.
131 (supported-systems (delete "mips64el-linux" %supported-systems))))
132
133 (define* (clang-from-llvm llvm clang-runtime hash
134 #:key (patches '("clang-libc-search-path.patch")))
135 (package
136 (name "clang")
137 (version (package-version llvm))
138 (source
139 (origin
140 (method url-fetch)
141 (uri (string-append "http://llvm.org/releases/"
142 version "/cfe-" version ".src.tar.xz"))
143 (sha256 (base32 hash))
144 (patches (map search-patch patches))))
145 ;; Using cmake allows us to treat llvm as an external library. There
146 ;; doesn't seem to be any way to do this with clang's autotools-based
147 ;; build system.
148 (build-system cmake-build-system)
149 (native-inputs (package-native-inputs llvm))
150 (inputs
151 `(("libxml2" ,libxml2)
152 ("gcc-lib" ,gcc "lib")
153 ,@(package-inputs llvm)))
154 (propagated-inputs
155 `(("llvm" ,llvm)
156 ("clang-runtime" ,clang-runtime)))
157 (arguments
158 `(#:configure-flags
159 (list "-DCLANG_INCLUDE_TESTS=True"
160
161 ;; Find libgcc_s, crtbegin.o, and crtend.o.
162 (string-append "-DGCC_INSTALL_PREFIX="
163 (assoc-ref %build-inputs "gcc-lib"))
164
165 ;; Use a sane default include directory.
166 (string-append "-DC_INCLUDE_DIRS="
167 (assoc-ref %build-inputs "libc")
168 "/include"))
169
170 ;; Don't use '-g' during the build to save space.
171 #:build-type "Release"
172
173 #:phases (modify-phases %standard-phases
174 (add-after
175 'unpack 'set-glibc-file-names
176 (lambda* (#:key inputs #:allow-other-keys)
177 (let ((libc (assoc-ref inputs "libc"))
178 (compiler-rt (assoc-ref inputs "clang-runtime")))
179 (substitute* "lib/Driver/Tools.cpp"
180 ;; Patch the 'getLinuxDynamicLinker' function to that
181 ;; it uses the right dynamic linker file name.
182 (("/lib64/ld-linux-x86-64.so.2")
183 (string-append libc
184 ,(glibc-dynamic-linker)))
185
186 ;; Link to libclang_rt files from clang-runtime.
187 (("TC\\.getDriver\\(\\)\\.ResourceDir")
188 (string-append "\"" compiler-rt "\"")))
189
190 ;; Same for libc's libdir, to allow crt1.o & co. to be
191 ;; found.
192 (substitute* "lib/Driver/ToolChains.cpp"
193 (("@GLIBC_LIBDIR@")
194 (string-append libc "/lib")))))))))
195
196 ;; Clang supports the same environment variables as GCC.
197 (native-search-paths
198 (list (search-path-specification
199 (variable "CPATH")
200 (files '("include")))
201 (search-path-specification
202 (variable "LIBRARY_PATH")
203 (files '("lib" "lib64")))))
204
205 (home-page "https://clang.llvm.org")
206 (synopsis "C language family frontend for LLVM")
207 (description
208 "Clang is a compiler front end for the C, C++, Objective-C and
209 Objective-C++ programming languages. It uses LLVM as its back end. The Clang
210 project includes the Clang front end, the Clang static analyzer, and several
211 code analysis tools.")
212 (license license:ncsa)))
213
214 (define-public clang-runtime
215 (clang-runtime-from-llvm
216 llvm
217 "0p0y85c7izndbpg2l816z7z7558axq11d5pwkm4h11sdw7d13w0d"
218 '("clang-runtime-asan-build-fixes.patch")))
219
220 (define-public clang
221 (clang-from-llvm llvm clang-runtime
222 "1prc72xmkgx8wrzmrr337776676nhsp1qd3mw2bvb22bzdnq7lsc"
223 #:patches '("clang-3.8-libc-search-path.patch")))
224
225 (define-public llvm-3.9.1
226 (package (inherit llvm)
227 (name "llvm")
228 (version "3.9.1")
229 (source
230 (origin
231 (method url-fetch)
232 (uri (string-append "http://llvm.org/releases/"
233 version "/llvm-" version ".src.tar.xz"))
234 (sha256
235 (base32
236 "1vi9sf7rx1q04wj479rsvxayb6z740iaz3qniwp266fgp5a07n8z"))))))
237
238 (define-public clang-runtime-3.9.1
239 (clang-runtime-from-llvm
240 llvm-3.9.1
241 "16gc2gdmp5c800qvydrdhsp0bzb97s8wrakl6i8a4lgslnqnf2fk"
242 '("clang-runtime-asan-build-fixes.patch"
243 "clang-runtime-esan-build-fixes.patch")))
244
245 (define-public clang-3.9.1
246 (clang-from-llvm llvm-3.9.1 clang-runtime-3.9.1
247 "0qsyyb40iwifhhlx9a3drf8z6ni6zwyk3bvh0kx2gs6yjsxwxi76"
248 #:patches '()))
249
250 (define-public llvm-3.7
251 (package (inherit llvm)
252 (version "3.7.1")
253 (source
254 (origin
255 (method url-fetch)
256 (uri (string-append "http://llvm.org/releases/"
257 version "/llvm-" version ".src.tar.xz"))
258 (sha256
259 (base32
260 "1masakdp9g2dan1yrazg7md5am2vacbkb3nahb3dchpc1knr8xxy"))))))
261
262 (define-public clang-runtime-3.7
263 (clang-runtime-from-llvm
264 llvm-3.7
265 "10c1mz2q4bdq9bqfgr3dirc6hz1h3sq8573srd5q5lr7m7j6jiwx"
266 '("clang-runtime-asan-build-fixes.patch")))
267
268 (define-public clang-3.7
269 (clang-from-llvm llvm-3.7 clang-runtime-3.7
270 "0x065d0w9b51xvdjxwfzjxng0gzpbx45fgiaxpap45ragi61dqjn"))
271
272 (define-public llvm-3.6
273 (package (inherit llvm)
274 (version "3.6.2")
275 (source
276 (origin
277 (method url-fetch)
278 (uri (string-append "http://llvm.org/releases/"
279 version "/llvm-" version ".src.tar.xz"))
280 (sha256
281 (base32
282 "153vcvj8gvgwakzr4j0kndc0b7wn91c2g1vy2vg24s6spxcc23gn"))))))
283
284 (define-public clang-runtime-3.6
285 (clang-runtime-from-llvm
286 llvm-3.6
287 "11qx8d3pbfqjaj2x207pvlvzihbs1z2xbw4crpz7aid6h1yz6bqg"
288 '("clang-runtime-asan-build-fixes.patch")))
289
290 (define-public clang-3.6
291 (clang-from-llvm llvm-3.6 clang-runtime-3.6
292 "1wwr8s6lzr324hv4s1k6na4j5zv6n9kdhi14s4kb9b13d93814df"))
293
294 (define-public llvm-3.5
295 (package (inherit llvm)
296 (version "3.5.2")
297 (source
298 (origin
299 (method url-fetch)
300 (uri (string-append "http://llvm.org/releases/"
301 version "/llvm-" version ".src.tar.xz"))
302 (patches
303 (search-patches "llvm-3.5-fix-clang-build-with-gcc5.patch"))
304 (sha256
305 (base32
306 "0xf5q17kkxsrm2gsi93h4pwlv663kji73r2g4asb97klsmb626a4"))))))
307
308 (define-public clang-runtime-3.5
309 (clang-runtime-from-llvm
310 llvm-3.5
311 "1hsdnzzdr5kglz6fnv3lcsjs222zjsy14y8ax9dy6zqysanplbal"
312 '("clang-runtime-asan-build-fixes.patch")))
313
314 (define-public clang-3.5
315 (clang-from-llvm llvm-3.5 clang-runtime-3.5
316 "0846h8vn3zlc00jkmvrmy88gc6ql6014c02l4jv78fpvfigmgssg"))
317
318 (define-public llvm-for-extempore
319 (package (inherit llvm-3.7)
320 (name "llvm-for-extempore")
321 (source
322 (origin
323 (inherit (package-source llvm-3.7))
324 (patches (list (search-patch "llvm-for-extempore.patch")))))
325 ;; Extempore refuses to build on architectures other than x86_64
326 (supported-systems '("x86_64-linux"))))