xref: /OK3568_Linux_fs/buildroot/package/openblas/openblas.mk (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun################################################################################
2*4882a593Smuzhiyun#
3*4882a593Smuzhiyun# openblas
4*4882a593Smuzhiyun#
5*4882a593Smuzhiyun################################################################################
6*4882a593Smuzhiyun
7*4882a593SmuzhiyunOPENBLAS_VERSION = 0.3.9
8*4882a593SmuzhiyunOPENBLAS_SITE = $(call github,xianyi,OpenBLAS,v$(OPENBLAS_VERSION))
9*4882a593SmuzhiyunOPENBLAS_LICENSE = BSD-3-Clause
10*4882a593SmuzhiyunOPENBLAS_LICENSE_FILES = LICENSE
11*4882a593SmuzhiyunOPENBLAS_INSTALL_STAGING = YES
12*4882a593Smuzhiyun
13*4882a593Smuzhiyun# Initialise OpenBLAS make options to $(TARGET_CONFIGURE_OPTS)
14*4882a593SmuzhiyunOPENBLAS_MAKE_OPTS = $(TARGET_CONFIGURE_OPTS)
15*4882a593Smuzhiyun
16*4882a593Smuzhiyun# Enable cross-compiling
17*4882a593SmuzhiyunOPENBLAS_MAKE_OPTS += CROSS=1
18*4882a593Smuzhiyun
19*4882a593Smuzhiyun# Set OpenBLAS target
20*4882a593SmuzhiyunOPENBLAS_MAKE_OPTS += TARGET=$(BR2_PACKAGE_OPENBLAS_TARGET)
21*4882a593Smuzhiyun
22*4882a593Smuzhiyun# When Fortran is not available, only build the C version of BLAS
23*4882a593Smuzhiyunifeq ($(BR2_TOOLCHAIN_HAS_FORTRAN),)
24*4882a593SmuzhiyunOPENBLAS_MAKE_OPTS += ONLY_CBLAS=1
25*4882a593Smuzhiyunendif
26*4882a593Smuzhiyun
27*4882a593Smuzhiyun# Enable/Disable multi-threading (not for static-only since it uses dlfcn.h)
28*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_OPENBLAS_USE_THREAD),y)
29*4882a593SmuzhiyunOPENBLAS_MAKE_OPTS += USE_THREAD=1
30*4882a593Smuzhiyunelse
31*4882a593SmuzhiyunOPENBLAS_MAKE_OPTS += USE_THREAD=0
32*4882a593Smuzhiyunendif
33*4882a593Smuzhiyun
34*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_OPENBLAS_USE_LOCKING),y)
35*4882a593SmuzhiyunOPENBLAS_MAKE_OPTS += USE_LOCKING=1
36*4882a593Smuzhiyunelse
37*4882a593Smuzhiyun# not passing USE_LOCKING=0 as this could be confusing: its effect is implicit
38*4882a593Smuzhiyun# in case of USE_THREAD=1.
39*4882a593Smuzhiyunendif
40*4882a593Smuzhiyun
41*4882a593Smuzhiyun# We don't know if OpenMP is available or not, so disable
42*4882a593SmuzhiyunOPENBLAS_MAKE_OPTS += USE_OPENMP=0
43*4882a593Smuzhiyun
44*4882a593Smuzhiyun# Static-only/Shared-only toggle
45*4882a593Smuzhiyun# Note: static library is always generated so that applications can link
46*4882a593Smuzhiyun# statically for size reduction, even if BR2_STATIC_LIBS is not set.
47*4882a593Smuzhiyunifeq ($(BR2_STATIC_LIBS),y)
48*4882a593SmuzhiyunOPENBLAS_MAKE_OPTS += NO_SHARED=1
49*4882a593Smuzhiyunendif
50*4882a593Smuzhiyun
51*4882a593Smuzhiyun# binutils version <= 2.23.2 has a bug
52*4882a593Smuzhiyun# (https://sourceware.org/bugzilla/show_bug.cgi?id=14887) where
53*4882a593Smuzhiyun# whitespaces in ARM register specifications such as [ r1, #12 ] or [
54*4882a593Smuzhiyun# r2 ] cause the assembler to reject the code. Since there are
55*4882a593Smuzhiyun# numerous instances of such cases in the code, we use sed rather than
56*4882a593Smuzhiyun# a patch. We simply replace [ foobar ] by [foobar] to work around the
57*4882a593Smuzhiyun# problem.
58*4882a593Smuzhiyundefine OPENBLAS_FIXUP_ARM_ASSEMBLY
59*4882a593Smuzhiyun	$(SED) 's%\[\s*%\[%;s%\s*\]%\]%' $(@D)/kernel/arm/*.S
60*4882a593Smuzhiyunendef
61*4882a593Smuzhiyun
62*4882a593SmuzhiyunOPENBLAS_POST_PATCH_HOOKS += OPENBLAS_FIXUP_ARM_ASSEMBLY
63*4882a593Smuzhiyun
64*4882a593Smuzhiyundefine OPENBLAS_BUILD_CMDS
65*4882a593Smuzhiyun	$(TARGET_MAKE_ENV) $(MAKE) $(OPENBLAS_MAKE_OPTS) \
66*4882a593Smuzhiyun		-C $(@D)
67*4882a593Smuzhiyunendef
68*4882a593Smuzhiyun
69*4882a593Smuzhiyundefine OPENBLAS_INSTALL_STAGING_CMDS
70*4882a593Smuzhiyun	$(TARGET_MAKE_ENV) $(MAKE) $(OPENBLAS_MAKE_OPTS) \
71*4882a593Smuzhiyun		-C $(@D) install PREFIX=$(STAGING_DIR)/usr
72*4882a593Smuzhiyunendef
73*4882a593Smuzhiyun
74*4882a593Smuzhiyundefine OPENBLAS_INSTALL_TARGET_CMDS
75*4882a593Smuzhiyun	$(TARGET_MAKE_ENV) $(MAKE) $(OPENBLAS_MAKE_OPTS) \
76*4882a593Smuzhiyun		-C $(@D) install PREFIX=$(TARGET_DIR)/usr
77*4882a593Smuzhiyunendef
78*4882a593Smuzhiyun
79*4882a593Smuzhiyun$(eval $(generic-package))
80