summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAisha Tammy <gentoo@aisha.cc>2020-11-05 13:47:11 +0000
committerBenda Xu <heroxbd@gentoo.org>2020-11-09 15:38:13 +0800
commit56846e03ed7c84387775b9ef6b99f8fdf65add10 (patch)
treeb243a35f3fdfe97d55cee9b268480240592dec51 /sci-libs/mkl
parentx11-misc/shutter: stabilize 0.94.3_p20200621 on amd64 (diff)
downloadgentoo-56846e03ed7c84387775b9ef6b99f8fdf65add10.tar.gz
gentoo-56846e03ed7c84387775b9ef6b99f8fdf65add10.tar.bz2
gentoo-56846e03ed7c84387775b9ef6b99f8fdf65add10.zip
sci-libs/mkl: version bump to 2020.4.304
Use eselect-ldso mechanism. Respect Prefix. Closes: https://bugs.gentoo.org/587338 Closes: https://bugs.gentoo.org/592662 Closes: https://bugs.gentoo.org/747304 Closes: https://bugs.gentoo.org/260810 Closes: https://bugs.gentoo.org/715548 Closes: https://bugs.gentoo.org/719976 Reported-by: Juergen Rose, François Bissey, Florian D., Martin Mokrejš Reported-by: Michel Lang, juantxorena@gmail.com, Chris Larson, jorge Package-Manager: Portage-3.0.8, Repoman-3.0.1 Signed-off-by: Aisha Tammy <gentoo@aisha.cc> Signed-off-by: Benda Xu <heroxbd@gentoo.org>
Diffstat (limited to 'sci-libs/mkl')
-rw-r--r--sci-libs/mkl/Manifest1
-rw-r--r--sci-libs/mkl/mkl-2020.4.304.ebuild230
2 files changed, 231 insertions, 0 deletions
diff --git a/sci-libs/mkl/Manifest b/sci-libs/mkl/Manifest
index 015a339f3b95..78d062bccf51 100644
--- a/sci-libs/mkl/Manifest
+++ b/sci-libs/mkl/Manifest
@@ -1 +1,2 @@
DIST l_mkl_p_10.0.5.025.tgz 230389719 BLAKE2B 622dd0076c8e6d747f170685b6a378db95aa2453d15a53c93ef863729bb8dc76409d7bf72f8bab8ef9a07d8efe1e448cb9e7fc8e6f0c0b2cbbf0a0f6944e2a86 SHA512 621c3bfdecb57313e375424e391c0630a29efd70196e3e4bfc5b4ddd03aa45fda4761523652d875f2e60d466a0010c06659306b11f20966fba4943c308fa6f84
+DIST mkl-2020.4.304.tar.gz 549319314 BLAKE2B 9ffdb0dc87c9fba1f003961f09cabef7376bd3d10e98085900c863383f0eb1e026f0f804390b2edf4e29d5b0b685af7b74092a7cb5cc871ca656462cec9487e4 SHA512 9c4ff7710484a1c0dd3e6ba7401eb6cb599f771651006b6a570c45b9abf1f43e8e400940d859a656c6892aa81e634c4d74eefe88e8287fdbb19a513f332326b7
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..ed552ffeb603
--- /dev/null
+++ b/sci-libs/mkl/mkl-2020.4.304.ebuild
@@ -0,0 +1,230 @@
+# 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
+
+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="*"
+
+# 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
+}