;;; Copyright © 2020 Giacomo Leidi <goodoldpaul@autistici.org>
;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021 Julien Lepiller <julien@lepiller.eu>
;;;
;;; This file is part of GNU Guix.
;;;
#:use-module ((guix licenses) #:prefix license:)
#:use-module (guix download)
#:use-module (guix git-download)
+ #:use-module (guix memoization)
#:use-module (guix utils)
#:use-module (guix build-system gnu)
#:use-module (guix build-system cmake)
#:use-module (gnu packages lua)
#:use-module (gnu packages mpi)
#:use-module (gnu packages ncurses)
+ #:use-module (gnu packages ocaml)
#:use-module (gnu packages onc-rpc)
#:use-module (gnu packages perl)
#:use-module (gnu packages pkg-config)
("i586" => "X86"))))
(define (llvm-uri component version)
- (if (version>=? version "9.0.1")
- (string-append "https://github.com/llvm/llvm-project/releases/download"
- "/llvmorg-" version "/" component "-" version ".src.tar.xz")
- (string-append "https://releases.llvm.org/" version "/" component "-"
- version ".src.tar.xz")))
+ (string-append "https://github.com/llvm/llvm-project/releases/download"
+ "/llvmorg-" version "/" component "-" version ".src.tar.xz"))
(define* (clang-runtime-from-llvm llvm hash
#:optional (patches '()))
(base32
"153vcvj8gvgwakzr4j0kndc0b7wn91c2g1vy2vg24s6spxcc23gn"))))))
-(define-public clang-runtime-3.6
- (clang-runtime-from-llvm
- llvm-3.6
- "11qx8d3pbfqjaj2x207pvlvzihbs1z2xbw4crpz7aid6h1yz6bqg"
- '("clang-runtime-asan-build-fixes.patch")))
-
-(define-public clang-3.6
- (clang-from-llvm llvm-3.6 clang-runtime-3.6
- "1wwr8s6lzr324hv4s1k6na4j5zv6n9kdhi14s4kb9b13d93814df"
- #:patches '("clang-3.5-libc-search-path.patch")))
-
(define-public llvm-3.5
(package (inherit llvm-3.6)
(version "3.5.2")
'("clang-runtime-asan-build-fixes.patch"
"clang-runtime-3.5-libsanitizer-mode-field.patch"
"clang-3.5-libsanitizer-ustat-fix.patch"))))
- (package
- (inherit runtime)
+ (package/inherit runtime
(arguments
(substitute-keyword-arguments (package-arguments runtime)
((#:phases phases '%standard-phases)
(synopsis "Rename every occurrence of a symbol using clang-rename")
(description "This package renames every occurrence of a symbol at point
using @code{clang-rename}.")))
+
+(define make-ocaml-llvm
+ ;; Make it a memoizing procedure so its callers below don't end up defining
+ ;; two equal-but-not-eq "ocaml-llvm" packages for the default LLVM.
+ (mlambdaq (llvm)
+ (package
+ (inherit llvm)
+ (name "ocaml-llvm")
+ (outputs '("out"))
+ (arguments
+ `(#:configure-flags
+ (list
+ (string-append "-DLLVM_OCAML_EXTERNAL_LLVM_LIBDIR="
+ (assoc-ref %build-inputs "llvm") "/lib")
+ "-DBUILD_SHARED_LIBS=TRUE"
+ "-DLLVM_OCAML_OUT_OF_TREE=TRUE"
+ (string-append "-DLLVM_OCAML_INSTALL_PATH="
+ (assoc-ref %outputs "out") "/lib/ocaml/site-lib"))
+ #:phases
+ (modify-phases %standard-phases
+ (replace 'build
+ (lambda _
+ (invoke "make" "ocaml_all")))
+ (replace 'install
+ (lambda _
+ (invoke "cmake" "-P" "bindings/ocaml/cmake_install.cmake"))))))
+ (inputs
+ `(("llvm" ,llvm)))
+ (native-inputs
+ `(("ocaml" ,ocaml)
+ ("ocaml-findlib" ,ocaml-findlib)
+ ("ocaml-ounit" ,ocaml-ounit)
+ ("python" ,python)))
+ (propagated-inputs
+ `(("ocaml-integers" ,ocaml-integers)
+ ("ocaml-ctypes" ,ocaml-ctypes)))
+ (synopsis "OCaml bindings to LLVM")
+ (description "This package contains the OCaml bindings distributed with
+LLVM."))))
+
+(define-public ocaml-llvm (make-ocaml-llvm llvm))
+(define-public ocaml-llvm-9 (make-ocaml-llvm llvm-9))
+(define-public ocaml-llvm-10 (make-ocaml-llvm llvm-10))
+(define-public ocaml-llvm-11 (make-ocaml-llvm llvm-11))