3c66c4bf79
This delivers 64 bit index BLAS libraries alongside 32 bit ones. This is often called ILP64 in the BLAS world, as opposed to LP64 where integers are 32 bit due to the Fortran default integer type, not to be confused with the basic system ABI used by C. For really large vectors on modern machines, you want an 'ILP64' BLAS and layers on top of it. In preparation of better support for vendor BLAS libraries, I had to realize that you better use the C interfaces supplied by them, not the netlib one strapped on. A simple reason of practicability: The vendor blas libraries, just like openblas, like to ship all symbols in one library, so you get them whether you want it or not. Also implementations may skip Fortran and implement the underlying functionality directly in C anyway, so one might skip a layer of indirection. Future will tell if other layers will follow. We still have the framework of individual layers from Netlib to combine with certain implementations that miss them (Accelerate framework comes to mind, which needs further work). The framework of netlib reference packages for the separate libraries is instructive and helps keeping things small when you not need all of them. The installation location of the headers is now in a subdirectory to be able to have 32 and 64 bit variants independently. The 32 bit ones are linked to ${PREFIX}/include to keep the old picture. We could be brave and remove those, but there is some value in a build just trying -lcblas and inclusion of <cblas.h> to be happy. There is one blas.buildlink3.mk that is supposed to be used only once and so avoids a combination of conflicting libraries (as the 64 bit index symbols have the same names as the 32 bit ones). Basic usage for getting LAPACK+BLAS is still the same as before. You get CBLAS and LAPACKE by setting BLAS_C_INTERFACE=yes in the package. The 64 bit indices are selected via BLAS_INDEX64=yes. Due to the special nature of the Accelerate framework, a package has to explicitly indicate support for it and it will also not appear on the list of implementations by default. The reason is that it does provide mainly CBLAS and CLAPACK (another version of C interface to LAPACK, f2c-based) and BLAS/LAPACK with f2c/g77 calling conventions. A default build with gfortran would not like that This commit also fixes up math/py-numpy and math/py-numpy16 to follow the new scheme, as that are the only packages directly affected by the change in CBLAS providership.
16 lines
408 B
Makefile
16 lines
408 B
Makefile
# $NetBSD: buildlink3.mk,v 1.1 2021/06/15 04:41:52 thor Exp $
|
|
|
|
BUILDLINK_TREE+= lapack64
|
|
|
|
.if !defined(LAPACK64_BUILDLINK3_MK)
|
|
LAPACK64_BUILDLINK3_MK:=
|
|
|
|
BUILDLINK_API_DEPENDS.lapack64+= lapack64>=3.9.0
|
|
BUILDLINK_ABI_DEPENDS.lapack64+= lapack64>=3.9.0
|
|
BUILDLINK_PKGSRCDIR.lapack64?= ../../math/lapack64
|
|
|
|
.include "../../math/blas64/buildlink3.mk"
|
|
|
|
.endif # LAPACK64_BUILDLINK3_MK
|
|
|
|
BUILDLINK_TREE+= -lapack64
|