all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* [PATCH] Add the clBLAS (OpenCL accelerated BLAS library) to GNU Guix
@ 2016-03-20  2:24 Dennis Mungai
  2016-03-21 10:28 ` Ricardo Wurmus
  0 siblings, 1 reply; 2+ messages in thread
From: Dennis Mungai @ 2016-03-20  2:24 UTC (permalink / raw)
  To: guix-devel

[-- Attachment #1: Type: text/plain, Size: 160 bytes --]

Hello,

This patch adds the clBLAS package to GNU Guix.

It is required as a build dependency by Arrayfire for the OpenCL backend.

Thanks and regards,

Dennis

[-- Attachment #2: 0001-Ported-the-clBLAS-package-to-GNU-Guix.patch --]
[-- Type: text/x-patch, Size: 7156 bytes --]

From 3eaed287a23e17a2537b5b135c62419cd96f6201 Mon Sep 17 00:00:00 2001
From: Dennis Mungai <dmngaie@gmail.com>
Date: Sun, 20 Mar 2016 04:49:46 +0300
Subject: [PATCH] Ported the clBLAS package to GNU Guix

---
 clBLAS.scm | 164 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 164 insertions(+)
 create mode 100644 clBLAS.scm

diff --git a/clBLAS.scm b/clBLAS.scm
new file mode 100644
index 0000000..17a4589
--- /dev/null
+++ b/clBLAS.scm
@@ -0,0 +1,164 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2016 Dennis Mungai <dmngaie@gmail.com>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gn packages clBLAS)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix download)
+  #:use-module (guix git-download)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix build-system cmake)
+  #:use-module (guix packages)
+  #:use-module (gnu packages algebra)
+  #:use-module (gnu packages bootstrap)
+  #:use-module (gnu packages base)
+  #:use-module (gnu packages autotools)
+  #:use-module (gnu packages curl)
+  #:use-module (gnu packages gawk)
+  #:use-module (gnu packages cmake)
+  #:use-module (gnu packages boost)
+  #:use-module (gnu packages glib)
+  #:use-module (gnu packages image)
+  #:use-module (gnu packages video)
+  #:use-module (gnu packages textutils)
+  #:use-module (gnu packages gl)
+  #:use-module (gnu packages gcc)
+  #:use-module (gnu packages gnupg)
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages maths)
+  #:use-module (gnu packages mpi)
+  #:use-module (gnu packages ruby)
+  #:use-module (gnu packages web)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages xorg)
+  #:use-module (gnu packages version-control)
+  #:use-module (gnu packages zip)  
+  #:use-module (gnu packages linux))
+
+(define-public clBLAS
+  (package
+    (name "clBLAS")
+    (version "v2.10")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append "https://github.com/clMathLibraries/clBLAS/archive/"
+                                 version ".tar.gz"))
+             (sha256
+              (base32
+               "0adlb02lqzrklfybhnv4n0p37mvkvdi3vqiwa05x2mv05ywnr93j"))))
+    (build-system cmake-build-system)    
+    (arguments `(#:tests? #f 
+                 #:configure-flags '("../clBLAS-2.10/src" "-DBUILD_SHARED_LIBS=ON" "-DCMAKE_BUILD_TYPE=Release" "-DBUILD_TEST=OFF")))
+    (native-inputs `(("autoconf" ,autoconf)
+        ("automake" ,automake)
+        ("cmake" ,cmake)
+        ("gfortran" ,gfortran)
+        ("libtool" ,libtool)
+        ("pkg-config" ,pkg-config)))
+    (inputs `(("curl" ,curl)
+       ("dbus" ,dbus)
+       ("boost" ,boost)
+       ("enca" ,enca)
+       ("eudev" ,eudev)
+       ("fftw-openmpi" ,fftw-openmpi)
+       ("glew" ,glew)       
+       ("libcap" ,libcap)
+       ("libjpeg" ,libjpeg)
+       ("libltdl" ,libltdl)
+       ("libtiff" ,libtiff)
+       ("mesa-utils" ,mesa-utils)
+       ("openmpi" ,openmpi)
+       ("ocl-icd" ,ocl-icd)
+       ("opencl-headers" ,opencl-headers)
+       ("randrproto" ,randrproto)
+       ("libxrandr" ,libxrandr)
+       ("xineramaproto" ,xineramaproto)
+       ("libxinerama" ,libxinerama)
+       ("libxcursor" ,libxcursor)
+       ("python" ,python-2)))       
+    (home-page "http://www.glfw.org/")
+    (synopsis "glfw is an Open Source, multi-platform library for creating windows with OpenGL contexts and receiving input and events.")
+    (description "glfw is an Open Source, multi-platform library for creating windows with OpenGL contexts and receiving input and events.")
+    (license (list license:gpl2))))
+    
+(define-public ocl-icd
+  (package
+   (name "ocl-icd")
+   (version "2.2.9")
+   (source (origin
+             (method url-fetch)
+             (uri (string-append "https://forge.imag.fr/frs/download.php/716/ocl-icd-"
+                                 version ".tar.gz"))
+             (file-name (string-append name "-" version ".tar.gz"))
+             (sha256
+              (base32
+               "1rgaixwnxmrq2aq4kcdvs0yx7i6krakarya9vqs7qwsv5hzc32hc"))))
+    (inputs `(("zip" ,zip)
+             ("autoconf" ,autoconf)
+             ("automake" ,automake)
+             ("ruby" ,ruby)
+             ("libtool" ,libtool)
+             ("opencl-headers" ,opencl-headers)
+             ("libgcrypt" ,libgcrypt)))                                              
+    (build-system gnu-build-system)
+     (arguments
+     '(#:phases (modify-phases %standard-phases
+                    (add-after 'unpack `bootstrap
+                      (lambda _
+                        (zero? (system* "autoreconf" "-vfi")))))))    
+    (home-page "https://forge.imag.fr/projects/ocl-icd/")
+    (synopsis "OpenCL implementations are provided as ICD (Installable Client Driver).")
+    (description "OpenCL implementations are provided as ICD (Installable Client Driver).
+    An OpenCL program can use several ICD thanks to the use of an ICD Loader as provided by this project.
+    This free ICD Loader can load any (free or non free) ICD")
+    (license (list license:gpl2 license:ruby))))
+    
+(define-public opencl-headers
+(let ((commit "c1770dc"))
+  (package
+    (name "opencl-headers")
+    (version (string-append "2.1-" commit ))
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+              (url "https://github.com/KhronosGroup/OpenCL-Headers.git")
+              (commit commit)))
+              (file-name (string-append name "-" commit))
+              (sha256
+               (base32
+                "0m9fkblqja0686i2jjqiszvq3df95gp01a2674xknlmkd6525rck"))))
+    (propagated-inputs '())
+    (inputs '())
+    (native-inputs '())
+    (build-system gnu-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (delete 'build)
+         (delete 'check)
+         (replace 'install
+                  (lambda* (#:key outputs #:allow-other-keys)
+                    (copy-recursively "." (string-append
+                                                 (assoc-ref outputs "out")
+                                                 "/include/CL")))))))
+    (synopsis "The Khronos OpenCL headers")
+    (description "This package provides the Khronos OpenCL headers")
+    (home-page "https://www.khronos.org/registry/cl/")
+    (license (list license:gpl2)))))
+    
+
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] Add the clBLAS (OpenCL accelerated BLAS library) to GNU Guix
  2016-03-20  2:24 [PATCH] Add the clBLAS (OpenCL accelerated BLAS library) to GNU Guix Dennis Mungai
@ 2016-03-21 10:28 ` Ricardo Wurmus
  0 siblings, 0 replies; 2+ messages in thread
From: Ricardo Wurmus @ 2016-03-21 10:28 UTC (permalink / raw)
  To: Dennis Mungai; +Cc: guix-devel


Hi Dennis,

> This patch adds the clBLAS package to GNU Guix.

thank you for your patches!

Here a couple of comments:

* We usually require one patch per package.  Your patch adds three
  packages.

* The module is named “(gn packages clBLAS)”.  Packages should go to
  “(gnu packages ...)”.  Also, all module names are to be lowercase,
  i.e. “clblas” rather than “clBLAS”.  That said, it may be better to
  not create a new module but add the packages to existing modules such
  as “maths.scm”.

* Please keep the length of lines below 80 characters.

* Please run “guix lint” on your new packages for helpful hints.


> +(define-public clBLAS

Variable names should be lowercase.

> +  (package
> +    (name "clBLAS")
> +    (version "v2.10")

The “v” should not be part of the version number.

> +    (source (origin
> +             (method url-fetch)
> +             (uri (string-append "https://github.com/clMathLibraries/clBLAS/archive/"
> +                                 version ".tar.gz"))

Since the tarball does not contain the name of the package, please add a
“(file-name ...)” expression.  You can grep the “gnu/packages/”
directory for examples on how to use it.

> +             (sha256
> +              (base32
> +               "0adlb02lqzrklfybhnv4n0p37mvkvdi3vqiwa05x2mv05ywnr93j"))))
> +    (build-system cmake-build-system)    
> +    (arguments `(#:tests? #f

Why are tests disabled?  If there are no tests we usually just add a
comment saying so.

> +                 #:configure-flags '("../clBLAS-2.10/src"
> "-DBUILD_SHARED_LIBS=ON" "-DCMAKE_BUILD_TYPE=Release"
> "-DBUILD_TEST=OFF")))

“CMAKE_BUILD_TYPE=Release” does not need to be set.  Why are the other
arguments needed?  In particular, why do you pass “../clBLAS-2.10/src”?

> +    (native-inputs `(("autoconf" ,autoconf)

This should be on a new line.

> +        ("automake" ,automake)

Why do you need autoconf and automake when this package uses cmake?

> +        ("cmake" ,cmake)
> +        ("gfortran" ,gfortran)
> +        ("libtool" ,libtool)
> +        ("pkg-config" ,pkg-config)))
> +    (inputs `(("curl" ,curl)

This should be on a new line.

> +       ("dbus" ,dbus)
> +       ("boost" ,boost)
> +       ("enca" ,enca)
> +       ("eudev" ,eudev)
> +       ("fftw-openmpi" ,fftw-openmpi)
> +       ("glew" ,glew)       
> +       ("libcap" ,libcap)
> +       ("libjpeg" ,libjpeg)
> +       ("libltdl" ,libltdl)
> +       ("libtiff" ,libtiff)
> +       ("mesa-utils" ,mesa-utils)
> +       ("openmpi" ,openmpi)
> +       ("ocl-icd" ,ocl-icd)
> +       ("opencl-headers" ,opencl-headers)
> +       ("randrproto" ,randrproto)
> +       ("libxrandr" ,libxrandr)
> +       ("xineramaproto" ,xineramaproto)
> +       ("libxinerama" ,libxinerama)
> +       ("libxcursor" ,libxcursor)
> +       ("python" ,python-2)))       
> +    (home-page "http://www.glfw.org/")
> +    (synopsis "glfw is an Open Source, multi-platform library for creating windows with OpenGL contexts and receiving input and events.")

We usually don’t say “Open Source” (or “free”) because all software in
Guix is Free Software.  A synopsis should not be a full sentence.  It
should be short enough not to require line breaks.

> +    (description "glfw is an Open Source, multi-platform library for creating windows with OpenGL contexts and receiving input and events.")

Please break lines.  In Emacs you can format the paragraph with M-q.

> +    (license (list license:gpl2))))

No list needed when it’s just one license.  Are you sure it’s GPLv2 only?

> +(define-public ocl-icd
> +  (package
> +   (name "ocl-icd")
> +   (version "2.2.9")
> +   (source (origin
> +             (method url-fetch)
> +             (uri (string-append "https://forge.imag.fr/frs/download.php/716/ocl-icd-"
> +                                 version ".tar.gz"))
> +             (file-name (string-append name "-" version ".tar.gz"))

This is not required here because the tarball already contains package
name and version.

> +             (sha256
> +              (base32
> +               "1rgaixwnxmrq2aq4kcdvs0yx7i6krakarya9vqs7qwsv5hzc32hc"))))
> +    (inputs `(("zip" ,zip)

It looks nicer to have the zip pair on the next line.
The list of inputs is usually placed below the build-system and
arguments fields.

> +             ("autoconf" ,autoconf)
> +             ("automake" ,automake)

These are probably native inputs only.

> +             ("ruby" ,ruby)
> +             ("libtool" ,libtool)
> +             ("opencl-headers" ,opencl-headers)
> +             ("libgcrypt" ,libgcrypt)))                                              
> +    (build-system gnu-build-system)
> +     (arguments

The indentation here looks wrong.

> +     '(#:phases (modify-phases %standard-phases
> +                    (add-after 'unpack `bootstrap
> +                      (lambda _
> +                        (zero? (system* "autoreconf" "-vfi")))))))

Is bootstrapping really required?  Is there a release that doesn’t
require it?

> +    (home-page "https://forge.imag.fr/projects/ocl-icd/")
> +    (synopsis "OpenCL implementations are provided as ICD (Installable Client Driver).")

I don’t understand this synopsis.

> +    (description "OpenCL implementations are provided as ICD (Installable Client Driver).
> +    An OpenCL program can use several ICD thanks to the use of an ICD Loader as provided by this project.
> +    This free ICD Loader can load any (free or non free) ICD")

I would not mention “free” and “(free or non free)”.  ICD should be defined in the
description.  The description should probably start with the last sentence.

> +    (license (list license:gpl2 license:ruby))))

Is the license really GPLv2 only?  What parts are under the Ruby license?

> +(define-public opencl-headers
> +(let ((commit "c1770dc"))
> +  (package
> +    (name "opencl-headers")
> +    (version (string-append "2.1-" commit ))
> +    (source (origin
> +              (method git-fetch)
> +              (uri (git-reference
> +              (url "https://github.com/KhronosGroup/OpenCL-Headers.git")
> +              (commit commit)))

The indentation is not correct here.

> +              (file-name (string-append name "-" commit))
> +              (sha256
> +               (base32
> +                "0m9fkblqja0686i2jjqiszvq3df95gp01a2674xknlmkd6525rck"))))
> +    (propagated-inputs '())
> +    (inputs '())
> +    (native-inputs '())

These fields are not needed when they are just empty.

> +    (build-system gnu-build-system)
> +    (arguments
> +     '(#:phases
> +       (modify-phases %standard-phases
> +         (delete 'configure)
> +         (delete 'build)
> +         (delete 'check)
> +         (replace 'install
> +                  (lambda* (#:key outputs #:allow-other-keys)
> +                    (copy-recursively "." (string-append
> +                                                 (assoc-ref outputs "out")
> +                                                 "/include/CL")))))))

I think the trivial-build-system would be more appropriate here.

> +    (synopsis "The Khronos OpenCL headers")
> +    (description "This package provides the Khronos OpenCL headers")

The description should be a full sentence with period.

> +    (home-page "https://www.khronos.org/registry/cl/")
> +    (license (list license:gpl2)))))

Again, no “list” needed.  Also please make sure the license is in fact
GPLv2 only.

Could you please resend updated patches?

Thanks again!

~~ Ricardo

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2016-03-21 10:28 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-03-20  2:24 [PATCH] Add the clBLAS (OpenCL accelerated BLAS library) to GNU Guix Dennis Mungai
2016-03-21 10:28 ` Ricardo Wurmus

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.