From 8346343aa5e2f92fb75a71217cdd68a53efdf227 Mon Sep 17 00:00:00 2001 From: Andreas Herrmann Date: Tue, 1 Jul 2014 15:55:12 +0200 Subject: [PATCH 1/6] hdf5: Add mpi support Optionally, build the parallel version of hdf5. --- pkgs/tools/misc/hdf5/default.nix | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/pkgs/tools/misc/hdf5/default.nix b/pkgs/tools/misc/hdf5/default.nix index a7d03d1335f0..43b3a3240e65 100644 --- a/pkgs/tools/misc/hdf5/default.nix +++ b/pkgs/tools/misc/hdf5/default.nix @@ -3,6 +3,7 @@ , fetchurl , zlib ? null , szip ? null +, mpi ? null }: stdenv.mkDerivation rec { version = "1.8.13"; @@ -12,11 +13,22 @@ stdenv.mkDerivation rec { sha256 = "1h9qdl321gzm3ihdhlijbl9sh9qcdrw94j7izg64yfqhxj7b7xl2"; }; + passthru = { + mpiSupport = (mpi != null); + inherit mpi; + }; + buildInputs = [] ++ stdenv.lib.optional (zlib != null) zlib ++ stdenv.lib.optional (szip != null) szip; - configureFlags = if szip != null then "--with-szlib=${szip}" else ""; + propagatedBuildInputs = [] + ++ stdenv.lib.optional (mpi != null) mpi; + + configureFlags = " + ${if szip != null then "--with-szlib=${szip}" else ""} + ${if mpi != null then "--enable-parallel" else ""} + "; patches = [./bin-mv.patch]; From 2728b27f75dd51317cd60053a0c4be6bed70e8ae Mon Sep 17 00:00:00 2001 From: Andreas Herrmann Date: Tue, 1 Jul 2014 15:55:29 +0200 Subject: [PATCH 2/6] hdf5: Offer openmpi version of the package --- pkgs/top-level/all-packages.nix | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index f0e504ff014f..dcba004aab29 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1251,6 +1251,12 @@ let hdf5 = callPackage ../tools/misc/hdf5 { szip = null; + mpi = null; + }; + + hdf5-mpi = hdf5.override { + szip = null; + mpi = pkgs.openmpi; }; heimdall = callPackage ../tools/misc/heimdall { }; From 37b064fcc713ddd88e5c3dd297fabf12b7725c1f Mon Sep 17 00:00:00 2001 From: Andreas Herrmann Date: Wed, 2 Jul 2014 15:10:02 +0200 Subject: [PATCH 3/6] hdf5: Optional enableShared flag Required by h5py in mpi mode. --- pkgs/tools/misc/hdf5/default.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkgs/tools/misc/hdf5/default.nix b/pkgs/tools/misc/hdf5/default.nix index 43b3a3240e65..5cdc468c2a5a 100644 --- a/pkgs/tools/misc/hdf5/default.nix +++ b/pkgs/tools/misc/hdf5/default.nix @@ -4,6 +4,7 @@ , zlib ? null , szip ? null , mpi ? null +, enableShared ? true }: stdenv.mkDerivation rec { version = "1.8.13"; @@ -28,6 +29,7 @@ stdenv.mkDerivation rec { configureFlags = " ${if szip != null then "--with-szlib=${szip}" else ""} ${if mpi != null then "--enable-parallel" else ""} + ${if enableShared then "--enable-shared" else ""} "; patches = [./bin-mv.patch]; From 63c062947eb765e4a02bc892e1891da7057fdfec Mon Sep 17 00:00:00 2001 From: Andreas Herrmann Date: Tue, 1 Jul 2014 16:46:15 +0200 Subject: [PATCH 4/6] mpi4py: New package, version 1.3.1 Python wrapper for the message passing interface standard. Currently building without mpe, or vampir-trace support. --- .../python-modules/mpi4py/default.nix | 45 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 6 +++ 2 files changed, 51 insertions(+) create mode 100644 pkgs/development/python-modules/mpi4py/default.nix diff --git a/pkgs/development/python-modules/mpi4py/default.nix b/pkgs/development/python-modules/mpi4py/default.nix new file mode 100644 index 000000000000..74d46def9074 --- /dev/null +++ b/pkgs/development/python-modules/mpi4py/default.nix @@ -0,0 +1,45 @@ +{ stdenv, fetchurl, python, buildPythonPackage, mpi, openssh }: + +buildPythonPackage rec { + name = "mpi4py-1.3.1"; + + src = fetchurl { + url = "https://bitbucket.org/mpi4py/mpi4py/downloads/${name}.tar.gz"; + sha256 = "e7bd2044aaac5a6ea87a87b2ecc73b310bb6efe5026031e33067ea3c2efc3507"; + }; + + passthru = { + inherit mpi; + }; + + configurePhase = ""; + + installPhase = '' + mkdir -p "$out/lib/${python.libPrefix}/site-packages" + export PYTHONPATH="$out/lib/${python.libPrefix}/site-packages:$PYTHONPATH" + + ${python}/bin/${python.executable} setup.py install \ + --install-lib=$out/lib/${python.libPrefix}/site-packages \ + --prefix="$out" + + # --install-lib: + # sometimes packages specify where files should be installed outside the usual + # python lib prefix, we override that back so all infrastructure (setup hooks) + # work as expected + ''; + + setupPyBuildFlags = ["--mpicc=${mpi}/bin/mpicc"]; + + buildInputs = [ mpi ]; + # Requires openssh for tests. Tests of dependent packages will also fail, + # if openssh is not present. E.g. h5py with mpi support. + propagatedBuildInputs = [ openssh ]; + + meta = { + description = " + Provides Python bindings for the Message Passing Interface standard. + "; + homepage = "http://code.google.com/p/mpi4py/"; + license = stdenv.lib.licenses.bsd3; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index fccad5c81de4..59f00576dad2 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -105,6 +105,12 @@ rec { pylabQtSupport = false; }); + mpi4py = callPackage ../development/python-modules/mpi4py { + inherit (pkgs) stdenv fetchurl openssh; + inherit python buildPythonPackage; + mpi = pkgs.openmpi; + }; + nixpart = callPackage ../tools/filesystems/nixpart { }; # This is used for NixOps to make sure we won't break it with the next major From 3c6afb34967a241e2c2e106cb02bad55b5389b94 Mon Sep 17 00:00:00 2001 From: Andreas Herrmann Date: Tue, 1 Jul 2014 16:20:56 +0200 Subject: [PATCH 5/6] h5py: New package, version 2.3.1 A pythonic interface to the hdf5 library. It also supports parallel hdf5. --- .../python-modules/h5py/default.nix | 43 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 13 ++++++ 2 files changed, 56 insertions(+) create mode 100644 pkgs/development/python-modules/h5py/default.nix diff --git a/pkgs/development/python-modules/h5py/default.nix b/pkgs/development/python-modules/h5py/default.nix new file mode 100644 index 000000000000..9ab68ac4cd2b --- /dev/null +++ b/pkgs/development/python-modules/h5py/default.nix @@ -0,0 +1,43 @@ +{ stdenv, fetchurl, python, buildPythonPackage +, numpy, hdf5, cython +, mpiSupport ? false, mpi4py ? null, mpi ? null }: + +assert mpiSupport == hdf5.mpiSupport; +assert mpiSupport -> mpi != null + && mpi4py != null + && mpi == mpi4py.mpi + && mpi == hdf5.mpi + ; + +with stdenv.lib; + +buildPythonPackage rec { + name = "h5py-2.3.1"; + + src = fetchurl { + url = "https://pypi.python.org/packages/source/h/h5py/${name}.tar.gz"; + md5 = "8f32f96d653e904d20f9f910c6d9dd91"; + }; + + setupPyBuildFlags = [ "--hdf5=${hdf5}" ] + ++ optional mpiSupport "--mpi" + ; + setupPyInstallFlags = setupPyBuildFlags; + + preBuild = if mpiSupport then "export CC=${mpi}/bin/mpicc" else ""; + + buildInputs = [ hdf5 cython ] + ++ optional mpiSupport mpi + ; + propagatedBuildInputs = [ numpy ] + ++ optional mpiSupport mpi4py + ; + + meta = { + description = " + The h5py package is a Pythonic interface to the HDF5 binary data format. + "; + homepage = "http://www.h5py.org/"; + license = stdenv.lib.licenses.bsd2; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 59f00576dad2..2e7189c3a5bc 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -89,6 +89,19 @@ rec { ''; }; + h5py = callPackage ../development/python-modules/h5py { + inherit (pkgs) stdenv fetchurl; + inherit python buildPythonPackage cython numpy; + hdf5 = pkgs.hdf5.override { mpi = null; }; + }; + + h5py-mpi = h5py.override { + mpiSupport = true; + mpi = pkgs.openmpi; + hdf5 = pkgs.hdf5.override { mpi = pkgs.openmpi; enableShared = true; }; + inherit mpi4py; + }; + ipython = import ../shells/ipython { inherit (pkgs) stdenv fetchurl sip pyqt4; inherit buildPythonPackage pythonPackages; From 1e0605738a94d834c97d6e7b9d1fc920f649facb Mon Sep 17 00:00:00 2001 From: Andreas Herrmann Date: Sun, 6 Jul 2014 23:13:04 +0200 Subject: [PATCH 6/6] openmpi: Optional configure flags * Activate support for the Sun Grid Engine * Pass PATH/LD_LIBRARY_PATH pointing to the current mpi installation to other processes by default. --- pkgs/development/libraries/openmpi/default.nix | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/pkgs/development/libraries/openmpi/default.nix b/pkgs/development/libraries/openmpi/default.nix index 678a439fe0ac..15160d3afc49 100644 --- a/pkgs/development/libraries/openmpi/default.nix +++ b/pkgs/development/libraries/openmpi/default.nix @@ -1,4 +1,13 @@ -{stdenv, fetchurl, gfortran}: +{stdenv, fetchurl, gfortran + +# Enable the Sun Grid Engine bindings +, enableSGE ? false + +# Pass PATH/LD_LIBRARY_PATH to point to current mpirun by default +, enablePrefix ? false +}: + +with stdenv.lib; stdenv.mkDerivation { name = "openmpi-1.6.5"; @@ -7,6 +16,10 @@ stdenv.mkDerivation { sha256 = "11gws4d3z7934zna2r7m1f80iay2ha17kp42mkh39wjykfwbldzy"; }; buildInputs = [ gfortran ]; + configureFlags = [] + ++ optional enableSGE "--with-sge" + ++ optional enablePrefix "--enable-mpirun-prefix-by-default" + ; meta = { homePage = http://www.open-mpi.org/; description = "Open source MPI-2 implementation";