commit: 7fcc36e404a535776e7d53f1e0bcac3e36a33f38 Author: Denis Dupeyron <calchan <AT> gentoo <DOT> org> AuthorDate: Fri Mar 27 20:24:53 2015 +0000 Commit: Denis Dupeyron <calchan <AT> gentoo <DOT> org> CommitDate: Fri Mar 27 20:24:53 2015 +0000 URL: https://gitweb.gentoo.org/proj/sci.git/commit/?id=7fcc36e4
sci-libs/openblas: version bump sci-libs/openblas/ChangeLog | 7 +- sci-libs/openblas/openblas-0.2.14.ebuild | 227 +++++++++++++++++++++++++++++++ 2 files changed, 233 insertions(+), 1 deletion(-) diff --git a/sci-libs/openblas/ChangeLog b/sci-libs/openblas/ChangeLog index fee0835..1f27f12 100644 --- a/sci-libs/openblas/ChangeLog +++ b/sci-libs/openblas/ChangeLog @@ -1,7 +1,12 @@ # ChangeLog for sci-libs/openblas -# Copyright 1999-2014 Gentoo Foundation; Distributed under the GPL v2 +# Copyright 1999-2015 Gentoo Foundation; Distributed under the GPL v2 # $Header: $ +*openblas-0.2.14 (27 Mar 2015) + + 27 Mar 2015; Denis Dupeyron <calc...@gentoo.org> +openblas-0.2.14.ebuild: + Version bump. + 20 Oct 2014; Mark Wright <gie...@gentoo.org> openblas-9999.ebuild: Thanks to kiwifb for reporting https://github.com/gentoo-science/sci/issues/280 - Fix openblas: discrepancy diff --git a/sci-libs/openblas/openblas-0.2.14.ebuild b/sci-libs/openblas/openblas-0.2.14.ebuild new file mode 100644 index 0000000..2b5f76d --- /dev/null +++ b/sci-libs/openblas/openblas-0.2.14.ebuild @@ -0,0 +1,227 @@ +# Copyright 1999-2015 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI=5 + +EBASE_PROFNAME="openblas" +inherit alternatives-2 eutils fortran-2 multibuild multilib-build toolchain-funcs fortran-int64 + +SRC_URI+="http://dev.gentoo.org/~gienah/distfiles/${PN}-0.2.11-gentoo.patch" +if [[ ${PV} == "9999" ]] ; then + EGIT_REPO_URI="https://github.com/xianyi/OpenBLAS.git" + EGIT_BRANCH="develop" + inherit git-r3 + KEYWORDS="" +else + SRC_URI+=" http://github.com/xianyi/OpenBLAS/tarball/v${PV} -> ${P}.tar.gz" + KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux ~x86-macos ~ppc-macos ~x64-macos" +fi + +DESCRIPTION="Optimized BLAS library based on GotoBLAS2" +HOMEPAGE="http://xianyi.github.com/OpenBLAS/" +LICENSE="BSD" +SLOT="0" +IUSE="dynamic int64 openmp static-libs threads" + +RDEPEND="" +DEPEND="${RDEPEND} + virtual/pkgconfig" +PDEPEND=" + >=virtual/blas-2.1-r2[int64?] + >=virtual/cblas-2.0-r1[int64?]" + +MULTILIB_WRAPPED_HEADERS=( + /usr/include/openblas/cblas.h + /usr/include/openblas/f77blas.h + /usr/include/openblas/openblas_config.h +) + +get_openblas_flags() { + local openblas_flags="" + use dynamic && \ + openblas_flags+=" DYNAMIC_ARCH=1 TARGET=GENERIC NUM_THREADS=64 NO_AFFINITY=1" + $(fortran-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_THREAD=0 USE_OPENMP=1" + fi + local profname=$(fortran-int64_get_profname) + local libname="${profname//-/_}" + local underscoresuffix="${libname#${PN}}" + if [[ "${underscoresuffix}" != "_" ]]; then + local libnamesuffix="${underscoresuffix#_}" + openblas_flags+=" LIBNAMESUFFIX=${libnamesuffix}" + fi + echo "${openblas_flags}" +} + +get_openblas_abi_cflags() { + local openblas_abi_cflags="" + if [[ "${ABI}" == "x86" ]]; then + openblas_abi_cflags="-DOPENBLAS_ARCH_X86=1 -DOPENBLAS___32BIT__=1" + else + openblas_abi_cflags="-DOPENBLAS_ARCH_X86_64=1 -DOPENBLAS___64BIT__=1" + fi + $(fortran-int64_is_int64_build) && \ + openblas_abi_cflags+=" -DOPENBLAS_USE64BITINT" + echo "${openblas_abi_cflags}" +} + +src_unpack() { + if [[ ${PV} == "9999" ]] ; then + git-r3_src_unpack + else + default + if [[ ${PV} != "9999" ]] ; then + find "${WORKDIR}" -maxdepth 1 -type d -name \*OpenBLAS\* && \ + mv "${WORKDIR}"/*OpenBLAS* "${S}" + fi + fi +} + +src_prepare() { + local MULTIBUILD_VARIANTS=( $(fortran-int64_multilib_get_enabled_abis) ) + epatch "${DISTDIR}/${PN}-0.2.11-gentoo.patch" + if [[ ${PV} == "0.2.11" ]] ; then + epatch "${FILESDIR}/${PN}-0.2.11-cpuid_x86.patch" + fi + # 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 + multibuild_copy_sources +} + +src_configure() { + local MULTIBUILD_VARIANTS=( $(fortran-int64_multilib_get_enabled_abis) ) + my_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 + } + multibuild_foreach_variant run_in_build_dir fortran-int64_multilib_multibuild_wrapper my_configure +} + +src_compile() { + local MULTIBUILD_VARIANTS=( $(fortran-int64_multilib_get_enabled_abis) ) + # openblas already does multi-jobs + MAKEOPTS+=" -j1" + my_src_compile () { + local openblas_flags=$(get_openblas_flags) + local profname=$(fortran-int64_get_profname) + local libname="${profname//-/_}" + einfo "Compiling profile ${profname}" + # cflags already defined twice + unset CFLAGS + emake clean + emake libs shared ${openblas_flags} + mkdir -p libs && mv libopenblas* libs/ + # 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/ + fi + # Fix Bug 524612 - [science overlay] sci-libs/openblas-0.2.11 - Assembler messages: + # ../kernel/x86_64/gemm_kernel_8x4_barcelona.S:451: Error: missing ')' + # The problem is applying this patch in src_prepare() causes build failures on + # assembler code as the assembler does not understand sizeof(float). So + # delay applying the patch until after building the libraries. + epatch "${FILESDIR}/${PN}-0.2.11-openblas_config_header_same_between_ABIs.patch" + rm -f config.h config_last.h + # Note: prints this spurious warning: make: Nothing to be done for 'config.h'. + emake config.h + cp config.h config_last.h || die + cat <<-EOF > ${profname}.pc + prefix=${EPREFIX}/usr + libdir=\${prefix}/$(get_libdir) + includedir=\${prefix}/include + Name: ${profname} + Description: ${DESCRIPTION} + Version: ${PV} + URL: ${HOMEPAGE} + Libs: -L\${libdir} -l${libname} + Libs.private: -lm + EOF + local openblas_abi_cflags=$(get_openblas_abi_cflags) + local openblas_abi_fflags=$(fortran-int64_get_fortran_int64_abi_fflags) + cat <<-EOF >> ${profname}.pc + Cflags: -I\${includedir}/${PN} ${openblas_abi_cflags} + Fflags=${openblas_abi_fflags} + EOF + mv libs/libopenblas* . || die + } + multibuild_foreach_variant run_in_build_dir fortran-int64_multilib_multibuild_wrapper my_src_compile +} + +src_test() { + local MULTIBUILD_VARIANTS=( $(fortran-int64_multilib_get_enabled_abis) ) + my_src_test () { + local openblas_flags=$(get_openblas_flags) + emake tests ${openblas_flags} + } + multibuild_foreach_variant run_in_build_dir fortran-int64_multilib_multibuild_wrapper my_src_test +} + +src_install() { + local MULTIBUILD_VARIANTS=( $(fortran-int64_multilib_get_enabled_abis) ) + my_src_install() { + local openblas_flags=$(get_openblas_flags) + local profname=$(fortran-int64_get_profname) + local pcfile + for pcfile in *.pc; do + local profname=${pcfile%.pc} + # 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) + use static-libs || rm "${ED}"usr/$(get_libdir)/lib*.a + alternatives_for $(fortran-int64_get_blas_provider) ${profname} 0 \ + /usr/$(get_libdir)/pkgconfig/$(fortran-int64_get_blas_provider).pc ${pcfile} + alternatives_for $(fortran-int64_get_cblas_provider) ${profname} 0 \ + /usr/$(get_libdir)/pkgconfig/$(fortran-int64_get_cblas_provider).pc ${pcfile} \ + /usr/include/cblas.h ${PN}/cblas.h + insinto /usr/$(get_libdir)/pkgconfig + doins ${pcfile} + done + + if [[ ${CHOST} == *-darwin* ]] ; then + cd "${ED}"/usr/$(get_libdir) + local d + for d in *.dylib ; do + ebegin "Correcting install_name of ${d}" + install_name_tool -id "${EPREFIX}/usr/$(get_libdir)/${d}" "${d}" + eend $? + done + fi + if [[ ${#MULTIBUILD_VARIANTS[@]} -gt 1 ]]; then + multilib_prepare_wrappers + multilib_check_headers + fi + } + multibuild_foreach_variant run_in_build_dir fortran-int64_multilib_multibuild_wrapper my_src_install + multilib_install_wrappers + + dodoc GotoBLAS_{01Readme,03FAQ,04FAQ,05LargePage,06WeirdPerformance}.txt + dodoc *md Changelog.txt +}