b8f2bc0768
The rpath fix elimnated too much and thus disabled the mpichversion binary. Diasabling dlopen for infiniband libraries fixes the build for the infinband interface option. With this patch scalapack completes all tests for the infiniband and omnipath interface selection. However, ethernet is still broken with for the scalapack tests. See https://github.com/NixOS/nixpkgs/issues/258599
75 lines
2.5 KiB
Nix
75 lines
2.5 KiB
Nix
{ lib, stdenv, fetchurl, pkg-config, bison, numactl, libxml2
|
|
, perl, gfortran, slurm, openssh, hwloc, zlib, makeWrapper
|
|
# InfiniBand dependencies
|
|
, opensm, rdma-core
|
|
# OmniPath dependencies
|
|
, libpsm2, libfabric
|
|
# Compile with slurm as a process manager
|
|
, useSlurm ? false
|
|
# Network type for MVAPICH2
|
|
, network ? "ethernet"
|
|
} :
|
|
|
|
assert builtins.elem network [ "ethernet" "infiniband" "omnipath" ];
|
|
|
|
stdenv.mkDerivation rec {
|
|
pname = "mvapich";
|
|
version = "2.3.7";
|
|
|
|
src = fetchurl {
|
|
url = "http://mvapich.cse.ohio-state.edu/download/mvapich/mv2/mvapich2-${version}.tar.gz";
|
|
sha256 = "sha256-w5pEkvS+UN9hAHhXSLoolOI85FCpQSgYHVFtpXV3Ua4=";
|
|
};
|
|
|
|
outputs = [ "out" "doc" "man" ];
|
|
|
|
nativeBuildInputs = [ pkg-config bison makeWrapper gfortran ];
|
|
propagatedBuildInputs = [ numactl rdma-core zlib opensm ];
|
|
buildInputs = with lib; [
|
|
numactl
|
|
libxml2
|
|
perl
|
|
openssh
|
|
hwloc
|
|
] ++ optionals (network == "infiniband") [ rdma-core opensm ]
|
|
++ optionals (network == "omnipath") [ libpsm2 libfabric ]
|
|
++ optional useSlurm slurm;
|
|
|
|
configureFlags = with lib; [
|
|
"--with-pm=hydra"
|
|
"--enable-fortran=all"
|
|
"--enable-cxx"
|
|
"--enable-threads=multiple"
|
|
"--enable-hybrid"
|
|
"--enable-shared"
|
|
"FFLAGS=-fallow-argument-mismatch" # fix build with gfortran 10
|
|
] ++ optional useSlurm "--with-pm=slurm"
|
|
++ optional (network == "ethernet") "--with-device=ch3:sock"
|
|
++ optionals (network == "infiniband") [ "--with-device=ch3:mrail" "--with-rdma=gen2" "--disable-ibv-dlopen" ]
|
|
++ optionals (network == "omnipath") ["--with-device=ch3:psm" "--with-psm2=${libpsm2}"];
|
|
|
|
doCheck = true;
|
|
|
|
preFixup = ''
|
|
# /tmp/nix-build... ends up in the RPATH, fix it manually
|
|
for entry in $out/bin/mpichversion $out/bin/mpivars; do
|
|
echo "fix rpath: $entry"
|
|
patchelf --allowed-rpath-prefixes ${builtins.storeDir} --shrink-rpath $entry
|
|
done
|
|
|
|
# Ensure the default compilers are the ones mvapich was built with
|
|
substituteInPlace $out/bin/mpicc --replace 'CC="gcc"' 'CC=${stdenv.cc}/bin/cc'
|
|
substituteInPlace $out/bin/mpicxx --replace 'CXX="g++"' 'CXX=${stdenv.cc}/bin/c++'
|
|
substituteInPlace $out/bin/mpifort --replace 'FC="gfortran"' 'FC=${gfortran}/bin/gfortran'
|
|
'';
|
|
|
|
enableParallelBuilding = true;
|
|
|
|
meta = with lib; {
|
|
description = "MPI-3.1 implementation optimized for Infiband transport";
|
|
homepage = "https://mvapich.cse.ohio-state.edu";
|
|
license = licenses.bsd3;
|
|
maintainers = [ maintainers.markuskowa ];
|
|
platforms = platforms.linux;
|
|
};
|
|
}
|