about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEfraim Flashner2023-09-26 13:54:28 +0300
committerEfraim Flashner2023-09-26 13:54:28 +0300
commita848475c6bf6321dde971528f7c8d0c4d6e9e0d5 (patch)
treeed557cddbb9104ab4fb12469f53e6a491380cc95
parent01ebd8c995a6bbd45e427ae849cb7e08e84ab6b8 (diff)
downloadguix-bioinformatics-a848475c6bf6321dde971528f7c8d0c4d6e9e0d5.tar.gz
gsl: Provide glibc-hwcaps version.
-rw-r--r--gn/packages/bioinformatics.scm4
-rw-r--r--gn/packages/maths.scm108
2 files changed, 111 insertions, 1 deletions
diff --git a/gn/packages/bioinformatics.scm b/gn/packages/bioinformatics.scm
index 9886e3f..95dda00 100644
--- a/gn/packages/bioinformatics.scm
+++ b/gn/packages/bioinformatics.scm
@@ -22,6 +22,7 @@
   #:use-module (gn packages crates-io)
   #:use-module (gn packages datastructures)
   #:use-module (gn packages java)
+  #:use-module (gn packages maths)
   #:use-module (gn packages ocaml)
   #:use-module (gn packages python)
   #:use-module (gnu packages algebra)
@@ -2799,7 +2800,8 @@ Reference Consortium, HPRC} as a method to build a graph from the
   (package-input-rewriting/spec
     ;; Replace some packages with ones built targeting custom packages build
     ;; with glibc-hwcaps support.
-    `(("sdsl-lite" . ,(const sdsl-lite-hwcaps))
+    `(;("gsl" . ,(const gsl-hwcaps))        ; Causes too many rebuilds through multiqc
+      ("sdsl-lite" . ,(const sdsl-lite-hwcaps))
       ("seqwish" . ,(const seqwish-hwcaps))
       ("odgi" . ,(const odgi-hwcaps))
       ("wfmash" . ,(const wfmash-hwcaps)))))
diff --git a/gn/packages/maths.scm b/gn/packages/maths.scm
index 1c1c1ae..7dfb896 100644
--- a/gn/packages/maths.scm
+++ b/gn/packages/maths.scm
@@ -3,6 +3,7 @@
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix utils)
+  #:use-module (guix gexp)
   #:use-module (gnu packages gcc)
   #:use-module (gnu packages gperf)
   #:use-module (gnu packages maths)
@@ -131,3 +132,110 @@
     (inputs
      `(,@(fold alist-delete (package-inputs suitesparse)
                '("metis"))))))
+
+(define-public gsl-x86-64-v2
+  (package/inherit gsl
+    (name "gsl-x86-64-v2")
+    (arguments
+     (substitute-keyword-arguments (package-arguments gsl)
+       ((#:make-flags flags #~'())
+        #~(append (list "CFLAGS=-march=x86-64-v2"
+                        "CXXFLAGS=-march=x86-64-v2")
+                  #$flags))
+       ((#:configure-flags flags #~'())
+        #~(append (list (string-append "--libdir=" #$output
+                                       "/lib/glibc-hwcaps/x86-64-v2"))
+                  #$flags))
+       ;; The building machine can't necessarily run the code produced.
+       ((#:tests? _ #t) #f)
+       ((#:phases phases #~%standard-phases)
+        #~(modify-phases #$phases
+            (add-after 'install 'remove-extra-files
+              (lambda _
+                (delete-file-recursively (string-append #$output "/bin"))
+                (delete-file-recursively (string-append #$output "/include"))))))))
+    (supported-systems '("x86_64-linux"))
+    (properties `((hidden? . #t)
+                  (tunable? . #f)))))
+
+(define-public gsl-x86-64-v3
+  (package/inherit gsl
+    (name "gsl-x86-64-v3")
+    (arguments
+     (substitute-keyword-arguments (package-arguments gsl)
+       ((#:make-flags flags #~'())
+        #~(append (list "CFLAGS=-march=x86-64-v3"
+                        "CXXFLAGS=-march=x86-64-v3")
+                  #$flags))
+       ((#:configure-flags flags #~'())
+        #~(append (list (string-append "--libdir=" #$output
+                                       "/lib/glibc-hwcaps/x86-64-v3"))
+                  #$flags))
+       ;; The building machine can't necessarily run the code produced.
+       ((#:tests? _ #t) #f)
+       ((#:phases phases #~%standard-phases)
+        #~(modify-phases #$phases
+            (add-after 'install 'remove-extra-files
+              (lambda _
+                (delete-file-recursively (string-append #$output "/bin"))
+                (delete-file-recursively (string-append #$output "/include"))))))))
+    (supported-systems '("x86_64-linux"))
+    (properties `((hidden? . #t)
+                  (tunable? . #f)))))
+
+(define-public gsl-x86-64-v4
+  (package/inherit gsl
+    (name "gsl-x86-64-v4")
+    (outputs '("out" "static"))
+    (arguments
+     (substitute-keyword-arguments (package-arguments gsl)
+       ((#:make-flags flags #~'())
+        #~(append (list "CFLAGS=-march=x86-64-v4"
+                        "CXXFLAGS=-march=x86-64-v4")
+                  #$flags))
+       ((#:configure-flags flags #~'())
+        #~(append (list (string-append "--libdir=" #$output
+                                       "/lib/glibc-hwcaps/x86-64-v4"))
+                  #$flags))
+       ;; The building machine can't necessarily run the code produced.
+       ((#:tests? _ #t) #f)
+       ((#:phases phases #~%standard-phases)
+        #~(modify-phases #$phases
+            (add-after 'install 'remove-extra-files
+              (lambda _
+                (delete-file-recursively (string-append #$output "/bin"))
+                (delete-file-recursively (string-append #$output "/include"))))))))
+    (supported-systems '("x86_64-linux"))
+    (properties `((hidden? . #t)
+                  (tunable? . #f)))))
+
+;; This copy of gsl will automatically use the libraries that target the
+;; x86_64 psABI which the hardware supports.
+(define-public gsl-hwcaps
+  (package/inherit gsl
+    (name "gsl-hwcaps")
+    (arguments
+     (substitute-keyword-arguments (package-arguments gsl)
+       ((#:phases phases #~%standard-phases)
+        #~(modify-phases #$phases
+            (add-after 'install 'install-optimized-libraries
+              (lambda* (#:key inputs outputs #:allow-other-keys)
+                (let ((hwcaps "/lib/glibc-hwcaps"))
+                  (copy-recursively
+                    (string-append (assoc-ref inputs "gsl-x86-64-v2")
+                                   hwcaps "/x86-64-v2")
+                    (string-append #$output hwcaps "/x86-64-v2"))
+                  (copy-recursively
+                    (string-append (assoc-ref inputs "gsl-x86-64-v3")
+                                   hwcaps "/x86-64-v3")
+                    (string-append #$output hwcaps "/x86-64-v3"))
+                  (copy-recursively
+                    (string-append (assoc-ref inputs "gsl-x86-64-v4")
+                                   hwcaps "/x86-64-v4")
+                    (string-append #$output hwcaps "/x86-64-v4")))))))))
+    (native-inputs
+     (modify-inputs (package-native-inputs gsl)
+                    (append gsl-x86-64-v2
+                            gsl-x86-64-v3
+                            gsl-x86-64-v4)))
+    (properties `((tunable? . #f)))))