diff --git a/nixos/doc/manual/release-notes/rl-2405.section.md b/nixos/doc/manual/release-notes/rl-2405.section.md index aba4d3d72d1d..a5ed7361c8b0 100644 --- a/nixos/doc/manual/release-notes/rl-2405.section.md +++ b/nixos/doc/manual/release-notes/rl-2405.section.md @@ -193,5 +193,7 @@ The pre-existing [services.ankisyncd](#opt-services.ankisyncd.enable) has been m replaces the need for the `extraPackages` option, this option will be deprecated in future releases. +- The `mpich` package expression now requires `withPm` to be a list, e.g. `"hydra:gforker"` becomes `[ "hydra" "gforker" ]`. + - QtMultimedia has changed its default backend to `QT_MEDIA_BACKEND=ffmpeg` (previously `gstreamer` on Linux or `darwin` on MacOS). The previous native backends remain available but are now minimally maintained. Refer to [upstream documentation](https://doc.qt.io/qt-6/qtmultimedia-index.html#ffmpeg-as-the-default-backend) for further details about each platform. diff --git a/pkgs/development/libraries/mpich/default.nix b/pkgs/development/libraries/mpich/default.nix index 622ee233f9c4..f53a3268b739 100644 --- a/pkgs/development/libraries/mpich/default.nix +++ b/pkgs/development/libraries/mpich/default.nix @@ -3,10 +3,19 @@ # either libfabric or ucx work for ch4backend on linux. On darwin, neither of # these libraries currently build so this argument is ignored on Darwin. , ch4backend -# Process manager to build -, withPm ? "hydra:gforker" +# Process managers to build (`--with-pm`), +# cf. https://github.com/pmodels/mpich/blob/b80a6d7c24defe7cdf6c57c52430f8075a0a41d6/README.vin#L562-L586 +, withPm ? [ "hydra" "gforker" ] +, pmix +# PMIX support is likely incompatible with process managers (`--with-pm`) +# https://github.com/NixOS/nixpkgs/pull/274804#discussion_r1432601476 +, pmixSupport ? false } : +let + withPmStr = if withPm != [ ] then builtins.concatStringsSep ":" withPm else "no"; +in + assert (ch4backend.pname == "ucx" || ch4backend.pname == "libfabric"); stdenv.mkDerivation rec { @@ -22,11 +31,12 @@ stdenv.mkDerivation rec { configureFlags = [ "--enable-shared" - "--enable-sharedlib" - "--with-pm=${withPm}" + "--with-pm=${withPmStr}" ] ++ lib.optionals (lib.versionAtLeast gfortran.version "10") [ "FFLAGS=-fallow-argument-mismatch" # https://github.com/pmodels/mpich/issues/4300 "FCFLAGS=-fallow-argument-mismatch" + ] ++ lib.optionals pmixSupport [ + "--with-pmix=${lib.getDev pmix}" ]; enableParallelBuilding = true; @@ -45,6 +55,9 @@ stdenv.mkDerivation rec { ''; meta = with lib; { + # As far as we know, --with-pmix silently disables all of `--with-pm` + broken = pmixSupport && withPm != [ ]; + description = "Implementation of the Message Passing Interface (MPI) standard"; longDescription = '' diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index cbf17abd735f..2880178a704e 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -24048,6 +24048,8 @@ with pkgs; ch4backend = libfabric; }; + mpich-pmix = mpich.override { pmixSupport = true; withPm = [ ]; }; + mstpd = callPackage ../os-specific/linux/mstpd { }; mtdev = callPackage ../development/libraries/mtdev { };