%{!?_pkgdocdir:%global _pkgdocdir %{_docdir}/%{name}} Summary: High-performance library for parallel solution of eigenvalue problems Name: elpa Version: 2015.02.002 Release: 6%{?dist} URL: http://elpa.rzg.mpg.de/ Source0: http://elpa.rzg.mpg.de/elpa-%{version}.tar.gz # fix pkgconfig file # use all CPUs for testsuite # don't add -mavx to CFLAGS if it doesn't work (i.e. on arm) Patch1: elpa-rpm.patch # build against atlas instead of reference blas Patch2: elpa-atlas.patch # don't use AVX instructions in test binaries Patch3: elpa-no-avx.patch License: LGPLv3+ BuildRequires: atlas-devel BuildRequires: gcc-gfortran BuildRequires: libtool %ifnarch aarch64 ppc64le 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: blacs-mpich Requires: scalapack-mpich 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: blacs-openmpi Requires: scalapack-openmpi 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 .atlas %patch3 -p1 -b .avx autoreconf -vifs popd cp -pr mpich openmpi mkdir _openmp cp -pr mpich openmpi _openmp/ %build export FCFLAGS=-ffree-line-length-none %{_mpich_load} export LDFLAGS="-L%{_libdir}/atlas -L$MPI_LIB" pushd mpich %configure --disable-silent-rules --disable-static \ --libdir=%{_libdir}/mpich%{?_opt_cc_suffix}/lib make %{?_smp_mflags} V=1 popd pushd _openmp/mpich %configure --disable-silent-rules --disable-static \ --with-openmp \ --libdir=%{_libdir}/mpich%{?_opt_cc_suffix}/lib make %{?_smp_mflags} V=1 popd %{_mpich_unload} %{_openmpi_load} export LDFLAGS="-L%{_libdir}/atlas -L$MPI_LIB" pushd openmpi %configure --disable-silent-rules --disable-static \ --libdir=%{_libdir}/openmpi%{?_opt_cc_suffix}/lib make %{?_smp_mflags} V=1 popd pushd _openmp/openmpi %configure --disable-silent-rules --disable-static \ --with-openmp \ --libdir=%{_libdir}/openmpi%{?_opt_cc_suffix}/lib make %{?_smp_mflags} V=1 popd %{_openmpi_unload} %install for s in '' _openmp ; do for mpi in mpich openmpi ; do pushd ${s:-.}/${mpi} make DESTDIR=%{buildroot} install rm %{buildroot}%{_bindir}/elpa?_test_* mkdir -p %{buildroot}%{_libdir}/${mpi}%{?_opt_cc_suffix}/bin mv %{buildroot}%{_bindir}/elpa2_print_kernels${s} %{buildroot}%{_libdir}/${mpi}%{?_opt_cc_suffix}/bin/ %ifnarch aarch64 ppc64le execstack -c .libs/libelpa${s}.so.?.* %{buildroot}%{_libdir}/${mpi}%{?_opt_cc_suffix}/lib/libelpa${s}.so.?.* %endif mkdir -p %{buildroot}%{_fmoddir}/${mpi}%{?_opt_cc_suffix} 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}%{_fmoddir}/${mpi}%{?_cc_name_suffix}/${m}${s}.mod done rm %{buildroot}%{_libdir}/${mpi}%{?_opt_cc_suffix}/lib/libelpa${s}.la # fix-up fcflags include path per mpi implementation sed -i -e "/^fcflags.*modules/s,/modules,/modules/${mpi}," %{buildroot}%{_libdir}/${mpi}/lib/pkgconfig/elpa${s}-%{version}.pc popd done done %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 %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%{?_opt_cc_suffix}/bin/elpa2_print_kernels %{_libdir}/mpich%{?_opt_cc_suffix}/bin/elpa2_print_kernels_openmp %{_libdir}/mpich%{?_opt_cc_suffix}/lib/libelpa.so.3* %{_libdir}/mpich%{?_opt_cc_suffix}/lib/libelpa_openmp.so.3* %files mpich-devel %{_libdir}/mpich%{?_opt_cc_suffix}/lib/libelpa.so %{_libdir}/mpich%{?_opt_cc_suffix}/lib/libelpa_openmp.so %{_libdir}/mpich%{?_opt_cc_suffix}/lib/pkgconfig/elpa-%{version}.pc %{_libdir}/mpich%{?_opt_cc_suffix}/lib/pkgconfig/elpa_openmp-%{version}.pc %{_fmoddir}/mpich%{?_cc_name_suffix}/*.mod # only non-mt openmpi build, see bug #1105902 %files openmpi %{_libdir}/openmpi%{?_opt_cc_suffix}/bin/elpa2_print_kernels %exclude %{_libdir}/openmpi%{?_opt_cc_suffix}/bin/elpa2_print_kernels_openmp %{_libdir}/openmpi%{?_opt_cc_suffix}/lib/libelpa.so.3* %exclude %{_libdir}/openmpi%{?_opt_cc_suffix}/lib/libelpa_openmp.so.3* %files openmpi-devel %{_libdir}/openmpi%{?_opt_cc_suffix}/lib/libelpa.so %exclude %{_libdir}/openmpi%{?_opt_cc_suffix}/lib/libelpa_openmp.so %{_libdir}/openmpi%{?_opt_cc_suffix}/lib/pkgconfig/elpa-%{version}.pc %exclude %{_libdir}/openmpi%{?_opt_cc_suffix}/lib/pkgconfig/elpa_openmp-%{version}.pc %{_fmoddir}/openmpi%{?_cc_name_suffix}/*.mod %exclude %{_fmoddir}/openmpi%{?_cc_name_suffix}/*_openmp.mod %changelog * Tue Aug 04 2015 Zbigniew Jędrzejewski-Szmek - 2015.02.002-6 - Use new execstack (#1247795) * Wed Jun 17 2015 Fedora Release Engineering - 2015.02.002-5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild * Mon May 04 2015 Dominik Mierzejewski 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 - 2015.02.002-3 - Rebuilt for GCC 5 C++11 ABI change * Mon Mar 23 2015 Zbigniew Jędrzejewski-Szmek - 2015.02.002-2 - Rebuild for fortran update (#1204420) * Thu Mar 19 2015 Dominik Mierzejewski 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 - 2013.11-6.008 - Rebuild for changed mpich libraries * Tue Sep 16 2014 Dominik Mierzejewski 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 - 2013.11-4.9 - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild * Thu Jul 3 2014 Peter Robinson 2013.11-4.008 - aarch64/ppc64le don't have prelink * Sun Jun 29 2014 Dominik Mierzejewski 2013.11-3.008 - fix typo in execstack -c call - link against atlas * Thu Jun 26 2014 Dominik Mierzejewski 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 2013.11-1.008 - initial build