openmpi: nixfmt-rfc-style
This commit is contained in:
@@ -1,31 +1,47 @@
|
||||
{ lib, stdenv, fetchurl, removeReferencesTo, gfortran, perl, libnl
|
||||
, rdma-core, zlib, numactl, libevent, hwloc, targetPackages
|
||||
, libpsm2, libfabric, pmix, ucx, ucc, makeWrapper
|
||||
, config
|
||||
# Enable CUDA support
|
||||
, cudaSupport ? config.cudaSupport, cudaPackages
|
||||
|
||||
# Enable the Sun Grid Engine bindings
|
||||
, enableSGE ? false
|
||||
|
||||
# Pass PATH/LD_LIBRARY_PATH to point to current mpirun by default
|
||||
, enablePrefix ? false
|
||||
|
||||
# Enable libfabric support (necessary for Omnipath networks) on x86_64 linux
|
||||
, fabricSupport ? stdenv.isLinux && stdenv.isx86_64
|
||||
|
||||
# Enable Fortran support
|
||||
, fortranSupport ? true
|
||||
{
|
||||
lib,
|
||||
stdenv,
|
||||
fetchurl,
|
||||
removeReferencesTo,
|
||||
gfortran,
|
||||
perl,
|
||||
libnl,
|
||||
rdma-core,
|
||||
zlib,
|
||||
numactl,
|
||||
libevent,
|
||||
hwloc,
|
||||
targetPackages,
|
||||
libpsm2,
|
||||
libfabric,
|
||||
pmix,
|
||||
ucx,
|
||||
ucc,
|
||||
makeWrapper,
|
||||
config,
|
||||
# Enable CUDA support
|
||||
cudaSupport ? config.cudaSupport,
|
||||
cudaPackages,
|
||||
# Enable the Sun Grid Engine bindings
|
||||
enableSGE ? false,
|
||||
# Pass PATH/LD_LIBRARY_PATH to point to current mpirun by default
|
||||
enablePrefix ? false,
|
||||
# Enable libfabric support (necessary for Omnipath networks) on x86_64 linux
|
||||
fabricSupport ? stdenv.isLinux && stdenv.isx86_64,
|
||||
# Enable Fortran support
|
||||
fortranSupport ? true,
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "openmpi";
|
||||
version = "4.1.6";
|
||||
|
||||
src = with lib.versions; fetchurl {
|
||||
url = "https://www.open-mpi.org/software/ompi/v${major version}.${minor version}/downloads/${pname}-${version}.tar.bz2";
|
||||
sha256 = "sha256-90CZRIVRbetjtTEa8SLCZRefUyig2FelZ7hdsAsR5BU=";
|
||||
};
|
||||
src =
|
||||
with lib.versions;
|
||||
fetchurl {
|
||||
url = "https://www.open-mpi.org/software/ompi/v${major version}.${minor version}/downloads/${pname}-${version}.tar.bz2";
|
||||
sha256 = "sha256-90CZRIVRbetjtTEa8SLCZRefUyig2FelZ7hdsAsR5BU=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
patchShebangs ./
|
||||
@@ -38,34 +54,63 @@ stdenv.mkDerivation rec {
|
||||
find -name "Makefile.in" -exec sed -i "s/\`date\`/$ts/" \{} \;
|
||||
'';
|
||||
|
||||
outputs = [ "out" "man" "dev" ];
|
||||
outputs = [
|
||||
"out"
|
||||
"man"
|
||||
"dev"
|
||||
];
|
||||
|
||||
buildInputs = [ zlib ]
|
||||
++ lib.optionals stdenv.isLinux [ libnl numactl pmix ucx ucc ]
|
||||
buildInputs =
|
||||
[ zlib ]
|
||||
++ lib.optionals stdenv.isLinux [
|
||||
libnl
|
||||
numactl
|
||||
pmix
|
||||
ucx
|
||||
ucc
|
||||
]
|
||||
++ lib.optionals cudaSupport [ cudaPackages.cuda_cudart ]
|
||||
++ [ libevent hwloc ]
|
||||
++ [
|
||||
libevent
|
||||
hwloc
|
||||
]
|
||||
++ lib.optional (stdenv.isLinux || stdenv.isFreeBSD) rdma-core
|
||||
++ lib.optionals fabricSupport [ libpsm2 libfabric ];
|
||||
++ lib.optionals fabricSupport [
|
||||
libpsm2
|
||||
libfabric
|
||||
];
|
||||
|
||||
nativeBuildInputs = [ perl removeReferencesTo makeWrapper ]
|
||||
nativeBuildInputs =
|
||||
[
|
||||
perl
|
||||
removeReferencesTo
|
||||
makeWrapper
|
||||
]
|
||||
++ lib.optionals cudaSupport [ cudaPackages.cuda_nvcc ]
|
||||
++ lib.optionals fortranSupport [ gfortran ];
|
||||
|
||||
configureFlags = lib.optional (!cudaSupport) "--disable-mca-dso"
|
||||
configureFlags =
|
||||
lib.optional (!cudaSupport) "--disable-mca-dso"
|
||||
++ lib.optional (!fortranSupport) "--disable-mpi-fortran"
|
||||
++ lib.optionals stdenv.isLinux [
|
||||
++ lib.optionals stdenv.isLinux [
|
||||
"--with-libnl=${lib.getDev libnl}"
|
||||
"--with-pmix=${lib.getDev pmix}"
|
||||
"--with-pmix-libdir=${pmix}/lib"
|
||||
"--enable-mpi-cxx"
|
||||
] ++ lib.optional enableSGE "--with-sge"
|
||||
]
|
||||
++ lib.optional enableSGE "--with-sge"
|
||||
++ lib.optional enablePrefix "--enable-mpirun-prefix-by-default"
|
||||
# TODO: add UCX support, which is recommended to use with cuda for the most robust OpenMPI build
|
||||
# https://github.com/openucx/ucx
|
||||
# https://www.open-mpi.org/faq/?category=buildcuda
|
||||
++ lib.optionals cudaSupport [ "--with-cuda=${lib.getDev cudaPackages.cuda_cudart}" "--enable-dlopen" ]
|
||||
++ lib.optionals fabricSupport [ "--with-psm2=${lib.getDev libpsm2}" "--with-libfabric=${lib.getDev libfabric}" ]
|
||||
;
|
||||
++ lib.optionals cudaSupport [
|
||||
"--with-cuda=${lib.getDev cudaPackages.cuda_cudart}"
|
||||
"--enable-dlopen"
|
||||
]
|
||||
++ lib.optionals fabricSupport [
|
||||
"--with-psm2=${lib.getDev libpsm2}"
|
||||
"--with-libfabric=${lib.getDev libfabric}"
|
||||
];
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
@@ -85,39 +130,41 @@ stdenv.mkDerivation rec {
|
||||
done
|
||||
|
||||
moveToOutput "share/openmpi/ortecc-wrapper-data.txt" "''${!outputDev}"
|
||||
'';
|
||||
|
||||
postFixup = ''
|
||||
remove-references-to -t $dev $(readlink -f $out/lib/libopen-pal${stdenv.hostPlatform.extensions.sharedLibrary})
|
||||
remove-references-to -t $man $(readlink -f $out/lib/libopen-pal${stdenv.hostPlatform.extensions.sharedLibrary})
|
||||
|
||||
# The path to the wrapper is hard coded in libopen-pal.so, which we just cleared.
|
||||
wrapProgram $dev/bin/opal_wrapper \
|
||||
--set OPAL_INCLUDEDIR $dev/include \
|
||||
--set OPAL_PKGDATADIR $dev/share/openmpi
|
||||
|
||||
# default compilers should be indentical to the
|
||||
# compilers at build time
|
||||
|
||||
echo "$dev/share/openmpi/mpicc-wrapper-data.txt"
|
||||
sed -i 's:compiler=.*:compiler=${targetPackages.stdenv.cc}/bin/${targetPackages.stdenv.cc.targetPrefix}cc:' \
|
||||
$dev/share/openmpi/mpicc-wrapper-data.txt
|
||||
|
||||
echo "$dev/share/openmpi/ortecc-wrapper-data.txt"
|
||||
sed -i 's:compiler=.*:compiler=${targetPackages.stdenv.cc}/bin/${targetPackages.stdenv.cc.targetPrefix}cc:' \
|
||||
$dev/share/openmpi/ortecc-wrapper-data.txt
|
||||
|
||||
echo "$dev/share/openmpi/mpic++-wrapper-data.txt"
|
||||
sed -i 's:compiler=.*:compiler=${targetPackages.stdenv.cc}/bin/${targetPackages.stdenv.cc.targetPrefix}c++:' \
|
||||
$dev/share/openmpi/mpic++-wrapper-data.txt
|
||||
'' + lib.optionalString fortranSupport ''
|
||||
|
||||
echo "$dev/share/openmpi/mpifort-wrapper-data.txt"
|
||||
sed -i 's:compiler=.*:compiler=${gfortran}/bin/${gfortran.targetPrefix}gfortran:' \
|
||||
$dev/share/openmpi/mpifort-wrapper-data.txt
|
||||
|
||||
'';
|
||||
|
||||
postFixup =
|
||||
''
|
||||
remove-references-to -t $dev $(readlink -f $out/lib/libopen-pal${stdenv.hostPlatform.extensions.sharedLibrary})
|
||||
remove-references-to -t $man $(readlink -f $out/lib/libopen-pal${stdenv.hostPlatform.extensions.sharedLibrary})
|
||||
|
||||
# The path to the wrapper is hard coded in libopen-pal.so, which we just cleared.
|
||||
wrapProgram $dev/bin/opal_wrapper \
|
||||
--set OPAL_INCLUDEDIR $dev/include \
|
||||
--set OPAL_PKGDATADIR $dev/share/openmpi
|
||||
|
||||
# default compilers should be indentical to the
|
||||
# compilers at build time
|
||||
|
||||
echo "$dev/share/openmpi/mpicc-wrapper-data.txt"
|
||||
sed -i 's:compiler=.*:compiler=${targetPackages.stdenv.cc}/bin/${targetPackages.stdenv.cc.targetPrefix}cc:' \
|
||||
$dev/share/openmpi/mpicc-wrapper-data.txt
|
||||
|
||||
echo "$dev/share/openmpi/ortecc-wrapper-data.txt"
|
||||
sed -i 's:compiler=.*:compiler=${targetPackages.stdenv.cc}/bin/${targetPackages.stdenv.cc.targetPrefix}cc:' \
|
||||
$dev/share/openmpi/ortecc-wrapper-data.txt
|
||||
|
||||
echo "$dev/share/openmpi/mpic++-wrapper-data.txt"
|
||||
sed -i 's:compiler=.*:compiler=${targetPackages.stdenv.cc}/bin/${targetPackages.stdenv.cc.targetPrefix}c++:' \
|
||||
$dev/share/openmpi/mpic++-wrapper-data.txt
|
||||
''
|
||||
+ lib.optionalString fortranSupport ''
|
||||
|
||||
echo "$dev/share/openmpi/mpifort-wrapper-data.txt"
|
||||
sed -i 's:compiler=.*:compiler=${gfortran}/bin/${gfortran.targetPrefix}gfortran:' \
|
||||
$dev/share/openmpi/mpifort-wrapper-data.txt
|
||||
|
||||
'';
|
||||
|
||||
doCheck = true;
|
||||
|
||||
passthru = {
|
||||
|
||||
Reference in New Issue
Block a user