# Copyright 1999-2022 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 EAPI=8 FORTRAN_STANDARD="77 90" PYTHON_COMPAT=( python3_{8..11} ) inherit cmake fortran-2 python-any-r1 toolchain-funcs MY_PV=$(ver_rs 3 '-') DESCRIPTION="Matrix Algebra on GPU and Multicore Architectures" HOMEPAGE=" https://icl.cs.utk.edu/magma/ https://bitbucket.org/icl/magma " SRC_URI="https://icl.cs.utk.edu/projectsfiles/${PN}/downloads/${PN}-${MY_PV}.tar.gz" LICENSE="BSD" SLOT="0" KEYWORDS="~amd64" IUSE_AMDGPU=" amdgpu_gfx600 amdgpu_gfx601 amdgpu_gfx602 amdgpu_gfx700 amdgpu_gfx701 amdgpu_gfx702 amdgpu_gfx703 amdgpu_gfx704 amdgpu_gfx705 amdgpu_gfx801 amdgpu_gfx802 amdgpu_gfx803 amdgpu_gfx805 amdgpu_gfx810 amdgpu_gfx900 amdgpu_gfx902 amdgpu_gfx904 amdgpu_gfx906 amdgpu_gfx908 amdgpu_gfx909 amdgpu_gfx90a amdgpu_gfx90c amdgpu_gfx940 amdgpu_gfx1010 amdgpu_gfx1011 amdgpu_gfx1012 amdgpu_gfx1013 amdgpu_gfx1030 amdgpu_gfx1031 amdgpu_gfx1032 amdgpu_gfx1033 amdgpu_gfx1034 amdgpu_gfx1035 amdgpu_gfx1036 amdgpu_gfx1100 amdgpu_gfx1101 amdgpu_gfx1102 amdgpu_gfx1103 " IUSE="doc openblas test ${IUSE_AMDGPU}" # TODO: do not enforce openblas RDEPEND=" openblas? ( sci-libs/openblas ) !openblas? ( virtual/blas virtual/lapack ) " DEPEND=" ${RDEPEND} ${PYTHON_DEPS} dev-util/hip " BDEPEND=" virtual/pkgconfig doc? ( >=app-doc/doxygen-1.8.14-r1[dot] ) " REQUIRED_USE="|| ( ${IUSE_AMDGPU/+/} )" RESTRICT="!test? ( test )" pkg_setup() { fortran-2_pkg_setup python-any-r1_pkg_setup tc-check-openmp || die "Need OpenMP to compile ${P}" } src_prepare() { rm -r blas_fix || die # distributed pc file not so useful so replace it cat <<-EOF > ${PN}.pc prefix=${EPREFIX}/usr libdir=\${prefix}/$(get_libdir) includedir=\${prefix}/include/${PN} Name: ${PN} Description: ${DESCRIPTION} Version: ${PV} URL: ${HOMEPAGE} Libs: -L\${libdir} -lmagma Libs.private: -lm -lpthread -ldl Cflags: -I\${includedir} Requires: $(usex openblas "openblas" "blas lapack") EOF echo -e 'BACKEND = hip\nFORT = true' > make.inc emake generate cmake_src_prepare } src_configure() { # other options: Intel10_64lp, Intel10_64lp_seq, Intel10_64ilp, Intel10_64ilp_seq, Intel10_32, FLAME, ACML, Apple, NAS local blasvendor="Generic" use openblas && blasvendor="OpenBLAS" local gpu="" for u in ${IUSE_AMDGPU} ; do if use ${u} ; then gpu="${gpu},${u/amdgpu_/}" fi done #remove first character (,) gpu="${gpu:1}" local mycmakeargs=( -DBUILD_SHARED_LIBS=ON -DCMAKE_CXX_COMPILER=hipcc -DMAGMA_ENABLE_CUDA=OFF -DMAGMA_ENABLE_HIP=ON -DUSE_FORTRAN=ON -DBLA_VENDOR=${blasvendor} -DGPU_TARGET=${gpu} ) #use fortran || mycmakeargs+=( "-DFORTRAN_CONVENTION=-DADD_" #use hip && mycmakeargs+=( "-DCMAKE_CXX_COMPILER=hipcc" ) cmake_src_configure } src_compile() { cmake_src_compile } src_install() { cmake_src_install insinto /usr/include/${PN} doins include/*.h insinto /usr/$(get_libdir)/pkgconfig doins ${PN}.pc local DOCS=( README ReleaseNotes ) use doc && local HTML_DOCS=( docs/html/. ) einstalldocs }