Blob Blame History Raw
%if 0%{?fedora} >= 26
%ifnarch x86_64 %{ix86} armv7hl %{power64} aarch64
# matches openblas/scalapack ExclusiveArch
%global with_atlas 1
%endif
%else
%global with_atlas 1
%endif

%if 0%{?rhel}
# execstack (prelink) is built only for x86_64 and ppc64 on RHEL
%ifarch x86_64 ppc64
%global with_execstack 1
%endif
%else
%global with_execstack 1
%endif

Summary: High-performance library for parallel solution of eigenvalue problems
Name: elpa
Version: 2015.11.001
Release: 8%{?dist}
URL: https://elpa.mpcdf.mpg.de/software
Source0: https://elpa.mpcdf.mpg.de/html/Releases/%{version}/elpa-%{version}.tar.gz
# fix pkgconfig file
Patch1: elpa-pc.patch
# build against atlas instead of reference blas
Patch2: elpa-blas.patch
# fix detection of AVX(2) compiler support and use them only in the library
Patch3: elpa-simd.patch
License: LGPLv3+
%if %{with atlas}
BuildRequires: atlas-devel
%else
BuildRequires: openblas-devel
%endif
BuildRequires: gcc-gfortran
BuildRequires: libtool
%if %{with execstack}
BuildRequires: /usr/bin/execstack
%endif

%description
ELPA is a Fortran-based high-performance computational library for the
(massively) parallel solution of symmetric or Hermitian, standard or generalized
eigenvalue problems.

This is the kind of eigenvalue problem which is frequently encountered in
Electronic Structure Theory (solution of Schrödinger's Equation or variants
thereof), but also in many other fields. Typically, the solution effort scales
as O(size^3), where "size" is a measure of the system size, for example the
dimension of the associated matrices or the number of required
eigenvalue/eigenvector pairs (less than or equal to the matrix dimension). Thus,
an algebraically exact solution of the eigenproblem may quickly become the
bottleneck in a practical application.

%package common
Summary: Common files for ELPA
BuildArch: noarch

%description common
ELPA is a Fortran-based high-performance computational library for the
(massively) parallel solution of symmetric or Hermitian, standard or generalized
eigenvalue problems.

This package contains common files for ELPA.

%package devel
Summary: C header files for ELPA
BuildArch: noarch
Requires: %{name}-mpi-devel = %{version}-%{release}

%description devel
ELPA is a Fortran-based high-performance computational library for the
(massively) parallel solution of symmetric or Hermitian, standard or generalized
eigenvalue problems.

This package contains the C header files for ELPA.

%package mpich
Summary: Fast library for parallel solution of eigenvalue problems (MPICH version)
BuildRequires: mpich-devel
BuildRequires: blacs-mpich-devel
BuildRequires: scalapack-mpich-devel
Requires: %{name}-common = %{version}-%{release}

%description mpich
ELPA is a Fortran-based high-performance computational library for the
(massively) parallel solution of symmetric or Hermitian, standard or generalized
eigenvalue problems.

This package contains ELPA built against MPICH.

%package mpich-devel
Summary: Development files for ELPA (MPICH version)
Requires: %{name}-mpich%{?_isa} = %{version}-%{release}
Requires: gcc-gfortran%{?_isa}
Requires: %{name}-devel = %{version}-%{release}
Provides: %{name}-mpi-devel = %{version}-%{release}

%description mpich-devel
ELPA is a Fortran-based high-performance computational library for the
(massively) parallel solution of symmetric or Hermitian, standard or generalized
eigenvalue problems.

This package contains the development files for ELPA (MPICH version).

%package openmpi
Summary: Fast library for parallel solution of eigenvalue problems (OpenMPI version)
# required for running the testsuite
BuildRequires: rsh
BuildRequires: openmpi-devel
BuildRequires: blacs-openmpi-devel
BuildRequires: scalapack-openmpi-devel
Requires: %{name}-common = %{version}-%{release}

%description openmpi
ELPA is a Fortran-based high-performance computational library for the
(massively) parallel solution of symmetric or Hermitian, standard or generalized
eigenvalue problems.

This package contains ELPA built against OpenMPI.

%package openmpi-devel
Summary: Development files for ELPA (OpenMPI version)
Requires: %{name}-openmpi%{?_isa} = %{version}-%{release}
Requires: gcc-gfortran%{?_isa}
Requires: %{name}-devel = %{version}-%{release}
Provides: %{name}-mpi-devel = %{version}-%{release}

%description openmpi-devel
ELPA is a Fortran-based high-performance computational library for the
(massively) parallel solution of symmetric or Hermitian, standard or generalized
eigenvalue problems.

This package contains the development files for ELPA (OpenMPI version).

%prep
%setup -q -c -T -a 0
mv elpa-%{version} mpich
pushd mpich
%patch1 -p1 -b .r
%patch2 -p1 -b .blas
%patch3 -p1 -b .simd
autoreconf -vifs
popd
cp -pr mpich openmpi
mkdir _openmp
cp -pr mpich openmpi _openmp/

%build
%global defopts --disable-silent-rules --disable-static --docdir=%{_pkgdocdir}
%global ldflags %{__global_ldflags}
%if %{with atlas}
%global ldflags %{ldflags} -L%{_libdir}/atlas
%endif
%global fcflags %{optflags} -I%{_fmoddir} -ffree-line-length-none

. /etc/profile.d/modules.sh

for mpi in mpich openmpi ; do
  module load mpi/${mpi}-%{_arch}
  export CFLAGS="%{optflags}"
  export LDFLAGS="%{ldflags} -L$MPI_LIB"
  export FCFLAGS="%{fcflags} -I$MPI_FORTRAN_MOD_DIR"
  for s in '' _openmp ; do
    pushd ${s:-.}/${mpi}
    sed -i -e "s,@MPI_FORTRAN_MOD_DIR@,$MPI_FORTRAN_MOD_DIR," elpa.pc.in
    %configure %{defopts} \
      ${s:+--enable-openmp} \
      --libdir=$MPI_LIB

    make %{?_smp_mflags} V=1
    popd
  done
  module unload mpi/${mpi}-%{_arch}
done

%install
. /etc/profile.d/modules.sh
for s in '' _openmp ; do
  for mpi in mpich openmpi ; do
    module load mpi/${mpi}-%{_arch}
    pushd ${s:-.}/${mpi}
    make DESTDIR=%{buildroot} install
    rm %{buildroot}%{_bindir}/elpa?_test_*
    mkdir -p %{buildroot}$MPI_BIN
    mv %{buildroot}%{_bindir}/elpa2_print_kernels${s} %{buildroot}$MPI_BIN
%if %{with execstack}
    execstack -c .libs/libelpa${s}.so.?.* %{buildroot}%{_libdir}/${mpi}/lib/libelpa${s}.so.?.*
%endif
    mkdir -p %{buildroot}$MPI_FORTRAN_MOD_DIR
    for f in $(ls -1 %{buildroot}%{_includedir}/elpa${s}-%{version}/modules/*.mod) ; do
      m=$(basename ${f} .mod)
      mv %{buildroot}%{_includedir}/elpa${s}-%{version}/modules/${m}.mod %{buildroot}$MPI_FORTRAN_MOD_DIR/${m}${s}.mod
    done
    rmdir %{buildroot}%{_includedir}/elpa${s}-%{version}/modules
    rm %{buildroot}%{_libdir}/${mpi}/lib/libelpa${s}.la
    popd
    module unload mpi/${mpi}-%{_arch}
  done
done

# testsuite takes 6.5 hours on ARMv7
%ifnarch %{arm}
%if 1
%check
%{_mpich_load}
pushd mpich
make check V=1 || cat ./test-suite.log
popd
pushd _openmp/mpich
make check V=1 || cat ./test-suite.log
popd
%{_mpich_unload}

# only non-mt openmpi build can be tested, see bug #1105902
%{_openmpi_load}
pushd openmpi
make check V=1 || cat ./test-suite.log
popd
%{_openmpi_unload}
%endif
%endif

%post mpich -p /sbin/ldconfig

%postun mpich -p /sbin/ldconfig

%post openmpi -p /sbin/ldconfig

%postun openmpi -p /sbin/ldconfig

%files common
%license %{_pkgdocdir}/COPYING
%license %{_pkgdocdir}/gpl.txt
%license %{_pkgdocdir}/lgpl.txt
%{_pkgdocdir}/README

%files devel
%{_includedir}/elpa-%{version}
%{_includedir}/elpa_openmp-%{version}
%{_pkgdocdir}/examples

%files mpich
%{_libdir}/mpich/bin/elpa2_print_kernels
%{_libdir}/mpich/bin/elpa2_print_kernels_openmp
%{_libdir}/mpich/lib/libelpa.so.4*
%{_libdir}/mpich/lib/libelpa_openmp.so.4*

%files mpich-devel
%{_libdir}/mpich/lib/libelpa.so
%{_libdir}/mpich/lib/libelpa_openmp.so
%{_libdir}/mpich/lib/pkgconfig/elpa-%{version}.pc
%{_libdir}/mpich/lib/pkgconfig/elpa_openmp-%{version}.pc
%{_fmoddir}/mpich*/*.mod

# only non-mt openmpi build, see bug #1105902
%files openmpi
%{_libdir}/openmpi/bin/elpa2_print_kernels
%exclude %{_libdir}/openmpi/bin/elpa2_print_kernels_openmp
%{_libdir}/openmpi/lib/libelpa.so.4*
%exclude %{_libdir}/openmpi/lib/libelpa_openmp.so.4*

%files openmpi-devel
%{_libdir}/openmpi/lib/libelpa.so
%exclude %{_libdir}/openmpi/lib/libelpa_openmp.so
%{_libdir}/openmpi/lib/pkgconfig/elpa-%{version}.pc
%exclude %{_libdir}/openmpi/lib/pkgconfig/elpa_openmp-%{version}.pc
%{_fmoddir}/openmpi*/*.mod
%exclude %{_fmoddir}/openmpi*/*_openmp.mod

%changelog
* Wed Aug 02 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2015.11.001-8
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild

* Wed Jul 26 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2015.11.001-7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild

* Mon Jun 12 2017 Dominik Mierzejewski <rpm@greysector.net> 2015.11.001-6
- fix AVX2 instructions usage enablement (#1383412)

* Sun Jun 11 2017 Dominik Mierzejewski <rpm@greysector.net> 2015.11.001-5
- update URL and Source URL, switch to https
- factorize build process
- fix Fortran mods path (#1409235)
- build against openblas on supported arches to match scalapack
- don't run the testsuite on ARM 32bit (takes 6.5 hours)
- execstack is not available on some arches for EPEL (#1460531)

* Fri Feb 10 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2015.11.001-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild

* Sun Nov 13 2016 Peter Robinson <pbrobinson@fedoraproject.org> 2015.11.001-3
- Rebuild (Power64)

* Fri Oct 21 2016 Orion Poplawski <orion@cora.nwra.com> - 2015.11.001-2
- Rebuild for openmpi 2.0

* Sun Apr 03 2016 Dominik Mierzejewski <rpm@greysector.net> 2015.11.001-1
- update to 2015.11.001 release
- update URL and Source URL
- fix AVX(2) support detection and usage
- drop condition around execstack usage, it's available everywhere now
- drop _opt_cc_suffix usage and factor out more stuff into common macros

* Wed Feb 03 2016 Fedora Release Engineering <releng@fedoraproject.org> - 2015.05.001-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild

* Tue Sep 15 2015 Orion Poplawski <orion@cora.nwra.com> - 2015.05.001-3
- Rebuild for openmpi 1.10.0

* Mon Aug 10 2015 Sandro Mani <manisandro@gmail.com> - 2015.05.001-2
- Rebuild for RPM MPI Requires Provides Change

* Thu Aug 06 2015 Dominik Mierzejewski <rpm@greysector.net> 2015.05.001-1
- update to 2015.05.001 release
- don't use all available cores for the testsuite (interferes with OpenMP)
  (work around #1220161)
- drop obsolete comments and rename patch0 appropriately
- fix AVX support detection

* Tue Aug 04 2015 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> - 2015.02.002-6
- Use new execstack (#1247795)

* Wed Jun 17 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2015.02.002-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild

* Mon May 04 2015 Dominik Mierzejewski <rpm@greysector.net> 2015.02.002-4
- fix build on EPEL7 (missing _pkgdocdir macro and BR: rsh for openmpi)
- move examples to -devel subpackage
- print whole testsuite log in case of test failure
- re-enable openmpi tests on i686 and armv7hl

* Sat May 02 2015 Kalev Lember <kalevlember@gmail.com> - 2015.02.002-3
- Rebuilt for GCC 5 C++11 ABI change

* Mon Mar 23 2015 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> - 2015.02.002-2
- Rebuild for fortran update (#1204420)

* Thu Mar 19 2015 Dominik Mierzejewski <rpm@greysector.net> 2015.02.002-1
- update to 2015.02.002 release (ABI change)
- drop libtool bug workaround
- make builds more verbose
- take advantage of upstream build system improvements
- ship C headers in -devel subpackage

* Mon Mar 16 2015 Thomas Spura <tomspur@fedoraproject.org> - 2013.11-6.008
- Rebuild for changed mpich libraries

* Tue Sep 16 2014 Dominik Mierzejewski <rpm@greysector.net> 2013.11-5.008
- fix release string broken by previous bump by releng script
- disable openmpi tests on armv7hl (bug #1144408)

* Sat Aug 16 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2013.11-4.9
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild

* Thu Jul  3 2014 Peter Robinson <pbrobinson@fedoraproject.org> 2013.11-4.008
- aarch64/ppc64le don't have prelink

* Sun Jun 29 2014 Dominik Mierzejewski <rpm@greysector.net> 2013.11-3.008
- fix typo in execstack -c call
- link against atlas

* Thu Jun 26 2014 Dominik Mierzejewski <rpm@greysector.net> 2013.11-2.008
- remove executable stack from installed libraries
- fix undefined non-weak mpi symbols
- reorder build section and drop some redundant parts
- add missing gfortran Requires for -devel subpackages
- use correct URL and provide link to source tarball

* Tue Jun 24 2014 Dominik Mierzejewski <rpm@greysector.net> 2013.11-1.008
- initial build