#!/usr/bin/make -f

export DEB_BUILD_MAINT_OPTIONS = hardening=-all
export CFLAGS =
export CXXFLAGS =
export LDFLAGS =

COMPILER_FAMILY := intel
export COMPILER_FAMILY
MPI_FAMILY      := impi
export MPI_FAMILY
PNAME           := trilinos
VERSION         := 17.0.0
VER_EXP         := 17-0-0
INSTALL_PATH    := /opt/ohpc/pub/libs/$(COMPILER_FAMILY)/$(MPI_FAMILY)/$(PNAME)/$(VERSION)
OPENBLAS_LIBDIR := /opt/ohpc/pub/libs/$(COMPILER_FAMILY)/openblas/0.3.32/lib
SCALAPACK_LIBDIR := /opt/ohpc/pub/libs/$(COMPILER_FAMILY)/$(MPI_FAMILY)/scalapack/2.2.2/lib
BOOST_LIBDIR    := /opt/ohpc/pub/libs/$(COMPILER_FAMILY)/$(MPI_FAMILY)/boost/1.90.0/lib
HDF5_LIBDIR     := /opt/ohpc/pub/libs/$(COMPILER_FAMILY)/$(MPI_FAMILY)/phdf5/2.1.0/lib
NETCDF_LIBDIR   := /opt/ohpc/pub/libs/$(COMPILER_FAMILY)/$(MPI_FAMILY)/netcdf/4.10.0/lib
PNETCDF_LIBDIR  := /opt/ohpc/pub/libs/$(COMPILER_FAMILY)/$(MPI_FAMILY)/pnetcdf/1.14.1/lib
METIS_LIBDIR    := /opt/ohpc/pub/libs/$(COMPILER_FAMILY)/metis/5.1.0/lib
PTSCOTCH_LIBDIR := /opt/ohpc/pub/libs/$(COMPILER_FAMILY)/$(MPI_FAMILY)/scotch/7.0.10/lib
SCOTCH_LIBDIR   := /opt/ohpc/pub/libs/$(COMPILER_FAMILY)/scotch/7.0.10/lib
SUPERLU_LIBDIR  := /opt/ohpc/pub/libs/$(COMPILER_FAMILY)/$(MPI_FAMILY)/superlu_dist/9.2.1/lib
MUMPS_LIBDIR    := /opt/ohpc/pub/libs/$(COMPILER_FAMILY)/$(MPI_FAMILY)/mumps/5.8.2/lib
HYPRE_LIBDIR    := /opt/ohpc/pub/libs/$(COMPILER_FAMILY)/$(MPI_FAMILY)/hypre/3.1.0/lib
TPL_LIBDIRS     := $(OPENBLAS_LIBDIR):$(SCALAPACK_LIBDIR):$(BOOST_LIBDIR):$(HDF5_LIBDIR):$(NETCDF_LIBDIR):$(PNETCDF_LIBDIR):$(METIS_LIBDIR):$(PTSCOTCH_LIBDIR):$(SCOTCH_LIBDIR):$(SUPERLU_LIBDIR):$(MUMPS_LIBDIR):$(HYPRE_LIBDIR)
SRCDIR          := $(CURDIR)/Trilinos-trilinos-release-$(VER_EXP)
PKG             := $(CURDIR)/debian/$(PNAME)-$(COMPILER_FAMILY)-$(MPI_FAMILY)-ohpc
ENV             := OHPC_MODULES="openblas scalapack boost phdf5 netcdf pnetcdf metis ptscotch scotch superlu_dist mumps hypre" bash /build/devel/build-mpi.sh

%:
	dh $@

override_dh_auto_configure:
	test -s SOURCES/trilinos-release-$(VER_EXP).tar.gz || \
		wget -q -O SOURCES/trilinos-release-$(VER_EXP).tar.gz \
			https://github.com/trilinos/Trilinos/archive/trilinos-release-$(VER_EXP).tar.gz
	rm -rf $(SRCDIR)
	tar xf SOURCES/trilinos-release-$(VER_EXP).tar.gz
	cd $(SRCDIR) && patch -p1 < $(CURDIR)/SOURCES/trilinos-13_0_0-destdir_fix.patch || true

override_dh_auto_build:
	cd $(SRCDIR) && $(ENV) bash -c '\
		export CFLAGS="$${CFLAGS} -Wno-deprecated-declarations" && \
		export CXXFLAGS="$${CXXFLAGS} -Wno-deprecated-declarations" && \
		mkdir -p build && cd build && \
		cmake \
			-DCMAKE_INSTALL_PREFIX=$(INSTALL_PATH) \
			-DCMAKE_EXE_LINKER_FLAGS:STRING="-fPIC" \
			-DCMAKE_VERBOSE_MAKEFILE:BOOL=TRUE \
			-DCMAKE_BUILD_TYPE:STRING=RELEASE \
			-DBUILD_SHARED_LIBS:BOOL=ON \
			-DCMAKE_SKIP_INSTALL_RPATH:BOOL=ON \
			-DCMAKE_SKIP_RPATH:BOOL=ON \
			-DTrilinos_VERBOSE_CONFIGURE:BOOL=ON \
			-DTrilinos_ENABLE_ALL_PACKAGES:BOOL=OFF \
			-DTrilinos_INSTALL_LIB_DIR="$(INSTALL_PATH)/lib64" \
			-DTPL_ENABLE_BLAS:BOOL=ON \
			-DBLAS_LIBRARY_DIRS:PATH="$${OPENBLAS_LIB}" \
			-DBLAS_LIBRARY_NAMES:STRING="openblas" \
			-DTPL_ENABLE_LAPACK:BOOL=ON \
			-DLAPACK_LIBRARY_DIRS:PATH="$${OPENBLAS_LIB}" \
			-DLAPACK_LIBRARY_NAMES:STRING="openblas" \
			-DTrilinos_EXTRA_LINK_FLAGS:STRING="-lifcore" \
			-DTrilinos_ENABLE_MueLu:BOOL=ON \
			-DTrilinos_ENABLE_Phalanx:BOOL=ON \
			-DTrilinos_ENABLE_Stokhos:BOOL=ON \
			-DTrilinos_ENABLE_Didasko:BOOL=ON \
			-DTrilinos_ENABLE_TrilinosCouplings:BOOL=ON \
			-DTrilinos_ENABLE_PyTrilinos:BOOL=OFF \
			-DTrilinos_ENABLE_CTrilinos:BOOL=ON \
			-DTrilinos_ENABLE_ForTrilinos:BOOL=ON \
			-DTrilinos_ENABLE_EXAMPLES:BOOL=OFF \
			-DTrilinos_ENABLE_STK:BOOL=OFF \
			-DTrilinos_ENABLE_TESTS:BOOL=OFF \
			-DTrilinos_ENABLE_OpenMP:BOOL=ON \
			-DTrilinos_ENABLE_EXPLICIT_INSTANTIATION:BOOL=ON \
			-DTEUCHOS_ENABLE_expat:BOOL=ON \
			-DTEUCHOS_ENABLE_libxml2:BOOL=ON \
			-DTEUCHOS_ENABLE_gmp:BOOL=ON \
			-DTPL_ENABLE_MPI:BOOL=ON \
			-DMPI_C_COMPILER:FILEPATH=mpicc \
			-DMPI_CXX_COMPILER:FILEPATH=mpicxx \
			-DMPI_FORTRAN_COMPILER:FILEPATH=mpif90 \
			-DTPL_ENABLE_Netcdf:BOOL=ON \
			-DNetcdf_INCLUDE_DIRS:PATH="$${NETCDF_INC};$${PNETCDF_INC}" \
			-DNetcdf_LIBRARY_DIRS:PATH="$${NETCDF_LIB};$${PNETCDF_LIB}" \
			-DTPL_ENABLE_HDF5:BOOL=ON \
			-DHDF5_INCLUDE_DIRS:PATH="$${HDF5_INC}" \
			-DHDF5_LIBRARY_DIRS:PATH="$${HDF5_LIB}" \
			-DHDF5_LIBRARY_NAMES:STRING="hdf5" \
			-DTPL_ENABLE_Boost:BOOL=ON \
			-DBOOST_INCLUDE_DIRS:PATH="$${BOOST_INC}" \
			-DBOOST_LIBRARY_DIRS:PATH="$${BOOST_LIB}" \
			-DBOOST_LIBRARY_NAMES:STRING="boost" \
			-DTPL_ENABLE_Pthread:BOOL=ON \
			-DTPL_ENABLE_CppUnit:BOOL=OFF \
			-DTPL_ENABLE_Zlib:BOOL=ON \
			-DTPL_ENABLE_QT:BOOL=OFF \
			-DTPL_ENABLE_Matio=OFF \
			-DTPL_ENABLE_GLM=OFF \
			.. && \
		make -j$$(nproc) VERBOSE=1'

override_dh_auto_install:
	cd $(SRCDIR)/build && DESTDIR=$(PKG) make install INSTALL='install -p'
	# fix unversioned python interpreter
	sed -e "s,/env python,/python3,g" -i $(PKG)$(INSTALL_PATH)/bin/phalanx_create_evaluator.py || true
	# do not ship unit tests
	rm -rf $(PKG)$(INSTALL_PATH)/lib/tests
	# Install modulefile
	mkdir -p $(PKG)/opt/ohpc/pub/moduledeps/$(COMPILER_FAMILY)-$(MPI_FAMILY)/$(PNAME)
	install -m 644 debian/modulefile $(PKG)/opt/ohpc/pub/moduledeps/$(COMPILER_FAMILY)-$(MPI_FAMILY)/$(PNAME)/$(VERSION)

override_dh_auto_clean:
	rm -rf $(SRCDIR)

override_dh_usrlocal:

override_dh_shlibdeps:
	dh_shlibdeps -l$(PKG)$(INSTALL_PATH)/lib64:$(PKG)$(INSTALL_PATH)/lib:$(TPL_LIBDIRS) -- --ignore-missing-info

override_dh_strip:
	dh_strip --no-automatic-dbgsym || true

override_dh_auto_test:
