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