Summary: A high-performance implementation of MPI Name: mpich Version: 3.4.1 Release: %autorelease License: MIT URL: https://www.mpich.org/ Source0: https://www.mpich.org/static/downloads/%{version}/%{name}-%{version}.tar.gz Source1: mpich.macros Source2: mpich.pth.py2 Source3: mpich.pth.py3 Patch0: 0001-Drop-real128.patch Patch1: mpich-modules.patch # Drop build flags, e.g. -specs... and -lto from mpi wrappers (mpicc and mpicxx) # for discussion see: # https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/message/7TFWEKTDWBYBHEGMIWBVI3AVGORZGNBS/ Patch2: fix_wrapper_flags.patch Patch3: 0001-pkgconf-remove-optimization-and-link-flags-from-pkgc.patch Patch4: 0002-pkgconf-also-drop-rpath-flags-from-pkgconf-file.patch # TODO: submit ^ upstream # https://github.com/pmodels/mpich/issues/4534 Patch5: 0001-Revert-Remove-use-of-vasprintf.patch # There seems to be some syntax error, but I cannot figure out what it # is (";;" is missing, but adding it doesn't fix things). Since we use # clock_gettime anyway, just rip out the whole block. Patch6: esac-syntax-fix.diff BuildRequires: make BuildRequires: gcc BuildRequires: gcc-c++ BuildRequires: gcc-gfortran BuildRequires: hwloc-devel >= 2.0 BuildRequires: autoconf BuildRequires: automake BuildRequires: libtool # 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 %setup %ifarch %{arm} %patch0 -p1 %endif %patch1 -p1 %patch2 -p1 %patch3 -p1 %patch4 -p1 %patch5 -p1 %patch6 -p1 %build ./autogen.sh CONFIGURE_OPTS=( --enable-sharedlibs=gcc --enable-shared --enable-static=no --enable-lib-depend --disable-rpath --disable-silent-rules --enable-fortran --with-gnu-ld --with-device=ch3:nemesis --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-prefix=system ) # Set -fallow-argument-mismatch for #1795817 %configure "${CONFIGURE_OPTS[@]}" FFLAGS="$FFLAGS -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 # work-around libtool error: cannot determine absolute directory name of 'system/lib' mkdir -p system/lib %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 <