From f6ad01210098a091952777992bb943317746b882 Mon Sep 17 00:00:00 2001 From: Ankur Sinha (Ankur Sinha Gmail) Date: Dec 02 2018 20:01:02 +0000 Subject: Add mpi spec template --- diff --git a/spec-templates/mpi.spec b/spec-templates/mpi.spec new file mode 100644 index 0000000..f46a115 --- /dev/null +++ b/spec-templates/mpi.spec @@ -0,0 +1,210 @@ +# Switch them off if you want +# Best to start with the serial version +%bcond_without mpich +%bcond_without openmpi + +Name: +Version: + +Release: 1%{?dist} +Summary: + +License: +URL: +Source0: + +%global _description %{expand: +Common description here. +} + +%description +%{_description} + +%if %{with openmpi} +%package openmpi +Summary: %{name} built with openmpi +BuildRequires: openmpi-devel +BuildRequires: rpm-mpi-hooks +Requires: openmpi + +%description openmpi +%{_description} +%endif + +%if %{with mpich} +%package mpich +Summary: %{name} built with mpich +BuildRequires: mpich-devel +BuildRequires: rpm-mpi-hooks +Requires: mpich + +%description mpich +%{_description} + +%endif + +%prep +# We must create a separate top level directory and then triplicate it so that +# we have two more copies for mpich and openmpi +%autosetup -c -n %{name}%{version} + +# Copy it here for convenience +cp %{name}%{version}/LICENSE . -v + +# Tweaks in the original version before we copy it over +pushd %{name}%{version} +# Tweaks +popd + +%if %{with mpich} + cp -a %{name}%{version} %{name}%{version}-mpich +%endif + +%if %{with openmpi} + cp -a %{name}%{version} %{name}%{version}-openmpi +%endif + +%build +# Best to use && so that if anything in the chain fails, the build also fails +# straight away +%global do_cmake_config %{expand: \ +echo +echo "*** BUILDING %{name}%{version}$MPI_COMPILE_TYPE ***" +echo +%set_build_flags +pushd %{name}%{version}$MPI_COMPILE_TYPE && + cmake \\\ + -DCMAKE_C_FLAGS_RELEASE:STRING="-DNDEBUG" \\\ + -DCMAKE_CXX_FLAGS_RELEASE:STRING="-DNDEBUG" \\\ + -DCMAKE_Fortran_FLAGS_RELEASE:STRING="-DNDEBUG" \\\ + -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \\\ + -DINCLUDE_INSTALL_DIR:PATH=%{_includedir} \\\ + -DLIB_INSTALL_DIR:PATH=%{_libdir} \\\ + -DSYSCONF_INSTALL_DIR:PATH=%{_sysconfdir} \\\ + -DSHARE_INSTALL_PREFIX:PATH=%{_datadir} \\\ + -DCMAKE_SKIP_RPATH:BOOL=ON \\\ + -Dwith-mpi:BOOL=$MPI_YES \\\ + -Dwith-gsl:BOOL=ON \\\ + -DCMAKE_INSTALL_PREFIX:PATH=$MPI_HOME \\\ + -DBUILD_SHARED_LIBS:BOOL=ON \\\ +%if "%{_lib}" == "lib64" + -DLIB_SUFFIX=64 && +%else + -DLIB_SUFFIX="" && +%endif +popd || exit -1; + +%global do_make_build + make %{?_smp_mflags} -C %{name}%{version}$MPI_COMPILE_TYPE || exit -1 + +# Build serial version, dummy arguments +export MPI_COMPILER=serial +export MPI_SUFFIX="" +export MPI_HOME=%{_prefix} +export MPI_BIN=%{_bindir} +export MPI_YES=OFF +%{do_cmake_config} +%{do_make_build} + + +# Build mpich version +%if %{with mpich} +%{_mpich_load} +export CC=mpicc +export CXX=mpicxx +export FC=mpif90 +export F77=mpif77 +export MPI_YES=ON +export MPI_COMPILE_TYPE="-mpich" +%{do_cmake_config} +%{do_make_build} + +%{_mpich_unload} +%endif + +# Build OpenMPI version +%if %{with openmpi} +%{_openmpi_load} +export CC=mpicc +export CXX=mpicxx +export FC=mpif90 +export F77=mpif77 +export MPI_YES=ON +# Python 3 +export MPI_COMPILE_TYPE="-openmpi" +%{do_cmake_config} +%{do_make_build} + +%{_openmpi_unload} +%endif + +%install +# Install everything +%global do_install %{expand: +echo +echo "*** INSTALLING %{name}%{version}$MPI_COMPILE_TYPE ***" +echo + make install DESTDIR=$RPM_BUILD_ROOT INSTALL="install -p" CPPROG="cp -p" -C %{name}%{version}$MPI_COMPILE_TYPE || exit -1 +} + +# install serial version +export MPI_SUFFIX="" +export MPI_HOME=%{_prefix} +export MPI_BIN=%{_bindir} +export MPI_YES=OFF +export MPI_COMPILE_TYPE="" +%{do_install} + +# Install MPICH version +%if %{with mpich} +%{_mpich_load} +export MPI_COMPILE_TYPE="-mpich" +%{do_install} + +# Place in correct mpi libdir +# Tweaks like this may be needed +%if %{_lib} == lib64 + mv -v $RPM_BUILD_ROOT/%{_libdir}/mpich/lib64 $RPM_BUILD_ROOT/$MPI_LIB/ +%endif +%{_mpich_unload} +%endif + +# Install OpenMPI version +%if %{with openmpi} +%{_openmpi_load} +export MPI_COMPILE_TYPE="-openmpi" +%{do_install} +%endif + +# Correct location +# May be needed sometimes +%if %{_lib} == lib64 + mv -v $RPM_BUILD_ROOT/%{_libdir}/openmpi/lib64 $RPM_BUILD_ROOT/$MPI_LIB/ +%endif +%{_openmpi_unload} +%endif + + +%files +%license LICENSE +%{_bindir}/%{name} +%{_libdir}/... + +%if %{with mpich} +%files mpich +%license LICENSE +# Correct file locations +%{_libdir}/mpich/bin/%{name} +%{_libdir}/mpich/lib/... +%endif + +%if %{with openmpi} +%files openmpi +%license LICENSE +# Correct file locations +%{_libdir}/openmpi/bin/%{name} +%{_libdir}/openmpi/lib/.. +%endif + +%changelog +