You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

219 lines
6.3 KiB

# Copyright 1999-2021 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=7
CMAKE_MAKEFILE_GENERATOR=emake
inherit cmake-utils toolchain-funcs multilib
DESCRIPTION="Scientific library collection for large scale problems"
HOMEPAGE="http://trilinos.sandia.gov/"
MY_PV="${PV//\./-}"
PATCHSET="r0"
SRC_URI="https://github.com/${PN}/Trilinos/archive/${PN}-release-${MY_PV}.tar.gz -> ${P}.tar.gz
https://dev.gentoo.org/~tamiko/distfiles/${PN}-13.0.0-patches-${PATCHSET}.tar.xz"
KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux"
LICENSE="BSD LGPL-2.1"
SLOT="0"
IUSE="
adolc arprec boost clp cuda eigen glpk gtest hdf5 hwloc hypre
matio metis mkl mumps netcdf petsc qd scalapack scotch sparse
superlu taucs tbb test threads tvmet yaml zlib X
"
# TODO: fix export cmake function for tests
RESTRICT="test"
RDEPEND="
sys-libs/binutils-libs
virtual/blas
virtual/lapack
virtual/mpi
adolc? ( sci-libs/adolc )
arprec? ( sci-libs/arprec )
boost? ( dev-libs/boost )
clp? ( sci-libs/coinor-clp )
cuda? ( >=dev-util/nvidia-cuda-toolkit-3.2 )
eigen? ( dev-cpp/eigen:3 )
glpk? ( sci-mathematics/glpk )
gtest? ( dev-cpp/gtest )
hdf5? ( sci-libs/hdf5[mpi] )
hypre? ( sci-libs/hypre )
hwloc? ( sys-apps/hwloc )
matio? ( sci-libs/matio )
mkl? ( sci-libs/mkl )
metis? ( || ( sci-libs/parmetis sci-libs/metis ) )
mumps? ( sci-libs/mumps )
netcdf? ( sci-libs/netcdf )
petsc? ( sci-mathematics/petsc )
qd? ( sci-libs/qd )
scalapack? ( sci-libs/scalapack )
scotch? ( sci-libs/scotch )
sparse? ( sci-libs/cxsparse sci-libs/umfpack )
superlu? ( sci-libs/superlu )
taucs? ( sci-libs/taucs )
tbb? ( dev-cpp/tbb )
tvmet? ( dev-libs/tvmet )
yaml? ( dev-cpp/yaml-cpp )
zlib? ( sys-libs/zlib )
X? ( x11-libs/libX11 )"
DEPEND="${RDEPEND}
virtual/pkgconfig"
S="${WORKDIR}/Trilinos-${PN}-release-${MY_PV}"
PATCHES=(
"${WORKDIR}"/patches
)
trilinos_conf() {
local dirs libs d
for d in $($(tc-getPKG_CONFIG) --libs-only-L $1); do
dirs="${dirs};${d:2}"
done
[[ -n ${dirs} ]] && mycmakeargs+=( "-D${2}_LIBRARY_DIRS=${dirs:1}" )
for d in $($(tc-getPKG_CONFIG) --libs-only-l $1); do
libs="${libs};${d:2}"
done
[[ -n ${libs} ]] && mycmakeargs+=( "-D${2}_LIBRARY_NAMES=${libs:1}" )
dirs=""
for d in $($(tc-getPKG_CONFIG) --cflags-only-I $1); do
dirs="${dirs};${d:2}"
done
[[ -n ${dirs} ]] && mycmakeargs+=( "-D${2}_INCLUDE_DIRS=${dirs:1}" )
}
src_configure() {
local mycmakeargs=(
-DBUILD_SHARED_LIBS=ON
-DCMAKE_INSTALL_PREFIX="${EPREFIX}"
-DCMAKE_SKIP_INSTALL_RPATH=ON
-DTrilinos_INSTALL_CONFIG_DIR="${EPREFIX}/usr/$(get_libdir)/cmake"
-DTrilinos_INSTALL_INCLUDE_DIR="${EPREFIX}/usr/include/trilinos"
-DTrilinos_INSTALL_LIB_DIR="${EPREFIX}/usr/$(get_libdir)/trilinos"
-DTrilinos_ENABLE_ALL_PACKAGES=ON
-DTrilinos_ENABLE_PyTrilinos=OFF
-DTrilinos_ENABLE_SEACAS=OFF
-DTrilinos_ENABLE_SEACASChaco=OFF
-DTrilinos_ENABLE_SEACASExodiff="$(usex netcdf)"
-DTrilinos_ENABLE_SEACASExodus="$(usex netcdf)"
-DTrilinos_ENABLE_TESTS="$(usex test)"
-DTPL_ENABLE_BinUtils=ON
-DTPL_ENABLE_BLAS=ON
-DTPL_ENABLE_LAPACK=ON
-DTPL_ENABLE_MPI=ON
-DTPL_ENABLE_ADOLC="$(usex adolc)"
-DTPL_ENABLE_AMD="$(usex sparse)"
-DTPL_ENABLE_ARPREC="$(usex arprec)"
-DTPL_ENABLE_BLACS="$(usex scalapack)"
-DTPL_ENABLE_BoostLib="$(usex boost)"
-DTPL_ENABLE_Boost="$(usex boost)"
-DTPL_ENABLE_Clp="$(usex clp)"
-DTPL_ENABLE_CSparse="$(usex sparse)"
-DTPL_ENABLE_CUDA="$(usex cuda)"
-DTPL_ENABLE_CUSPARSE="$(usex cuda)"
-DTPL_ENABLE_Eigen="$(usex eigen)"
-DTPL_ENABLE_GLPK="$(usex glpk)"
-DTPL_ENABLE_gtest="$(usex gtest)"
-DTPL_ENABLE_HDF5="$(usex hdf5)"
-DTPL_ENABLE_HWLOC="$(usex hwloc)"
-DTPL_ENABLE_HYPRE="$(usex hypre)"
-DTPL_ENABLE_Matio="$(usex matio)"
-DTPL_ENABLE_METIS="$(usex metis)"
-DTPL_ENABLE_MKL="$(usex mkl)"
-DTPL_ENABLE_MUMPS="$(usex mumps)"
-DTPL_ENABLE_Netcdf="$(usex netcdf)"
-DTPL_ENABLE_PARDISO_MKL="$(usex mkl)"
-DTPL_ENABLE_PETSC="$(usex petsc)"
-DTPL_ENABLE_Pthread="$(usex threads)"
-DTPL_ENABLE_QD="$(usex qd)"
-DTPL_ENABLE_SCALAPACK="$(usex scalapack)"
-DTPL_ENABLE_Scotch="$(usex scotch)"
-DTPL_ENABLE_SuperLU="$(usex superlu)"
-DTPL_ENABLE_TAUCS="$(usex taucs)"
-DTPL_ENABLE_TBB="$(usex tbb)"
-DTPL_ENABLE_Thrust="$(usex cuda)"
-DTPL_ENABLE_TVMET="$(usex tvmet)"
-DTPL_ENABLE_UMFPACK="$(usex sparse)"
-DTPL_ENABLE_X11="$(usex X)"
-DTPL_ENABLE_yaml-cpp="$(usex yaml)"
-DTPL_ENABLE_Zlib="$(usex zlib)"
-DML_ENABLE_SuperLU:BOOL=OFF
)
use eigen && \
mycmakeargs+=(
-DEigen_INCLUDE_DIRS="${EPREFIX}/usr/include/eigen3"
)
use hypre && \
mycmakeargs+=(
-DHYPRE_INCLUDE_DIRS="${EPREFIX}/usr/include/hypre"
)
use scotch && \
mycmakeargs+=(
-DScotch_INCLUDE_DIRS="${EPREFIX}/usr/include/scotch"
)
# cxsparse is a rewrite of csparse + extras
use sparse && \
mycmakeargs+=(
-DCSparse_LIBRARY_NAMES="cxsparse"
)
# mandatory blas and lapack
trilinos_conf blas BLAS
trilinos_conf lapack LAPACK
use superlu && trilinos_conf superlu SuperLU
use metis && trilinos_conf metis METIS
# blacs library is included in scalapack these days
if use scalapack; then
trilinos_conf scalapack SCALAPACK
mycmakeargs+=(
-DBLACS_LIBRARY_NAMES="scalapack"
-DBLACS_INCLUDE_DIRS="${EPREFIX}/usr/include/blacs"
)
fi
#
# Make sure we use the compiler wrappers in order to build trilinos.
#
export CC=mpicc CXX=mpicxx && tc-export CC CXX
#
# cmake-utils eclass patches the base directory CMakeLists.txt
# which does not work for complex Trilinos CMake modules
#
CMAKE_BUILD_TYPE=RELEASE cmake-utils_src_configure
}
src_install() {
cmake-utils_src_install
# Clean up the mess:
mv "${ED}"/bin "${ED}/usr/$(get_libdir)"/trilinos || die "mv failed"
mv "${ED}/usr/$(get_libdir)"/trilinos/cmake/* "${ED}/usr/$(get_libdir)"/cmake || die "mv failed"
rmdir "${ED}/usr/$(get_libdir)/trilinos/cmake" || die "rmdir failed"
if [ -f "${ED}"/lib/exodus.py ]; then
mv "${ED}"/lib/exodus.py "${ED}/usr/$(get_libdir)"/trilinos || die "mv failed"
fi
if [[ $(get_libdir) != lib ]]; then
mv "${ED}"/usr/lib/pkgconfig "${ED}/usr/$(get_libdir)"
fi
mv "${ED}"/include/* "${ED}"/usr/include || die "mv failed"
rmdir "${ED}"/include
#
# register $(get_libdir)/trilinos in LDPATH so that the dynamic linker
# has a chance to pick up the libraries...
#
cat >> "${T}"/99trilinos <<- EOF
LDPATH="${EPREFIX}/usr/$(get_libdir)/trilinos"
PATH="${EPREFIX}/usr/$(get_libdir)/trilinos/bin"
EOF
doenvd "${T}"/99trilinos
}