public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "David Seifert" <soap@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] repo/gentoo:master commit in: sci-libs/mkl/
Date: Tue, 23 Aug 2016 08:44:19 +0000 (UTC)	[thread overview]
Message-ID: <1471941822.f01785c65dbcc8af9a890b335be4baaaaed6df03.soap@gentoo> (raw)

commit:     f01785c65dbcc8af9a890b335be4baaaaed6df03
Author:     Gerhard Bräunlich <wippbox <AT> gmx <DOT> net>
AuthorDate: Mon Aug 22 09:55:07 2016 +0000
Commit:     David Seifert <soap <AT> gentoo <DOT> org>
CommitDate: Tue Aug 23 08:43:42 2016 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=f01785c6

sci-libs/mkl: revbump: Ported EAPI from 5 to 6

Package-Manager: portage-2.2.28
Closes: https://github.com/gentoo/gentoo/pull/2095

Signed-off-by: David Seifert <soap <AT> gentoo.org>

 sci-libs/mkl/mkl-10.0.5.025-r1.ebuild | 367 ++++++++++++++++++++++++++++++++++
 1 file changed, 367 insertions(+)

diff --git a/sci-libs/mkl/mkl-10.0.5.025-r1.ebuild b/sci-libs/mkl/mkl-10.0.5.025-r1.ebuild
new file mode 100644
index 0000000..5fba1a1
--- /dev/null
+++ b/sci-libs/mkl/mkl-10.0.5.025-r1.ebuild
@@ -0,0 +1,367 @@
+# Copyright 1999-2016 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI=6
+
+inherit check-reqs fortran-2 toolchain-funcs
+
+PID=1232
+PB=${PN}
+P_ARCHIVE=l_${PN}_p_${PV}
+
+DESCRIPTION="Intel(R) Math Kernel Library: linear algebra, fft, math functions"
+HOMEPAGE="http://developer.intel.com/software/products/mkl/"
+SRC_URI="http://registrationcenter-download.intel.com/irc_nas/${PID}/${P_ARCHIVE}.tgz"
+
+SLOT="0"
+LICENSE="Intel-SDP"
+KEYWORDS="-* ~amd64 ~ia64 ~x86"
+IUSE="doc fftw fortran95 int64 mpi"
+
+RESTRICT="strip mirror"
+
+DEPEND="
+	app-eselect/eselect-blas
+	app-eselect/eselect-cblas
+	app-eselect/eselect-lapack"
+RDEPEND="${DEPEND}
+	doc? ( app-doc/blas-docs app-doc/lapack-docs )
+	mpi? ( virtual/mpi )"
+
+PATCHES=(
+	"${FILESDIR}"/${PN}-10.0.2.018-openmpi.patch # allow openmpi to work
+)
+
+MKL_DIR=/opt/intel/${PN}/${PV}
+INTEL_LIC_DIR=/opt/intel/licenses
+
+CHECKREQS_DISK_BUILD=3500M
+
+QA_PREBUILT="opt/intel/${PN}/${PV}/*"
+
+get_fcomp() {
+	case $(tc-getFC) in
+		*gfortran* )
+			FCOMP="gfortran" ;;
+		ifort )
+			FCOMP="ifc" ;;
+		* )
+			FCOMP=$(tc-getFC) ;;
+	esac
+}
+
+pkg_setup() {
+	check-reqs_pkg_setup
+	fortran-2_pkg_setup
+	# Check the license
+	if [[ -z ${MKL_LICENSE} ]]; then
+		MKL_LICENSE="$(grep -ls MKern ${ROOT}${INTEL_LIC_DIR}/* | tail -n 1)"
+		MKL_LICENSE=${MKL_LICENSE/${ROOT}/}
+	fi
+	if  [[ -z ${MKL_LICENSE} ]]; then
+		eerror "Did not find any valid mkl license."
+		eerror "Register at ${HOMEPAGE} to receive a license"
+		eerror "and place it in ${INTEL_LIC_DIR} or run:"
+		eerror "export MKL_LICENSE=/my/license/file emerge mkl"
+		die "license setup failed"
+	fi
+
+	# Check if we have enough free diskspace to install
+	CHECKREQS_DISK_BUILD="1100M"
+	check-reqs_pkg_setup
+
+	# Check and setup fortran
+	if use fortran95; then
+		# blas95 and lapack95 don't compile with gfortran < 4.2
+		[[ $(tc-getFC) =~ (gfortran|g77) ]] && [[ $(gcc-major-version)$(gcc-minor-version) -lt 42 ]] &&
+		die "blas95 and lapack95 don't compile with gfortran < 4.2"
+	fi
+	MKL_FC="gnu"
+	[[ $(tc-getFC) =~ if ]] && MKL_FC="intel"
+
+	# build profiles according to what compiler is installed
+	MKL_CC="gnu"
+	[[ $(tc-getCC) == icc ]] && MKL_CC="intel"
+
+	if has_version sys-cluster/mpich; then
+		MKL_MPI=mpich
+	elif has_version sys-cluster/mpich2; then
+		MKL_MPI=mpich2
+	elif has_version sys-cluster/openmpi; then
+		MKL_MPI=openmpi
+	else
+		MKL_MPI=intelmpi
+	fi
+	get_fcomp
+}
+
+src_unpack () {
+	default
+	cd "${WORKDIR}/${P_ARCHIVE}"/install || die
+
+	cp ${MKL_LICENSE} "${WORKDIR}"/ || die
+	MKL_LIC="$(basename ${MKL_LICENSE})"
+
+	# binary blob extractor installs rpm leftovers in /opt/intel
+	addwrite /opt/intel
+	# undocumented features: INSTALLMODE_mkl=NONRPM
+
+	# We need to install mkl non-interactively.
+	# If things change between versions, first do it interactively:
+	# tar xf l_*; ./install.sh --duplicate mkl.ini;
+	# The file will be instman/mkl.ini
+	# Then check it and modify the ebuild-created one below
+	# --norpm is required to be able to install 10.x
+	cat > mkl.ini <<-EOF || die
+		[MKL]
+		EULA_ACCEPT_REJECT=ACCEPT
+		FLEXLM_LICENSE_LOCATION=${WORKDIR}/${MKL_LIC}
+		INSTALLMODE_mkl=NONRPM
+		INSTALL_DESTINATION=${S}
+	EOF
+	einfo "Extracting ..."
+	./install \
+		--silent ./mkl.ini \
+		--installpath "${S}" \
+		--log log.txt &> /dev/null \
+		|| die
+
+	if [[ -z $(find "${S}" -name libmkl.so) ]]; then
+		eerror "Could not find extracted files"
+		eerror "See ${PWD}/log.txt to see why"
+		die "extracting failed"
+	fi
+}
+
+src_prepare() {
+	default
+
+	# remove left over
+	rm -f /opt/intel/.*mkl*.log /opt/intel/intel_sdp_products.db || die
+
+	# remove unused stuff and set up intel names
+	rm -rf "${WORKDIR}"/l_* || die
+
+	case ${ARCH} in
+		x86)	MKL_ARCH=32
+				MKL_KERN=ia32
+				rm -rf lib*/{em64t,64} || die
+				;;
+
+		amd64)	MKL_ARCH=em64t
+				MKL_KERN=em64t
+				rm -rf lib*/{32,64} || die
+				;;
+
+		ia64)	MKL_ARCH=64
+				MKL_KERN=ipf
+				rm -rf lib*/{32,em64t} || die
+				;;
+	esac
+	MKL_LIBDIR=${MKL_DIR}/lib/${MKL_ARCH}
+	# fix env scripts
+	sed -i \
+		-e "s:${S}:${MKL_DIR}:g" \
+		tools/environment/*sh || die "sed support file failed"
+}
+
+src_compile() {
+	cd "${S}"/interfaces || die
+	if use fortran95; then
+		einfo "Compiling fortan95 static lib wrappers"
+		local myconf="lib${MKL_ARCH}"
+		[[ $(tc-getFC) =~ gfortran ]] && \
+			myconf="${myconf} FC=gfortran"
+		if use int64; then
+			myconf="${myconf} interface=ilp64"
+			[[ $(tc-getFC) =~ gfortran ]] && \
+				myconf="${myconf} FOPTS=-fdefault-integer-8"
+		fi
+		local x
+		for x in blas95 lapack95; do
+			emake -C ${x} ${myconf}
+		done
+	fi
+
+	if use fftw; then
+		local fftwdirs="fftw2xc fftw2xf fftw3xc fftw3xf"
+		local myconf="lib${MKL_ARCH} compiler=${MKL_CC}"
+		if use mpi; then
+			fftwdirs="${fftwdirs} fftw2x_cdft"
+			myconf="${myconf} mpi=${MKL_MPI}"
+		fi
+		einfo "Compiling fftw static lib wrappers"
+		local x
+		for x in ${fftwdirs}; do
+			emake -C ${x} ${myconf}
+		done
+	fi
+}
+
+src_test() {
+	cd "${S}"/tests
+	local myconf
+	local testdirs="blas cblas"
+	local x
+	use int64 && myconf="${myconf} interface=ilp64"
+	# buggy with g77 and gfortran
+	#if use mpi; then
+	#	testdirs="${testdirs} scalapack"
+	#	myconf="${myconf} mpi=${MKL_MPI}"
+	#fi
+	for x in ${testdirs}; do
+		einfo "Testing ${x}"
+		emake -C ${x} \
+			compiler=${MKL_FC} \
+			${myconf} \
+			so${MKL_ARCH}
+	done
+}
+
+mkl_make_generic_profile() {
+	cd "${S}" || die
+	# produce eselect files
+	# don't make them in FILESDIR, it changes every major version
+	cat  > eselect.blas <<-EOF || die
+		${MKL_LIBDIR}/libmkl_${MKL_KERN}.a /usr/@LIBDIR@/libblas.a
+		${MKL_LIBDIR}/libmkl.so /usr/@LIBDIR@/libblas.so
+		${MKL_LIBDIR}/libmkl.so /usr/@LIBDIR@/libblas.so.0
+	EOF
+	cat  > eselect.cblas <<-EOF || die
+		${MKL_LIBDIR}/libmkl_${MKL_KERN}.a /usr/@LIBDIR@/libcblas.a
+		${MKL_LIBDIR}/libmkl.so /usr/@LIBDIR@/libcblas.so
+		${MKL_LIBDIR}/libmkl.so /usr/@LIBDIR@/libcblas.so.0
+		${MKL_DIR}/include/mkl_cblas.h /usr/include/cblas.h
+	EOF
+	cat > eselect.lapack <<-EOF || die
+		${MKL_LIBDIR}/libmkl_lapack.a /usr/@LIBDIR@/liblapack.a
+		${MKL_LIBDIR}/libmkl_lapack.so /usr/@LIBDIR@/liblapack.so
+		${MKL_LIBDIR}/libmkl_lapack.so /usr/@LIBDIR@/liblapack.so.0
+	EOF
+}
+
+# usage: mkl_add_profile <profile> <interface_lib> <thread_lib> <rtl_lib>
+mkl_add_profile() {
+	cd "${S}" || die
+	local prof=${1}
+	local x
+	for x in blas cblas lapack; do
+		cat > ${x}-${prof}.pc <<-EOF || die
+			prefix=${MKL_DIR}
+			libdir=${MKL_LIBDIR}
+			includedir=\${prefix}/include
+			Name: ${x}
+			Description: Intel(R) Math Kernel Library implementation of ${x}
+			Version: ${PV}
+			URL: ${HOMEPAGE}
+		EOF
+	done
+	cat >> blas-${prof}.pc <<-EOF || die
+		Libs: -Wl,--no-as-needed -L\${libdir} ${2} ${3} -lmkl_core ${4} -lpthread
+	EOF
+	cat >> cblas-${prof}.pc <<-EOF || die
+		Requires: blas
+		Libs: -Wl,--no-as-needed -L\${libdir} ${2} ${3} -lmkl_core ${4} -lpthread
+		Cflags: -I\${includedir}
+	EOF
+	cat >> lapack-${prof}.pc <<-EOF || die
+		Requires: blas
+		Libs: -Wl,--no-as-needed -L\${libdir} ${2} ${3} -lmkl_core -lmkl_lapack ${4} -lpthread
+	EOF
+	insinto ${MKL_LIBDIR}
+	for x in blas cblas lapack; do
+		doins ${x}-${prof}.pc
+		cp eselect.${x} eselect.${x}.${prof} || die
+		echo "${MKL_LIBDIR}/${x}-${prof}.pc /usr/@LIBDIR@/pkgconfig/${x}.pc" \
+			>> eselect.${x}.${prof} || die
+		eselect ${x} add $(get_libdir) eselect.${x}.${prof} ${prof}
+	done
+}
+
+mkl_make_profiles() {
+	local clib="gf"
+	has_version 'dev-lang/ifc' && clib+=" intel"
+	local slib="-lmkl_sequential"
+	local rlib="-liomp5"
+	local pbase=${PN}
+	local c
+	for c in ${clib}; do
+		local ilib="-lmkl_${c}_lp64"
+		use x86 && ilib="-lmkl_${c}"
+		local tlib="-lmkl_${c/gf/gnu}_thread"
+		local comp="${c/gf/gfortran}"
+		comp="${comp/intel/ifort}"
+		mkl_add_profile ${pbase}-${comp} ${ilib} ${slib}
+		mkl_add_profile ${pbase}-${comp}-threads ${ilib} ${tlib} ${rlib}
+		if use int64; then
+			ilib="-lmkl_${c}_ilp64"
+			mkl_add_profile ${pbase}-${comp}-int64 ${ilib} ${slib}
+			mkl_add_profile ${pbase}-${comp}-threads-int64 ${ilib} ${tlib} ${rlib}
+		fi
+	done
+}
+
+src_install() {
+	dodir ${MKL_DIR}
+
+	# install license
+	if  [[ ! -f ${INTEL_LIC_DIR}/${MKL_LIC} ]]; then
+		insinto ${INTEL_LIC_DIR}
+		doins "${WORKDIR}"/${MKL_LIC} || die "install license failed"
+	fi
+
+	# install main stuff: cp faster than doins
+	einfo "Installing files..."
+	local cpdirs="benchmarks doc examples include interfaces lib man tests"
+	local doinsdirs="tools"
+	cp -pPR ${cpdirs} "${D}"${MKL_DIR} \
+		|| die "installing mkl failed"
+	insinto ${MKL_DIR}
+	doins -r ${doinsdirs} || die "doins ${doinsdirs} failed"
+	dosym mkl_cblas.h ${MKL_DIR}/include/cblas.h
+
+	# install blas/lapack profiles
+	mkl_make_generic_profile
+	mkl_make_profiles
+
+	# install env variables
+	cat > 35mkl <<-EOF || die
+		MKLROOT=${MKL_DIR}
+		LDPATH=${MKL_LIBDIR}
+		MANPATH=${MKL_DIR}/man
+	EOF
+	doenvd 35mkl
+}
+
+pkg_postinst() {
+	# if blas profile is mkl, set lapack and cblas profiles as mkl
+	local blas_prof=$(eselect blas show | cut -d' ' -f2)
+	local def_prof="mkl-gfortran-threads"
+	local x
+	has_version 'dev-lang/ifc' && def_prof="mkl-ifort-threads"
+	use int64 && def_prof="${def_prof}-int64"
+	for x in blas cblas lapack; do
+		local cur_prof=$(eselect ${x} show | cut -d' ' -f2)
+		if [[ -z ${cur_prof} ||	${cur_prof} == ${def_prof} ]]; then
+			# work around eselect bug #189942
+			local configfile="${ROOT}"/etc/env.d/${x}/$(get_libdir)/config
+			rm -f ${configfile} || die
+			eselect ${x} set ${def_prof}
+			elog "${x} has been eselected to ${def_prof}"
+		else
+			elog "Current eselected ${x} is ${current_lib}"
+			elog "To use one of mkl profiles, issue (as root):"
+			elog "\t eselect ${x} set <profile>"
+		fi
+		if [[ ${blas_prof} == mkl* && ${cur_prof} != ${blas_prof} ]]; then
+			eselect blas set ${def_prof}
+			elog "${x} is now set to ${def_prof} for consistency"
+		fi
+	done
+	if [[ $(gcc-major-version)$(gcc-minor-version) -lt 42 ]]; then
+		elog "Multi-threading OpenMP for GNU compilers only available"
+		elog "with gcc >= 4.2. Make sure you have a compatible version"
+		elog "and select it with gcc-config before selecting gnu profiles"
+	fi
+}


             reply	other threads:[~2016-08-23  8:44 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-08-23  8:44 David Seifert [this message]
  -- strict thread matches above, loose matches on Subject: below --
2024-08-17 21:50 [gentoo-commits] repo/gentoo:master commit in: sci-libs/mkl/ Mike Gilbert
2024-08-04 11:15 Andrew Ammerlaan
2023-02-25  6:52 Andrew Ammerlaan
2022-12-10 19:43 Andrew Ammerlaan
2022-12-10 18:26 Andrew Ammerlaan
2022-12-10 15:46 Andrew Ammerlaan
2022-11-23 18:25 Andrew Ammerlaan
2021-11-29  5:48 Sam James
2020-11-10  3:11 Matthias Maier
2020-11-09 14:38 Benda XU
2020-11-09  7:38 Benda XU
2020-11-09  7:38 Benda XU
2019-09-23 17:16 Michał Górny
2018-05-11 21:56 Patrice Clement
2017-12-10 21:41 Michał Górny
2016-08-23  8:44 David Seifert
2016-03-02 20:44 Justin Lecher
2015-12-29 10:02 Justin Lecher

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1471941822.f01785c65dbcc8af9a890b335be4baaaaed6df03.soap@gentoo \
    --to=soap@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox