[Buildroot] [PATCH v2 3/5] package/zstd: rework build and install

Arnout Vandecappelle arnout at mind.be
Mon Jun 14 19:50:51 UTC 2021


 Hi Norbert,

On 25/05/2021 19:26, Norbert Lange wrote:
> 1.5.0 uses Threads by default for cli tool and DSO,
> the build now does the same unless:
> 
> If only static libraries are build, then build
> that library like the DSO is normally built.
> 
> This should ensure that programs requsting the DSO
> will always get the multithreaded version.

 I don't understand what this patch is trying to do...

 Before this patch, in the threads case, the build would be done with threads
both for the program (HAVE_THREAD=1) and the libraries (-mt appended). For the
no-threads case, the build is done without threads support for both the program
(HAVE_THREAD=0) and the shared&static libraries (no -mt appended) - except that
since 1.5.0, the shared library will be built with thread support which will
probably result in a build failure.

 So as far as I can see, the only thing that needs to be done is:

ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),y)
ZSTD_BUILD_LIBS := $(addsuffix -mt,$(ZSTD_BUILD_LIBS))
else
ZSTD_BUILD_LIBS := $(addsuffix -nomt,$(ZSTD_BUILD_LIBS))
endif


 You patch, however, builds the static library with thread support if no dynamic
library is built, and without thread support if a dynamic library is built. This
makes no sense whatsoever to me...


 Can you clarify the reasoning?

 For now, I've marked the patch as Changes Requested. Since I did apply the
first patch, we will probably start seeing build failures on nothreads, so we'll
need a fix soonish...

 Regards,
 Arnout

> 
> Signed-off-by: Norbert Lange <nolange79 at gmail.com>
> 
> ---
> v1->v2:
> *   rebased against upstream/master
> 
> Signed-off-by: Norbert Lange <nolange79 at gmail.com>
> ---
>  package/zstd/zstd.mk | 52 ++++++++++++++++++++++++++++----------------
>  1 file changed, 33 insertions(+), 19 deletions(-)
> 
> diff --git a/package/zstd/zstd.mk b/package/zstd/zstd.mk
> index 2a876376a2..a7a5ba4e50 100644
> --- a/package/zstd/zstd.mk
> +++ b/package/zstd/zstd.mk
> @@ -12,6 +12,8 @@ ZSTD_LICENSE_FILES = LICENSE COPYING
>  ZSTD_CPE_ID_VENDOR = facebook
>  ZSTD_CPE_ID_PRODUCT = zstandard
>  
> +ZSTD_OPTS += PREFIX=/usr
> +
>  ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),y)
>  ZSTD_OPTS += HAVE_THREAD=1
>  else
> @@ -39,43 +41,55 @@ else
>  ZSTD_OPTS += HAVE_LZ4=0
>  endif
>  
> -ifeq ($(BR2_STATIC_LIBS),y)
> -ZSTD_BUILD_LIBS = libzstd.a
> -ZSTD_INSTALL_LIBS = install-static
> -else ifeq ($(BR2_SHARED_LIBS),y)
> -ZSTD_BUILD_LIBS = libzstd
> -ZSTD_INSTALL_LIBS = install-shared
> +ZSTD_BUILD_PROG_TARGET := zstd-release
> +
> +# Since v1.5.0 the dynamic library is built for
> +# multithreading, while the static library is not.
> +#
> +# Keep those defaults, unless Buildroot is not
> +# providing the dynamic library and the
> +# static library will be automatically used instead.
> +ifeq ($(BR2_STATIC_LIBS)$(BR2_SHARED_STATIC_LIBS),y)
> +ZSTD_INSTALL_LIBS += install-static
> +ifeq ($(BR2_STATIC_LIBS)$(BR2_TOOLCHAIN_HAS_THREADS),yy)
> +# Use the static lib as replacement for the mt dynlib
> +ZSTD_BUILD_LIBS += libzstd.a-mt
>  else
> -ZSTD_BUILD_LIBS = libzstd.a libzstd
> -ZSTD_INSTALL_LIBS = install-static install-shared
> +ZSTD_BUILD_LIBS += libzstd.a-nomt
> +endif
>  endif
>  
> -# The HAVE_THREAD flag is read by the 'programs' makefile but not by  the 'lib'
> -# one. Building a multi-threaded binary with a library (which defaults to
> -# single-threaded) gives a runtime error when compressing files.
> -# The 'lib' makefile provides specific '%-mt' targets for this purpose.
> +ifeq ($(BR2_SHARED_LIBS)$(BR2_SHARED_STATIC_LIBS),y)
> +ZSTD_INSTALL_LIBS += install-shared
>  ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),y)
> -ZSTD_BUILD_LIBS := $(addsuffix -mt,$(ZSTD_BUILD_LIBS))
> +ZSTD_BUILD_LIBS += libzstd-mt
> +else
> +ZSTD_BUILD_LIBS += libzstd-nomt
> +endif
>  endif
>  
>  define ZSTD_BUILD_CMDS
>  	$(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) $(ZSTD_OPTS) \
> -		-C $(@D)/lib $(ZSTD_BUILD_LIBS)
> +		-C $(@D)/lib $(addsuffix -release,$(ZSTD_BUILD_LIBS) libzstd.pc)
>  	$(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) $(ZSTD_OPTS) \
> -		-C $(@D) zstd
> +		-C $(@D)/programs $(ZSTD_BUILD_PROG_TARGET)
>  endef
>  
>  define ZSTD_INSTALL_STAGING_CMDS
> +	[ -e $(@D)/programs/zstd ] && [ -e $(@D)/lib/libzstd.pc ]
> +	$(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) $(ZSTD_OPTS) \
> +		-C $(@D)/lib DESTDIR=$(STAGING_DIR) $(ZSTD_INSTALL_LIBS) \
> +		install-pc install-includes
>  	$(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) $(ZSTD_OPTS) \
> -		DESTDIR=$(STAGING_DIR) PREFIX=/usr -C $(@D)/lib \
> -		install-pc install-includes $(ZSTD_INSTALL_LIBS)
> +		-C $(@D)/programs DESTDIR=$(STAGING_DIR) install
>  endef
>  
>  define ZSTD_INSTALL_TARGET_CMDS
> +	[ -e $(@D)/programs/zstd ]
>  	$(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) $(ZSTD_OPTS) \
> -		DESTDIR=$(TARGET_DIR) PREFIX=/usr -C $(@D)/programs install
> +		-C $(@D)/lib DESTDIR=$(TARGET_DIR) $(ZSTD_INSTALL_LIBS)
>  	$(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) $(ZSTD_OPTS) \
> -		DESTDIR=$(TARGET_DIR) PREFIX=/usr -C $(@D)/lib $(ZSTD_INSTALL_LIBS)
> +		-C $(@D)/programs DESTDIR=$(TARGET_DIR) install
>  endef
>  
>  HOST_ZSTD_OPTS += PREFIX=$(HOST_DIR)
> 


More information about the buildroot mailing list