[Buildroot] [RESEND PATCH v3] package/armadillo: allows to select between clapack, lapack or openblas

Arnout Vandecappelle arnout at mind.be
Sat Jul 24 21:52:29 UTC 2021


 Hi Gwenhael,

On 30/06/2021 14:22, Gwenhael Goavec-Merou wrote:
> From: Gwenhael Goavec-Merou <gwenhael.goavec-merou at trabucayre.com>
> 
> armadillo can use clapack, lapack or openblas as BLAS provider and clapack or
> lapack as LAPACK provider.
> 
> This patch
> - adds hidden variable to check dependencies/requirement for each of them
> - a choice to select wich implementation to use for blas and lapack.
> 
> Choices are required since applications, potentially, needs explicitly lapack or clapack.
> 
> Signed-off-by: Gwenhael Goavec-Merou <gwenhael.goavec-merou at trabucayre.com>
> ---
> Changes v2 -> v3:
> - drop all default statements for choice (Thomas)
> - add explicit -l since blas libary is called liblas for (c)lapack and
>   libopenblas for openblas (Thomas)
> - add a choice for lapack selection between lapack, clapack or none
> Changes v1 -> v2:
> - add openblas as blas provider
> ---
>  package/armadillo/Config.in    | 66 ++++++++++++++++++++++++++++++++--
>  package/armadillo/armadillo.mk | 29 ++++++++++++++-
>  2 files changed, 91 insertions(+), 4 deletions(-)
> 
> diff --git a/package/armadillo/Config.in b/package/armadillo/Config.in
> index b2b61a3233..816b45be96 100644
> --- a/package/armadillo/Config.in
> +++ b/package/armadillo/Config.in
> @@ -1,3 +1,15 @@
> +config BR2_PACKAGE_ARMADILLO_CLAPACK_SUPPORTS
> +	bool
> +	default y
> +	depends on !BR2_m68k_cf
> +	depends on !BR2_powerpc || BR2_TOOLCHAIN_USES_GLIBC
> +
> +config BR2_PACKAGE_ARMADILLO_LAPACK_SUPPORTS
> +	bool
> +	default y
> +	depends on BR2_TOOLCHAIN_HAS_FORTRAN
> +	depends on !(BR2_powerpc && BR2_TOOLCHAIN_USES_UCLIBC)

 I've created separate commits for these that add them to lapack and clapack
respectively, because they can be useful for other packages as well.

> +
>  comment "armadillo needs a toolchain w/ C++"
>  	depends on !BR2_INSTALL_LIBSTDCPP
>  	depends on !BR2_powerpc

 I've also simplified the comment that is not quoted here, since it's not
entirely correct (openblas is possible on some powerpc).

> @@ -10,11 +22,59 @@ comment "armadillo needs a glibc toolchain w/ C++"
>  config BR2_PACKAGE_ARMADILLO
>  	bool "armadillo"
>  	depends on BR2_INSTALL_LIBSTDCPP
> -	depends on !BR2_powerpc || BR2_TOOLCHAIN_USES_GLIBC # clapack
> -	depends on !BR2_m68k_cf # clapack
> -	select BR2_PACKAGE_CLAPACK
> +	depends on BR2_PACKAGE_ARMADILLO_CLAPACK_SUPPORTS || \
> +		BR2_PACKAGE_ARMADILLO_LAPACK_SUPPORTS || \
> +		BR2_PACKAGE_OPENBLAS_ARCH_SUPPORTS
>  	help
>  	  Armadillo: An Open Source C++ Linear Algebra Library for
>  	  Fast Prototyping and Computationally Intensive Experiments.
>  
>  	  http://arma.sourceforge.net/
> +
> +if BR2_PACKAGE_ARMADILLO
> +
> +choice
> +	prompt "blas library"
> +	help
> +	  Selects blas library to use
> +
> +config BR2_PACKAGE_ARMADILLO_BLAS_LAPACK
> +	bool "lapack"
> +	depends on BR2_PACKAGE_ARMADILLO_LAPACK_SUPPORTS
> +	select BR2_PACKAGE_LAPACK

 This, unfortunately, does not work in Kconfig, because it's possible to select
clapack and then select BR2_PACKAGE_ARMADILLO_BLAS_LAPACK. So you need to add a
depends on !CLAPACK. But that then leads to a circular dependency according to
Kconfig (Kconfig is weird about dependencies in choices).

 Therefore, I think the only solution is to not make this a choice, but
automatically choose between lapack and clapack. The commit message said "needs
explicitly lapack or clapack" but I guess that meant "needs explicitly lapack or
clapack instead of openblas", right? Anyway, if an application specifically
needs lapack or clapack, it just needs to choose that one and armadillo will
adapt automatically.


 So, I needed to make some big changes to this series. Therefore, I haven't
applied it, but instead sent a v4 to the list. Please review and test and if
it's all good, I'll apply.

 Regards,
 Arnout


> +
> +config BR2_PACKAGE_ARMADILLO_BLAS_CLAPACK
> +	bool "clapack"
> +	depends on BR2_PACKAGE_ARMADILLO_CLAPACK_SUPPORTS
> +	select BR2_PACKAGE_CLAPACK
> +
> +config BR2_PACKAGE_ARMADILLO_BLAS_OPENBLAS
> +	bool "openblas"
> +	depends on BR2_PACKAGE_OPENBLAS_ARCH_SUPPORTS
> +	select BR2_PACKAGE_OPENBLAS
> +
> +endchoice
> +
> +choice
> +	prompt "lapack library"
> +	help
> +	  Selects lapack library to use
> +
> +config BR2_PACKAGE_ARMADILLO_LAPACK_LAPACK
> +	bool "lapack"
> +	depends on BR2_PACKAGE_ARMADILLO_LAPACK_SUPPORTS
> +	depends on !BR2_PACKAGE_ARMADILLO_BLAS_CLAPACK
> +	select BR2_PACKAGE_LAPACK
> +
> +config BR2_PACKAGE_ARMADILLO_LAPACK_CLAPACK
> +	bool "clapack"
> +	depends on BR2_PACKAGE_ARMADILLO_CLAPACK_SUPPORTS
> +	depends on !BR2_PACKAGE_ARMADILLO_BLAS_LAPACK
> +	select BR2_PACKAGE_CLAPACK
> +
> +config BR2_PACKAGE_ARMADILLO_LAPACK_NONE
> +	bool "none"
> +
> +endchoice
> +
> +endif
> diff --git a/package/armadillo/armadillo.mk b/package/armadillo/armadillo.mk
> index 624b842ef6..bae27774d7 100644
> --- a/package/armadillo/armadillo.mk
> +++ b/package/armadillo/armadillo.mk
> @@ -7,11 +7,38 @@
>  ARMADILLO_VERSION = 9.900.2
>  ARMADILLO_SOURCE = armadillo-$(ARMADILLO_VERSION).tar.xz
>  ARMADILLO_SITE = https://downloads.sourceforge.net/project/arma
> -ARMADILLO_DEPENDENCIES = clapack
>  ARMADILLO_INSTALL_STAGING = YES
>  ARMADILLO_LICENSE = Apache-2.0
>  ARMADILLO_LICENSE_FILES = LICENSE.txt
>  
>  ARMADILLO_CONF_OPTS = -DDETECT_HDF5=false
>  
> +# blas support may be provided by lapack, clapack or openblas
> +# blas library from (c)lapack is libblas.a, libopenblas.a otherwise
> +ARMADILLO_CONF_OPTS += -DBLAS_FOUND=ON
> +ifeq ($(BR2_PACKAGE_ARMADILLO_OPENBLAS),y)
> +ARMADILLO_CONF_OPTS += -DBLAS_LIBRARIES=-lopenblas
> +ARMADILLO_DEPENDENCIES = openblas
> +else
> +ARMADILLO_CONF_OPTS += -DBLAS_LIBRARIES=-lblas
> +ifeq ($(BR2_PACKAGE_ARMADILLO_CLAPACK), y)
> +ARMADILLO_DEPENDENCIES = clapack
> +else
> +ARMADILLO_DEPENDENCIES = lapack
> +endif
> +endif
> +
> +# lapack support may be provided by lapack or clapack
> +# but not by openblas
> +ifeq ($(BR2_PACKAGE_LAPACK_NONE),y)
> +ARMADILLO_CONF_OPTS += -DLAPACK_FOUND=OFF
> +else
> +ARMADILLO_CONF_OPTS += -DLAPACK_FOUND=ON
> +ifeq ($(BR2_PACKAGE_ARMADILLO_LAPACK_LAPACK),y)
> +ARMADILLO_DEPENDENCIES += lapack
> +else ifeq ($(BR2_PACKAGE_ARMADILLO_LAPACK_CLAPACK), y)
> +ARMADILLO_DEPENDENCIES += clapack
> +endif
> +endif
> +
>  $(eval $(cmake-package))
> 


More information about the buildroot mailing list