about summary refs log tree commit diff
path: root/gn/packages/maths.scm
blob: 6f7091c2eaba8880ab4fc7a43c322b829179e432 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
(define-module (gn packages maths)
  #:use-module (gnu packages)
  #:use-module (guix packages)
  #:use-module (guix download)
  #:use-module (guix utils)
  #:use-module (guix gexp)
  #:use-module (gnu packages maths)
  #:use-module (srfi srfi-1))

(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
            (delete 'move-static-library)
            (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
            (delete 'move-static-library)
            (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
            (delete 'move-static-library)
            (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
            (delete 'move-static-library)
            (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)))))