commit: bb7078923091f3a7e8acddde6a84b3acafd28c5b Author: François Bissey <francois.bissey <AT> canterbury <DOT> ac <DOT> nz> AuthorDate: Thu Apr 27 12:46:26 2017 +0000 Commit: Justin Lecher <jlec <AT> gentoo <DOT> org> CommitDate: Thu Apr 27 12:46:26 2017 +0000 URL: https://gitweb.gentoo.org/proj/sci.git/commit/?id=bb707892
sci-libs/openblas: Bump openblas to 0.2.19 (#779) * sci-libs/openblas: Bump openblas to latest Package-Manager: portage-2.3.3 * sci-libs/openblas: add a few upstreamed patches Package-Manager: portage-2.3.3 sci-libs/openblas/files/openblas-0.2.19-MAKE.patch | 29 +++ .../files/openblas-0.2.19-utest_ldflags.patch | 13 ++ sci-libs/openblas/openblas-0.2.19.ebuild | 199 +++++++++++++++++++++ 3 files changed, 241 insertions(+) diff --git a/sci-libs/openblas/files/openblas-0.2.19-MAKE.patch b/sci-libs/openblas/files/openblas-0.2.19-MAKE.patch new file mode 100644 index 000000000..c77dd0f93 --- /dev/null +++ b/sci-libs/openblas/files/openblas-0.2.19-MAKE.patch @@ -0,0 +1,29 @@ +diff --git a/Makefile b/Makefile +index 2ae0047..2071e10 100644 +--- a/Makefile ++++ b/Makefile +@@ -278,13 +278,13 @@ lapack-timing : large.tgz timing.tgz + ifndef NOFORTRAN + (cd $(NETLIB_LAPACK_DIR); $(TAR) zxf ../timing.tgz TIMING) + (cd $(NETLIB_LAPACK_DIR)/TIMING; $(TAR) zxf ../../large.tgz ) +- make -C $(NETLIB_LAPACK_DIR)/TIMING ++ $(MAKE) -C $(NETLIB_LAPACK_DIR)/TIMING + endif + + + lapack-test : + (cd $(NETLIB_LAPACK_DIR)/TESTING && rm -f x* *.out) +- make -j 1 -C $(NETLIB_LAPACK_DIR)/TESTING xeigtstc xeigtstd xeigtsts xeigtstz xlintstc xlintstd xlintstds xlintstrfd xlintstrfz xlintsts xlintstz xlintstzc xlintstrfs xlintstrfc ++ $(MAKE) -j 1 -C $(NETLIB_LAPACK_DIR)/TESTING xeigtstc xeigtstd xeigtsts xeigtstz xlintstc xlintstd xlintstds xlintstrfd xlintstrfz xlintsts xlintstz xlintstzc xlintstrfs xlintstrfc + ifneq ($(CROSS), 1) + ( cd $(NETLIB_LAPACK_DIR)/INSTALL; ./testlsame; ./testslamch; ./testdlamch; \ + ./testsecond; ./testdsecnd; ./testieee; ./testversion ) +@@ -299,7 +299,7 @@ lapack-runtest: + + blas-test: + (cd $(NETLIB_LAPACK_DIR)/BLAS && rm -f x* *.out) +- make -j 1 -C $(NETLIB_LAPACK_DIR) blas_testing ++ $(MAKE) -j 1 -C $(NETLIB_LAPACK_DIR) blas_testing + (cd $(NETLIB_LAPACK_DIR)/BLAS && cat *.out) + + diff --git a/sci-libs/openblas/files/openblas-0.2.19-utest_ldflags.patch b/sci-libs/openblas/files/openblas-0.2.19-utest_ldflags.patch new file mode 100644 index 000000000..2ffd5babe --- /dev/null +++ b/sci-libs/openblas/files/openblas-0.2.19-utest_ldflags.patch @@ -0,0 +1,13 @@ +diff --git a/utest/Makefile b/utest/Makefile +index 3ccc0a0..ce809e3 100644 +--- a/utest/Makefile ++++ b/utest/Makefile +@@ -18,7 +18,7 @@ endif + all : run_test + + $(UTESTBIN): $(OBJS) +- $(CC) $(CFLAGS) -o $@ $^ ../$(LIBNAME) $(EXTRALIB) $(FEXTRALIB) ++ $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ ../$(LIBNAME) $(EXTRALIB) $(FEXTRALIB) + + run_test: $(UTESTBIN) + ifndef CROSS diff --git a/sci-libs/openblas/openblas-0.2.19.ebuild b/sci-libs/openblas/openblas-0.2.19.ebuild new file mode 100644 index 000000000..3ff5f8502 --- /dev/null +++ b/sci-libs/openblas/openblas-0.2.19.ebuild @@ -0,0 +1,199 @@ +# Copyright 1999-2017 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +EAPI=6 + +NUMERIC_MODULE_NAME="openblas" + +inherit alternatives-2 eutils multilib numeric numeric-int64-multibuild + +DESCRIPTION="Optimized BLAS library based on GotoBLAS2" +HOMEPAGE="http://xianyi.github.com/OpenBLAS/" +SRC_URI="http://github.com/xianyi/OpenBLAS/tarball/v${PV} -> ${P}.tar.gz + http://sagetrac.lipn.univ-paris13.fr/sage/${PN}-0.2.19-clang-3.9.patch" + +LICENSE="BSD" +SLOT="0" +KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux ~x86-macos ~ppc64 ~x64-macos" +IUSE="dynamic openmp static-libs threads" + +RDEPEND="" +DEPEND="${RDEPEND} + virtual/pkgconfig" + +MULTILIB_WRAPPED_HEADERS=( + /usr/include/openblas/cblas.h + /usr/include/openblas/f77blas.h + /usr/include/openblas/openblas_config.h +) + +PATCHES=( + "${DISTDIR}"/${PN}-0.2.19-clang-3.9.patch + "${FILESDIR}"/${PN}-0.2.19-MAKE.patch + "${FILESDIR}"/${PN}-0.2.19-utest_ldflags.patch + ) + +get_openblas_flags() { + local openblas_flags=() + use dynamic && \ + openblas_flags+=( DYNAMIC_ARCH=1 TARGET=GENERIC NUM_THREADS=64 NO_AFFINITY=1 ) + $(numeric-int64_is_int64_build) && \ + openblas_flags+=( INTERFACE64=1 ) + # choose posix threads over openmp when the two are set + # yet to see the need of having the two profiles simultaneously + if use threads; then + openblas_flags+=( USE_THREAD=1 USE_OPENMP=0 ) + elif use openmp; then + openblas_flags+=( USE_OPENMP=1 ) + fi + local profname=$(numeric-int64_get_module_name) + local libname="${profname//-/_}" + local underscoresuffix="${libname#${PN}}" + if [[ "${underscoresuffix}" != "_" ]]; then + local libnamesuffix="${underscoresuffix#_}" + openblas_flags+=( LIBNAMESUFFIX=${libnamesuffix} ) + fi + + [[ "${ABI}" == "x86" ]] && openblas_flags+=( BINARY=32 ) + + echo "${openblas_flags[@]}" +} + +get_openblas_abi_cflags() { + local openblas_abi_cflags=() + if [[ "${ABI}" == "x86" ]]; then + openblas_abi_cflags=( -DARCH_X86=1 -DOPENBLAS___32BIT__=1 ) + elif [[ "${ABI}" == "amd64" ]]; then + openblas_abi_cflags=( -DARCH_X86_64=1 -DOPENBLAS___64BIT__=1 ) + elif [[ "${ABI}" == "ppc64" ]]; then + openblas_abi_cflags=( -DARCH_POWER=1 -DOPENBLAS___64BIT__=1 ) + else + die "unsupported abi: ${ABI}" + fi + $(numeric-int64_is_int64_build) && \ + openblas_abi_cflags+=( -DOPENBLAS_USE64BITINT ) + use openmp && openblas_abi_cflags+=( -fopenmp ) + echo "${openblas_abi_cflags[@]}" +} + +src_unpack() { + default + find "${WORKDIR}" -maxdepth 1 -type d -name \*OpenBLAS\* && \ + mv "${WORKDIR}"/*OpenBLAS* "${S}" || die +} + +src_prepare() { + default + + # lapack and lapacke are not modified from upstream lapack + sed \ + -e "s:^#\s*\(NO_LAPACK\)\s*=.*:\1=1:" \ + -e "s:^#\s*\(NO_LAPACKE\)\s*=.*:\1=1:" \ + -i Makefile.rule || die + numeric-int64-multibuild_copy_sources +} + +src_configure() { + blas_configure() { + local openblas_abi_cflags="$(get_openblas_abi_cflags)" + local internal_openblas_abi_cflags="${openblas_abi_cflags//OPENBLAS_}" + sed \ + -e "s:^#\s*\(CC\)\s*=.*:\1=$(tc-getCC) $(get_abi_CFLAGS):" \ + -e "s:^#\s*\(FC\)\s*=.*:\1=$(tc-getFC) $(get_abi_CFLAGS):" \ + -e "s:^#\s*\(COMMON_OPT\)\s*=.*:\1=${CFLAGS} ${internal_openblas_abi_cflags}:" \ + -i Makefile.rule || die + } + numeric-int64-multibuild_foreach_all_abi_variants run_in_build_dir blas_configure +} + +src_compile() { + # openblas already does multi-jobs + MAKEOPTS+=" -j1" + my_src_compile () { + local openblas_flags=$(get_openblas_flags) + # cflags already defined twice + unset CFLAGS || die + emake clean && emake libs shared ${openblas_flags} + mkdir -p libs && mv libopenblas* libs/ ||??die + # avoid pic when compiling static libraries, so re-compiling + if use static-libs; then + emake clean + emake libs ${openblas_flags} NO_SHARED=1 NEED_PIC= + mv libopenblas* libs/ ||??die + fi + rm -f config.h config_last.h || die + # Note: prints this spurious warning: make: Nothing to be done for 'config.h'. + emake config.h + cp config.h config_last.h || die + + mv libs/libopenblas* . || die + } + numeric-int64-multibuild_foreach_all_abi_variants run_in_build_dir my_src_compile +} + +src_test() { + my_src_test () { + local openblas_flags=$(get_openblas_flags) + emake tests ${openblas_flags} + } + numeric-int64-multibuild_foreach_all_abi_variants run_in_build_dir my_src_test +} + +src_install() { + my_src_install() { + local openblas_flags=$(get_openblas_flags) + local profname=$(numeric-int64_get_module_name) + local pcfile + # The file /usr/include/openblas/openblas_config.h is generated during the install. + # The sed on config_last.h removes the #define's OPENBLAS_USE64BITINT + # OPENBLASS__32BIT__ OPENBLASS__64BIT__ OPENBLAS__ARCH_X86 OPENBLAS__ARCH_X86_64 + # from /usr/include/openblas/openblas_config.h. We then specify it in Cflags in + # the /usr/lib64/pkg-config/openblas-int64-{threads,openmp}.pc file. + sed -e '/#define USE64BITINT/d' \ + -e '/#define ARCH_X86/d' \ + -e '/#define __\(32\|64\)BIT__/d' \ + -i config_last.h \ + || die "Could not ensure there is no definition of USE64BITINT in config_last.h" + emake install \ + PREFIX="${ED}"usr ${openblas_flags} \ + OPENBLAS_INCLUDE_DIR="${ED}"usr/include/${PN} \ + OPENBLAS_LIBRARY_DIR="${ED}"usr/$(get_libdir) + if ! use static-libs; then + rm "${ED}"usr/$(get_libdir)/lib*.a || die + fi + + local openblas_abi_cflags=$(get_openblas_abi_cflags) + local openblas_abi_fflags=$(numeric-int64_get_fortran_int64_abi_fflags) + local libname="${profname//-/_}" + + create_pkgconfig \ + --name "${profname}" \ + --libs "-L\${libdir} -l${libname}" \ + --libs-private "-lm" \ + --cflags "-I\${includedir}/${PN} ${openblas_abi_cflags}" \ + ${profname} + + if [[ ${CHOST} == *-darwin* ]] ; then + cd "${ED}"/usr/$(get_libdir) ||??die + local d + for d in *.dylib; do + ebegin "Correcting install_name of ${d}" + install_name_tool -id "${EPREFIX}/usr/$(get_libdir)/${d}" "${d}" || die + eend $? + done + fi + if [[ ${#MULTIBUILD_VARIANTS[@]} -gt 1 ]]; then + multilib_prepare_wrappers + multilib_check_headers + fi + } + numeric-int64-multibuild_foreach_all_abi_variants run_in_build_dir my_src_install + + printf "/usr/include/cblas.h ${PN}/cblas.h" > "${T}"/alternative-cblas-generic.sh ||??die + numeric-int64-multibuild_install_alternative blas ${NUMERIC_MODULE_NAME} + numeric-int64-multibuild_install_alternative cblas ${NUMERIC_MODULE_NAME} + + multilib_install_wrappers + + dodoc GotoBLAS_{01Readme,03FAQ,04FAQ,05LargePage,06WeirdPerformance}.txt *md Changelog.txt +}