1################################################################################
2#
3# zstd
4#
5################################################################################
6
7ZSTD_VERSION = 1.5.5
8ZSTD_SITE = https://github.com/facebook/zstd/releases/download/v$(ZSTD_VERSION)
9ZSTD_INSTALL_STAGING = YES
10ZSTD_LICENSE = BSD-3-Clause or GPL-2.0
11ZSTD_LICENSE_FILES = LICENSE COPYING
12ZSTD_CPE_ID_VENDOR = facebook
13ZSTD_CPE_ID_PRODUCT = zstandard
14
15ZSTD_OPTS += PREFIX=/usr
16ZSTD_OPTS += ZSTD_LEGACY_SUPPORT=0
17ifeq ($(BR2_PACKAGE_ZLIB),y)
18ZSTD_DEPENDENCIES += zlib
19ZSTD_OPTS += HAVE_ZLIB=1
20else
21ZSTD_OPTS += HAVE_ZLIB=0
22endif
23
24ifeq ($(BR2_PACKAGE_XZ),y)
25ZSTD_DEPENDENCIES += xz
26ZSTD_OPTS += HAVE_LZMA=1
27else
28ZSTD_OPTS += HAVE_LZMA=0
29endif
30
31ifeq ($(BR2_PACKAGE_LZ4),y)
32ZSTD_DEPENDENCIES += lz4
33ZSTD_OPTS += HAVE_LZ4=1
34else
35ZSTD_OPTS += HAVE_LZ4=0
36endif
37
38# zstd will append -O3 after $(CFLAGS), use MOREFLAGS to override again
39ZSTD_OPTS += MOREFLAGS="$(TARGET_OPTIMIZATION)"
40
41ZSTD_BUILD_LIBS_BASENAMES = libzstd.pc
42ifeq ($(BR2_STATIC_LIBS),y)
43ZSTD_BUILD_LIBS_BASENAMES += libzstd.a
44ZSTD_INSTALL_LIBS = install-static
45else ifeq ($(BR2_SHARED_LIBS),y)
46ZSTD_BUILD_LIBS_BASENAMES += lib
47ZSTD_INSTALL_LIBS = install-shared
48else
49ZSTD_BUILD_LIBS_BASENAMES += lib
50ZSTD_INSTALL_LIBS = install-static install-shared
51endif
52
53# prefer zstd-dll unless no library is available
54ifeq ($(BR2_STATIC_LIBS),y)
55ZSTD_BUILD_PROG_TARGET = zstd-release
56else
57ZSTD_BUILD_PROG_TARGET = zstd-dll
58endif
59
60# The HAVE_THREAD flag is read by the 'programs' makefile but not by  the 'lib'
61# one. Building a multi-threaded binary with a static library (which defaults
62# to single-threaded) gives a runtime error when compressing files.
63# The 'lib' makefile provides specific '%-mt' and '%-nomt' targets for this
64# purpose.
65ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),y)
66ZSTD_OPTS += HAVE_THREAD=1
67ZSTD_BUILD_LIBS_THREAD_SUFFIX = -mt
68else
69ZSTD_OPTS += HAVE_THREAD=0
70ZSTD_BUILD_LIBS_THREAD_SUFFIX = -nomt
71endif
72# check-package disable OverriddenVariable - override intended
73ZSTD_BUILD_LIBS = \
74	$(addsuffix -release, \
75		$(addsuffix $(ZSTD_BUILD_LIBS_THREAD_SUFFIX), \
76			$(ZSTD_BUILD_LIBS_BASENAMES)))
77
78define ZSTD_BUILD_CMDS
79	$(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) $(ZSTD_OPTS) \
80		-C $(@D)/lib $(ZSTD_BUILD_LIBS)
81	$(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) $(ZSTD_OPTS) \
82		-C $(@D)/programs $(ZSTD_BUILD_PROG_TARGET)
83endef
84
85define ZSTD_INSTALL_STAGING_CMDS
86	$(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) $(ZSTD_OPTS) \
87		DESTDIR=$(STAGING_DIR) PREFIX=/usr -C $(@D)/lib \
88		install-pc install-includes $(ZSTD_INSTALL_LIBS)
89endef
90
91define ZSTD_INSTALL_TARGET_CMDS
92	$(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) $(ZSTD_OPTS) \
93		DESTDIR=$(TARGET_DIR) -C $(@D)/programs install
94	$(TARGET_MAKE_ENV) $(TARGET_CONFIGURE_OPTS) $(MAKE) $(ZSTD_OPTS) \
95		DESTDIR=$(TARGET_DIR) -C $(@D)/lib $(ZSTD_INSTALL_LIBS)
96endef
97
98HOST_ZSTD_OPTS += PREFIX=$(HOST_DIR)
99HOST_ZSTD_ENV = $(HOST_MAKE_ENV) $(HOST_CONFIGURE_OPTS)
100
101# We are a ccache dependency, so we can't use ccache
102HOST_ZSTD_ENV += CC="$(HOSTCC_NOCCACHE)" CXX="$(HOSTCXX_NOCCACHE)"
103
104define HOST_ZSTD_BUILD_CMDS
105	$(HOST_ZSTD_ENV) $(MAKE) $(HOST_ZSTD_OPTS) \
106		-C $(@D) zstd-release lib-release
107endef
108
109define HOST_ZSTD_INSTALL_CMDS
110	$(HOST_ZSTD_ENV) $(MAKE) $(HOST_ZSTD_OPTS) \
111		-C $(@D) install
112endef
113
114$(eval $(generic-package))
115$(eval $(host-generic-package))
116