sundials/sundials.spec

997 lines
31 KiB
RPMSpec

## Debug builds?
%bcond_with debug
#
# Enable pthread support
%bcond_with pthread
#
%define _legacy_common_support 1
%define _lto_cflags %{nil}
%global with_mpich 1
%if 0%{?fedora} >= 40
%ifarch %{ix86}
%global with_openmpi 0
%else
%global with_openmpi 1
%endif
%else
%global with_openmpi 1
%endif
## BLAS ##
%if 0%{?fedora} || 0%{?rhel} >= 9
%global blaslib flexiblas
%global blasvar %{nil}
%else
%global blaslib openblas
%global blasvar o
%endif
###########
%global with_hypre 1
%ifarch x86_64
%global with_openmpicheck 1
%global with_mpichcheck 0
%endif
###########
%global with_sercheck 1
## PETSc ##
%global with_petsc 1
###########
## SuperLUMT ##
%global with_superlumt 1
###########
## superlu_dist ##
%global with_superludist 0
###########
%if 0%{?rhel} && 0%{?rhel} >= 9
# KLU support
%global with_klu 1
%global with_klu64 1
##########
# Fortran
%if 0%{?with_klu64}
%global with_fortran 1
%endif
%if 0%{?with_klu}
%global with_fortran 0
%endif
##########
%endif
%if 0%{?fedora}
%ifarch s390x x86_64 %{power64} aarch64
%global with_klu64 1
%global with_fortran 1
%endif
%ifarch %{arm} %{ix86}
%global with_klu 1
%global with_fortran 0
%endif
%endif
%if 0%{?rhel} && 0%{?rhel} == 8
%global with_klu 1
%global with_fortran 0
%endif
##########
Summary: Suite of nonlinear solvers
Name: sundials
Version: 6.6.2
Release: %autorelease
# SUNDIALS is licensed under BSD with some additional (but unrestrictive) clauses.
# Check the file 'LICENSE' for details.
License: BSD
URL: https://computation.llnl.gov/projects/%{name}/
Source0: https://github.com/LLNL/%{name}/archive/v%{version}/%{name}-%{version}.tar.gz
# This patch rename superLUMT library
Patch0: %{name}-5.5.0-set_superlumt_name.patch
# This patch rename superLUMT64 library
Patch1: %{name}-5.5.0-set_superlumt64_name.patch
Patch2: %{name}-change_petsc_variable.patch
Patch3: %{name}-klu64.patch
BuildRequires: make
%if 0%{?with_fortran}
BuildRequires: gcc-gfortran
%endif
BuildRequires: python3-devel
BuildRequires: gcc, gcc-c++
%if 0%{?epel}
BuildRequires: epel-rpm-macros
%endif
BuildRequires: cmake >= 3.10
BuildRequires: %{blaslib}-devel
%if 0%{?with_superlumt}
%ifarch s390x x86_64 %{power64} aarch64
BuildRequires: SuperLUMT64-devel
%endif
%ifarch %{arm} %{ix86}
BuildRequires: SuperLUMT-devel
%endif
%endif
# KLU support
%if 0%{?with_klu64}
BuildRequires: suitesparse64-devel
%endif
%if 0%{?with_klu}
BuildRequires: suitesparse-devel
%endif
##########
%if 0%{?with_fortran}
Requires: gcc-gfortran%{?_isa}
%endif
%description
SUNDIALS is a SUite of Non-linear DIfferential/ALgebraic equation Solvers
for use in writing mathematical software.
SUNDIALS was implemented with the goal of providing robust time integrators
and nonlinear solvers that can easily be incorporated into existing simulation
codes. The primary design goals were to require minimal information from the
user, allow users to easily supply their own data structures underneath the
solvers, and allow for easy incorporation of user-supplied linear solvers and
preconditioners.
%package devel
Summary: Suite of nonlinear solvers (developer files)
Requires: %{name}%{?_isa} = %{version}-%{release}
Provides: %{name}-fortran-static = %{version}-%{release}
%description devel
SUNDIALS is a SUite of Non-linear DIfferential/ALgebraic equation Solvers
for use in writing mathematical software.
This package contains the developer files (.so file, header files).
#############################################################################
#########
%if 0%{?with_openmpi}
%package openmpi
Summary: Suite of nonlinear solvers
BuildRequires: openmpi-devel
BuildRequires: hypre-openmpi-devel
%if 0%{?with_petsc}
BuildRequires: petsc-openmpi-devel >= 3.10
BuildRequires: scalapack-openmpi-devel
BuildRequires: hdf5-openmpi-devel
%endif
%if 0%{?with_superludist}
BuildRequires: superlu_dist-openmpi-devel
%endif
%if 0%{?with_fortran}
Requires: gcc-gfortran%{?_isa}
%endif
%description openmpi
SUNDIALS is a SUite of Non-linear DIfferential/ALgebraic equation Solvers
for use in writing mathematical software.
This package contains the Sundials Fortran parallel OpenMPI libraries.
%package openmpi-devel
Summary: Suite of nonlinear solvers
Requires: %{name}-openmpi%{?_isa} = %{version}-%{release}
Provides: %{name}-openmpi-fortran-static = %{version}-%{release}
%description openmpi-devel
SUNDIALS is a SUite of Non-linear DIfferential/ALgebraic equation Solvers
for use in writing mathematical software.
This package contains the Sundials parallel OpenMPI devel libraries and
header files.
%endif
######
###############################################################################
######
%if 0%{?with_mpich}
%package mpich
Summary: Suite of nonlinear solvers
BuildRequires: mpich-devel
BuildRequires: hypre-mpich-devel
%if 0%{?with_petsc}
BuildRequires: petsc-mpich-devel >= 3.10
BuildRequires: scalapack-mpich-devel
BuildRequires: hdf5-mpich-devel
%endif
%if 0%{?with_superludist}
BuildRequires: superlu_dist-mpich-devel
%endif
%if 0%{?with_fortran}
Requires: gcc-gfortran%{?_isa}
%endif
%description mpich
SUNDIALS is a SUite of Non-linear DIfferential/ALgebraic equation Solvers
for use in writing mathematical software.
This package contains the Sundials parallel MPICH libraries.
%package mpich-devel
Summary: Suite of nonlinear solvers
Requires: %{name}-mpich%{?_isa} = %{version}-%{release}
Provides: %{name}-mpich-fortran-static = %{version}-%{release}
%description mpich-devel
SUNDIALS is a SUite of Non-linear DIfferential/ALgebraic equation Solvers
for use in writing mathematical software.
This package contains the Sundials parallel MPICH devel libraries and
header files.
%endif
######
#############################################################################
%package doc
Summary: Suite of nonlinear solvers (documentation)
BuildArch: noarch
%description doc
SUNDIALS is a SUite of Non-linear DIfferential/ALgebraic equation Solvers
for use in writing mathematical software.
This package contains the documentation files.
%prep
%setup -qc
pushd %{name}-%{version}
%ifarch s390x x86_64 %{power64} aarch64
%patch 1 -p0 -b .set_superlumt64_name
%endif
%ifarch %{arm} %{ix86}
%patch 0 -p0 -b .set_superlumt_name
%endif
%if 0%{?with_klu64}
%patch 3 -p1 -b .klu64
%endif
mv src/arkode/README.md src/README-arkode.md
mv src/cvode/README.md src/README-cvode.md
mv src/cvodes/README.md src/README-cvodes.md
mv src/ida/README.md src/README-ida.md
mv src/idas/README.md src/README.idas.md
mv src/kinsol/README.md src/README-kinsol.md
popd
%if 0%{?with_openmpi}
cp -a sundials-%{version} buildopenmpi_dir
%endif
%if 0%{?with_mpich}
cp -a sundials-%{version} buildmpich_dir
%endif
%build
%global _smp_ncpus_max 1
mkdir -p sundials-%{version}/build
export LIBBLASLINK=-l%{blaslib}%{blasvar}
export INCBLAS=%{_includedir}/%{blaslib}
%if 0%{?with_superlumt}
%ifarch s390x x86_64 %{power64} aarch64
export LIBSUPERLUMTLINK=-lsuperlumt64_d
%endif
%ifarch %{arm} %{ix86}
export LIBSUPERLUMTLINK=-lsuperlumt_d
%endif
%endif
%if %{with debug}
%undefine _hardened_build
export CFLAGS=" "
export FFLAGS=" "
export FCFLAGS=" "
%{_bindir}/cmake -B sundials-%{version}/build -S sundials-%{version} \
-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \
-DCMAKE_BUILD_TYPE:STRING=Debug \
-DCMAKE_C_FLAGS_DEBUG:STRING="-O0 -g %{__global_ldflags} -I$INCBLAS" \
-DCMAKE_Fortran_FLAGS_DEBUG:STRING="-O0 -g %{__global_ldflags} -I$INCBLAS" \
-DCMAKE_CXX_FLAGS_DEBUG:STRING="-O0 -g %{__global_ldflags} -I$INCBLAS" \
-DCMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING="%{__global_ldflags} $LIBBLASLINK $LIBSUPERLUMTLINK" \
%else
export CFLAGS="%{build_cflags}"
export FFLAGS="%{build_fflags}"
%cmake -B sundials-%{version}/build -S sundials-%{version} \
-DCMAKE_C_FLAGS_RELEASE:STRING="%{optflags} -I$INCBLAS" \
-DCMAKE_Fortran_FLAGS_RELEASE:STRING="%{optflags} -I$INCBLAS" \
%endif
%if 0%{?with_klu64}
-DSUNDIALS_INDEX_SIZE:STRING=64 \
-DKLU_ENABLE=ON -DKLU_LIBRARY_DIR:PATH=%{_libdir} -DKLU_LIBRARY=%{_libdir}/libklu64.so \
-DAMD_LIBRARY=%{_libdir}/libamd64.so -DAMD_LIBRARY_DIR:PATH=%{_libdir} \
-DBTF_LIBRARY=%{_libdir}/libbtf64.so -DBTF_LIBRARY_DIR:PATH=%{_libdir} \
-DCOLAMD_LIBRARY=%{_libdir}/libcolamd64.so -DCOLAMD_LIBRARY_DIR:PATH=%{_libdir} \
-DKLU_INCLUDE_DIR:PATH=%{_includedir}/suitesparse \
%endif
%if 0%{?with_klu}
-DSUNDIALS_INDEX_SIZE:STRING=32 \
-DKLU_ENABLE=ON -DKLU_LIBRARY_DIR:PATH=%{_libdir} -DKLU_LIBRARY=%{_libdir}/libklu.so \
-DAMD_LIBRARY=%{_libdir}/libamd.so -DAMD_LIBRARY_DIR:PATH=%{_libdir} \
-DBTF_LIBRARY=%{_libdir}/libbtf.so -DBTF_LIBRARY_DIR:PATH=%{_libdir} \
-DCOLAMD_LIBRARY=%{_libdir}/libcolamd.so -DCOLAMD_LIBRARY_DIR:PATH=%{_libdir} \
-DKLU_INCLUDE_DIR:PATH=%{_includedir}/suitesparse \
%endif
-DSUNDIALS_BUILD_WITH_PROFILING:BOOL=OFF \
-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \
-DCMAKE_BUILD_TYPE:STRING=Release \
-DCMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING="%{__global_ldflags} $LIBBLASLINK $LIBSUPERLUMTLINK" \
-DCMAKE_INSTALL_INCLUDEDIR:PATH=%{_includedir} \
-DLAPACK_ENABLE:BOOL=OFF \
-DCMAKE_MODULE_LINKER_FLAGS:STRING="%{__global_ldflags}" \
-DCMAKE_INSTALL_PREFIX:PATH=%{_prefix} -DCMAKE_INSTALL_LIBDIR:PATH=%{_lib} \
-DPYTHON_EXECUTABLE:FILEPATH=%{__python3} \
-DEXAMPLES_ENABLE_CXX:BOOL=ON -DEXAMPLES_ENABLE_C:BOOL=ON \
-DCMAKE_SKIP_RPATH:BOOL=YES -DCMAKE_SKIP_INSTALL_RPATH:BOOL=YES \
-DBUILD_SHARED_LIBS:BOOL=ON -DBUILD_STATIC_LIBS:BOOL=ON \
-DMPI_ENABLE:BOOL=OFF \
%if 0%{?with_fortran}
-DF77_INTERFACE_ENABLE:BOOL=ON \
-DEXAMPLES_ENABLE_F77:BOOL=ON \
%if %{?__isa_bits:%{__isa_bits}}%{!?__isa_bits:32} == 64
-DF2003_INTERFACE_ENABLE:BOOL=ON \
%endif
-DEXAMPLES_ENABLE_F90:BOOL=ON \
-DFortran_INSTALL_MODDIR:PATH=%{_fmoddir}/%{name} \
%endif
-DUSE_GENERIC_MATH:BOOL=ON \
-DOPENMP_ENABLE:BOOL=ON \
%if %{with pthread}
-DPTHREAD_ENABLE:BOOL=ON \
%endif
-DSUNDIALS_PRECISION:STRING=double \
%if 0%{?with_superlumt}
-DSUPERLUMT_ENABLE:BOOL=ON \
-DSUPERLUMT_INCLUDE_DIR:PATH=%{_includedir}/SuperLUMT \
-DSUPERLUMT_LIBRARY_DIR:PATH=%{_libdir} \
-DSUPERLUMT_THREAD_TYPE:STRING=OpenMP \
%endif
-DSUPERLUDIST_ENABLE:BOOL=OFF \
-DHYPRE_ENABLE:BOOL=OFF \
-DEXAMPLES_INSTALL:BOOL=OFF \
-DSUNDIALS_BUILD_WITH_MONITORING:BOOL=ON -Wno-dev
%make_build V=1 -C sundials-%{version}/build
#############################################################################
#######
%if 0%{?with_openmpi}
mkdir -p buildopenmpi_dir/build
%{_openmpi_load}
## Blas
export LIBBLASLINK=-l%{blaslib}%{blasvar}
export INCBLAS=%{_includedir}/%{blaslib}
##
## SuperLUMT
%if 0%{?with_superlumt}
%ifarch s390x x86_64 %{power64} aarch64
export LIBSUPERLUMTLINK=-lsuperlumt64_d
%endif
%ifarch %{arm} %{ix86}
export LIBSUPERLUMTLINK=-lsuperlumt_d
%endif
%endif
## Hypre
%if 0%{?with_hypre}
export LIBHYPRELINK="-L$MPI_LIB -lHYPRE"
%endif
##
# Force MPI compilers
export CC=$MPI_BIN/mpicc
export CXX=$MPI_BIN/mpic++
%if 0%{?fedora}
export FC=$MPI_BIN/mpifort
%else
export FC=$MPI_BIN/mpif77
%endif
##
%if %{with debug}
%undefine _hardened_build
export CFLAGS=" "
export FFLAGS=" "
export FCFLAGS=" "
%{_bindir}/cmake -B buildopenmpi_dir/build -S buildopenmpi_dir \
-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \
-DCMAKE_BUILD_TYPE:STRING=Debug \
-DCMAKE_C_FLAGS_DEBUG:STRING="-O0 -g %{__global_ldflags} -I$INCBLAS" \
-DCMAKE_Fortran_FLAGS_DEBUG:STRING="-O0 -g %{__global_ldflags} -I$INCBLAS" \
-DCMAKE_CXX_FLAGS_DEBUG:STRING="-O0 -g %{__global_ldflags} -I$INCBLAS" \
-DCMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING="%{__global_ldflags} $LIBBLASLINK $LIBSUPERLUMTLINK $LIBHYPRELINK" \
%else
export CFLAGS="%{build_cflags}"
export FFLAGS="%{build_fflags}"
%cmake -B buildopenmpi_dir/build -S buildopenmpi_dir \
-DCMAKE_C_FLAGS_RELEASE:STRING="%{optflags} -I$INCBLAS" \
-DCMAKE_Fortran_FLAGS_RELEASE:STRING="%{optflags} -I$INCBLAS" \
%endif
%if 0%{?with_klu64}
-DSUNDIALS_INDEX_SIZE:STRING=64 \
-DKLU_ENABLE=ON -DKLU_LIBRARY_DIR:PATH=%{_libdir} -DKLU_LIBRARY=%{_libdir}/libklu64.so \
-DAMD_LIBRARY=%{_libdir}/libamd64.so -DAMD_LIBRARY_DIR:PATH=%{_libdir} \
-DBTF_LIBRARY=%{_libdir}/libbtf64.so -DBTF_LIBRARY_DIR:PATH=%{_libdir} \
-DCOLAMD_LIBRARY=%{_libdir}/libcolamd64.so -DCOLAMD_LIBRARY_DIR:PATH=%{_libdir} \
-DKLU_INCLUDE_DIR:PATH=%{_includedir}/suitesparse \
-DPETSC_ENABLE:BOOL=OFF \
%endif
%if 0%{?with_klu}
-DSUNDIALS_INDEX_SIZE:STRING=32 \
-DKLU_ENABLE=ON -DKLU_LIBRARY_DIR:PATH=%{_libdir} -DKLU_LIBRARY=%{_libdir}/libklu.so \
-DAMD_LIBRARY=%{_libdir}/libamd.so -DAMD_LIBRARY_DIR:PATH=%{_libdir} \
-DBTF_LIBRARY=%{_libdir}/libbtf.so -DBTF_LIBRARY_DIR:PATH=%{_libdir} \
-DCOLAMD_LIBRARY=%{_libdir}/libcolamd.so -DCOLAMD_LIBRARY_DIR:PATH=%{_libdir} \
-DKLU_INCLUDE_DIR:PATH=%{_includedir}/suitesparse \
%if 0%{?with_petsc}
-DPETSC_ENABLE:BOOL=ON \
-DPETSC_INCLUDES:PATH=$MPI_INCLUDE/petsc \
-DPETSC_LIBRARIES:PATH=$MPI_LIB/libpetsc.so \
-DPETSC_EXECUTABLE_RUNS:BOOL=ON \
%endif
%endif
-DSUNDIALS_BUILD_WITH_PROFILING:BOOL=OFF \
-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \
-DCMAKE_BUILD_TYPE:STRING=Release \
-DCMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING="%{__global_ldflags} $LIBBLASLINK $LIBSUPERLUMTLINK $LIBHYPRELINK" \
-DMPI_INCLUDE_PATH:PATH=$MPI_INCLUDE \
-DCMAKE_INSTALL_INCLUDEDIR:PATH=$MPI_INCLUDE \
-DLAPACK_ENABLE:BOOL=OFF \
-DCMAKE_INSTALL_PREFIX:PATH=%{_prefix} -DCMAKE_INSTALL_LIBDIR:PATH=%{_lib}/openmpi/lib \
-DPYTHON_EXECUTABLE:FILEPATH=%{__python3} \
-DEXAMPLES_ENABLE_CXX:BOOL=ON -DEXAMPLES_ENABLE_C:BOOL=ON \
-DBUILD_SHARED_LIBS:BOOL=ON -DBUILD_STATIC_LIBS:BOOL=ON \
-DCMAKE_SKIP_RPATH:BOOL=YES -DCMAKE_SKIP_INSTALL_RPATH:BOOL=YES \
-DMPI_ENABLE:BOOL=ON \
%if 0%{?with_fortran}
%if 0%{?fedora}
-DMPI_Fortran_COMPILER:STRING=$MPI_BIN/mpifort \
%else
-DMPI_Fortran_COMPILER:STRING=$MPI_BIN/mpif77 \
%endif
-DF77_INTERFACE_ENABLE:BOOL=ON \
-DEXAMPLES_ENABLE_F77:BOOL=ON \
%if %{?__isa_bits:%{__isa_bits}}%{!?__isa_bits:32} == 64
-DF2003_INTERFACE_ENABLE:BOOL=ON \
%endif
-DEXAMPLES_ENABLE_F90:BOOL=ON \
-DFortran_INSTALL_MODDIR:PATH=$MPI_FORTRAN_MOD_DIR/%{name} \
%endif
-DUSE_GENERIC_MATH:BOOL=ON \
-DOPENMP_ENABLE:BOOL=ON \
%if %{with pthread}
-DPTHREAD_ENABLE:BOOL=ON \
%endif
%if 0%{?with_superlumt}
-DSUPERLUMT_ENABLE:BOOL=ON \
-DSUPERLUMT_INCLUDE_DIR:PATH=%{_includedir}/SuperLUMT \
-DSUPERLUMT_LIBRARY_DIR:PATH=%{_libdir} \
-DSUPERLUMT_THREAD_TYPE:STRING=OpenMP \
%endif
%if 0%{?with_superludist}
-DSUPERLUDIST_ENABLE:BOOL=ON \
-DSUPERLUDIST_INCLUDE_DIR:PATH=$MPI_INCLUDE/superlu_dist \
-DSUPERLUDIST_LIBRARY_DIR:PATH=$MPI_LIB \
-DSUPERLUDIST_LIBRARIES:STRING=libsuperlu_dist.so \
%endif
%if 0%{?with_hypre}
-DHYPRE_ENABLE:BOOL=ON \
-DHYPRE_INCLUDE_DIR:PATH=$MPI_INCLUDE/hypre \
-DHYPRE_LIBRARY_DIR:PATH=$MPI_LIB \
%endif
-DEXAMPLES_INSTALL:BOOL=OFF \
-DSUNDIALS_BUILD_WITH_MONITORING:BOOL=ON -Wno-dev
%make_build V=1 -C buildopenmpi_dir/build
%{_openmpi_unload}
%endif
######
###########################################################################
%if 0%{?with_mpich}
mkdir -p buildmpich_dir/build
%{_mpich_load}
## Blas
export LIBBLASLINK=-l%{blaslib}%{blasvar}
export INCBLAS=%{_includedir}/%{blaslib}
##
## SuperLUMT
%if 0%{?with_superlumt}
%ifarch s390x x86_64 %{power64} aarch64
export LIBSUPERLUMTLINK=-lsuperlumt64_d
%endif
%ifarch %{arm} %{ix86}
export LIBSUPERLUMTLINK=-lsuperlumt_d
%endif
%endif
## Hypre
%if 0%{?with_hypre}
export LIBHYPRELINK="-L$MPI_LIB -lHYPRE"
%endif
##
# Force MPI compilers
export CC=$MPI_BIN/mpicc
export CXX=$MPI_BIN/mpic++
%if 0%{?fedora}
export FC=$MPI_BIN/mpifort
%else
export FC=$MPI_BIN/mpif77
%endif
##
%if %{with debug}
%undefine _hardened_build
export CFLAGS=" "
export FFLAGS=" "
export FCFLAGS=" "
%{_bindir}/cmake -B buildmpich_dir/build -S buildmpich_dir \
-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \
-DCMAKE_BUILD_TYPE:STRING=Debug \
-DCMAKE_C_FLAGS_DEBUG:STRING="-O0 -g %{__global_ldflags} -I$INCBLAS" \
-DCMAKE_Fortran_FLAGS_DEBUG:STRING="-O0 -g %{__global_ldflags} -I$INCBLAS" \
-DCMAKE_CXX_FLAGS_DEBUG:STRING="-O0 -g %{__global_ldflags} -I$INCBLAS" \
-DCMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING="%{__global_ldflags} $LIBBLASLINK $LIBSUPERLUMTLINK $LIBHYPRELINK" \
%else
export CFLAGS="%{build_cflags}"
export FFLAGS="%{build_fflags}"
%cmake -B buildmpich_dir/build -S buildmpich_dir \
-DCMAKE_C_FLAGS_RELEASE:STRING="%{optflags} -I$INCBLAS" \
-DCMAKE_Fortran_FLAGS_RELEASE:STRING="%{optflags} -I$INCBLAS" \
%endif
%if 0%{?with_klu64}
-DSUNDIALS_INDEX_SIZE:STRING=64 \
-DKLU_ENABLE=ON -DKLU_LIBRARY_DIR:PATH=%{_libdir} -DKLU_LIBRARY=%{_libdir}/libklu64.so \
-DAMD_LIBRARY=%{_libdir}/libamd64.so -DAMD_LIBRARY_DIR:PATH=%{_libdir} \
-DBTF_LIBRARY=%{_libdir}/libbtf64.so -DBTF_LIBRARY_DIR:PATH=%{_libdir} \
-DCOLAMD_LIBRARY=%{_libdir}/libcolamd64.so -DCOLAMD_LIBRARY_DIR:PATH=%{_libdir} \
-DKLU_INCLUDE_DIR:PATH=%{_includedir}/suitesparse \
-DPETSC_ENABLE:BOOL=OFF \
%endif
%if 0%{?with_klu}
-DSUNDIALS_INDEX_SIZE:STRING=32 \
-DKLU_ENABLE=ON -DKLU_LIBRARY_DIR:PATH=%{_libdir} -DKLU_LIBRARY=%{_libdir}/libklu.so \
-DAMD_LIBRARY=%{_libdir}/libamd.so -DAMD_LIBRARY_DIR:PATH=%{_libdir} \
-DBTF_LIBRARY=%{_libdir}/libbtf.so -DBTF_LIBRARY_DIR:PATH=%{_libdir} \
-DCOLAMD_LIBRARY=%{_libdir}/libcolamd.so -DCOLAMD_LIBRARY_DIR:PATH=%{_libdir} \
-DKLU_INCLUDE_DIR:PATH=%{_includedir}/suitesparse \
%if 0%{?with_petsc}
-DPETSC_ENABLE:BOOL=ON \
-DPETSC_INCLUDES:PATH=$MPI_INCLUDE/petsc \
-DPETSC_LIBRARIES:PATH=$MPI_LIB/libpetsc.so \
-DPETSC_EXECUTABLE_RUNS:BOOL=ON \
%endif
%endif
-DSUNDIALS_BUILD_WITH_PROFILING:BOOL=OFF \
-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \
-DCMAKE_BUILD_TYPE:STRING=Release \
-DCMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING="%{__global_ldflags} $LIBBLASLINK $LIBSUPERLUMTLINK $LIBHYPRELINK" \
-DLAPACK_ENABLE:BOOL=OFF \
-DMPI_INCLUDE_PATH:PATH=$MPI_INCLUDE \
-DCMAKE_INSTALL_INCLUDEDIR:PATH=$MPI_INCLUDE \
-DCMAKE_INSTALL_PREFIX:PATH=%{_prefix} -DCMAKE_INSTALL_LIBDIR:PATH=%{_lib}/mpich/lib \
-DPYTHON_EXECUTABLE:FILEPATH=%{__python3} \
-DEXAMPLES_ENABLE_CXX:BOOL=ON -DEXAMPLES_ENABLE_C:BOOL=ON \
-DBUILD_SHARED_LIBS:BOOL=ON -DBUILD_STATIC_LIBS:BOOL=ON \
-DCMAKE_SKIP_RPATH:BOOL=YES -DCMAKE_SKIP_INSTALL_RPATH:BOOL=YES \
-DMPI_ENABLE:BOOL=ON \
%if 0%{?with_fortran}
%if 0%{?fedora}
-DMPI_Fortran_COMPILER:STRING=$MPI_BIN/mpifort \
%else
-DMPI_Fortran_COMPILER:STRING=$MPI_BIN/mpif77 \
%endif
-DF77_INTERFACE_ENABLE:BOOL=ON \
-DEXAMPLES_ENABLE_F77:BOOL=ON \
%if %{?__isa_bits:%{__isa_bits}}%{!?__isa_bits:32} == 64
-DF2003_INTERFACE_ENABLE:BOOL=ON \
%endif
-DEXAMPLES_ENABLE_F90:BOOL=ON \
-DFortran_INSTALL_MODDIR:PATH=$MPI_FORTRAN_MOD_DIR/%{name} \
%endif
-DUSE_GENERIC_MATH:BOOL=ON \
-DOPENMP_ENABLE:BOOL=ON \
%if %{with pthread}
-DPTHREAD_ENABLE:BOOL=ON \
%endif
%if 0%{?with_superlumt}
-DSUPERLUMT_ENABLE:BOOL=ON \
-DSUPERLUMT_INCLUDE_DIR:PATH=%{_includedir}/SuperLUMT \
-DSUPERLUMT_LIBRARY_DIR:PATH=%{_libdir} \
-DSUPERLUMT_THREAD_TYPE:STRING=OpenMP \
%endif
%if 0%{?with_superludist}
-DSUPERLUDIST_ENABLE:BOOL=ON \
-DSUPERLUDIST_INCLUDE_DIR:PATH=$MPI_INCLUDE/superlu_dist \
-DSUPERLUDIST_LIBRARY_DIR:PATH=$MPI_LIB \
-DSUPERLUDIST_LIBRARIES:STRING=libsuperlu_dist.so \
%endif
%if 0%{?with_hypre}
-DHYPRE_ENABLE:BOOL=ON \
-DHYPRE_INCLUDE_DIR:PATH=$MPI_INCLUDE/hypre \
-DHYPRE_LIBRARY_DIR:PATH=$MPI_LIB \
%endif
-DEXAMPLES_INSTALL:BOOL=OFF \
-DSUNDIALS_BUILD_WITH_MONITORING:BOOL=ON -Wno-dev
%make_build V=1 -C buildmpich_dir/build
%{_mpich_unload}
%endif
######
#############################################################################
%install
%if 0%{?with_openmpi}
%{_openmpi_load}
%make_install -C buildopenmpi_dir/build
rm -f %{buildroot}$MPI_INCLUDE/sundials/LICENSE
rm -f %{buildroot}$MPI_INCLUDE/sundials/NOTICE
%{_openmpi_unload}
%endif
%if 0%{?with_mpich}
%{_mpich_load}
%make_install -C buildmpich_dir/build
rm -f %{buildroot}$MPI_INCLUDE/sundials/LICENSE
rm -f %{buildroot}$MPI_INCLUDE/sundials/NOTICE
%{_mpich_unload}
%endif
%make_install -C sundials-%{version}/build
# Remove files in bad position
rm -f %{buildroot}%{_prefix}/LICENSE
rm -f %{buildroot}%{_includedir}/sundials/LICENSE
rm -f %{buildroot}%{_includedir}/sundials/NOTICE
%check
%if 0%{?with_openmpi}
%if 0%{?with_openmpicheck}
%{_openmpi_load}
%define _vpath_builddir buildopenmpi_dir/build
%if %{with debug}
export LD_LIBRARY_PATH=%{buildroot}$MPI_LIB:$MPI_LIB
export OMPI_MCA_rmaps_base_oversubscribe=yes
%ctest -- -VV --output-on-failure --debug
%else
export LD_LIBRARY_PATH=%{buildroot}$MPI_LIB:$MPI_LIB
export OMPI_MCA_rmaps_base_oversubscribe=yes
%ctest -- --output-on-failure -E 'test_sunlinsol_superlumt|test_fsunlinsol_dense_mod'
%endif
%{_openmpi_unload}
%endif
## if with_openmpicheck
%endif
## if with_openmpi
%if 0%{?with_mpich}
%if 0%{?with_mpichcheck}
%{_mpich_load}
%define _vpath_builddir buildmpich_dir/build
%if %{with debug}
export LD_LIBRARY_PATH=%{buildroot}$MPI_LIB:$MPI_LIB
%ctest -- -VV --output-on-failure --debug
%else
export LD_LIBRARY_PATH=%{buildroot}$MPI_LIB:$MPI_LIB
%ctest -- --output-on-failure -E 'test_sunlinsol_superlumt|test_fsunlinsol_dense_mod'
%endif
%{_mpich_unload}
%endif
## if with_mpichcheck
%endif
## if with_mpich
%if 0%{?with_sercheck}
%define _vpath_builddir sundials-%{version}/build
%if %{with debug}
export LD_LIBRARY_PATH=%{buildroot}%{_libdir}:%{_libdir}
%ctest -- -VV --output-on-failure --debug
%else
export LD_LIBRARY_PATH=%{buildroot}%{_libdir}:%{_libdir}
%ctest -- --output-on-failure -E 'test_sunlinsol_superlumt|test_fsunlinsol_dense_mod'
%endif
%endif
## if with_sercheck
%files
%license sundials-%{version}/LICENSE
%doc sundials-%{version}/README.md
%doc sundials-%{version}/src/README-arkode.md
%doc sundials-%{version}/src/README-cvode.md
%doc sundials-%{version}/src/README-cvodes.md
%doc sundials-%{version}/src/README-ida.md
%doc sundials-%{version}/src/README.idas.md
%doc sundials-%{version}/src/README-kinsol.md
%doc sundials-%{version}/NOTICE
%{_libdir}/libsundials_generic.so.*
%{_libdir}/libsundials_ida*.so.*
%{_libdir}/libsundials_cvode*.so.*
%{_libdir}/libsundials_arkode*.so.*
%{_libdir}/libsundials_kinsol.so.*
%{_libdir}/libsundials_nvecserial.so.*
%{_libdir}/libsundials_nvecopenmp.so.*
%{_libdir}/libsundials_nvecmanyvector.so.*
%if %{with pthread}
%{_libdir}/libsundials_nvecpthreads.so.*
%endif
%{_libdir}/libsundials_sunmatrix*.so.*
%{_libdir}/libsundials_sunlinsol*.so.*
%{_libdir}/libsundials_sunnonlinsol*.so.*
%if 0%{?with_fortran}
%{_libdir}/libsundials_f*[_mod].so.*
%endif
%files devel
%{_libdir}/*.a
%{_libdir}/libsundials_generic.so
%{_libdir}/libsundials_ida*.so
%{_libdir}/libsundials_cvode*.so
%{_libdir}/libsundials_arkode*.so
%{_libdir}/libsundials_kinsol.so
%{_libdir}/libsundials_nvecserial.so
%{_libdir}/libsundials_nvecopenmp.so
%{_libdir}/libsundials_nvecmanyvector.so
%{_libdir}/cmake/sundials/
%if %{with pthread}
%{_libdir}/libsundials_nvecpthreads.so
%endif
%{_libdir}/libsundials_sunmatrix*.so
%{_libdir}/libsundials_sunlinsol*.so
%{_libdir}/libsundials_sunnonlinsol*.so
%if 0%{?with_fortran}
%{_libdir}/libsundials_f*[_mod].so
%{_fmoddir}/%{name}/
%{_includedir}/sundials/sundials_futils.h
%if %{with pthread}
%{_libdir}/libsundials_fnvecpthreads.so
%endif
%if 0%{?with_superlumt}
%{_libdir}/libsundials_sunlinsolsuperlumt.so
%endif
%endif
%{_includedir}/nvector/
%{_includedir}/sunmatrix/
%{_includedir}/sunlinsol/
%{_includedir}/sunnonlinsol/
%{_includedir}/arkode/
%{_includedir}/cvode/
%{_includedir}/cvodes/
%{_includedir}/ida/
%{_includedir}/idas/
%{_includedir}/kinsol/
%dir %{_includedir}/sundials
%{_includedir}/sundials/sundials_export.h
%{_includedir}/sundials/sundials_band.h
%{_includedir}/sundials/sundials_dense.h
%{_includedir}/sundials/sundials_direct.h
%{_includedir}/sundials/sundials_iterative.h
%{_includedir}/sundials/sundials_linearsolver.h
%{_includedir}/sundials/sundials_math.h
%{_includedir}/sundials/sundials_matrix.h
%{_includedir}/sundials/sundials_memory.h
%{_includedir}/sundials/sundials_nonlinearsolver.h
%{_includedir}/sundials/sundials_mpi_types.h
%{_includedir}/sundials/sundials_nvector.h
%{_includedir}/sundials/sundials_types.h
%{_includedir}/sundials/sundials_version.h
%{_includedir}/sundials/sundials_config.h
%{_includedir}/sundials/sundials_base.hpp
%{_includedir}/sundials/sundials_context.h
%{_includedir}/sundials/sundials_context.hpp
%{_includedir}/sundials/sundials_convertibleto.hpp
%{_includedir}/sundials/sundials_linearsolver.hpp
%{_includedir}/sundials/sundials_logger.h
%{_includedir}/sundials/sundials_matrix.hpp
%{_includedir}/sundials/sundials_memory.hpp
%{_includedir}/sundials/sundials_nonlinearsolver.hpp
%{_includedir}/sundials/sundials_nvector.hpp
%{_includedir}/sundials/sundials_profiler.h
%{_includedir}/sunmemory/sunmemory_system.h
%if 0%{?with_openmpi}
%files openmpi
%license sundials-%{version}/LICENSE
%doc sundials-%{version}/README.md
%doc sundials-%{version}/src/README-arkode.md
%doc sundials-%{version}/src/README-cvode.md
%doc sundials-%{version}/src/README-cvodes.md
%doc sundials-%{version}/src/README-ida.md
%doc sundials-%{version}/src/README.idas.md
%doc sundials-%{version}/src/README-kinsol.md
%doc sundials-%{version}/NOTICE
%{_libdir}/openmpi/lib/libsundials_generic.so.*
%{_libdir}/openmpi/lib/libsundials_nvecparallel.so.*
%{_libdir}/openmpi/lib/libsundials_nvecparhyp.so.*
%if 0%{?fedora}
%ifarch %{arm} %{ix86}
%if 0%{?with_petsc}
%{_libdir}/openmpi/lib/libsundials_nvecpetsc.so.*
%{_libdir}/openmpi/lib/libsundials_sunnonlinsolpetscsnes.so.*
%endif
%endif
%endif
%if %{with pthread}
%{_libdir}/openmpi/lib/libsundials_nvecmpipthreads.so.*
%endif
%{_libdir}/openmpi/lib/libsundials_nvecmpiplusx.so.*
%{_libdir}/openmpi/lib/libsundials_kinsol.so.*
%{_libdir}/openmpi/lib/libsundials_ida*.so.*
%{_libdir}/openmpi/lib/libsundials_cvode*.so.*
%{_libdir}/openmpi/lib/libsundials_arkode*.so.*
%{_libdir}/openmpi/lib/libsundials_nvecserial.so.*
%{_libdir}/openmpi/lib/libsundials_nvecopenmp.so.*
%{_libdir}/openmpi/lib/libsundials_sunmatrix*.so.*
%{_libdir}/openmpi/lib/libsundials_sunlinsol*.so.*
%{_libdir}/openmpi/lib/libsundials_sunnonlinsol*.so.*
%{_libdir}/openmpi/lib/libsundials_nvecmanyvector.so.*
%{_libdir}/openmpi/lib/libsundials_nvecmpimanyvector.so.*
%if %{with pthread}
%{_libdir}/openmpi/lib/libsundials_nvecpthreads.so.*
%endif
%if 0%{?with_fortran}
%{_libdir}/openmpi/lib/libsundials_f*[_mod].so.*
%endif
%files openmpi-devel
%{_libdir}/openmpi/lib/*.a
%{_includedir}/openmpi-%{_arch}/nvector/
%{_includedir}/openmpi-%{_arch}/sundials/
%{_includedir}/openmpi-%{_arch}/arkode/
%{_includedir}/openmpi-%{_arch}/cvode/
%{_includedir}/openmpi-%{_arch}/cvodes/
%{_includedir}/openmpi-%{_arch}/ida/
%{_includedir}/openmpi-%{_arch}/idas/
%{_includedir}/openmpi-%{_arch}/kinsol/
%{_includedir}/openmpi-%{_arch}/sunlinsol/
%{_includedir}/openmpi-%{_arch}/sunmatrix/
%{_includedir}/openmpi-%{_arch}/sunnonlinsol/
%{_includedir}/openmpi-%{_arch}/sunmemory/
%if 0%{?with_fortran}
%{_fmoddir}/openmpi/%{name}/
%{_libdir}/openmpi/lib/libsundials_f*[_mod].so
%endif
%{_libdir}/openmpi/lib/libsundials_generic.so
%{_libdir}/openmpi/lib/libsundials_nvecparallel.so
%{_libdir}/openmpi/lib/libsundials_nvecparhyp.so
%if 0%{?fedora}
%ifarch %{arm} %{ix86}
%if 0%{?with_petsc}
%{_libdir}/openmpi/lib/libsundials_nvecpetsc.so
%{_libdir}/openmpi/lib/libsundials_sunnonlinsolpetscsnes.so
%endif
%endif
%endif
%if %{with pthread}
%{_libdir}/openmpi/lib/libsundials_nvecmpipthreads.so
%{_libdir}/openmpi/lib/libsundials_nvecpthreads.so
%endif
%{_libdir}/openmpi/lib/libsundials_nvecmpiplusx.so
%{_libdir}/openmpi/lib/libsundials_kinsol.so
%{_libdir}/openmpi/lib/libsundials_ida*.so
%{_libdir}/openmpi/lib/libsundials_cvode*.so
%{_libdir}/openmpi/lib/libsundials_arkode*.so
%{_libdir}/openmpi/lib/libsundials_nvecserial.so
%{_libdir}/openmpi/lib/libsundials_nvecopenmp.so
%{_libdir}/openmpi/lib/libsundials_sunmatrix*.so
%{_libdir}/openmpi/lib/libsundials_sunlinsol*.so
%{_libdir}/openmpi/lib/libsundials_sunnonlinsol*.so
%{_libdir}/openmpi/lib/libsundials_nvecmanyvector.so
%{_libdir}/openmpi/lib/libsundials_nvecmpimanyvector.so
%{_libdir}/openmpi/lib/cmake/sundials/
%endif
%if 0%{?with_mpich}
%files mpich
%license sundials-%{version}/LICENSE
%doc sundials-%{version}/README.md
%doc sundials-%{version}/src/README-arkode.md
%doc sundials-%{version}/src/README-cvode.md
%doc sundials-%{version}/src/README-cvodes.md
%doc sundials-%{version}/src/README-ida.md
%doc sundials-%{version}/src/README.idas.md
%doc sundials-%{version}/src/README-kinsol.md
%doc sundials-%{version}/NOTICE
%{_libdir}/mpich/lib/libsundials_generic.so.*
%{_libdir}/mpich/lib/libsundials_nvecparallel.so.*
%{_libdir}/mpich/lib/libsundials_nvecparhyp.so.*
%if 0%{?fedora}
%ifarch %{arm} %{ix86}
%if 0%{?with_petsc}
%{_libdir}/mpich/lib/libsundials_nvecpetsc.so.*
%{_libdir}/mpich/lib/libsundials_sunnonlinsolpetscsnes.so.*
%endif
%endif
%endif
%if %{with pthread}
%{_libdir}/mpich/lib/libsundials_nvecmpipthreads.so.*
%endif
%{_libdir}/mpich/lib/libsundials_nvecmpiplusx.so.*
%{_libdir}/mpich/lib/libsundials_kinsol.so.*
%{_libdir}/mpich/lib/libsundials_ida*.so.*
%{_libdir}/mpich/lib/libsundials_cvode*.so.*
%{_libdir}/mpich/lib/libsundials_arkode*.so.*
%{_libdir}/mpich/lib/libsundials_nvecserial.so.*
%{_libdir}/mpich/lib/libsundials_nvecopenmp.so.*
%{_libdir}/mpich/lib/libsundials_sunmatrix*.so.*
%{_libdir}/mpich/lib/libsundials_sunlinsol*.so.*
%{_libdir}/mpich/lib/libsundials_sunnonlinsol*.so.*
%{_libdir}/mpich/lib/libsundials_nvecmanyvector.so.*
%{_libdir}/mpich/lib/libsundials_nvecmpimanyvector.so.*
%if %{with pthread}
%{_libdir}/mpich/lib/libsundials_nvecpthreads.so.*
%endif
%if 0%{?with_fortran}
%{_libdir}/mpich/lib/libsundials_f*[_mod].so.*
%endif
%files mpich-devel
%{_includedir}/mpich-%{_arch}/nvector/
%{_includedir}/mpich-%{_arch}/sundials/
%{_includedir}/mpich-%{_arch}/arkode/
%{_includedir}/mpich-%{_arch}/cvode/
%{_includedir}/mpich-%{_arch}/cvodes/
%{_includedir}/mpich-%{_arch}/ida/
%{_includedir}/mpich-%{_arch}/idas/
%{_includedir}/mpich-%{_arch}/kinsol/
%{_includedir}/mpich-%{_arch}/sunlinsol/
%{_includedir}/mpich-%{_arch}/sunmatrix/
%{_includedir}/mpich-%{_arch}/sunnonlinsol/
%{_includedir}/mpich-%{_arch}/sunmemory/
%if 0%{?with_fortran}
%{_fmoddir}/mpich/%{name}/
%{_libdir}/mpich/lib/libsundials_f*[_mod].so
%endif
%{_libdir}/mpich/lib/*.a
%{_libdir}/mpich/lib/libsundials_generic.so
%{_libdir}/mpich/lib/libsundials_nvecparallel.so
%{_libdir}/mpich/lib/libsundials_nvecparhyp.so
%if 0%{?fedora}
%ifarch %{arm} %{ix86}
%if 0%{?with_petsc}
%{_libdir}/mpich/lib/libsundials_nvecpetsc.so
%{_libdir}/mpich/lib/libsundials_sunnonlinsolpetscsnes.so
%endif
%endif
%endif
%if %{with pthread}
%{_libdir}/mpich/lib/libsundials_nvecmpipthreads.so
%{_libdir}/mpich/lib/libsundials_nvecpthreads.so
%endif
%{_libdir}/mpich/lib/libsundials_nvecmpiplusx.so
%{_libdir}/mpich/lib/libsundials_kinsol.so
%{_libdir}/mpich/lib/libsundials_ida*.so
%{_libdir}/mpich/lib/libsundials_cvode*.so
%{_libdir}/mpich/lib/libsundials_arkode*.so
%{_libdir}/mpich/lib/libsundials_nvecserial.so
%{_libdir}/mpich/lib/libsundials_nvecopenmp.so
%{_libdir}/mpich/lib/libsundials_sunmatrix*.so
%{_libdir}/mpich/lib/libsundials_sunlinsol*.so
%{_libdir}/mpich/lib/libsundials_sunnonlinsol*.so
%{_libdir}/mpich/lib/libsundials_nvecmanyvector.so
%{_libdir}/mpich/lib/libsundials_nvecmpimanyvector.so
%{_libdir}/mpich/lib/cmake/sundials/
%endif
%files doc
%license sundials-%{version}/LICENSE
%doc sundials-%{version}/README.md
%doc sundials-%{version}/NOTICE
%doc sundials-%{version}/doc/arkode/*
%changelog
%autochangelog