kumquat-buildroot/package/openblas/openblas.mk
Thomas De Schampheleire 8dd9bbda35 package/openblas: install static library even if BR2_STATIC_LIBS is not set
openblas has options 'NO_STATIC' and 'NO_SHARED' to steer the installation
of libopenblas.a and libopenblas.so. But this does not impact anything in
the build process, other than copying the respective file to the output
directory.

As openblas is very large (e.g. 3MB on ARM) but applications may only use a
small part of it, such applications may want to link statically with
openblas, even though the global BR2_STATIC_LIBS is not set and not desired.

One approach would have been to introduce options
BR2_PACKAGE_OPENBLAS_BUILD_SHARED_LIB and
BR2_PACKAGE_OPENBLAS_BUILD_STATIC_LIB which could be freely selected
regardless of BR2_STATIC_LIBS / BR2_SHARED_LIBS.

But since the installation of a static library does not have any negative
impact except for some disk space on the host system (.a files are removed
from the target in target-finalize anyway), change the installation rules to
install the static library unconditionally.

NO_SHARED is still passed for static-libs-only systems, because the
dynamic library would unnecessarily take up target disk space for such
systems.

Users that only need the static library would still need to remove the
shared library from a post-build script to actually save space.

Signed-off-by: Thomas De Schampheleire <thomas.de_schampheleire@nokia.com>
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
2021-05-18 21:51:57 +02:00

80 lines
2.4 KiB
Makefile

################################################################################
#
# openblas
#
################################################################################
OPENBLAS_VERSION = 0.3.9
OPENBLAS_SITE = $(call github,xianyi,OpenBLAS,v$(OPENBLAS_VERSION))
OPENBLAS_LICENSE = BSD-3-Clause
OPENBLAS_LICENSE_FILES = LICENSE
OPENBLAS_INSTALL_STAGING = YES
# Initialise OpenBLAS make options to $(TARGET_CONFIGURE_OPTS)
OPENBLAS_MAKE_OPTS = $(TARGET_CONFIGURE_OPTS)
# Enable cross-compiling
OPENBLAS_MAKE_OPTS += CROSS=1
# Set OpenBLAS target
OPENBLAS_MAKE_OPTS += TARGET=$(BR2_PACKAGE_OPENBLAS_TARGET)
# When Fortran is not available, only build the C version of BLAS
ifeq ($(BR2_TOOLCHAIN_HAS_FORTRAN),)
OPENBLAS_MAKE_OPTS += ONLY_CBLAS=1
endif
# Enable/Disable multi-threading (not for static-only since it uses dlfcn.h)
ifeq ($(BR2_PACKAGE_OPENBLAS_USE_THREAD),y)
OPENBLAS_MAKE_OPTS += USE_THREAD=1
else
OPENBLAS_MAKE_OPTS += USE_THREAD=0
endif
ifeq ($(BR2_PACKAGE_OPENBLAS_USE_LOCKING),y)
OPENBLAS_MAKE_OPTS += USE_LOCKING=1
else
# not passing USE_LOCKING=0 as this could be confusing: its effect is implicit
# in case of USE_THREAD=1.
endif
# We don't know if OpenMP is available or not, so disable
OPENBLAS_MAKE_OPTS += USE_OPENMP=0
# Static-only/Shared-only toggle
# Note: static library is always generated so that applications can link
# statically for size reduction, even if BR2_STATIC_LIBS is not set.
ifeq ($(BR2_STATIC_LIBS),y)
OPENBLAS_MAKE_OPTS += NO_SHARED=1
endif
# binutils version <= 2.23.2 has a bug
# (https://sourceware.org/bugzilla/show_bug.cgi?id=14887) where
# whitespaces in ARM register specifications such as [ r1, #12 ] or [
# r2 ] cause the assembler to reject the code. Since there are
# numerous instances of such cases in the code, we use sed rather than
# a patch. We simply replace [ foobar ] by [foobar] to work around the
# problem.
define OPENBLAS_FIXUP_ARM_ASSEMBLY
$(SED) 's%\[\s*%\[%;s%\s*\]%\]%' $(@D)/kernel/arm/*.S
endef
OPENBLAS_POST_PATCH_HOOKS += OPENBLAS_FIXUP_ARM_ASSEMBLY
define OPENBLAS_BUILD_CMDS
$(TARGET_MAKE_ENV) $(MAKE) $(OPENBLAS_MAKE_OPTS) \
-C $(@D)
endef
define OPENBLAS_INSTALL_STAGING_CMDS
$(TARGET_MAKE_ENV) $(MAKE) $(OPENBLAS_MAKE_OPTS) \
-C $(@D) install PREFIX=$(STAGING_DIR)/usr
endef
define OPENBLAS_INSTALL_TARGET_CMDS
$(TARGET_MAKE_ENV) $(MAKE) $(OPENBLAS_MAKE_OPTS) \
-C $(@D) install PREFIX=$(TARGET_DIR)/usr
endef
$(eval $(generic-package))