1
1
# ################################################################
2
- # Copyright (c) 2015-present , Yann Collet, Facebook, Inc.
2
+ # Copyright (c) 2015-2020 , Yann Collet, Facebook, Inc.
3
3
# All rights reserved.
4
4
#
5
5
# This source code is licensed under both the BSD-style license (found in the
6
6
# LICENSE file in the root directory of this source tree) and the GPLv2 (found
7
7
# in the COPYING file in the root directory of this source tree).
8
+ # You may select, at your option, one of the above-listed licenses.
8
9
# ################################################################
9
10
11
+ Q = $(if $(filter 1,$(V ) $(VERBOSE ) ) ,,@)
12
+
13
+ # When cross-compiling from linux to windows, you might
14
+ # need to specify this as "Windows." Fedora build fails
15
+ # without it.
16
+ #
17
+ # Note: mingw-w64 build from linux to windows does not
18
+ # fail on other tested distros (ubuntu, debian) even
19
+ # without manually specifying the TARGET_SYSTEM.
20
+ TARGET_SYSTEM ?= $(OS )
21
+
10
22
# Version numbers
11
23
LIBVER_MAJOR_SCRIPT: =` sed -n ' /define ZSTD_VERSION_MAJOR/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p' < ./zstd.h `
12
24
LIBVER_MINOR_SCRIPT: =` sed -n ' /define ZSTD_VERSION_MINOR/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p' < ./zstd.h `
@@ -19,11 +31,10 @@ LIBVER := $(shell echo $(LIBVER_SCRIPT))
19
31
VERSION? = $(LIBVER )
20
32
CCVER := $(shell $(CC ) --version)
21
33
22
- CPPFLAGS+ = -I. -I./common - DXXH_NAMESPACE=ZSTD_
23
- ifeq ($(OS ) ,Windows_NT) # MinGW assumed
34
+ CPPFLAGS+ = -DXXH_NAMESPACE=ZSTD_
35
+ ifeq ($(TARGET_SYSTEM ) ,Windows_NT) # MinGW assumed
24
36
CPPFLAGS += -D__USE_MINGW_ANSI_STDIO # compatibility with %zu formatting
25
37
endif
26
- CFLAGS ?= -O3
27
38
DEBUGFLAGS = -Wall -Wextra -Wcast-qual -Wcast-align -Wshadow \
28
39
-Wstrict-aliasing=1 -Wswitch-enum -Wdeclaration-after-statement \
29
40
-Wstrict-prototypes -Wundef -Wpointer-arith \
@@ -50,18 +61,46 @@ ifeq ($(findstring GCC,$(CCVER)),GCC)
50
61
decompress/zstd_decompress_block.o : CFLAGS+=-fno-tree-vectorize
51
62
endif
52
63
53
- ZSTD_LEGACY_SUPPORT ?= 5
64
+ # This is a helper variable that configures a bunch of other variables to new,
65
+ # space-optimized defaults.
66
+ ZSTD_LIB_MINIFY ?= 0
67
+ ifneq ($(ZSTD_LIB_MINIFY ) , 0)
68
+ HAVE_CC_OZ ?= $(shell echo "" | $(CC) -Oz -x c -c - -o /dev/null 2> /dev/null && echo 1 || echo 0)
69
+ ZSTD_LEGACY_SUPPORT ?= 0
70
+ ZSTD_LIB_DEPRECATED ?= 0
71
+ HUF_FORCE_DECOMPRESS_X1 ?= 1
72
+ ZSTD_FORCE_DECOMPRESS_SHORT ?= 1
73
+ ZSTD_NO_INLINE ?= 1
74
+ ZSTD_STRIP_ERROR_STRINGS ?= 1
75
+ ifneq ($(HAVE_CC_OZ), 0)
76
+ # Some compilers (clang) support an even more space-optimized setting.
77
+ CFLAGS += -Oz
78
+ else
79
+ CFLAGS += -Os
80
+ endif
81
+ CFLAGS += -fno-stack-protector -fomit-frame-pointer -fno-ident \
82
+ -DDYNAMIC_BMI2=0 -DNDEBUG
83
+ else
84
+ CFLAGS += -O3
85
+ endif
86
+
87
+ # Modules
54
88
ZSTD_LIB_COMPRESSION ?= 1
55
89
ZSTD_LIB_DECOMPRESSION ?= 1
56
90
ZSTD_LIB_DICTBUILDER ?= 1
57
91
ZSTD_LIB_DEPRECATED ?= 1
92
+
93
+ # Legacy support
94
+ ZSTD_LEGACY_SUPPORT ?= 5
95
+ ZSTD_LEGACY_MULTITHREADED_API ?= 0
96
+
97
+ # Build size optimizations
58
98
HUF_FORCE_DECOMPRESS_X1 ?= 0
59
99
HUF_FORCE_DECOMPRESS_X2 ?= 0
60
100
ZSTD_FORCE_DECOMPRESS_SHORT ?= 0
61
101
ZSTD_FORCE_DECOMPRESS_LONG ?= 0
62
102
ZSTD_NO_INLINE ?= 0
63
103
ZSTD_STRIP_ERROR_STRINGS ?= 0
64
- ZSTD_LEGACY_MULTITHREADED_API ?= 0
65
104
66
105
ifeq ($(ZSTD_LIB_COMPRESSION ) , 0)
67
106
ZSTD_LIB_DICTBUILDER = 0
@@ -121,7 +160,6 @@ ifneq ($(ZSTD_LEGACY_SUPPORT), 0)
121
160
ifeq ($(shell test $(ZSTD_LEGACY_SUPPORT ) -lt 8; echo $$? ) , 0)
122
161
ZSTD_FILES += $(shell ls legacy/*.c | $(GREP) 'v0[$(ZSTD_LEGACY_SUPPORT)-7]')
123
162
endif
124
- CPPFLAGS += -I./legacy
125
163
endif
126
164
CPPFLAGS += -DZSTD_LEGACY_SUPPORT=$(ZSTD_LEGACY_SUPPORT )
127
165
@@ -142,54 +180,57 @@ else
142
180
endif
143
181
144
182
145
- .PHONY : default all clean install uninstall
183
+ .PHONY : default lib-all all clean install uninstall
146
184
147
185
default : lib-release
148
186
187
+ # alias
188
+ lib-all : all
189
+
149
190
all : lib
150
191
151
192
libzstd.a : ARFLAGS = rcs
152
193
libzstd.a : $(ZSTD_OBJ )
153
194
@echo compiling static library
154
- @$(AR ) $(ARFLAGS ) $@ $^
155
-
156
- libzstd.a-mt : CPPFLAGS += -DZSTD_MULTITHREAD
157
- libzstd.a-mt : libzstd.a
195
+ $(Q )$(AR ) $(ARFLAGS ) $@ $^
158
196
159
- ifneq (,$(filter Windows% ,$(OS ) ) )
197
+ ifneq (,$(filter Windows% ,$(TARGET_SYSTEM ) ) )
160
198
161
199
LIBZSTD = dll\libzstd.dll
162
200
$(LIBZSTD ) : $(ZSTD_FILES )
163
201
@echo compiling dynamic library $(LIBVER )
164
- $(CC ) $(FLAGS ) -DZSTD_DLL_EXPORT=1 -Wl,--out-implib,dll\l ibzstd.lib -shared $^ -o $@
202
+ $(CC ) $(FLAGS ) -DZSTD_DLL_EXPORT=1 -Wl,--out-implib,dll\l ibzstd.dll.a -shared $^ -o $@
165
203
166
204
else
167
205
168
206
LIBZSTD = libzstd.$(SHARED_EXT_VER )
169
207
$(LIBZSTD ) : LDFLAGS += -shared -fPIC -fvisibility=hidden
170
208
$(LIBZSTD ) : $(ZSTD_FILES )
171
209
@echo compiling dynamic library $(LIBVER )
172
- @ $(CC ) $(FLAGS ) $^ $(LDFLAGS ) $(SONAME_FLAGS ) -o $@
210
+ $( Q ) $(CC ) $(FLAGS ) $^ $(LDFLAGS ) $(SONAME_FLAGS ) -o $@
173
211
@echo creating versioned links
174
- @ ln -sf $@ libzstd.$(SHARED_EXT_MAJOR )
175
- @ ln -sf $@ libzstd.$(SHARED_EXT )
212
+ $( Q ) ln -sf $@ libzstd.$(SHARED_EXT_MAJOR )
213
+ $( Q ) ln -sf $@ libzstd.$(SHARED_EXT )
176
214
177
215
endif
178
216
179
-
217
+ .PHONY : libzstd
180
218
libzstd : $(LIBZSTD )
181
219
182
- libzstd-mt : CPPFLAGS += -DZSTD_MULTITHREAD
183
- libzstd-mt : libzstd
220
+ .PHONY : lib
221
+ lib : libzstd.a libzstd
184
222
185
- lib : libzstd.a libzstd
223
+ .PHONY : lib-mt
224
+ % -mt : CPPFLAGS += -DZSTD_MULTITHREAD
225
+ % -mt : LDFLAGS += -pthread
226
+ % -mt : %
227
+ @echo multi-threading build completed
186
228
187
- lib-mt : CPPFLAGS += -DZSTD_MULTITHREAD
188
- lib-mt : lib
229
+ .PHONY : lib-release
230
+ % -release : DEBUGFLAGS :=
231
+ % -release : %
232
+ @echo release build completed
189
233
190
- lib-release lib-release-mt : DEBUGFLAGS :=
191
- lib-release : lib
192
- lib-release-mt : lib-mt
193
234
194
235
# Special case : building library in single-thread mode _and_ without zstdmt_compress.c
195
236
ZSTDMT_FILES = compress/zstdmt_compress.c
@@ -198,32 +239,54 @@ libzstd-nomt: LDFLAGS += -shared -fPIC -fvisibility=hidden
198
239
libzstd-nomt : $(ZSTD_NOMT_FILES )
199
240
@echo compiling single-thread dynamic library $(LIBVER )
200
241
@echo files : $(ZSTD_NOMT_FILES )
201
- @ $(CC ) $(FLAGS ) $^ $(LDFLAGS ) $(SONAME_FLAGS ) -o $@
242
+ $( Q ) $(CC ) $(FLAGS ) $^ $(LDFLAGS ) $(SONAME_FLAGS ) -o $@
202
243
203
244
clean :
204
- @ $(RM ) -r * .dSYM # macOS-specific
205
- @ $(RM ) core * .o * .a * .gcda * .$(SHARED_EXT ) * .$(SHARED_EXT ) .* libzstd.pc
206
- @ $(RM ) dll/libzstd.dll dll/libzstd.lib libzstd-nomt*
207
- @ $(RM ) common/* .o compress/* .o decompress/* .o dictBuilder/* .o legacy/* .o deprecated/* .o
245
+ $( Q ) $(RM ) -r * .dSYM # macOS-specific
246
+ $( Q ) $(RM ) core * .o * .a * .gcda * .$(SHARED_EXT ) * .$(SHARED_EXT ) .* libzstd.pc
247
+ $( Q ) $(RM ) dll/libzstd.dll dll/libzstd.lib libzstd-nomt*
248
+ $( Q ) $(RM ) common/* .o compress/* .o decompress/* .o dictBuilder/* .o legacy/* .o deprecated/* .o
208
249
@echo Cleaning library completed
209
250
210
251
# -----------------------------------------------------------------------------
211
- # make install is validated only for Linux, macOS, BSD, Hurd and Solaris targets
252
+ # make install is validated only for below listed environments
212
253
# -----------------------------------------------------------------------------
213
254
ifneq (,$(filter $(shell uname) ,Linux Darwin GNU/kFreeBSD GNU OpenBSD FreeBSD NetBSD DragonFly SunOS Haiku) )
214
255
256
+ all : libzstd.pc
257
+
215
258
DESTDIR ?=
216
259
# directory variables : GNU conventions prefer lowercase
217
260
# see https://www.gnu.org/prep/standards/html_node/Makefile-Conventions.html
218
261
# support both lower and uppercase (BSD), use uppercase in script
219
262
prefix ?= /usr/local
220
263
PREFIX ?= $(prefix )
221
264
exec_prefix ?= $(PREFIX )
222
- libdir ?= $(exec_prefix ) /lib
265
+ EXEC_PREFIX ?= $(exec_prefix )
266
+ libdir ?= $(EXEC_PREFIX ) /lib
223
267
LIBDIR ?= $(libdir )
224
268
includedir ?= $(PREFIX ) /include
225
269
INCLUDEDIR ?= $(includedir )
226
270
271
+ PCLIBDIR ?= $(shell echo "$(LIBDIR ) " | sed -n -E -e "s@^$(EXEC_PREFIX ) (/|$$) @@p")
272
+ PCINCDIR ?= $(shell echo "$(INCLUDEDIR ) " | sed -n -E -e "s@^$(PREFIX ) (/|$$) @@p")
273
+
274
+ ifeq (,$(PCLIBDIR ) )
275
+ # Additional prefix check is required, since the empty string is technically a
276
+ # valid PCLIBDIR
277
+ ifeq (,$(shell echo "$(LIBDIR ) " | sed -n -E -e "\\@^$(EXEC_PREFIX ) (/|$$) @ p"))
278
+ $(error configured libdir ($(LIBDIR)) is outside of prefix ($(PREFIX)), can't generate pkg-config file)
279
+ endif
280
+ endif
281
+
282
+ ifeq (,$(PCINCDIR ) )
283
+ # Additional prefix check is required, since the empty string is technically a
284
+ # valid PCINCDIR
285
+ ifeq (,$(shell echo "$(INCLUDEDIR ) " | sed -n -E -e "\\@^$(PREFIX ) (/|$$) @ p"))
286
+ $(error configured includedir ($(INCLUDEDIR)) is outside of exec_prefix ($(EXEC_PREFIX)), can't generate pkg-config file)
287
+ endif
288
+ endif
289
+
227
290
ifneq (,$(filter $(shell uname) ,FreeBSD NetBSD DragonFly) )
228
291
PKGCONFIGDIR ?= $(PREFIX ) /libdata/pkgconfig
229
292
else
@@ -243,47 +306,49 @@ INSTALL_DATA ?= $(INSTALL) -m 644
243
306
libzstd.pc :
244
307
libzstd.pc : libzstd.pc.in
245
308
@echo creating pkgconfig
246
- @sed -e ' s|@PREFIX@|$(PREFIX)|' \
247
- -e 's|@VERSION@|$(VERSION)|' \
248
- $< >$@
309
+ $(Q ) @sed -E -e ' s|@PREFIX@|$(PREFIX)|' \
310
+ -e 's|@LIBDIR@|$(PCLIBDIR)|' \
311
+ -e 's|@INCLUDEDIR@|$(PCINCDIR)|' \
312
+ -e 's|@VERSION@|$(VERSION)|' \
313
+ $< >$@
249
314
250
315
install : install-pc install-static install-shared install-includes
251
316
@echo zstd static and shared library installed
252
317
253
318
install-pc : libzstd.pc
254
- @ $(INSTALL ) -d -m 755 $(DESTDIR )$(PKGCONFIGDIR ) /
255
- @ $(INSTALL_DATA ) libzstd.pc $(DESTDIR )$(PKGCONFIGDIR ) /
319
+ $( Q ) $(INSTALL ) -d -m 755 $(DESTDIR )$(PKGCONFIGDIR ) /
320
+ $( Q ) $(INSTALL_DATA ) libzstd.pc $(DESTDIR )$(PKGCONFIGDIR ) /
256
321
257
322
install-static : libzstd.a
258
323
@echo Installing static library
259
- @ $(INSTALL ) -d -m 755 $(DESTDIR )$(LIBDIR ) /
260
- @ $(INSTALL_DATA ) libzstd.a $(DESTDIR )$(LIBDIR )
324
+ $( Q ) $(INSTALL ) -d -m 755 $(DESTDIR )$(LIBDIR ) /
325
+ $( Q ) $(INSTALL_DATA ) libzstd.a $(DESTDIR )$(LIBDIR )
261
326
262
327
install-shared : libzstd
263
328
@echo Installing shared library
264
- @ $(INSTALL ) -d -m 755 $(DESTDIR )$(LIBDIR ) /
265
- @ $(INSTALL_PROGRAM ) $(LIBZSTD ) $(DESTDIR )$(LIBDIR )
266
- @ ln -sf $(LIBZSTD ) $(DESTDIR )$(LIBDIR ) /libzstd.$(SHARED_EXT_MAJOR )
267
- @ ln -sf $(LIBZSTD ) $(DESTDIR )$(LIBDIR ) /libzstd.$(SHARED_EXT )
329
+ $( Q ) $(INSTALL ) -d -m 755 $(DESTDIR )$(LIBDIR ) /
330
+ $( Q ) $(INSTALL_PROGRAM ) $(LIBZSTD ) $(DESTDIR )$(LIBDIR )
331
+ $( Q ) ln -sf $(LIBZSTD ) $(DESTDIR )$(LIBDIR ) /libzstd.$(SHARED_EXT_MAJOR )
332
+ $( Q ) ln -sf $(LIBZSTD ) $(DESTDIR )$(LIBDIR ) /libzstd.$(SHARED_EXT )
268
333
269
334
install-includes :
270
335
@echo Installing includes
271
- @ $(INSTALL ) -d -m 755 $(DESTDIR )$(INCLUDEDIR ) /
272
- @ $(INSTALL_DATA ) zstd.h $(DESTDIR )$(INCLUDEDIR )
273
- @ $(INSTALL_DATA ) common/zstd_errors.h $(DESTDIR )$(INCLUDEDIR )
274
- @ $(INSTALL_DATA ) deprecated/zbuff.h $(DESTDIR )$(INCLUDEDIR ) # prototypes generate deprecation warnings
275
- @ $(INSTALL_DATA ) dictBuilder/zdict.h $(DESTDIR )$(INCLUDEDIR )
336
+ $( Q ) $(INSTALL ) -d -m 755 $(DESTDIR )$(INCLUDEDIR ) /
337
+ $( Q ) $(INSTALL_DATA ) zstd.h $(DESTDIR )$(INCLUDEDIR )
338
+ $( Q ) $(INSTALL_DATA ) common/zstd_errors.h $(DESTDIR )$(INCLUDEDIR )
339
+ $( Q ) $(INSTALL_DATA ) deprecated/zbuff.h $(DESTDIR )$(INCLUDEDIR ) # prototypes generate deprecation warnings
340
+ $( Q ) $(INSTALL_DATA ) dictBuilder/zdict.h $(DESTDIR )$(INCLUDEDIR )
276
341
277
342
uninstall :
278
- @ $(RM ) $(DESTDIR )$(LIBDIR ) /libzstd.a
279
- @ $(RM ) $(DESTDIR )$(LIBDIR ) /libzstd.$(SHARED_EXT )
280
- @ $(RM ) $(DESTDIR )$(LIBDIR ) /libzstd.$(SHARED_EXT_MAJOR )
281
- @ $(RM ) $(DESTDIR )$(LIBDIR ) /$(LIBZSTD )
282
- @ $(RM ) $(DESTDIR )$(PKGCONFIGDIR ) /libzstd.pc
283
- @ $(RM ) $(DESTDIR )$(INCLUDEDIR ) /zstd.h
284
- @ $(RM ) $(DESTDIR )$(INCLUDEDIR ) /zstd_errors.h
285
- @ $(RM ) $(DESTDIR )$(INCLUDEDIR ) /zbuff.h # Deprecated streaming functions
286
- @ $(RM ) $(DESTDIR )$(INCLUDEDIR ) /zdict.h
343
+ $( Q ) $(RM ) $(DESTDIR )$(LIBDIR ) /libzstd.a
344
+ $( Q ) $(RM ) $(DESTDIR )$(LIBDIR ) /libzstd.$(SHARED_EXT )
345
+ $( Q ) $(RM ) $(DESTDIR )$(LIBDIR ) /libzstd.$(SHARED_EXT_MAJOR )
346
+ $( Q ) $(RM ) $(DESTDIR )$(LIBDIR ) /$(LIBZSTD )
347
+ $( Q ) $(RM ) $(DESTDIR )$(PKGCONFIGDIR ) /libzstd.pc
348
+ $( Q ) $(RM ) $(DESTDIR )$(INCLUDEDIR ) /zstd.h
349
+ $( Q ) $(RM ) $(DESTDIR )$(INCLUDEDIR ) /zstd_errors.h
350
+ $( Q ) $(RM ) $(DESTDIR )$(INCLUDEDIR ) /zbuff.h # Deprecated streaming functions
351
+ $( Q ) $(RM ) $(DESTDIR )$(INCLUDEDIR ) /zdict.h
287
352
@echo zstd libraries successfully uninstalled
288
353
289
354
endif
0 commit comments