summary refs log tree commit diff
diff options
context:
space:
mode:
authorAshish SHUKLA <ashish.is@lostca.se>2024-08-14 12:46:18 +0000
committerGuillaume Le Vaillant <glv@posteo.net>2024-08-15 14:23:39 +0200
commit1e2aca13eedc71b869e43525549080ba153e2887 (patch)
tree065e1ce424489d97dd9287896118354ac0b3addb
parentc9dd09855e69af3e166ddfdafb3a1f57a26901e0 (diff)
downloadguix-1e2aca13eedc71b869e43525549080ba153e2887.tar.gz
gnu: Add clasp-cl.
* gnu/packages/lisp.scm (clasp-cl): New variable.

Change-Id: I1d1dbc358c0e05577d3d535600c2f9863ad29fad
Signed-off-by: Guillaume Le Vaillant <glv@posteo.net>
-rw-r--r--gnu/packages/lisp.scm81
1 files changed, 81 insertions, 0 deletions
diff --git a/gnu/packages/lisp.scm b/gnu/packages/lisp.scm
index b446dd8b56..543ceb9953 100644
--- a/gnu/packages/lisp.scm
+++ b/gnu/packages/lisp.scm
@@ -28,6 +28,7 @@
 ;;; Copyright © 2023 Andrew Kravchuk <awkravchuk@gmail.com>
 ;;; Copyright © 2024 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2024 bigbug <bigbookofbug@proton.me>
+;;; Copyright © 2024 Ashish SHUKLA <ashish.is@lostca.se>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -67,6 +68,7 @@
   #:use-module (gnu packages base)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages bdw-gc)
+  #:use-module (gnu packages boost)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages curl)
@@ -85,15 +87,19 @@
   #:use-module (gnu packages libffcall)
   #:use-module (gnu packages libffi)
   #:use-module (gnu packages libsigsegv)
+  #:use-module (gnu packages libunwind)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages llvm)
   #:use-module (gnu packages m4)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages multiprecision)
   #:use-module (gnu packages ncurses)
+  #:use-module (gnu packages ninja)
   #:use-module (gnu packages notcurses)
   #:use-module (gnu packages onc-rpc)
   #:use-module (gnu packages perl)
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages pretty-print)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages sdl)
   #:use-module (gnu packages tcl)
@@ -367,6 +373,81 @@ generational, compacting garbage collector, and a convenient foreign-function
 interface.")
     (license license:asl2.0)))
 
+(define-public clasp-cl
+  (package
+    (name "clasp-cl")
+    (version "2.6.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/clasp-developers/clasp/releases/download/"
+             version "/clasp-" version ".tar.gz"))
+       (sha256
+        (base32 "10jjhcid6qp64gx29iyy5rqqijwy8hrvx66f0xabdj8w3007ky39"))))
+    (build-system gnu-build-system)
+    (inputs
+     (list boost clang-15 fmt `(,gcc "lib") gmp libelf libunwind llvm-15))
+    (native-inputs
+     (list binutils-gold ninja pkg-config sbcl))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (delete 'check)
+         (add-after 'unpack 'patch-koga
+           (lambda* _
+             (call-with-port (open-file "src/koga/units.lisp" "a")
+               (lambda (p)
+                 (display "(defmethod configure-unit (c (u (eql :git))))\n" p)))))
+         (add-before 'configure 'set-configure-environment
+           (lambda* _
+             (setenv "SOURCE_DATE_EPOCH" "1")
+             (setenv "ASDF_OUTPUT_TRANSLATIONS"
+                     (string-append (getenv "PWD")
+                                    ":"
+                                    (getenv "PWD")
+                                    "/__fasls"))))
+         (replace 'configure
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (clang (assoc-ref inputs "clang"))
+                   (ld-flags
+                    (string-join
+                     (apply append
+                            (map (lambda (f)
+                                   (list "-L" f "-rpath" f))
+                                 (string-split (getenv "LIBRARY_PATH") #\:)))
+                     ",")))
+               (invoke "sbcl"
+                       "--script"
+                       "./koga"
+                       "--skip-sync"
+                       "--build-mode=bytecode-faso"
+                       (string-append "--cc=" clang "/bin/clang")
+                       (string-append "--cxx=" clang "/bin/clang++")
+                       (string-append "--ldflags=-Wl," ld-flags)
+                       "--reproducible-build"
+                       "--package-path=/"
+                       (string-append "--bin-path=" out "/bin")
+                       (string-append "--lib-path=" out "/lib")
+                       (string-append "--share-path=" out "/share")))))
+         (replace 'build
+           (lambda* _
+             (invoke "ninja" "-C" "build")))
+         (replace 'install
+           (lambda* _
+             (invoke "ninja" "-C" "build" "install"))))))
+    (home-page "https://clasp-developers.github.io/")
+    (synopsis "Common Lisp implementation based on LLVM and C++")
+    (description "Clasp is a new Common Lisp implementation that seamlessly
+ interoperates with C++ libraries and programs using LLVM for compilation to
+ native code.  This allows Clasp to take advantage of a vast array of
+ preexisting libraries and programs, such as out of the scientific computing
+ ecosystem.  Embedding them in a Common Lisp environment allows you to make use
+ of rapid prototyping, incremental development, and other capabilities that
+ make it a powerful language.")
+    (license license:lgpl2.1+)))
+
 (define-public cl-asdf
   (package
     (name "cl-asdf")