Summary: A high-performance implementation of MPI Name: mpich Version: 4.1.2 Release: %autorelease License: mpich2 URL: https://www.mpich.org/ Source0: https://www.mpich.org/static/downloads/%{version}/%{name}-%{version}.tar.gz Source1: mpich.macros Source3: mpich.pth.py3 Patch: 0001-pkgconf-remove-optimization-and-link-flags-from-pkgc.patch Patch: 0002-pkgconf-also-drop-rpath-flags-from-pkgconf-file.patch Patch: 0003-Drop-build-flags-e.g.-specs.-and-lto-from-mpi-wrappe.patch Patch: 0004-Make-mpich.module-useful.patch # TODO: submit ^ upstream Patch: mpich-configure-max_align_t.patch Patch: mpich-aclocal_cc-implicit-int.patch Patch: mpich-json-configure-__thread.patch BuildRequires: make BuildRequires: autoconf BuildRequires: automake BuildRequires: libtool BuildRequires: gcc BuildRequires: gcc-c++ BuildRequires: gcc-gfortran BuildRequires: hwloc-devel >= 2.0 %if ! (0%{?rhel} >= 10) %ifarch x86_64 BuildRequires: infinipath-psm-devel # BuildRequires: json-c-devel BuildRequires: libpsm2-devel %endif %endif BuildRequires: libfabric-devel BuildRequires: libnl3-devel BuildRequires: libuuid-devel BuildRequires: numactl-devel %ifarch aarch64 ppc64le x86_64 BuildRequires: ucx-devel %endif %if ! 0%{?rhel} BuildRequires: yaksa-devel %else Provides: bundled(yaksa) = 0.2 %endif # For ./maint/extractcvars BuildRequires: perl(lib) %ifnarch s390 %{mips} BuildRequires: valgrind-devel %endif # For %%{python3_sitearch} BuildRequires: python3-devel BuildRequires: rpm-mpi-hooks Provides: mpi Provides: mpich2 = %{version} Obsoletes: mpich2 < 3.0 Requires: environment(modules) # Make sure this package is rebuilt with correct Python version when updating # Otherwise mpi.req from rpm-mpi-hooks doesn't work # https://bugzilla.redhat.com/show_bug.cgi?id=1705296 Requires: (python(abi) = %{python3_version} if python3) %description MPICH is a high-performance and widely portable implementation of the Message Passing Interface (MPI) standard (MPI-1, MPI-2 and MPI-3). The goals of MPICH are: (1) to provide an MPI implementation that efficiently supports different computation and communication platforms including commodity clusters (desktop systems, shared-memory systems, multicore architectures), high-speed networks (10 Gigabit Ethernet, InfiniBand, Myrinet, Quadrics) and proprietary high-end computing systems (Blue Gene, Cray) and (2) to enable cutting-edge research in MPI through an easy-to-extend modular framework for other derived implementations. The mpich binaries in this RPM packages were configured to use the default process manager (Hydra) using the default device (ch3). The ch3 device was configured with support for the nemesis channel that allows for shared-memory and TCP/IP sockets based communication. This build also include support for using the 'module environment' to select which MPI implementation to use when multiple implementations are installed. If you want MPICH support to be automatically loaded, you need to install the mpich-autoload package. %package autoload Summary: Load mpich automatically into profile Requires: mpich = %{version}-%{release} Provides: mpich2-autoload = 3.0.1 Obsoletes: mpich2-autoload < 3.0 %description autoload This package contains profile files that make mpich automatically loaded. %package devel Summary: Development files for mpich Provides: %{name}-devel-static = %{version}-%{release} Requires: %{name} = %{version}-%{release} Requires: pkgconfig Requires: gcc-gfortran Requires: rpm-mpi-hooks Requires: redhat-rpm-config Provides: mpich2-devel = 3.0.1 Obsoletes: mpich2-devel < 3.0 %description devel Contains development headers and libraries for mpich %package doc Summary: Documentations and examples for mpich BuildArch: noarch Requires: %{name}-devel = %{version}-%{release} Provides: mpich2-doc = 3.0.1 Obsoletes: mpich2-doc < 3.0 %description doc Contains documentations, examples and man-pages for mpich %package -n python3-mpich Summary: mpich support for Python 3 Requires: %{name} = %{version}-%{release} Requires: python(abi) = %{python3_version} %description -n python3-mpich mpich support for Python 3. %prep %autosetup -p1 %build ./autogen.sh CONFIGURE_OPTS=( --with-custom-version-string=%{version}-%{release} --enable-sharedlibs=gcc --enable-shared --enable-static=no --enable-lib-depend --disable-rpath --disable-silent-rules --disable-dependency-tracking --with-gnu-ld --with-pm=hydra:gforker --includedir=%{_includedir}/%{name}-%{_arch} --bindir=%{_libdir}/%{name}/bin --libdir=%{_libdir}/%{name}/lib --datadir=%{_datadir}/%{name} --mandir=%{_mandir}/%{name}-%{_arch} --docdir=%{_datadir}/%{name}/doc --htmldir=%{_datadir}/%{name}/doc --with-hwloc --with-libfabric %ifarch aarch64 ppc64le x86_64 --with-ucx %endif %if ! 0%{?rhel} --with-yaksa %endif ) # --with-device=ch3:nemesis # Set -fallow-argument-mismatch for #1795817 %configure "${CONFIGURE_OPTS[@]}" \ FFLAGS="$FFLAGS -fallow-argument-mismatch" \ FCFLAGS="$FCFLAGS -fallow-argument-mismatch" # Remove rpath sed -r -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool sed -r -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool #Try and work around 'unused-direct-shlib-dependency' rpmlint warnning sed -i -e 's| -shared | -Wl,--as-needed\0|g' libtool %make_build VERBOSE=1 %install %make_install mkdir -p %{buildroot}%{_fmoddir}/%{name} mv %{buildroot}%{_includedir}/%{name}-*/*.mod %{buildroot}%{_fmoddir}/%{name}/ sed -r -i 's|^modincdir=.*|modincdir=%{_fmoddir}/%{name}|' %{buildroot}%{_libdir}/%{name}/bin/mpifort # Install the module file mkdir -p %{buildroot}%{_datadir}/modulefiles/mpi sed -r 's|%{_bindir}|%{_libdir}/%{name}/bin|; s|@LIBDIR@|%{_libdir}/%{name}|; s|@MPINAME@|%{name}|; s|@py2sitearch@|%{python2_sitearch}|; s|@py3sitearch@|%{python3_sitearch}|; s|@ARCH@|%{_arch}|; s|@fortranmoddir@|%{_fmoddir}|; ' \ %{buildroot}%{_datadir}/modulefiles/mpi/%{name}-%{_arch} mkdir -p %{buildroot}%{_sysconfdir}/profile.d cat >%{buildroot}%{_sysconfdir}/profile.d/mpich-%{_arch}.sh <