diff --git a/scalapack-1.7-fedora.patch b/scalapack-1.7-fedora.patch index 62b2512..27c8105 100644 --- a/scalapack-1.7-fedora.patch +++ b/scalapack-1.7-fedora.patch @@ -15,7 +15,7 @@ ( cd $(REDISTdir)/SRC; $(MAKE) clean ) + +shared: scalapacklib -+ ( mkdir tmp ; cp $(SCALAPACKLIB) tmp ; cd tmp ; ar x $(SCALAPACKLIB) ; gcc -shared -o $(home)/libscalapack.so.1.0.0 *.o -Wl,-soname=libscalapack.so.1 ; cd .. ) ++ ( mkdir tmp ; cp $(SCALAPACKLIB) tmp ; cd tmp ; ar x $(SCALAPACKLIB) ; $(CC) -shared -o $(home)/libscalapack.so.1.0.0 *.o -Wl,-soname=libscalapack.so.1 ; cd .. ) --- scalapack-1.7.5/scalapack-1.7.5/SLmake.inc.fedora 2001-08-08 21:59:50.000000000 -0500 +++ scalapack-1.7.5/scalapack-1.7.5/SLmake.inc 2006-03-08 18:09:05.000000000 -0600 @@ -19,7 +19,7 @@ @@ -23,7 +23,7 @@ # $(HOME)/SCALAPACK # -home = $(HOME)/SCALAPACK -+home = $(RPM_BUILD_DIR)/scalapack-1.7.5/scalapack-1.7.5 ++home = $(RPM_BUILD_DIR)/scalapack-1.7.5/scalapack-1.7.5-FOO # # The platform identifier to suffix to the end of library names # diff --git a/scalapack.spec b/scalapack.spec index 504bb48..cd6a519 100644 --- a/scalapack.spec +++ b/scalapack.spec @@ -1,13 +1,30 @@ +# The blacs packages should probably provide these. +%global _blacs_openmpi_load \ + . /etc/profile.d/modules.sh; \ + module load blacs-openmpi-%{_arch}; \ + export CFLAGS="$CFLAGS %{optflags}"; +%global _blacs_openmpi_unload \ + . /etc/profile.d/modules.sh; \ + module unload blacs-openmpi-%{_arch}; + +%global _blacs_mpich2_load \ + . /etc/profile.d/modules.sh; \ + module load blacs-mpich2-%{_arch}; \ + export CFLAGS="$CFLAGS %{optflags}"; +%global _blacs_mpich2_unload \ + . /etc/profile.d/modules.sh; \ + module unload blacs-mpich2-%{_arch}; + Summary: A subset of LAPACK routines redesigned for heterogenous computing Name: scalapack Version: 1.7.5 -Release: 5%{?dist} +Release: 8%{?dist}.1 # This is freely distributable without any restrictions. License: Public Domain Group: Development/Libraries URL: http://www.netlib.org/lapack-dev/ Source0: http://www.netlib.org/scalapack/scalapack-%{version}.tgz -BuildRequires: lapack-devel, blas-devel, openmpi-devel, blacs-devel +BuildRequires: lapack-devel, blas-devel BuildRequires: gcc-gfortran, glibc-devel BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) Patch0: scalapack-1.7-fedora.patch @@ -38,61 +55,265 @@ routines, all interprocessor communication occurs within the PBLAS and the BLACS. One of the design goals of ScaLAPACK was to have the ScaLAPACK routines resemble their LAPACK equivalents as much as possible. -%package devel -Summary: Development libraries for scalapack +%package common +Summary: Common files for scalapack +Group: Development/Libraries + +%description common +The ScaLAPACK (or Scalable LAPACK) library includes a subset +of LAPACK routines redesigned for distributed memory MIMD +parallel computers. It is currently written in a +Single-Program-Multiple-Data style using explicit message +passing for interprocessor communication. It assumes +matrices are laid out in a two-dimensional block cyclic +decomposition. + +ScaLAPACK is designed for heterogeneous computing and is +portable on any computer that supports MPI or PVM. + +Like LAPACK, the ScaLAPACK routines are based on +block-partitioned algorithms in order to minimize the frequency +of data movement between different levels of the memory hierarchy. +(For such machines, the memory hierarchy includes the off-processor +memory of other processors, in addition to the hierarchy of registers, +cache, and local memory on each processor.) The fundamental building +blocks of the ScaLAPACK library are distributed memory versions (PBLAS) +of the Level 1, 2 and 3 BLAS, and a set of Basic Linear Algebra +Communication Subprograms (BLACS) for communication tasks that arise +frequently in parallel linear algebra computations. In the ScaLAPACK +routines, all interprocessor communication occurs within the PBLAS and the +BLACS. One of the design goals of ScaLAPACK was to have the ScaLAPACK +routines resemble their LAPACK equivalents as much as possible. + +This package contains common files which are not specific to any MPI implementation. + +%package mpich2 +Summary: ScaLAPACK libraries compiled against mpich2 +Group: Development/Libraries +BuildRequires: blacs-mpich2-devel, mpich2-devel-static +Requires: %{name}-common = %{version}-%{release} +Requires: environment-modules +# This is a lie, but something needs to obsolete it. +Provides: %{name}-lam = %{version}-%{release} +Obsoletes: %{name}-lam <= 1.7.5-7 + +%description mpich2 +The ScaLAPACK (or Scalable LAPACK) library includes a subset +of LAPACK routines redesigned for distributed memory MIMD +parallel computers. It is currently written in a +Single-Program-Multiple-Data style using explicit message +passing for interprocessor communication. It assumes +matrices are laid out in a two-dimensional block cyclic +decomposition. + +ScaLAPACK is designed for heterogeneous computing and is +portable on any computer that supports MPI or PVM. + +Like LAPACK, the ScaLAPACK routines are based on +block-partitioned algorithms in order to minimize the frequency +of data movement between different levels of the memory hierarchy. +(For such machines, the memory hierarchy includes the off-processor +memory of other processors, in addition to the hierarchy of registers, +cache, and local memory on each processor.) The fundamental building +blocks of the ScaLAPACK library are distributed memory versions (PBLAS) +of the Level 1, 2 and 3 BLAS, and a set of Basic Linear Algebra +Communication Subprograms (BLACS) for communication tasks that arise +frequently in parallel linear algebra computations. In the ScaLAPACK +routines, all interprocessor communication occurs within the PBLAS and the +BLACS. One of the design goals of ScaLAPACK was to have the ScaLAPACK +routines resemble their LAPACK equivalents as much as possible. + +This package contains ScaLAPACK libraries compiled with mpich2. + +%package mpich2-devel +Summary: Development libraries for ScaLAPACK (mpich2) +Group: Development/Libraries +Requires: %{name}-mpich2 = %{version}-%{release} +Provides: %{name}-lam-devel = %{version}-%{release} +Obsoletes: %{name}-lam-devel <= 1.7.5-7 + +%description mpich2-devel +This package contains development libraries for ScaLAPACK, compiled against mpich2. + +%package mpich2-static +Summary: Static libraries for ScaLAPACK (mpich2) +Group: Development/Libraries +Provides: %{name}-lam-static = %{version}-%{release} +Obsoletes: %{name}-lam-static <= 1.7.5-7 + +%description mpich2-static +This package contains static libraries for ScaLAPACK, compiled against mpich2. + +%package openmpi +Summary: ScaLAPACK libraries compiled against openmpi +Group: Development/Libraries +BuildRequires: blacs-openmpi-devel, openmpi-devel +Requires: %{name}-common = %{version}-%{release} +Requires: environment-modules + +%description openmpi +The ScaLAPACK (or Scalable LAPACK) library includes a subset +of LAPACK routines redesigned for distributed memory MIMD +parallel computers. It is currently written in a +Single-Program-Multiple-Data style using explicit message +passing for interprocessor communication. It assumes +matrices are laid out in a two-dimensional block cyclic +decomposition. + +ScaLAPACK is designed for heterogeneous computing and is +portable on any computer that supports MPI or PVM. + +Like LAPACK, the ScaLAPACK routines are based on +block-partitioned algorithms in order to minimize the frequency +of data movement between different levels of the memory hierarchy. +(For such machines, the memory hierarchy includes the off-processor +memory of other processors, in addition to the hierarchy of registers, +cache, and local memory on each processor.) The fundamental building +blocks of the ScaLAPACK library are distributed memory versions (PBLAS) +of the Level 1, 2 and 3 BLAS, and a set of Basic Linear Algebra +Communication Subprograms (BLACS) for communication tasks that arise +frequently in parallel linear algebra computations. In the ScaLAPACK +routines, all interprocessor communication occurs within the PBLAS and the +BLACS. One of the design goals of ScaLAPACK was to have the ScaLAPACK +routines resemble their LAPACK equivalents as much as possible. + +This package contains ScaLAPACK libraries compiled with openmpi. + +%package openmpi-devel +Summary: Development libraries for ScaLAPACK (openmpi) +Group: Development/Libraries +Requires: %{name}-openmpi = %{version}-%{release} + +%description openmpi-devel +This package contains development libraries for ScaLAPACK, compiled against openmpi. + +%package openmpi-static +Summary: Static libraries for ScaLAPACK (openmpi) Group: Development/Libraries -Requires: %{name} = %{version}-%{release} -%description devel -This package contains development libraries for scalapack. +%description openmpi-static +This package contains static libraries for ScaLAPACK, compiled against openmpi. %prep %setup -q -c -n %{name}-%{version} %patch0 -p1 cd %{name}-%{version}/ sed -i 's!BLACSdir =.*!BLACSdir = %{_libdir}!' SLmake.inc +cd .. +for i in mpich2 openmpi; do + cp -a %{name}-%{version} %{name}-%{version}-$i + sed -i "s|FOO|$i|g" %{name}-%{version}-$i/SLmake.inc +done %build -cd %{name}-%{version} -make lib -make exe +%define dobuild() \ +cd %{name}-%{version}-$MPI_COMPILER_NAME ; \ +make lib ; \ +cd .. + +# Build mpich2 version +export MPI_COMPILER_NAME=mpich2 +%{_mpich2_load} +%{_blacs_mpich2_load} +RPM_OPT_FLAGS=`echo $CFLAGS` +%dobuild +%{_blacs_mpich2_unload} +%{_mpich2_unload} + +# Build OpenMPI version +export MPI_COMPILER_NAME=openmpi +%{_openmpi_load} +%{_blacs_openmpi_load} +RPM_OPT_FLAGS=`echo $CFLAGS` +%dobuild +%{_blacs_openmpi_unload} +%{_openmpi_unload} %install rm -fr ${RPM_BUILD_ROOT} mkdir -p ${RPM_BUILD_ROOT}%{_libdir} mkdir -p ${RPM_BUILD_ROOT}%{_bindir} +for i in mpich2 openmpi; do + mkdir -p %{buildroot}%{_libdir}/scalapack-$i/ + pushd %{name}-%{version}-$i + for f in *.a *.so*; do + cp -f $f %{buildroot}%{_libdir}/scalapack-$i/$f + done + popd + pushd %{buildroot}%{_libdir}/scalapack-$i/ + ln -fs libscalapack.so.1.0.0 libscalapack.so.1 + ln -s libscalapack.so.1.0.0 libscalapack.so + popd +# Generate environment module file +mkdir -p %{buildroot}%{_datadir}/Modules/modulefiles/ +cat << EOF > %{buildroot}%{_datadir}/Modules/modulefiles/scalapack-$i-%{_arch} +#%Module 1.0 +# +# Blacs libraries compiled with $i support +# +prepend-path LD_LIBRARY_PATH %{_libdir}/scalapack-$i +setenv LDFLAGS -L%{_libdir}/scalapack-$i +EOF +done + +# Copy docs cd %{name}-%{version} cp -f INSTALL/scalapack_install.ps ../ cp -f README ../ -cp -f libscalapack.a ${RPM_BUILD_ROOT}%{_libdir} -cp -f libscalapack.so* ${RPM_BUILD_ROOT}%{_libdir} -cp -f TESTING/x* ${RPM_BUILD_ROOT}%{_bindir} - -cd ${RPM_BUILD_ROOT}%{_libdir} -ln -fs libscalapack.so.1.0.0 libscalapack.so.1 -ln -s libscalapack.so.1.0.0 libscalapack.so -cd .. -%post -p /sbin/ldconfig - -%postun -p /sbin/ldconfig +#cp -f TESTING/x* ${RPM_BUILD_ROOT}%{_bindir} %clean rm -fr ${RPM_BUILD_ROOT} -%files -%defattr(-,root,root) +%files common +%defattr(-,root,root,-) %doc scalapack_install.ps README -%{_bindir}/x* -%{_libdir}/libscalapack.so.* +# %{_bindir}/x* + +%files mpich2 +%defattr(-,root,root,-) +%dir %{_libdir}/scalapack-mpich2/ +%{_datadir}/Modules/modulefiles/scalapack-mpich2-%{_arch} +%{_libdir}/scalapack-mpich2/libscalapack.so.* + +%files mpich2-devel +%defattr(-,root,root,-) +%{_libdir}/scalapack-mpich2/libscalapack.so + +%files mpich2-static +%defattr(-,root,root,-) +%{_libdir}/scalapack-mpich2/libscalapack.a + +%files openmpi +%defattr(-,root,root,-) +%dir %{_libdir}/scalapack-openmpi/ +%{_datadir}/Modules/modulefiles/scalapack-openmpi-%{_arch} +%{_libdir}/scalapack-openmpi/libscalapack.so.* -%files devel -%defattr(-,root,root) -%{_libdir}/libscalapack.a -%{_libdir}/libscalapack.so +%files openmpi-devel +%defattr(-,root,root,-) +%{_libdir}/scalapack-openmpi/libscalapack.so + +%files openmpi-static +%defattr(-,root,root,-) +%{_libdir}/scalapack-openmpi/libscalapack.a %changelog +* Wed Dec 15 2009 Deji Akingunola - 1.7.5-8.1 +- Buildrequire mpich2-devel-static + +* Wed Dec 9 2009 Tom "spot" Callaway - 1.7.5-8 +- drop lam support (Provides/Obsoletes by mpich2, which is a hack, but something's gotta do it) +- move static libs to static subpackages (resolves bz 545150) + +* Thu Aug 6 2009 Tom "spot" Callaway - 1.7.5-7 +- rework package to handle all supported MPI environments in Fedora + +* Sun Jul 26 2009 Fedora Release Engineering - 1.7.5-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + * Wed Feb 25 2009 Fedora Release Engineering - 1.7.5-5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild