summaryrefslogtreecommitdiff
path: root/sci-libs/mkl/mkl-2020.4.304.ebuild
diff options
context:
space:
mode:
authorV3n3RiX <venerix@redcorelinux.org>2020-11-25 22:39:15 +0000
committerV3n3RiX <venerix@redcorelinux.org>2020-11-25 22:39:15 +0000
commitd934827bf44b7cfcf6711964418148fa60877668 (patch)
tree0625f358789b5e015e49db139cc1dbc9be00428f /sci-libs/mkl/mkl-2020.4.304.ebuild
parent2e34d110f164bf74d55fced27fe0000201b3eec5 (diff)
gentoo resync : 25.11.2020
Diffstat (limited to 'sci-libs/mkl/mkl-2020.4.304.ebuild')
-rw-r--r--sci-libs/mkl/mkl-2020.4.304.ebuild231
1 files changed, 231 insertions, 0 deletions
diff --git a/sci-libs/mkl/mkl-2020.4.304.ebuild b/sci-libs/mkl/mkl-2020.4.304.ebuild
new file mode 100644
index 000000000000..e90f9cb25172
--- /dev/null
+++ b/sci-libs/mkl/mkl-2020.4.304.ebuild
@@ -0,0 +1,231 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+MULTILIB_COMPAT=( abi_x86_{32,64} )
+inherit multilib-build rpm
+
+MAGIC=16917 # from registration center
+MY_P=${P/-/_} # mkl_2020.4.304
+MY_PV=$(ver_rs 2 '-') # 2020.4-304
+
+DESCRIPTION="Intel Math Kernel Library"
+HOMEPAGE="https://software.intel.com/en-us/intel-mkl"
+SRC_URI="http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/${MAGIC}/l_${MY_P}.tgz -> ${P}.tar.gz"
+S="${WORKDIR}"/l_${MY_P}
+
+LICENSE="ISSL"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="static-libs"
+RESTRICT="strip"
+
+# MKL uses Intel/LLVM OpenMP by default.
+# One can change the threadding layer to "gnu" or "tbb"
+# through the MKL_THREADING_LAYER env var.
+RDEPEND="
+ app-eselect/eselect-blas
+ app-eselect/eselect-lapack
+ sys-libs/libomp[${MULTILIB_USEDEP}]
+"
+
+QA_PREBUILT="*"
+QA_TEXTRELS="*"
+QA_SONAME="*"
+QA_MULTILIB_PATHS="/usr/lib.*/libmkl_tbb_thread.so"
+
+# first unpack all rpms
+# find folders containing header like, static and dynamic lib files
+# these are the only folders we care about
+# find "${S}"/rpm -type f \( -name "*.a" -o -name "*.so" -o -wholename "*mkl/include*" \) \
+# | tr '/' ' ' | awk '{ print $2 }' | sort | uniq
+
+# ignore all conda-* rpms
+# ignore all empty rpms
+# information about rest:
+#
+# mkl-core-ps-32bit-2020.3-279-2020.3-279.x86_64.rpm | some prebuilt benchmark executables
+# psxe-common-2020.3-111-2020.3-111.noarch.rpm
+# comp-l-all-vars-19.1.2-279-19.1.2-279.noarch.rpm
+# comp-nomcu-vars-19.1.2-279-19.1.2-279.noarch.rpm
+# mkl-cluster-c-2020.3-279-2020.3-279.noarch.rpm
+# mkl-cluster-f-2020.3-279-2020.3-279.noarch.rpm
+# mkl-doc-2020-2020.3-279.noarch.rpm
+# mkl-common-ps-2020.3-279-2020.3-279.noarch.rpm | only contains benchmarks
+# compxe-pset-2020.3-111-2020.3-111.noarch.rpm | only contains benchmarks
+# mkl-doc-ps-2020-2020.3-279.noarch.rpm
+# mkl-common-2020.3-279-2020.3-279.noarch.rpm | setting up environment vars (might be needed for parallel studio)
+# mkl-installer-license-2020.3-279-2020.3-279.noarch.rpm | already have license
+# mkl-psxe-2020.3-111-2020.3-111.noarch.rpm | useless files
+# mkl-common-c-ps-2020.3-279-2020.3-279.noarch.rpm | contained in common-c
+
+INTEL_DIST_X86_RPMS=(
+ mkl-core-32bit
+ mkl-core-rt-32bit
+ mkl-f95-32bit
+ mkl-gnu-32bit
+ mkl-gnu-f-32bit
+ mkl-gnu-f-rt-32bit
+ mkl-gnu-rt-32bit
+ mkl-tbb-32bit
+ mkl-tbb-rt
+ intel-openmp-32bit-19.1.3-304-19.1.3-304.x86_64.rpm
+)
+INTEL_DIST_AMD64_RPMS=(
+ mkl-cluster
+ mkl-cluster-rt
+ mkl-core
+ mkl-core-ps
+ mkl-core-rt
+ mkl-f95
+ mkl-gnu
+ mkl-gnu-f
+ mkl-gnu-rt
+ mkl-gnu-f-rt
+ mkl-pgi
+ mkl-pgi-rt
+ mkl-tbb
+ mkl-tbb-rt
+ intel-openmp-19.1.3-304-19.1.3-304.x86_64.rpm
+)
+INTEL_DIST_DAT_RPMS=(
+ mkl-common-c
+ mkl-common-f
+ mkl-f95-common
+)
+
+rpm_dirname() {
+ local rpm="${1}" suffix="x86_64"
+ if [[ $# -eq 2 ]]; then
+ suffix="$2"
+ fi
+ if [[ ! ${rpm} =~ "rpm" ]] ; then
+ rpm="intel-${rpm}-${MY_PV}-${MY_PV}.${suffix}"
+ fi
+ printf '%s\n' "${rpm%%.rpm}"
+}
+
+rpm_unpack() {
+ local rpm="$1" suffix="x86_64"
+ if [[ $# -eq 2 ]]; then
+ suffix="$2"
+ fi
+ rpm="$(rpm_dirname $rpm $suffix)"
+ elog "Unpacking - ${rpm}.rpm"
+ rpmunpack "${rpm}.rpm" || die
+}
+
+src_unpack() {
+ default
+ cd "${S}"/rpm
+ local rpm
+ for rpm in ${INTEL_DIST_DAT_RPMS[@]}; do
+ rpm_unpack ${rpm} noarch
+ done
+ if use abi_x86_64 ; then
+ for rpm in ${INTEL_DIST_AMD64_RPMS[@]}; do
+ rpm_unpack ${rpm}
+ done
+ fi
+ if use abi_x86_32 ; then
+ for rpm in ${INTEL_DIST_X86_RPMS[@]}; do
+ rpm_unpack ${rpm}
+ done
+ fi
+}
+
+multilib_src_install() {
+ cd "${S}"/rpm
+ elog "current variant - ${MULTIBUILD_VARIANT}"
+ local rpm rpm_list libdir=$(get_libdir)
+ if [[ ${MULTIBUILD_VARIANT} =~ 'amd64' ]] ; then
+ rpm_list="${INTEL_DIST_AMD64_RPMS[@]}"
+ else
+ rpm_list="${INTEL_DIST_X86_RPMS[@]}"
+ fi
+ for rpm in ${rpm_list} ; do
+ rpm=$(rpm_dirname ${rpm})
+ elog "installing libs from - ${rpm}"
+ local libso liba
+ for libso in $(find "${S}"/rpm/${rpm} -name "*.so") ; do
+ dolib.so "${libso}"
+ done
+ use static-libs && \
+ for liba in $(find "${S}"/rpm/${rpm} -name "*.a") ; do
+ dolib.a "${liba}"
+ done
+ done
+
+ dodir /usr/$(get_libdir)/blas/mkl
+ dosym ../../libmkl_rt.so usr/$(get_libdir)/blas/mkl/libblas.so
+ dosym ../../libmkl_rt.so usr/$(get_libdir)/blas/mkl/libblas.so.3
+ dosym ../../libmkl_rt.so usr/$(get_libdir)/blas/mkl/libcblas.so
+ dosym ../../libmkl_rt.so usr/$(get_libdir)/blas/mkl/libcblas.so.3
+ dodir /usr/$(get_libdir)/lapack/mkl
+ dosym ../../libmkl_rt.so usr/$(get_libdir)/lapack/mkl/liblapack.so
+ dosym ../../libmkl_rt.so usr/$(get_libdir)/lapack/mkl/liblapack.so.3
+ dosym ../../libmkl_rt.so usr/$(get_libdir)/lapack/mkl/liblapacke.so
+ dosym ../../libmkl_rt.so usr/$(get_libdir)/lapack/mkl/liblapacke.so.3
+
+ # for some reason pkgconfig files are only for amd64
+ [[ ${MULTIBUILD_VARIANT} =~ 'amd64' ]] || return
+ local pc_files=( "${FILESDIR}"/*.pc )
+ insinto /usr/$(get_libdir)/pkgconfig
+ for pc in "${pc_files[@]}" ; do
+ doins "${pc}"
+ sed -e "s:@PREFIX@:${EPREFIX}/usr:" \
+ -i "${ED}"/usr/$(get_libdir)/pkgconfig/${pc##*/} || die
+ done
+}
+
+src_install() {
+ # install bunch of header like files
+ dodir /usr/include/mkl
+ for idir in $(find "${S}"/rpm -type d -wholename "*mkl/include"); do
+ cp -a "${idir}"/. "${ED}"/usr/include/mkl || die
+ done
+
+ multilib_foreach_abi multilib_src_install
+}
+
+library-provider_pkg_postinst() {
+ local libdir=$(get_libdir) me="mkl"
+
+ # check blas
+ eselect blas add ${libdir} "${EROOT}"/usr/${libdir}/blas/${me} ${me}
+ local current_blas=$(eselect blas show ${libdir} | cut -d' ' -f2)
+ if [[ ${current_blas} == "${me}" || -z ${current_blas} ]]; then
+ eselect blas set ${libdir} ${me}
+ elog "Current eselect: BLAS/CBLAS ($libdir) -> [${current_blas}]."
+ else
+ elog "Current eselect: BLAS/CBLAS ($libdir) -> [${current_blas}]."
+ elog "To use blas [${me}] implementation, you have to issue (as root):"
+ elog "\t eselect blas set ${libdir} ${me}"
+ fi
+
+ # check lapack
+ eselect lapack add ${libdir} "${EROOT}"/usr/${libdir}/lapack/${me} ${me}
+ local current_lapack=$(eselect lapack show ${libdir} | cut -d' ' -f2)
+ if [[ ${current_lapack} == "${me}" || -z ${current_lapack} ]]; then
+ eselect lapack set ${libdir} ${me}
+ elog "Current eselect: LAPACK ($libdir) -> [${current_blas}]."
+ else
+ elog "Current eselect: LAPACK ($libdir) -> [${current_blas}]."
+ elog "To use lapack [${me}] implementation, you have to issue (as root):"
+ elog "\t eselect lapack set ${libdir} ${me}"
+ fi
+}
+
+pkg_postinst() {
+ multilib_foreach_abi library-provider_pkg_postinst
+}
+
+library-provider_pkg_postrm() {
+ eselect blas validate
+ eselect lapack validate
+}
+
+pkg_postrm() {
+ multilib_foreach_abi library-provider_pkg_postrm
+}