277 lines
8.7 KiB
RPMSpec
277 lines
8.7 KiB
RPMSpec
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: autoconf
|
|
BuildRequires: automake
|
|
BuildRequires: libtool
|
|
BuildRequires: gcc
|
|
BuildRequires: gcc-c++
|
|
BuildRequires: gcc-gfortran
|
|
BuildRequires: hwloc-devel >= 2.0
|
|
BuildRequires: libfabric-devel
|
|
%ifarch aarch64 ppc64le x86_64
|
|
BuildRequires: ucx-devel
|
|
%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
|
|
%setup
|
|
|
|
%ifarch %{arm}
|
|
%patch0 -p1
|
|
%endif
|
|
|
|
%patch1 -p1
|
|
%patch2 -p1
|
|
%patch3 -p1
|
|
%patch4 -p1
|
|
%patch5 -p1
|
|
%patch6 -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
|
|
--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
|
|
--with-libfabric=system
|
|
--with-ucx=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}|;
|
|
' \
|
|
<src/packaging/envmods/mpich.module \
|
|
>%{buildroot}%{_datadir}/modulefiles/mpi/%{name}-%{_arch}
|
|
|
|
mkdir -p %{buildroot}%{_sysconfdir}/profile.d
|
|
cat >%{buildroot}%{_sysconfdir}/profile.d/mpich-%{_arch}.sh <<EOF
|
|
# Load mpich environment module
|
|
module load mpi/%{name}-%{_arch}
|
|
EOF
|
|
cp -p %{buildroot}%{_sysconfdir}/profile.d/mpich-%{_arch}.{sh,csh}
|
|
|
|
# Install the RPM macros
|
|
install -pDm0644 %{SOURCE1} %{buildroot}%{_rpmconfigdir}/macros.d/macros.%{name}
|
|
|
|
# Install the .pth files
|
|
mkdir -p %{buildroot}%{python2_sitearch}/%{name}
|
|
install -pDm0644 %{SOURCE2} %{buildroot}%{python2_sitearch}/%{name}.pth
|
|
mkdir -p %{buildroot}%{python3_sitearch}/%{name}
|
|
install -pDm0644 %{SOURCE3} %{buildroot}%{python3_sitearch}/%{name}.pth
|
|
|
|
# Create cmake directory
|
|
mkdir -p %{buildroot}%{_libdir}/%{name}/lib/cmake/
|
|
|
|
find %{buildroot} -type f -name "*.la" -delete
|
|
|
|
%check
|
|
make check VERBOSE=1 \
|
|
%ifarch ppc64le
|
|
|| :
|
|
%endif
|
|
# The test results are ignored on ppc64le. The tests started failing
|
|
# in the bundled openpa checksuite. Upstream has already removed it,
|
|
# so the issue should resolve itself for the next release and I don't
|
|
# think it's worth the time to solve it here.
|
|
|
|
%ldconfig_scriptlets
|
|
|
|
%files
|
|
%license COPYRIGHT
|
|
%doc CHANGES README README.envvar RELEASE_NOTES
|
|
%dir %{_libdir}/%{name}
|
|
%dir %{_libdir}/%{name}/lib
|
|
%dir %{_libdir}/%{name}/bin
|
|
%{_libdir}/%{name}/lib/*.so.*
|
|
%{_libdir}/%{name}/bin/hydra*
|
|
%{_libdir}/%{name}/bin/mpichversion
|
|
%{_libdir}/%{name}/bin/mpiexec*
|
|
%{_libdir}/%{name}/bin/mpirun
|
|
%{_libdir}/%{name}/bin/mpivars
|
|
%{_libdir}/%{name}/bin/parkill
|
|
%dir %{_mandir}/%{name}-%{_arch}
|
|
%doc %{_mandir}/%{name}-%{_arch}/man1/
|
|
%{_datadir}/modulefiles/mpi/
|
|
|
|
%files autoload
|
|
%{_sysconfdir}/profile.d/mpich-%{_arch}.*
|
|
|
|
%files devel
|
|
%{_includedir}/%{name}-%{_arch}/
|
|
%{_libdir}/%{name}/lib/pkgconfig/
|
|
%{_libdir}/%{name}/lib/cmake/
|
|
%{_libdir}/%{name}/lib/*.so
|
|
%{_libdir}/%{name}/bin/mpicc
|
|
%{_libdir}/%{name}/bin/mpic++
|
|
%{_libdir}/%{name}/bin/mpicxx
|
|
%{_libdir}/%{name}/bin/mpif77
|
|
%{_libdir}/%{name}/bin/mpif90
|
|
%{_libdir}/%{name}/bin/mpifort
|
|
%{_fmoddir}/%{name}/
|
|
%{_rpmconfigdir}/macros.d/macros.%{name}
|
|
%{_mandir}/%{name}-%{_arch}/man3/
|
|
|
|
%files doc
|
|
%dir %{_datadir}/%{name}
|
|
%{_datadir}/%{name}/doc/
|
|
|
|
%files -n python3-mpich
|
|
%dir %{python3_sitearch}/%{name}
|
|
%{python3_sitearch}/%{name}.pth
|
|
|
|
%changelog
|
|
%autochangelog
|