about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEfraim Flashner2023-09-21 11:31:51 +0300
committerEfraim Flashner2023-09-21 11:31:51 +0300
commit283304f54edbac26a62368e76460528ec478dc61 (patch)
treebe9f1adb62067368a8e3ce7edf40dd9c38632735
parent91d55ae18950e470e32fbdbebd867196e691a82a (diff)
downloadguix-bioinformatics-283304f54edbac26a62368e76460528ec478dc61.tar.gz
odgi: Add variant with glibc-hwcaps.
-rw-r--r--gn/packages/bioinformatics.scm127
1 files changed, 127 insertions, 0 deletions
diff --git a/gn/packages/bioinformatics.scm b/gn/packages/bioinformatics.scm
index 71ea9c0..7a20200 100644
--- a/gn/packages/bioinformatics.scm
+++ b/gn/packages/bioinformatics.scm
@@ -2058,6 +2058,18 @@ available to other researchers.")
      (list
        #:phases
        #~(modify-phases %standard-phases
+           (add-after 'unpack 'use-gnuinstalldirs-macros
+             (lambda _
+               (substitute* "CMakeLists.txt"
+                 (("project\\(odgi\\)" all)
+                  (string-append all "\ninclude(GNUInstallDirs)"))
+                 ;; This is different than the default.
+                 ;(("PUBLIC_HEADER DESTINATION include/odgi")
+                 ; "PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}")
+                 (("LIBRARY DESTINATION lib")
+                  "LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}")
+                 (("ARCHIVE DESTINATION lib")
+                  "ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}"))))
            (add-after 'unpack 'link-to-libodgi
              (lambda _
                ;; This lets us provide libraries for different psABI levels.
@@ -2100,6 +2112,121 @@ in-memory footprint at the cost of packing and unpacking.")
     (properties '((tunable? . #t)))
     (license license:expat)))
 
+(define-public odgi-x86-64-v2
+  (package/inherit odgi
+    (name "odgi-x86-64-v2")
+    (arguments
+     (substitute-keyword-arguments (package-arguments odgi)
+       ((#:configure-flags flags #~'())
+        #~(append (list "-DEXTRA_FLAGS=-march=x86-64-v2"
+                        "-DCMAKE_INSTALL_LIBDIR=lib/glibc-hwcaps/x86-64-v2"
+                        (string-append "-DCMAKE_INSTALL_RPATH=" #$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"))))
+            (replace 'move-static-library
+              (lambda* (#:key outputs #:allow-other-keys)
+                (let ((lib "/lib/glibc-hwcaps/x86-64-v2/libodgi.a"))
+                  (mkdir-p (dirname (string-append #$output:static lib)))
+                  (rename-file (string-append #$output lib)
+                               (string-append #$output:static lib)))))))))
+    (supported-systems '("x86_64-linux"))
+    (properties `((hidden? . #t)))))
+
+(define-public odgi-x86-64-v3
+  (package/inherit odgi
+    (name "odgi-x86-64-v3")
+    (arguments
+     (substitute-keyword-arguments (package-arguments odgi)
+       ((#:configure-flags flags #~'())
+        #~(append (list "-DEXTRA_FLAGS=-march=x86-64-v3"
+                        "-DCMAKE_INSTALL_LIBDIR=lib/glibc-hwcaps/x86-64-v3"
+                        (string-append "-DCMAKE_INSTALL_RPATH=" #$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"))))
+            (replace 'move-static-library
+              (lambda* (#:key outputs #:allow-other-keys)
+                (let ((lib "/lib/glibc-hwcaps/x86-64-v3/libodgi.a"))
+                  (mkdir-p (dirname (string-append #$output:static lib)))
+                  (rename-file (string-append #$output lib)
+                               (string-append #$output:static lib)))))))))
+    (supported-systems '("x86_64-linux"))
+    (properties `((hidden? . #t)))))
+
+(define-public odgi-x86-64-v4
+  (package/inherit odgi
+    (name "odgi-x86-64-v4")
+    (arguments
+     (substitute-keyword-arguments (package-arguments odgi)
+       ((#:configure-flags flags #~'())
+        #~(append (list "-DEXTRA_FLAGS=-march=x86-64-v4"
+                        "-DCMAKE_INSTALL_LIBDIR=lib/glibc-hwcaps/x86-64-v4"
+                        (string-append "-DCMAKE_INSTALL_RPATH=" #$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"))))
+            (replace 'move-static-library
+              (lambda* (#:key outputs #:allow-other-keys)
+                (let ((lib "/lib/glibc-hwcaps/x86-64-v4/libodgi.a"))
+                  (mkdir-p (dirname (string-append #$output:static lib)))
+                  (rename-file (string-append #$output lib)
+                               (string-append #$output:static lib)))))))))
+    (supported-systems '("x86_64-linux"))
+    (properties `((hidden? . #t)))))
+
+;; This copy of odgi will automatically use the libraries that target the
+;; x86_64 psABI which the hardware supports.
+(define-public odgi-hwcaps
+  (package/inherit odgi
+    (name "odgi-hwcaps")
+    (arguments
+     (substitute-keyword-arguments (package-arguments odgi)
+       ((#: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 "odgi-x86-64-v2")
+                                   hwcaps "/x86-64-v2")
+                    (string-append #$output hwcaps "/x86-64-v2"))
+                  (copy-recursively
+                    (string-append (assoc-ref inputs "odgi-x86-64-v3")
+                                   hwcaps "/x86-64-v3")
+                    (string-append #$output hwcaps "/x86-64-v3"))
+                  (copy-recursively
+                    (string-append (assoc-ref inputs "odgi-x86-64-v4")
+                                   hwcaps "/x86-64-v4")
+                    (string-append #$output hwcaps "/x86-64-v4")))))))))
+    (native-inputs
+     (modify-inputs (package-native-inputs odgi)
+                    (append odgi-x86-64-v2
+                            odgi-x86-64-v3
+                            odgi-x86-64-v4)))
+    (properties `((tunable? . #f)))))
+
 (define-public vg
   (package
     (name "vg")