87edcb24b1
Install the new interchangeable BLAS system created by Thomas Orgis, currently supporting Netlib BLAS/LAPACK, OpenBLAS, cblas, lapacke, and Apple's Accelerate.framework. This system allows the user to select any BLAS implementation without modifying packages or using package options, by setting PKGSRC_BLAS_TYPES in mk.conf. See mk/blas.buildlink3.mk for details. This commit should not alter behavior of existing packages as the system defaults to Netlib BLAS/LAPACK, which until now has been the only supported implementation. Details: Add new mk/blas.buildlink3.mk for inclusion in dependent packages Install compatible Netlib math/blas and math/lapack packages Update math/blas and math/lapack MAINTAINER approved by adam@ OpenBLAS, cblas, and lapacke will follow in separate commits Update direct dependents to use mk/blas.buildlink3.mk Perform recursive revbump
108 lines
3.6 KiB
Makefile
108 lines
3.6 KiB
Makefile
# $NetBSD: blas.buildlink3.mk,v 1.1 2020/10/12 21:51:57 bacon Exp $
|
|
#
|
|
# This Makefile fragment is meant to be included by packages that use any BLAS
|
|
# (Basic Linear Algebra System) implementation instead of one particular one.
|
|
#
|
|
# Since pkgsrc always ships BLAS and LAPACK together (as upstream
|
|
# implementations do), this adds both BLAS_LIBS and LAPACK_LIBS to the linker
|
|
# flags. Often, they will be identical or at least redundant. It is a matter
|
|
# of style to stay consistent in their use.
|
|
#
|
|
# Keywords: blas lapack atlas openblas mkl
|
|
#
|
|
# === User-settable variables ===
|
|
#
|
|
# PKGSRC_BLAS_TYPES
|
|
# This value specifies an exhaustive list of BLAS implementations we wish to
|
|
# use in this pkgsrc installation, in descending order of preference.
|
|
# The implementation selected for a build will be the first one in
|
|
# PKGSRC_BLAS_TYPES that also appears in BLAS_ACCEPTED (see below).
|
|
# Typically set in mk.conf.
|
|
#
|
|
# Possible: one or more of netlib, openblas, openblas_pthread,
|
|
# openblas_openmp, and Apple's accelerate.framework
|
|
# (to come: Intel MKL, other external optimized builds)
|
|
#
|
|
# Default: All currently supported implementations (${_BLAS_TYPES})
|
|
#
|
|
# === Package-settable variables ===
|
|
#
|
|
# BLAS_ACCEPTED
|
|
# This is a list of blas packages that are compatible with the current
|
|
# package. If not set, any BLAS implementation is OK.
|
|
# Typically set in package Makefile.
|
|
#
|
|
# === Variables automatically set here for use in package builds ===
|
|
#
|
|
# BLAS_TYPE
|
|
# This is the BLAS implementation chosen for a particular package build from
|
|
# PKGSRC_BLAS_TYPES and BLAS_ACCEPTED. If PKGSRC_BLAS_TYPES and
|
|
# BLAS_ACCEPTED have no implementations in common, it defaults to none
|
|
# and the build fails.
|
|
# BLAS_LIBS
|
|
# Linker flags used for linking to BLAS library
|
|
# LAPACK_LIBS
|
|
# Linker flags used for linking to LAPACK library
|
|
|
|
.if !defined(MK_BLAS_BUILDLINK3_MK)
|
|
MK_BLAS_BUILDLINK3_MK=
|
|
|
|
BUILD_DEFS+= PKGSRC_BLAS_TYPES
|
|
BUILD_DEFS_EFFECTS+= BLAS_TYPE BLAS_LIBS LAPACK_LIBS
|
|
|
|
# TODO: Upon commit change to: .include "bsd.prefs.mk"
|
|
.include "../../mk/bsd.prefs.mk"
|
|
|
|
# List of all possible BLAS choices, in order of *DEFAULT* preference.
|
|
# netlib is the reference implementation to which all others conform and
|
|
# should come first by default for maximum compatibility. It is also the
|
|
# slowest and not desirable in many situations. Users can override by setting
|
|
# PKGSRC_BLAS_TYPES. (See comment above)
|
|
_BLAS_TYPES= netlib openblas openblas_pthread openblas_openmp
|
|
# Darwin
|
|
.if exists(/System/Library/Frameworks/Accelerate.framework)
|
|
_BLAS_TYPES+= accelerate.framework
|
|
.endif
|
|
|
|
BLAS_ACCEPTED?= ${_BLAS_TYPES}
|
|
PKGSRC_BLAS_TYPES?= ${_BLAS_TYPES}
|
|
|
|
_BLAS_MATCH=
|
|
.for b in ${PKGSRC_BLAS_TYPES}
|
|
_BLAS_MATCH+= ${BLAS_ACCEPTED:M${b}}
|
|
.endfor
|
|
.if !empty(_BLAS_MATCH)
|
|
BLAS_TYPE= ${_BLAS_MATCH:[1]}
|
|
.else
|
|
BLAS_TYPE= none
|
|
.endif
|
|
|
|
.if ${BLAS_TYPE} == "netlib"
|
|
_BLAS_PKGPATH= math/lapack
|
|
BLAS_LIBS= -lblas
|
|
LAPACK_LIBS= -llapack ${BLAS_LIBS}
|
|
.elif ${BLAS_TYPE} == "openblas"
|
|
_BLAS_PKGPATH= math/openblas
|
|
BLAS_LIBS= -lopenblas
|
|
LAPACK_LIBS= ${BLAS_LIBS}
|
|
.elif ${BLAS_TYPE} == "openblas_pthread"
|
|
_BLAS_PKGPATH= math/openblas_pthread
|
|
BLAS_LIBS= -lopenblas_pthread
|
|
LAPACK_LIBS= ${BLAS_LIBS}
|
|
.elif ${BLAS_TYPE} == "openblas_openmp"
|
|
_BLAS_PKGPATH= math/openblas_openmp
|
|
BLAS_LIBS= -lopenblas_openmp
|
|
LAPACK_LIBS= ${BLAS_LIBS}
|
|
.elif ${BLAS_TYPE} == "accelerate.framework"
|
|
BLAS_LIBS= -framework Accelerate
|
|
LAPACK_LIBS= ${BLAS_LIBS}
|
|
.else # invalid or unimplemented type
|
|
PKG_FAIL_REASON+= \
|
|
"There is no acceptable BLAS for ${PKGNAME} in: ${PKGSRC_BLAS_TYPES}."
|
|
.endif
|
|
|
|
.if defined(_BLAS_PKGPATH)
|
|
.include "../../${_BLAS_PKGPATH}/buildlink3.mk"
|
|
.endif
|
|
|
|
.endif # BLAS_BUILDLINK3_MK
|