summary refs log tree commit diff
path: root/gnu/packages/llvm.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/llvm.scm')
-rw-r--r--gnu/packages/llvm.scm134
1 files changed, 130 insertions, 4 deletions
diff --git a/gnu/packages/llvm.scm b/gnu/packages/llvm.scm
index b710318a69..0a65d4aa57 100644
--- a/gnu/packages/llvm.scm
+++ b/gnu/packages/llvm.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016 Dennis Mungai <dmngaie@gmail.com>
-;;; Copyright © 2016, 2018, 2019, 2020 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2016, 2018, 2019, 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 Roel Janssen <roel@gnu.org>
 ;;; Copyright © 2018, 2019, 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
@@ -476,17 +476,17 @@ output), and Binutils.")
               ("libc-debug" ,glibc "debug")
               ("libc-static" ,glibc "static")))))
 
-(define-public llvm-11
+(define-public llvm-12
   (package
     (name "llvm")
-    (version "11.0.0")
+    (version "12.0.0")
     (source
      (origin
       (method url-fetch)
       (uri (llvm-uri "llvm" version))
       (sha256
        (base32
-        "0s94lwil98w7zb7cjrbnxli0z7gklb312pkw74xs1d6zk346hgwi"))))
+        "0l4b79gwfvxild974aigcq1yigypjsk2j5p59syhl6ksd744gp29"))))
     (build-system cmake-build-system)
     (outputs '("out" "opt-viewer"))
     (native-inputs
@@ -538,6 +538,41 @@ languages is in development.  The compiler infrastructure includes mirror sets
 of programming tools as well as libraries with equivalent functionality.")
     (license license:asl2.0)))  ;with LLVM exceptions, see LICENSE.txt
 
+(define-public clang-runtime-12
+  (clang-runtime-from-llvm
+   llvm-12
+   "0d444qihq9jhqnfv003cr704v363va72zl6qaw2algj1c85cva45"))
+
+(define-public clang-12
+  (clang-from-llvm llvm-12 clang-runtime-12
+                   "1vd9rhhrd8ghdg111lac7w8by71y9l14yh5zxfijsm6lj4p4avp2"
+                   #:patches '("clang-11.0-libc-search-path.patch")
+                   #:tools-extra
+                   (origin
+                     (method url-fetch)
+                     (uri (llvm-uri "clang-tools-extra"
+                                    (package-version llvm-12)))
+                     (patches
+                      (search-patches "clang-12-tools-extra-directory.patch"))
+                     (sha256
+                      (base32
+                       "0p3dzr0qa7mar83y66xa5m5apynf6ia0lsdsq6axwnm64ysy0hdd")))))
+
+(define-public clang-toolchain-12
+  (make-clang-toolchain clang-12))
+
+(define-public llvm-11
+  (package
+    (inherit llvm-12)
+    (version "11.0.0")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (llvm-uri "llvm" version))
+      (sha256
+       (base32
+        "0s94lwil98w7zb7cjrbnxli0z7gklb312pkw74xs1d6zk346hgwi"))))))
+
 (define-public clang-runtime-11
   (clang-runtime-from-llvm
    llvm-11
@@ -956,6 +991,97 @@ use with Clang, targeting C++11, C++14 and above.")
      `(("clang" ,clang-6)
        ("llvm" ,llvm-6)))))
 
+(define-public libcxxabi-6
+  (package
+    (name "libcxxabi")
+    (version "6.0.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/llvm/llvm-project")
+             (commit (string-append "llvmorg-" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0ki6796b5z08kh3a3rbysr5wwb2dkl6wal5dzd03i4li5xfkvx1g"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:configure-flags
+       (list (string-append "-DLIBCXXABI_LIBCXX_INCLUDES="
+                            (assoc-ref %build-inputs "libcxx")
+                            "/include")
+             "-DCMAKE_C_COMPILER=clang"
+             "-DCMAKE_CXX_COMPILER=clang++")
+       #:phases
+       (modify-phases (@ (guix build cmake-build-system) %standard-phases)
+         (add-after 'unpack 'chdir
+           (lambda _ (chdir "libcxxabi")))
+         (add-after 'set-paths 'adjust-CPLUS_INCLUDE_PATH
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((gcc (assoc-ref inputs  "gcc")))
+               ;; Hide GCC's C++ headers so that they do not interfere with
+               ;; the ones we are attempting to build.
+               (setenv "CPLUS_INCLUDE_PATH"
+                       (string-join
+                        (cons (string-append
+                               (assoc-ref inputs "libcxx") "/include/c++/v1")
+                              (delete (string-append gcc "/include/c++")
+                                      (string-split (getenv "CPLUS_INCLUDE_PATH")
+                                                    #\:)))
+                        ":"))
+               (format #true
+                       "environment variable `CPLUS_INCLUDE_PATH' changed to ~a~%"
+                       (getenv "CPLUS_INCLUDE_PATH")))))
+         (add-after 'install 'install-headers
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((include-dir (string-append
+                                 (assoc-ref outputs "out") "/include")))
+               (install-file "../libcxxabi/include/__cxxabi_config.h" include-dir)
+               (install-file "../libcxxabi/include/cxxabi.h" include-dir)))))))
+    (native-inputs
+     `(("clang" ,clang-6)
+       ("llvm" ,llvm-6)
+       ("libcxx" ,libcxx-6)))
+    (home-page "https://libcxxabi.llvm.org")
+    (synopsis "C++ standard library support")
+    (description
+     "This package provides an implementation of low level support for a
+standard C++ library.")
+    (license license:expat)))
+
+(define-public libcxx+libcxxabi-6
+  (package
+    (inherit libcxx-6)
+    (name "libcxx+libcxxabi")
+    (version (package-version libcxx-6))
+    (arguments
+     `(#:configure-flags
+       (list "-DLIBCXX_CXX_ABI=libcxxabi"
+             (string-append "-DLIBCXX_CXX_ABI_INCLUDE_PATHS="
+                            (assoc-ref %build-inputs "libcxxabi")
+                            "/include"))
+       #:phases
+       (modify-phases (@ (guix build cmake-build-system) %standard-phases)
+         (add-after 'set-paths 'adjust-CPLUS_INCLUDE_PATH
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((gcc (assoc-ref inputs  "gcc")))
+               ;; Hide GCC's C++ headers so that they do not interfere with
+               ;; the ones we are attempting to build.
+               (setenv "CPLUS_INCLUDE_PATH"
+                       (string-join
+                        (delete (string-append gcc "/include/c++")
+                                (string-split (getenv "CPLUS_INCLUDE_PATH")
+                                              #\:))
+                        ":"))
+               (format #true
+                       "environment variable `CPLUS_INCLUDE_PATH' changed to ~a~%"
+                       (getenv "CPLUS_INCLUDE_PATH"))))))))
+    (native-inputs
+     `(("clang" ,clang-6)
+       ("llvm" ,llvm-6)
+       ("libcxxabi" ,libcxxabi-6)))))
+
 (define-public libclc
   (package
     (name "libclc")