|
Files must be shared between packages as much as possible. Compiler independent parts, such as data files in `+%{_datadir}/%{name}+` and man files MUST be put into a `+-common+` subpackage that is required by all of the binary packages (the serial package and all of the MPI packages).
|
|
|
A sample spec file
|
|
|
# Define a macro for calling ../configure instead of ./configure %global dconfigure %(printf %%s '%configure' | sed 's!\./configure!../configure!g')
|
|
|
Name: foo Requires: %{name}-common = %{version}-%{release}
|
|
|
%package common
|
|
|
%package openmpi BuildRequires: openmpi-devel # Require explicitly for dir ownership and to guarantee the pickup of the right runtime Requires: openmpi Requires: %{name}-common = %{version}-%{release}
|
|
|
%package mpich BuildRequires: mpich-devel # Require explicitly for dir ownership and to guarantee the pickup of the right runtime Requires: mpich Requires: %{name}-common = %{version}-%{release}
|
|
|
%build # Have to do off-root builds to be able to build many versions at once
|
|
|
# To avoid replicated code define a build macro %define dobuild() \ mkdir $MPI_COMPILER; \ cd $MPI_COMPILER; \ %dconfigure --program-suffix=$MPI_SUFFIX ;\ make %{?_smp_mflags} ; \ cd ..
|
|
|
# Build serial version, dummy arguments MPI_COMPILER=serial MPI_SUFFIX= %dobuild
|
|
|
# Build parallel versions: set compiler variables to MPI wrappers export CC=mpicc export CXX=mpicxx export FC=mpif90 export F77=mpif77
|
|
|
# Build OpenMPI version %{_openmpi_load} %dobuild %{_openmpi_unload}
|
|
|
# Build mpich version %{_mpich_load} %dobuild %{_mpich_unload}
|
|
|
%install # Install serial version make -C serial install DESTDIR=%{buildroot} INSTALL="install -p" CPPROG="cp -p"
|
|
|
# Install OpenMPI version %{_openmpi_load} make -C $MPI_COMPILER install DESTDIR=%{buildroot} INSTALL="install -p" CPPROG="cp -p" %{_openmpi_unload}
|
|
|
# Install MPICH version %{_mpich_load} make -C $MPI_COMPILER install DESTDIR=%{buildroot} INSTALL="install -p" CPPROG="cp -p" %{_mpich_unload}
|
|
|
%files # All the serial (normal) binaries
|
|
|
%files common # All files shared between the serial and different MPI versions
|
|
|
%files openmpi # All openmpi linked files
|
|
|
%files mpich # All mpich linked files
|
|