about summary refs log tree commit diff
path: root/gn/packages/riscv.scm
diff options
context:
space:
mode:
authorArun Isaac2022-03-14 23:49:45 +0530
committerArun Isaac2022-03-14 23:49:45 +0530
commit8cb170336255fa5a236e74001236a7991eb7c9b7 (patch)
treeab5d9ad76bb58479e034c96e31fb70060a69ae98 /gn/packages/riscv.scm
parentf539d5b3ec13f78e1026c409d8e144b96df474e9 (diff)
downloadguix-bioinformatics-8cb170336255fa5a236e74001236a7991eb7c9b7.tar.gz
gn: Add wfmash.
This patch adds a version of wfmash that builds and runs successfully
on RISC-V.

* gn/packages/riscv.scm: New file.
Diffstat (limited to 'gn/packages/riscv.scm')
-rw-r--r--gn/packages/riscv.scm153
1 files changed, 153 insertions, 0 deletions
diff --git a/gn/packages/riscv.scm b/gn/packages/riscv.scm
new file mode 100644
index 0000000..2e6da2c
--- /dev/null
+++ b/gn/packages/riscv.scm
@@ -0,0 +1,153 @@
+;;;
+;;; Commentary:
+;;;
+;;; This module is a temporary staging ground for Guix packages ported
+;;; to RISC-V. They should be contributed upstream at the earliest.
+;;;
+
+;;;
+;;; Code:
+;;;
+
+(define-module (gn packages riscv)
+  #:use-module (gnu packages autotools)
+  #:use-module ((gnu packages bioinformatics) #:prefix guix:)
+  #:use-module (gnu packages compression)
+  #:use-module (gnu packages jemalloc)
+  #:use-module ((gnu packages maths) #:prefix guix:)
+  #:use-module (guix build-system cmake)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix git-download)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix packages)
+  #:use-module (guix utils))
+
+(define-public htslib
+  (package
+    (inherit guix:htslib)
+    (name "htslib")
+    (inputs
+     `(("bzip2" ,bzip2)
+       ("xz" ,xz)
+       ,@(package-inputs guix:htslib)))))
+
+(define-public gsl
+  (package
+    (inherit guix:gsl)
+    (name "gsl")
+    (arguments
+     (substitute-keyword-arguments (package-arguments guix:gsl)
+       ((#:configure-flags _) `(list))
+       ((#:phases phases '%standard-phases)
+        `(modify-phases ,phases
+           (add-after 'unpack 'force-bootstrap
+             (lambda _
+               (delete-file "configure")))))))
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("libtool" ,libtool)))))
+
+(define-public atomic-queue
+  (package
+    (name "atomic-queue")
+    (version "1.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/max0x7ba/atomic_queue")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0ssff73wlvrsk2nma99dmvm0ijyzfr54jk37kxgpb694r7ajc90l"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (delete 'build)
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (copy-recursively "include/atomic_queue"
+                               (string-append (assoc-ref outputs "out")
+                                              "/include/atomic_queue")))))))
+    (home-page "https://github.com/max0x7ba/atomic_queue")
+    (synopsis "C++ lockless queue")
+    (description "@code{atomic-queue} provides C++14
+multiple-producer-multiple-consumer lockless queues based on a circular buffer
+with std::atomic.  The maximum queue size must be set at compile time. And,
+there are no OS-blocking push/pop functions, thus making it suitable for
+ultra-low latency applications.")
+    (license license:expat)))
+
+(define-public wfmash
+  (let ((version "0.7.0")
+        (commit "50a68f0d8c372e720d73e7fc9d90a0d0a4e54ef8")
+        (package-revision "25"))
+    (package
+      (name "wfmash")
+      (version (string-append version "+" (string-take commit 7) "-" package-revision))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/ekg/wfmash.git")
+                      (commit commit)
+                      (recursive? #f)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1xf742sxn7xvrcmn67zk9rv8zxl9nb9f72hbw8khdlz1qj3n00vp"))
+                (modules '((guix build utils)))
+                (snippet '(begin
+                            (delete-file-recursively "src/common/atomic_queue")
+                            (substitute* "src/align/include/computeAlignments.hpp"
+                              (("\"common/atomic_queue/atomic_queue.h\"")
+                               "<atomic_queue/atomic_queue.h>"))))))
+      (build-system cmake-build-system)
+      (arguments
+       `(#:configure-flags '("-DBUILD_SHARED_LIBS=OFF")
+         #:phases
+         (modify-phases
+             %standard-phases
+           (add-after 'unpack 'remove-x86-specific-compile-flags
+             (lambda _
+               (substitute* (list "CMakeLists.txt"
+                                  "src/common/wflign/CMakeLists.txt"
+                                  "src/common/wflign/deps/WFAv2/CMakeLists.txt"
+                                  "src/common/wflign/deps/wflambdav2/CMakeLists.txt")
+                 (("-mcx16") ""))
+               (substitute* (list "CMakeLists.txt"
+                                  "src/common/wflign/CMakeLists.txt"
+                                  "src/common/wflign/deps/WFAv2/CMakeLists.txt"
+                                  "src/common/wflign/deps/wflambdav2/CMakeLists.txt")
+                 (("-march=native") ""))
+               (substitute* "src/common/dset64.hpp"
+                 (("#error \"wfmash can only be built on an x86_64 machine \\(64-bit Intel/AMD\\)\"")
+                  ""))))
+           ;; This stashes our build version in the executable
+           (add-after 'unpack 'set-version
+             (lambda _
+               (mkdir "include")
+               (with-output-to-file "include/wfmash_git_version.hpp"
+                 (lambda ()
+                   (format #t "#define WFMASH_GIT_VERSION \"~a\"~%" version)))
+               #t))
+           (delete 'check))
+         #:make-flags (list (string-append "CC=" ,(cc-for-target))
+                            (string-append "CXX=" ,(cxx-for-target)))))
+      (inputs (list atomic-queue
+                    gsl
+                    htslib
+                    jemalloc
+                    zlib))
+      (synopsis "base-accurate DNA sequence alignments using WFA and mashmap2")
+      (description "wfmash is a fork of MashMap that implements
+base-level alignment using the wavefront alignment algorithm WFA. It
+completes an alignment module in MashMap and extends it to enable
+multithreaded operation. A single command-line interface simplfies
+usage. The PAF output format is harmonized and made equivalent to that
+in minimap2, and has been validated as input to seqwish.")
+      (home-page "https://github.com/ekg/wfmash")
+      (license license:expat))))