about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEfraim Flashner2023-09-20 16:03:50 +0300
committerEfraim Flashner2023-09-20 16:08:25 +0300
commita599c69673da59fc129ceefffb73f8958f3d82f0 (patch)
tree51a7a243903663d1e70a76ae400d815a8d46a15b
parentbfd4ccbbe6ad79ff9a02ca6c8656914f1fc4c414 (diff)
downloadguix-bioinformatics-a599c69673da59fc129ceefffb73f8958f3d82f0.tar.gz
seqwish: Update to 0.7.9.
-rw-r--r--gn/packages/bioinformatics.scm208
-rw-r--r--seqwish-paryfor-riscv.diff20
2 files changed, 59 insertions, 169 deletions
diff --git a/gn/packages/bioinformatics.scm b/gn/packages/bioinformatics.scm
index a303baf..b0865f3 100644
--- a/gn/packages/bioinformatics.scm
+++ b/gn/packages/bioinformatics.scm
@@ -1592,120 +1592,60 @@ runApp(launch.browser=0, port=4208)~%\n"
 (scRNA-seq) data analysis.")
      (license license:agpl3))))
 
-(define-public seqwish-0.1
+(define-public seqwish
   (package
     (name "seqwish")
-    (version "0.1")
+    (version "0.7.9")
     (source (origin
              (method git-fetch)
              (uri (git-reference
                    (url "https://github.com/ekg/seqwish.git")
-                   (commit (string-append "v" version))))
+                   (commit (string-append "v" version))
+                   (recursive? #t)))
              (file-name (git-file-name name version))
              (sha256
-              (base32
-               "1gp72cmi13hbkmwwhgckmxkbx8w644jc5l6dvvvxdbl6sk8xsi5r"))))
-    (build-system gnu-build-system)
+              (base32 "0xnv40kjlb610bk67n4xdqz5dfsjhrqld5bxzblji57k6bb4n66x"))
+             (patches (search-patches "seqwish-paryfor-riscv.diff"))
+             (snippet
+              #~(begin
+                  (use-modules (guix build utils))
+                  (substitute* '("deps/atomic_queue/Makefile"
+                                 "deps/mmmulti/deps/DYNAMIC/CMakeLists.txt"
+                                 "deps/mmmulti/deps/atomic_queue/Makefile"
+                                 "deps/mmmulti/deps/ips4o/CMakeLists.txt")
+                    (("-march=native") "")
+                    (("-mcx16") ""))
+                  (substitute* '("deps/mmmulti/deps/sdsl-lite/CMakeLists.txt"
+                                 "deps/sdsl-lite/CMakeLists.txt")
+                    (("-msse4.2 -march=native") ""))))))
+    (build-system cmake-build-system)
     (arguments
-     `(#:phases
+     `(#:configure-flags
+       '(,@(cond ((target-x86-64?)
+                  ;; This seems to be about the minimum
+                  '("-DEXTRA_FLAGS=-march=x86-64-v2"))
+                 ((target-aarch64?)
+                  '("-DEXTRA_FLAGS=-march=armv8-a"))
+                 ((target-riscv64?)
+                  '("-DEXTRA_FLAGS=-march=rv64imafdc"))
+                 ((target-ppc64le?)
+                  '("-DEXTRA_FLAGS=-mcpu=power8"))
+                 ;; The default case is '-march=native'
+                 (else '())))
+       #:phases
        (modify-phases %standard-phases
-         (delete 'configure)
-         (replace 'build
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((sdsl-lite      (assoc-ref inputs "sdsl-lite"))
-                   (sufsort        (assoc-ref inputs "sufsort"))
-                   (bsort          (assoc-ref inputs "bsort"))
-                   (mmap_allocator (assoc-ref inputs "mmap-allocator"))
-                   (tayweeargs     (assoc-ref inputs "tayweeargs-source"))
-                   (gzipreader     (assoc-ref inputs "gzipreader-source"))
-                   (mmmultimap     (assoc-ref inputs "mmmultimap-source"))
-                   (iitii          (assoc-ref inputs "iitii-source"))
-                   (ips4o          (assoc-ref inputs "ips4o-source")))
-               (apply invoke "g++" "-o" "seqwish"
-                      "-O3" "-g" "-std=c++14" "-fopenmp"
-                      "-latomic" "-lz"
-                      (string-append "-I" sdsl-lite "/include")
-                      (string-append "-I" sdsl-lite "/include/sdsl")
-                      (string-append "-I" bsort "/include")
-                      (string-append "-I" tayweeargs)
-                      (string-append "-I" gzipreader)
-                      (string-append "-I" mmmultimap "/src")
-                      (string-append "-I" iitii "/src")
-                      (string-append "-I" mmap_allocator "/include")
-                      (string-append "-I" ips4o)
-                      (append
-                        (find-files "src" ".")
-                        (list
-                          (string-append sdsl-lite "/lib/libsdsl.so")
-                          (string-append sufsort "/lib/libdivsufsort.so")
-                          (string-append sufsort "/lib/libdivsufsort64.so")
-                          (string-append mmap_allocator "/lib/libmmap_allocator.a")
-                          (string-append bsort "/lib/libbsort.a")))))))
          (replace 'check
-           (lambda _
+           (lambda* (#:key tests? #:allow-other-keys)
              ;; Add seqwish to the PATH for the tests.
              (setenv "PATH" (string-append (getcwd) ":" (getenv "PATH")))
-             (with-directory-excursion "test"
-               (invoke "make"))))
-         (replace 'install
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out")))
-               (install-file "seqwish" (string-append out "/bin")))
-             #t)))))
+             (when tests?
+               (with-directory-excursion "../source/test"
+                 (invoke "make"))))))))
     (inputs
-     `(("bsort" ,ekg-bsort)
-       ("mmap-allocator" ,ekg-mmap-allocator)
-       ("openmpi" ,openmpi)
-       ("sdsl-lite" ,sdsl-lite)
-       ("sufsort" ,libdivsufsort)
-       ("zlib" ,zlib)))
+     (list jemalloc
+           zlib))
     (native-inputs
-     `(("prove" ,perl)
-       ("tayweeargs-source" ,(origin
-                               (method git-fetch)
-                               (uri (git-reference
-                                      (url "https://github.com/Taywee/args.git")
-                                      (commit "3de44ec671db452cc0c4ef86399b108939768abb")))
-                               (file-name "tayweeargs-source-for-seqwish")
-                               (sha256
-                                (base32
-                                 "1v8kq1gvl5waysrfp0s58881rx39mnf3ifdsl6pb3y3c4zaki2xh"))))
-       ("gzipreader-source" ,(origin
-                               (method git-fetch)
-                               (uri (git-reference
-                                      (url "https://github.com/gatoravi/gzip_reader.git")
-                                      (commit "0ef26c0399e926087f9d6c4a56067a7bf1fc4f5e")))
-                               (file-name "gzipreader-source-for-seqwish")
-                               (sha256
-                                (base32
-                                 "1wy84ksx900840c06w0f1mgzvr7zsfsgxq1b0jdjh8qka26z1r17"))))
-       ("mmmultimap-source" ,(origin
-                               (method git-fetch)
-                               (uri (git-reference
-                                      (url "https://github.com/ekg/mmmultimap.git")
-                                      (commit "88c734c36563048b0f3acc04dd8856f19e02b75f")))
-                               (file-name "mmmultimap-source-for-seqwish")
-                               (sha256
-                                (base32
-                                 "06mnf3bd32s3ngxkl573ylg2qsvlw80r1ksdwamx3fzxa1a5yls0"))))
-       ("iitii-source" ,(origin
-                          (method git-fetch)
-                          (uri (git-reference
-                                 (url "https://github.com/ekg/iitii.git")
-                                 (commit "85209e07a3ee403fb6557387a7f897cd76be4406")))
-                          (file-name "iitii-source-for-seqwish")
-                          (sha256
-                           (base32
-                            "0sszvffkswf89nkbjmjg3wjwqvy2w0d3wgy3ngy33ma4sy4s025s"))))
-       ("ips4o-source" ,(origin
-                          (method git-fetch)
-                          (uri (git-reference
-                                 (url "https://github.com/SaschaWitt/ips4o.git")
-                                 (commit "bff3ccf0bf349497f2bb10f825d160b792236367")))
-                          (file-name "ips4o-source-for-seqwish")
-                          (sha256
-                           (base32
-                            "0yjfvrkiwgmy5cn0a7b9j8jwc3zp0l8j4dl5n0jgz68pdnhlp96h"))))))
+     (list perl))
     (home-page "https://github.com/ekg/seqwish")
     (synopsis "Alignment to variation graph inducer")
     (description "Seqwish implements a lossless conversion from pairwise
@@ -1720,76 +1660,6 @@ limited by the use of sorted disk-backed arrays and succinct rank/select
 dictionaries to record a queryable version of the graph.")
     (license license:expat)))
 
-(define ekg-bsort
-  (let ((commit "c3ab0d3308424030e0a000645a26d2c10a59a124")
-        (revision "1"))
-    (package
-      (name "bsort")
-      (version (git-version "0.0.0" revision commit))
-      (source
-        (origin
-          (method git-fetch)
-          (uri (git-reference
-                 (url "https://github.com/ekg/bsort.git")
-                 (commit commit)))
-          (file-name (git-file-name name version))
-          (sha256
-           (base32
-            "0dgpflzcp3vdhbjwbjw347czi86gyk73hxcwjdqnaqh5vg61bdb6"))))
-      (build-system cmake-build-system)
-      (arguments
-       '(#:tests? #f ; no test target
-         #:out-of-source? #f
-         #:phases
-         (modify-phases %standard-phases
-           (replace 'install
-             (lambda* (#:key outputs #:allow-other-keys)
-               (let ((out (assoc-ref outputs "out")))
-                 (install-file "bin/bsort" (string-append out "/bin"))
-                 (install-file "src/bsort.hpp" (string-append out "/include"))
-                 (install-file "lib/libbsort.a" (string-append out "/lib")))
-               #t)))))
-      (home-page "")
-      (synopsis "")
-      (description "")
-      (license license:gpl2))))
-
-(define ekg-mmap-allocator
-  (let ((commit "ed61daf094de1c2e1adbe8306287ad52da5f0264")
-        (revision "1"))
-    (package
-      (name "mmap-allocator")
-      (version (git-version "0.10.1" revision commit))
-      (source
-        (origin
-          (method git-fetch)
-          (uri (git-reference
-                 (url "https://github.com/ekg/mmap_allocator.git")
-                 (commit commit)))
-          (file-name (git-file-name name version))
-          (sha256
-           (base32
-            "1f30b2kpwwzh6333s0qi5samk458ghbnvyycf6rwx6n6j7xswhbw"))))
-      (build-system gnu-build-system)
-      (arguments
-       '(#:phases
-         (modify-phases %standard-phases
-           (delete 'configure) ; no configure script
-           (add-before 'install 'pre-install
-             (lambda* (#:key outputs #:allow-other-keys)
-               (let ((out (assoc-ref outputs "out")))
-                 (substitute* "Makefile"
-                  (("HEADERS=") "HEADERS=mmappable_vector.h ")
-                   (("/usr") out))
-                 (mkdir-p (string-append out "/lib"))
-                 (mkdir (string-append out "/include"))
-                 #t))))
-         #:test-target "test"))
-      (home-page "")
-      (synopsis "")
-      (description "")
-      (license license:lgpl2.0+)))) ; README just says "lpgl".
-
 ;; TODO: Unbundle BBHash, parallel-hashmap, zstr
 (define-public graphaligner
   (package
diff --git a/seqwish-paryfor-riscv.diff b/seqwish-paryfor-riscv.diff
new file mode 100644
index 0000000..cecf806
--- /dev/null
+++ b/seqwish-paryfor-riscv.diff
@@ -0,0 +1,20 @@
+diff --git a/deps/paryfor/paryfor.hpp b/deps/paryfor/paryfor.hpp
+index b8ced09..0536580 100644
+--- a/deps/paryfor/paryfor.hpp
++++ b/deps/paryfor/paryfor.hpp
+@@ -51,6 +51,15 @@ static inline void spin_loop_pause() noexcept {
+ }
+ } // namespace atomic_queue
+ } // namespace paryfor
++#elif defined(__riscv) && (__riscv_xlen == 64)
++namespace paryfor {
++namespace atomic_queue {
++constexpr int CACHE_LINE_SIZE = 64;
++static inline void spin_loop_pause() noexcept {
++    asm volatile ("nop" ::: "memory");
++}
++}
++}
+ #else
+ #error "Unknown CPU architecture."
+ #endif