about summary refs log tree commit diff
path: root/pkgs/tools
diff options
context:
space:
mode:
authormarkuskowa <markus.kowalewski@gmail.com>2019-02-22 09:31:23 +0100
committerGitHub <noreply@github.com>2019-02-22 09:31:23 +0100
commit5c8c2587276506e61ec51e4b7d6c9288fd226794 (patch)
tree06e962d885c68bf406a879c294d0f2d9c0b0dd54 /pkgs/tools
parentf96d4d555ba9fba3e0f341b7a8ff04e85ddc2216 (diff)
parent99ca454f2366c1468a7d400cb1ccc5294fd19529 (diff)
downloadnixlib-5c8c2587276506e61ec51e4b7d6c9288fd226794.tar
nixlib-5c8c2587276506e61ec51e4b7d6c9288fd226794.tar.gz
nixlib-5c8c2587276506e61ec51e4b7d6c9288fd226794.tar.bz2
nixlib-5c8c2587276506e61ec51e4b7d6c9288fd226794.tar.lz
nixlib-5c8c2587276506e61ec51e4b7d6c9288fd226794.tar.xz
nixlib-5c8c2587276506e61ec51e4b7d6c9288fd226794.tar.zst
nixlib-5c8c2587276506e61ec51e4b7d6c9288fd226794.zip
Merge pull request #54877 from markuskowa/upd-openmpi4
openmpi: 3.1.3 -> 4.0.0
Diffstat (limited to 'pkgs/tools')
-rw-r--r--pkgs/tools/misc/hdf5/0001-Updated-H5S-to-use-the-MPI-2-function-MPI_Type_get_e.patch58
-rw-r--r--pkgs/tools/misc/hdf5/0001-Yanked-all-MPI-1-calls.patch115
-rw-r--r--pkgs/tools/misc/hdf5/default.nix10
3 files changed, 181 insertions, 2 deletions
diff --git a/pkgs/tools/misc/hdf5/0001-Updated-H5S-to-use-the-MPI-2-function-MPI_Type_get_e.patch b/pkgs/tools/misc/hdf5/0001-Updated-H5S-to-use-the-MPI-2-function-MPI_Type_get_e.patch
new file mode 100644
index 000000000000..8b32ea4bab1c
--- /dev/null
+++ b/pkgs/tools/misc/hdf5/0001-Updated-H5S-to-use-the-MPI-2-function-MPI_Type_get_e.patch
@@ -0,0 +1,58 @@
+From 38c202df4db8eddd5e6f6f7d6506ce97912a3111 Mon Sep 17 00:00:00 2001
+From: Dana Robinson <derobins@hdfgroup.org>
+Date: Mon, 26 Nov 2018 22:10:06 -0800
+Subject: [PATCH] Updated H5S to use the MPI-2 function MPI_Type_get_exten()
+ where available. OpenMPI 4.0 removed the deprecated MPI-1 MPI_type_extent()
+ call by default, so this avoids needing a special OpenMPI build.
+
+---
+ src/H5Smpio.c | 26 ++++++++++++++++++++++++--
+ 1 file changed, 24 insertions(+), 2 deletions(-)
+
+diff --git a/src/H5Smpio.c b/src/H5Smpio.c
+index 2bd275a729..e71e2cb858 100644
+--- a/src/H5Smpio.c
++++ b/src/H5Smpio.c
+@@ -879,7 +879,18 @@ H5S_mpio_hyper_type(const H5S_t *space, size_t elmt_size,
+                     HMPI_GOTO_ERROR(FAIL, "MPI_Type_contiguous failed", mpi_code)
+             }
+ 
+-            MPI_Type_extent (inner_type, &inner_extent);
++#if MPI_VERSION >= 2
++{
++            /* As of version 4.0, OpenMPI now turns off MPI-1 API calls by default,
++             * so we're using the MPI-2 version even though we don't need the lb
++             * value.
++             */
++            MPI_Aint unused_lb_arg;
++            MPI_Type_get_extent(inner_type, &unused_lb_arg, &inner_extent);
++}
++#else
++            MPI_Type_extent(inner_type, &inner_extent);
++#endif
+             stride_in_bytes = inner_extent * (MPI_Aint)d[i].strid;
+ 
+             /* If the element count is larger than what a 32 bit integer can hold,
+@@ -1500,7 +1511,18 @@ static herr_t H5S_mpio_create_large_type (hsize_t num_elements,
+             }
+         }
+ 
+-        MPI_Type_extent (old_type, &old_extent);
++#if MPI_VERSION >= 2
++{
++        /* As of version 4.0, OpenMPI now turns off MPI-1 API calls by default,
++         * so we're using the MPI-2 version even though we don't need the lb
++         * value.
++         */
++        MPI_Aint unused_lb_arg;
++        MPI_Type_get_extent(old_type, &unused_lb_arg, &old_extent);
++}
++#else
++        MPI_Type_extent(old_type, &old_extent);
++#endif
+ 
+         /* Set up the arguments for MPI_Type_struct constructor */
+         type[0] = outer_type;
+-- 
+2.18.1
+
diff --git a/pkgs/tools/misc/hdf5/0001-Yanked-all-MPI-1-calls.patch b/pkgs/tools/misc/hdf5/0001-Yanked-all-MPI-1-calls.patch
new file mode 100644
index 000000000000..8dc831dbba12
--- /dev/null
+++ b/pkgs/tools/misc/hdf5/0001-Yanked-all-MPI-1-calls.patch
@@ -0,0 +1,115 @@
+From 8cf3bfb14bd2a80f13d269a9e84cd99f86f19254 Mon Sep 17 00:00:00 2001
+From: Dana Robinson <derobins@hdfgroup.org>
+Date: Tue, 27 Nov 2018 10:31:54 -0800
+Subject: [PATCH] Yanked all MPI-1 calls
+
+---
+ src/H5.c          |  2 +-
+ src/H5Smpio.c     | 24 ++++++++----------------
+ testpar/t_cache.c | 20 ++++++++++----------
+ 3 files changed, 19 insertions(+), 27 deletions(-)
+
+diff --git a/src/H5.c b/src/H5.c
+index d1967e611b..bf4643ca59 100644
+--- a/src/H5.c
++++ b/src/H5.c
+@@ -138,7 +138,7 @@ H5_init_library(void)
+         if (mpi_initialized && !mpi_finalized) {
+             int key_val;
+ 
+-            if(MPI_SUCCESS != (mpi_code = MPI_Comm_create_keyval(MPI_NULL_COPY_FN, 
++            if(MPI_SUCCESS != (mpi_code = MPI_Comm_create_keyval(MPI_COMM_NULL_COPY_FN, 
+                                                                  (MPI_Comm_delete_attr_function *)H5_mpi_delete_cb, 
+                                                                  &key_val, NULL)))
+                 HMPI_GOTO_ERROR(FAIL, "MPI_Comm_create_keyval failed", mpi_code)
+diff --git a/src/H5Smpio.c b/src/H5Smpio.c
+index e71e2cb858..935d27972e 100644
+--- a/src/H5Smpio.c
++++ b/src/H5Smpio.c
+@@ -879,18 +879,14 @@ H5S_mpio_hyper_type(const H5S_t *space, size_t elmt_size,
+                     HMPI_GOTO_ERROR(FAIL, "MPI_Type_contiguous failed", mpi_code)
+             }
+ 
+-#if MPI_VERSION >= 2
+-{
+             /* As of version 4.0, OpenMPI now turns off MPI-1 API calls by default,
+              * so we're using the MPI-2 version even though we don't need the lb
+              * value.
+              */
+-            MPI_Aint unused_lb_arg;
+-            MPI_Type_get_extent(inner_type, &unused_lb_arg, &inner_extent);
+-}
+-#else
+-            MPI_Type_extent(inner_type, &inner_extent);
+-#endif
++            {
++                MPI_Aint unused_lb_arg;
++                MPI_Type_get_extent(inner_type, &unused_lb_arg, &inner_extent);
++            }
+             stride_in_bytes = inner_extent * (MPI_Aint)d[i].strid;
+ 
+             /* If the element count is larger than what a 32 bit integer can hold,
+@@ -1511,18 +1507,14 @@ static herr_t H5S_mpio_create_large_type (hsize_t num_elements,
+             }
+         }
+ 
+-#if MPI_VERSION >= 2
+-{
+         /* As of version 4.0, OpenMPI now turns off MPI-1 API calls by default,
+          * so we're using the MPI-2 version even though we don't need the lb
+          * value.
+          */
+-        MPI_Aint unused_lb_arg;
+-        MPI_Type_get_extent(old_type, &unused_lb_arg, &old_extent);
+-}
+-#else
+-        MPI_Type_extent(old_type, &old_extent);
+-#endif
++        {
++            MPI_Aint unused_lb_arg;
++            MPI_Type_get_extent(old_type, &unused_lb_arg, &old_extent);
++        }
+ 
+         /* Set up the arguments for MPI_Type_struct constructor */
+         type[0] = outer_type;
+diff --git a/testpar/t_cache.c b/testpar/t_cache.c
+index 5e15ec274c..ca5ded9ecf 100644
+--- a/testpar/t_cache.c
++++ b/testpar/t_cache.c
+@@ -1217,15 +1217,15 @@ setup_derived_types(void)
+     struct mssg_t sample; /* used to compute displacements */
+ 
+     /* setup the displacements array */
+-    if ( ( MPI_SUCCESS != MPI_Address(&sample.req, &displs[0]) ) ||
+-         ( MPI_SUCCESS != MPI_Address(&sample.src, &displs[1]) ) ||
+-         ( MPI_SUCCESS != MPI_Address(&sample.dest, &displs[2]) ) ||
+-         ( MPI_SUCCESS != MPI_Address(&sample.mssg_num, &displs[3]) ) ||
+-         ( MPI_SUCCESS != MPI_Address(&sample.base_addr, &displs[4]) ) ||
+-         ( MPI_SUCCESS != MPI_Address(&sample.len, &displs[5]) ) ||
+-         ( MPI_SUCCESS != MPI_Address(&sample.ver, &displs[6]) ) ||
+-         ( MPI_SUCCESS != MPI_Address(&sample.count, &displs[7]) ) ||
+-         ( MPI_SUCCESS != MPI_Address(&sample.magic, &displs[8]) ) ) {
++    if ( ( MPI_SUCCESS != MPI_Get_address(&sample.req, &displs[0]) ) ||
++         ( MPI_SUCCESS != MPI_Get_address(&sample.src, &displs[1]) ) ||
++         ( MPI_SUCCESS != MPI_Get_address(&sample.dest, &displs[2]) ) ||
++         ( MPI_SUCCESS != MPI_Get_address(&sample.mssg_num, &displs[3]) ) ||
++         ( MPI_SUCCESS != MPI_Get_address(&sample.base_addr, &displs[4]) ) ||
++         ( MPI_SUCCESS != MPI_Get_address(&sample.len, &displs[5]) ) ||
++         ( MPI_SUCCESS != MPI_Get_address(&sample.ver, &displs[6]) ) ||
++         ( MPI_SUCCESS != MPI_Get_address(&sample.count, &displs[7]) ) ||
++         ( MPI_SUCCESS != MPI_Get_address(&sample.magic, &displs[8]) ) ) {
+ 
+         nerrors++;
+         success = FALSE;
+@@ -1245,7 +1245,7 @@ setup_derived_types(void)
+ 
+     if ( success ) {
+ 
+-        result = MPI_Type_struct(9, block_len, displs, mpi_types, &mpi_mssg_t);
++        result = MPI_Type_create_struct(9, block_len, displs, mpi_types, &mpi_mssg_t);
+ 
+         if ( result != MPI_SUCCESS ) {
+ 
+-- 
+2.18.1
+
diff --git a/pkgs/tools/misc/hdf5/default.nix b/pkgs/tools/misc/hdf5/default.nix
index 3d50b068cc49..ae34cfd32358 100644
--- a/pkgs/tools/misc/hdf5/default.nix
+++ b/pkgs/tools/misc/hdf5/default.nix
@@ -21,7 +21,7 @@ stdenv.mkDerivation rec {
   src = fetchurl {
     url = "https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.10/${name}/src/${name}.tar.bz2";
     sha256 = "1pr85fa1sh2ky6ai2hs3f21lp252grl2cq3wbyi4rh7dm83gyrqj";
- };
+  };
 
   passthru = {
     mpiSupport = (mpi != null);
@@ -45,7 +45,13 @@ stdenv.mkDerivation rec {
     ++ optionals (mpi != null) ["--enable-parallel" "CC=${mpi}/bin/mpicc"]
     ++ optional enableShared "--enable-shared";
 
-  patches = [./bin-mv.patch];
+  patches = [
+    ./bin-mv.patch
+    # upstream patches for openmpi-4 compatiblity
+    # To be removed with the upgrade to 1.10.5
+    ./0001-Updated-H5S-to-use-the-MPI-2-function-MPI_Type_get_e.patch
+    ./0001-Yanked-all-MPI-1-calls.patch
+  ];
 
   postInstall = ''
     find "$out" -type f -exec remove-references-to -t ${stdenv.cc} '{}' +