zstd-ruby 1.3.8.0 → 1.4.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +6 -5
- data/README.md +1 -1
- data/ext/zstdruby/libzstd/Makefile +133 -61
- data/ext/zstdruby/libzstd/README.md +51 -18
- data/ext/zstdruby/libzstd/common/bitstream.h +38 -39
- data/ext/zstdruby/libzstd/common/compiler.h +41 -6
- data/ext/zstdruby/libzstd/common/cpu.h +1 -1
- data/ext/zstdruby/libzstd/common/debug.c +11 -31
- data/ext/zstdruby/libzstd/common/debug.h +11 -31
- data/ext/zstdruby/libzstd/common/entropy_common.c +13 -33
- data/ext/zstdruby/libzstd/common/error_private.c +2 -1
- data/ext/zstdruby/libzstd/common/error_private.h +6 -2
- data/ext/zstdruby/libzstd/common/fse.h +13 -33
- data/ext/zstdruby/libzstd/common/fse_decompress.c +12 -35
- data/ext/zstdruby/libzstd/common/huf.h +15 -33
- data/ext/zstdruby/libzstd/common/mem.h +75 -2
- data/ext/zstdruby/libzstd/common/pool.c +8 -4
- data/ext/zstdruby/libzstd/common/pool.h +2 -2
- data/ext/zstdruby/libzstd/common/threading.c +52 -6
- data/ext/zstdruby/libzstd/common/threading.h +36 -4
- data/ext/zstdruby/libzstd/common/xxhash.c +25 -37
- data/ext/zstdruby/libzstd/common/xxhash.h +11 -31
- data/ext/zstdruby/libzstd/common/zstd_common.c +1 -1
- data/ext/zstdruby/libzstd/common/zstd_errors.h +2 -1
- data/ext/zstdruby/libzstd/common/zstd_internal.h +203 -22
- data/ext/zstdruby/libzstd/compress/fse_compress.c +19 -42
- data/ext/zstdruby/libzstd/compress/hist.c +15 -35
- data/ext/zstdruby/libzstd/compress/hist.h +12 -32
- data/ext/zstdruby/libzstd/compress/huf_compress.c +92 -92
- data/ext/zstdruby/libzstd/compress/zstd_compress.c +1460 -1472
- data/ext/zstdruby/libzstd/compress/zstd_compress_internal.h +330 -65
- data/ext/zstdruby/libzstd/compress/zstd_compress_literals.c +158 -0
- data/ext/zstdruby/libzstd/compress/zstd_compress_literals.h +29 -0
- data/ext/zstdruby/libzstd/compress/zstd_compress_sequences.c +419 -0
- data/ext/zstdruby/libzstd/compress/zstd_compress_sequences.h +54 -0
- data/ext/zstdruby/libzstd/compress/zstd_compress_superblock.c +845 -0
- data/ext/zstdruby/libzstd/compress/zstd_compress_superblock.h +32 -0
- data/ext/zstdruby/libzstd/compress/zstd_cwksp.h +525 -0
- data/ext/zstdruby/libzstd/compress/zstd_double_fast.c +65 -43
- data/ext/zstdruby/libzstd/compress/zstd_double_fast.h +2 -2
- data/ext/zstdruby/libzstd/compress/zstd_fast.c +264 -159
- data/ext/zstdruby/libzstd/compress/zstd_fast.h +2 -2
- data/ext/zstdruby/libzstd/compress/zstd_lazy.c +74 -42
- data/ext/zstdruby/libzstd/compress/zstd_lazy.h +2 -2
- data/ext/zstdruby/libzstd/compress/zstd_ldm.c +33 -11
- data/ext/zstdruby/libzstd/compress/zstd_ldm.h +7 -2
- data/ext/zstdruby/libzstd/compress/zstd_opt.c +108 -125
- data/ext/zstdruby/libzstd/compress/zstd_opt.h +1 -1
- data/ext/zstdruby/libzstd/compress/zstdmt_compress.c +129 -93
- data/ext/zstdruby/libzstd/compress/zstdmt_compress.h +46 -28
- data/ext/zstdruby/libzstd/decompress/huf_decompress.c +76 -60
- data/ext/zstdruby/libzstd/decompress/zstd_ddict.c +14 -10
- data/ext/zstdruby/libzstd/decompress/zstd_ddict.h +2 -2
- data/ext/zstdruby/libzstd/decompress/zstd_decompress.c +471 -258
- data/ext/zstdruby/libzstd/decompress/zstd_decompress_block.c +471 -346
- data/ext/zstdruby/libzstd/decompress/zstd_decompress_block.h +3 -3
- data/ext/zstdruby/libzstd/decompress/zstd_decompress_internal.h +25 -4
- data/ext/zstdruby/libzstd/deprecated/zbuff.h +9 -8
- data/ext/zstdruby/libzstd/deprecated/zbuff_common.c +2 -2
- data/ext/zstdruby/libzstd/deprecated/zbuff_compress.c +1 -1
- data/ext/zstdruby/libzstd/deprecated/zbuff_decompress.c +1 -1
- data/ext/zstdruby/libzstd/dictBuilder/cover.c +220 -65
- data/ext/zstdruby/libzstd/dictBuilder/cover.h +81 -7
- data/ext/zstdruby/libzstd/dictBuilder/fastcover.c +85 -56
- data/ext/zstdruby/libzstd/dictBuilder/zdict.c +43 -19
- data/ext/zstdruby/libzstd/dictBuilder/zdict.h +73 -35
- data/ext/zstdruby/libzstd/dll/example/Makefile +2 -1
- data/ext/zstdruby/libzstd/dll/example/build_package.bat +3 -2
- data/ext/zstdruby/libzstd/legacy/zstd_legacy.h +49 -15
- data/ext/zstdruby/libzstd/legacy/zstd_v01.c +142 -117
- data/ext/zstdruby/libzstd/legacy/zstd_v01.h +13 -8
- data/ext/zstdruby/libzstd/legacy/zstd_v02.c +54 -25
- data/ext/zstdruby/libzstd/legacy/zstd_v02.h +13 -8
- data/ext/zstdruby/libzstd/legacy/zstd_v03.c +55 -25
- data/ext/zstdruby/libzstd/legacy/zstd_v03.h +13 -8
- data/ext/zstdruby/libzstd/legacy/zstd_v04.c +62 -29
- data/ext/zstdruby/libzstd/legacy/zstd_v04.h +13 -8
- data/ext/zstdruby/libzstd/legacy/zstd_v05.c +145 -109
- data/ext/zstdruby/libzstd/legacy/zstd_v05.h +14 -9
- data/ext/zstdruby/libzstd/legacy/zstd_v06.c +56 -26
- data/ext/zstdruby/libzstd/legacy/zstd_v06.h +11 -6
- data/ext/zstdruby/libzstd/legacy/zstd_v07.c +65 -28
- data/ext/zstdruby/libzstd/legacy/zstd_v07.h +11 -6
- data/ext/zstdruby/libzstd/libzstd.pc.in +3 -2
- data/ext/zstdruby/libzstd/zstd.h +921 -597
- data/lib/zstd-ruby/version.rb +1 -1
- data/zstd-ruby.gemspec +2 -2
- metadata +19 -14
- data/ext/zstdruby/libzstd/dll/libzstd.def +0 -87
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3fb9daf94529e91f7b648c1d29d5d562463553adb5d4ac420121bac1804fbeab
|
|
4
|
+
data.tar.gz: bdcebd2d2709f7b1c1736343846bf78c8b528237a78e45d3e7fd7c1473275ed4
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 3e615781ba60a8525498fc5329917762411cfc4edf465ce9be06dbee5d9f08ff4bcf119142e2d61e5285f5efb94accc28d50f356d1f91cbf7d34d4531fb341f4
|
|
7
|
+
data.tar.gz: 87fa77e13997a63109ba65e6cf38ad429192ca62991bb600a27660762fc1381c4dfd3ea9e5561b3a17774b3e3967483a095481259bcd653aa72469c823aa929f
|
data/.travis.yml
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
sudo: false
|
|
2
2
|
language: ruby
|
|
3
3
|
rvm:
|
|
4
|
-
- 2.6
|
|
5
|
-
- 2.5
|
|
6
|
-
- 2.4
|
|
7
|
-
- 2.3
|
|
4
|
+
- 2.6
|
|
5
|
+
- 2.5
|
|
6
|
+
- 2.4
|
|
7
|
+
- 2.3
|
|
8
8
|
- 2.2
|
|
9
9
|
|
|
10
|
-
before_install:
|
|
10
|
+
before_install:
|
|
11
|
+
- gem install bundler -v 1.14.3
|
|
11
12
|
|
|
12
13
|
before_script:
|
|
13
14
|
- bundle exec rake compile
|
data/README.md
CHANGED
|
@@ -1,12 +1,24 @@
|
|
|
1
1
|
# ################################################################
|
|
2
|
-
# Copyright (c) 2015-
|
|
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`
|
|
@@ -17,15 +29,15 @@ LIBVER_MINOR := $(shell echo $(LIBVER_MINOR_SCRIPT))
|
|
|
17
29
|
LIBVER_PATCH := $(shell echo $(LIBVER_PATCH_SCRIPT))
|
|
18
30
|
LIBVER := $(shell echo $(LIBVER_SCRIPT))
|
|
19
31
|
VERSION?= $(LIBVER)
|
|
32
|
+
CCVER := $(shell $(CC) --version)
|
|
20
33
|
|
|
21
|
-
CPPFLAGS+= -
|
|
22
|
-
ifeq ($(
|
|
34
|
+
CPPFLAGS+= -DXXH_NAMESPACE=ZSTD_
|
|
35
|
+
ifeq ($(TARGET_SYSTEM),Windows_NT) # MinGW assumed
|
|
23
36
|
CPPFLAGS += -D__USE_MINGW_ANSI_STDIO # compatibility with %zu formatting
|
|
24
37
|
endif
|
|
25
|
-
CFLAGS ?= -O3
|
|
26
38
|
DEBUGFLAGS= -Wall -Wextra -Wcast-qual -Wcast-align -Wshadow \
|
|
27
39
|
-Wstrict-aliasing=1 -Wswitch-enum -Wdeclaration-after-statement \
|
|
28
|
-
-Wstrict-prototypes -Wundef -Wpointer-arith
|
|
40
|
+
-Wstrict-prototypes -Wundef -Wpointer-arith \
|
|
29
41
|
-Wvla -Wformat=2 -Winit-self -Wfloat-equal -Wwrite-strings \
|
|
30
42
|
-Wredundant-decls -Wmissing-prototypes -Wc++-compat
|
|
31
43
|
CFLAGS += $(DEBUGFLAGS) $(MOREFLAGS)
|
|
@@ -45,11 +57,44 @@ ZDICT_FILES := $(sort $(wildcard dictBuilder/*.c))
|
|
|
45
57
|
ZDEPR_FILES := $(sort $(wildcard deprecated/*.c))
|
|
46
58
|
ZSTD_FILES := $(ZSTDCOMMON_FILES)
|
|
47
59
|
|
|
48
|
-
|
|
60
|
+
ifeq ($(findstring GCC,$(CCVER)),GCC)
|
|
61
|
+
decompress/zstd_decompress_block.o : CFLAGS+=-fno-tree-vectorize
|
|
62
|
+
endif
|
|
63
|
+
|
|
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
|
|
49
88
|
ZSTD_LIB_COMPRESSION ?= 1
|
|
50
89
|
ZSTD_LIB_DECOMPRESSION ?= 1
|
|
51
90
|
ZSTD_LIB_DICTBUILDER ?= 1
|
|
52
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
|
|
53
98
|
HUF_FORCE_DECOMPRESS_X1 ?= 0
|
|
54
99
|
HUF_FORCE_DECOMPRESS_X2 ?= 0
|
|
55
100
|
ZSTD_FORCE_DECOMPRESS_SHORT ?= 0
|
|
@@ -107,11 +152,14 @@ ifneq ($(ZSTD_STRIP_ERROR_STRINGS), 0)
|
|
|
107
152
|
CFLAGS += -DZSTD_STRIP_ERROR_STRINGS
|
|
108
153
|
endif
|
|
109
154
|
|
|
155
|
+
ifneq ($(ZSTD_LEGACY_MULTITHREADED_API), 0)
|
|
156
|
+
CFLAGS += -DZSTD_LEGACY_MULTITHREADED_API
|
|
157
|
+
endif
|
|
158
|
+
|
|
110
159
|
ifneq ($(ZSTD_LEGACY_SUPPORT), 0)
|
|
111
160
|
ifeq ($(shell test $(ZSTD_LEGACY_SUPPORT) -lt 8; echo $$?), 0)
|
|
112
161
|
ZSTD_FILES += $(shell ls legacy/*.c | $(GREP) 'v0[$(ZSTD_LEGACY_SUPPORT)-7]')
|
|
113
162
|
endif
|
|
114
|
-
CPPFLAGS += -I./legacy
|
|
115
163
|
endif
|
|
116
164
|
CPPFLAGS += -DZSTD_LEGACY_SUPPORT=$(ZSTD_LEGACY_SUPPORT)
|
|
117
165
|
|
|
@@ -132,27 +180,26 @@ else
|
|
|
132
180
|
endif
|
|
133
181
|
|
|
134
182
|
|
|
135
|
-
.PHONY: default all clean install uninstall
|
|
183
|
+
.PHONY: default lib-all all clean install uninstall
|
|
136
184
|
|
|
137
185
|
default: lib-release
|
|
138
186
|
|
|
187
|
+
# alias
|
|
188
|
+
lib-all: all
|
|
189
|
+
|
|
139
190
|
all: lib
|
|
140
191
|
|
|
141
192
|
libzstd.a: ARFLAGS = rcs
|
|
142
193
|
libzstd.a: $(ZSTD_OBJ)
|
|
143
194
|
@echo compiling static library
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
libzstd.a-mt: CPPFLAGS += -DZSTD_MULTITHREAD
|
|
147
|
-
libzstd.a-mt: libzstd.a
|
|
195
|
+
$(Q)$(AR) $(ARFLAGS) $@ $^
|
|
148
196
|
|
|
149
|
-
ifneq (,$(filter Windows%,$(
|
|
197
|
+
ifneq (,$(filter Windows%,$(TARGET_SYSTEM)))
|
|
150
198
|
|
|
151
199
|
LIBZSTD = dll\libzstd.dll
|
|
152
200
|
$(LIBZSTD): $(ZSTD_FILES)
|
|
153
201
|
@echo compiling dynamic library $(LIBVER)
|
|
154
|
-
|
|
155
|
-
dlltool -D $@ -d dll\libzstd.def -l dll\libzstd.lib
|
|
202
|
+
$(CC) $(FLAGS) -DZSTD_DLL_EXPORT=1 -Wl,--out-implib,dll\libzstd.dll.a -shared $^ -o $@
|
|
156
203
|
|
|
157
204
|
else
|
|
158
205
|
|
|
@@ -160,27 +207,30 @@ LIBZSTD = libzstd.$(SHARED_EXT_VER)
|
|
|
160
207
|
$(LIBZSTD): LDFLAGS += -shared -fPIC -fvisibility=hidden
|
|
161
208
|
$(LIBZSTD): $(ZSTD_FILES)
|
|
162
209
|
@echo compiling dynamic library $(LIBVER)
|
|
163
|
-
|
|
210
|
+
$(Q)$(CC) $(FLAGS) $^ $(LDFLAGS) $(SONAME_FLAGS) -o $@
|
|
164
211
|
@echo creating versioned links
|
|
165
|
-
|
|
166
|
-
|
|
212
|
+
$(Q)ln -sf $@ libzstd.$(SHARED_EXT_MAJOR)
|
|
213
|
+
$(Q)ln -sf $@ libzstd.$(SHARED_EXT)
|
|
167
214
|
|
|
168
215
|
endif
|
|
169
216
|
|
|
170
|
-
|
|
217
|
+
.PHONY: libzstd
|
|
171
218
|
libzstd : $(LIBZSTD)
|
|
172
219
|
|
|
173
|
-
|
|
174
|
-
|
|
220
|
+
.PHONY: lib
|
|
221
|
+
lib : libzstd.a libzstd
|
|
175
222
|
|
|
176
|
-
|
|
223
|
+
.PHONY: lib-mt
|
|
224
|
+
%-mt : CPPFLAGS += -DZSTD_MULTITHREAD
|
|
225
|
+
%-mt : LDFLAGS += -pthread
|
|
226
|
+
%-mt : %
|
|
227
|
+
@echo multi-threading build completed
|
|
177
228
|
|
|
178
|
-
|
|
179
|
-
|
|
229
|
+
.PHONY: lib-release
|
|
230
|
+
%-release : DEBUGFLAGS :=
|
|
231
|
+
%-release : %
|
|
232
|
+
@echo release build completed
|
|
180
233
|
|
|
181
|
-
lib-release lib-release-mt: DEBUGFLAGS :=
|
|
182
|
-
lib-release: lib
|
|
183
|
-
lib-release-mt: lib-mt
|
|
184
234
|
|
|
185
235
|
# Special case : building library in single-thread mode _and_ without zstdmt_compress.c
|
|
186
236
|
ZSTDMT_FILES = compress/zstdmt_compress.c
|
|
@@ -189,20 +239,22 @@ libzstd-nomt: LDFLAGS += -shared -fPIC -fvisibility=hidden
|
|
|
189
239
|
libzstd-nomt: $(ZSTD_NOMT_FILES)
|
|
190
240
|
@echo compiling single-thread dynamic library $(LIBVER)
|
|
191
241
|
@echo files : $(ZSTD_NOMT_FILES)
|
|
192
|
-
|
|
242
|
+
$(Q)$(CC) $(FLAGS) $^ $(LDFLAGS) $(SONAME_FLAGS) -o $@
|
|
193
243
|
|
|
194
244
|
clean:
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
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
|
|
199
249
|
@echo Cleaning library completed
|
|
200
250
|
|
|
201
251
|
#-----------------------------------------------------------------------------
|
|
202
|
-
# make install is validated only for
|
|
252
|
+
# make install is validated only for below listed environments
|
|
203
253
|
#-----------------------------------------------------------------------------
|
|
204
254
|
ifneq (,$(filter $(shell uname),Linux Darwin GNU/kFreeBSD GNU OpenBSD FreeBSD NetBSD DragonFly SunOS Haiku))
|
|
205
255
|
|
|
256
|
+
all: libzstd.pc
|
|
257
|
+
|
|
206
258
|
DESTDIR ?=
|
|
207
259
|
# directory variables : GNU conventions prefer lowercase
|
|
208
260
|
# see https://www.gnu.org/prep/standards/html_node/Makefile-Conventions.html
|
|
@@ -210,11 +262,31 @@ DESTDIR ?=
|
|
|
210
262
|
prefix ?= /usr/local
|
|
211
263
|
PREFIX ?= $(prefix)
|
|
212
264
|
exec_prefix ?= $(PREFIX)
|
|
213
|
-
|
|
265
|
+
EXEC_PREFIX ?= $(exec_prefix)
|
|
266
|
+
libdir ?= $(EXEC_PREFIX)/lib
|
|
214
267
|
LIBDIR ?= $(libdir)
|
|
215
268
|
includedir ?= $(PREFIX)/include
|
|
216
269
|
INCLUDEDIR ?= $(includedir)
|
|
217
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
|
+
|
|
218
290
|
ifneq (,$(filter $(shell uname),FreeBSD NetBSD DragonFly))
|
|
219
291
|
PKGCONFIGDIR ?= $(PREFIX)/libdata/pkgconfig
|
|
220
292
|
else
|
|
@@ -234,49 +306,49 @@ INSTALL_DATA ?= $(INSTALL) -m 644
|
|
|
234
306
|
libzstd.pc:
|
|
235
307
|
libzstd.pc: libzstd.pc.in
|
|
236
308
|
@echo creating pkgconfig
|
|
237
|
-
@sed -e 's|@PREFIX@|$(PREFIX)|' \
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
309
|
+
$(Q)@sed -E -e 's|@PREFIX@|$(PREFIX)|' \
|
|
310
|
+
-e 's|@LIBDIR@|$(PCLIBDIR)|' \
|
|
311
|
+
-e 's|@INCLUDEDIR@|$(PCINCDIR)|' \
|
|
312
|
+
-e 's|@VERSION@|$(VERSION)|' \
|
|
313
|
+
$< >$@
|
|
242
314
|
|
|
243
315
|
install: install-pc install-static install-shared install-includes
|
|
244
316
|
@echo zstd static and shared library installed
|
|
245
317
|
|
|
246
318
|
install-pc: libzstd.pc
|
|
247
|
-
|
|
248
|
-
|
|
319
|
+
$(Q)$(INSTALL) -d -m 755 $(DESTDIR)$(PKGCONFIGDIR)/
|
|
320
|
+
$(Q)$(INSTALL_DATA) libzstd.pc $(DESTDIR)$(PKGCONFIGDIR)/
|
|
249
321
|
|
|
250
322
|
install-static: libzstd.a
|
|
251
323
|
@echo Installing static library
|
|
252
|
-
|
|
253
|
-
|
|
324
|
+
$(Q)$(INSTALL) -d -m 755 $(DESTDIR)$(LIBDIR)/
|
|
325
|
+
$(Q)$(INSTALL_DATA) libzstd.a $(DESTDIR)$(LIBDIR)
|
|
254
326
|
|
|
255
327
|
install-shared: libzstd
|
|
256
328
|
@echo Installing shared library
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
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)
|
|
261
333
|
|
|
262
334
|
install-includes:
|
|
263
335
|
@echo Installing includes
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
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)
|
|
269
341
|
|
|
270
342
|
uninstall:
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
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
|
|
280
352
|
@echo zstd libraries successfully uninstalled
|
|
281
353
|
|
|
282
354
|
endif
|
|
@@ -27,12 +27,10 @@ Enabling multithreading requires 2 conditions :
|
|
|
27
27
|
Both conditions are automatically applied when invoking `make lib-mt` target.
|
|
28
28
|
|
|
29
29
|
When linking a POSIX program with a multithreaded version of `libzstd`,
|
|
30
|
-
note that it's necessary to
|
|
30
|
+
note that it's necessary to invoke the `-pthread` flag during link stage.
|
|
31
31
|
|
|
32
32
|
Multithreading capabilities are exposed
|
|
33
|
-
via the [advanced API defined in `lib/zstd.h`](https://github.com/facebook/zstd/blob/v1.3
|
|
34
|
-
This API is still labelled experimental,
|
|
35
|
-
but is expected to become "stable" in the near future.
|
|
33
|
+
via the [advanced API defined in `lib/zstd.h`](https://github.com/facebook/zstd/blob/v1.4.3/lib/zstd.h#L351).
|
|
36
34
|
|
|
37
35
|
|
|
38
36
|
#### API
|
|
@@ -87,28 +85,63 @@ The file structure is designed to make this selection manually achievable for an
|
|
|
87
85
|
|
|
88
86
|
- While invoking `make libzstd`, it's possible to define build macros
|
|
89
87
|
`ZSTD_LIB_COMPRESSION, ZSTD_LIB_DECOMPRESSION`, `ZSTD_LIB_DICTBUILDER`,
|
|
90
|
-
and `ZSTD_LIB_DEPRECATED` as `0` to forgo compilation of the
|
|
91
|
-
This will also disable compilation of all
|
|
92
|
-
(eg. `ZSTD_LIB_COMPRESSION=0` will also disable
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
88
|
+
and `ZSTD_LIB_DEPRECATED` as `0` to forgo compilation of the
|
|
89
|
+
corresponding features. This will also disable compilation of all
|
|
90
|
+
dependencies (eg. `ZSTD_LIB_COMPRESSION=0` will also disable
|
|
91
|
+
dictBuilder).
|
|
92
|
+
|
|
93
|
+
- There are a number of options that can help minimize the binary size of
|
|
94
|
+
`libzstd`.
|
|
95
|
+
|
|
96
|
+
The first step is to select the components needed (using the above-described
|
|
97
|
+
`ZSTD_LIB_COMPRESSION` etc.).
|
|
98
|
+
|
|
99
|
+
The next step is to set `ZSTD_LIB_MINIFY` to `1` when invoking `make`. This
|
|
100
|
+
disables various optional components and changes the compilation flags to
|
|
101
|
+
prioritize space-saving.
|
|
102
|
+
|
|
103
|
+
Detailed options: Zstandard's code and build environment is set up by default
|
|
104
|
+
to optimize above all else for performance. In pursuit of this goal, Zstandard
|
|
105
|
+
makes significant trade-offs in code size. For example, Zstandard often has
|
|
106
|
+
more than one implementation of a particular component, with each
|
|
107
|
+
implementation optimized for different scenarios. For example, the Huffman
|
|
108
|
+
decoder has complementary implementations that decode the stream one symbol at
|
|
109
|
+
a time or two symbols at a time. Zstd normally includes both (and dispatches
|
|
110
|
+
between them at runtime), but by defining `HUF_FORCE_DECOMPRESS_X1` or
|
|
111
|
+
`HUF_FORCE_DECOMPRESS_X2`, you can force the use of one or the other, avoiding
|
|
102
112
|
compilation of the other. Similarly, `ZSTD_FORCE_DECOMPRESS_SEQUENCES_SHORT`
|
|
103
113
|
and `ZSTD_FORCE_DECOMPRESS_SEQUENCES_LONG` force the compilation and use of
|
|
104
114
|
only one or the other of two decompression implementations. The smallest
|
|
105
115
|
binary is achieved by using `HUF_FORCE_DECOMPRESS_X1` and
|
|
106
|
-
`ZSTD_FORCE_DECOMPRESS_SEQUENCES_SHORT
|
|
116
|
+
`ZSTD_FORCE_DECOMPRESS_SEQUENCES_SHORT` (implied by `ZSTD_LIB_MINIFY`).
|
|
107
117
|
|
|
108
118
|
For squeezing the last ounce of size out, you can also define
|
|
109
119
|
`ZSTD_NO_INLINE`, which disables inlining, and `ZSTD_STRIP_ERROR_STRINGS`,
|
|
110
120
|
which removes the error messages that are otherwise returned by
|
|
111
|
-
`ZSTD_getErrorName
|
|
121
|
+
`ZSTD_getErrorName` (implied by `ZSTD_LIB_MINIFY`).
|
|
122
|
+
|
|
123
|
+
Finally, when integrating into your application, make sure you're doing link-
|
|
124
|
+
time optimation and unused symbol garbage collection (via some combination of,
|
|
125
|
+
e.g., `-flto`, `-ffat-lto-objects`, `-fuse-linker-plugin`,
|
|
126
|
+
`-ffunction-sections`, `-fdata-sections`, `-fmerge-all-constants`,
|
|
127
|
+
`-Wl,--gc-sections`, `-Wl,-z,norelro`, and an archiver that understands
|
|
128
|
+
the compiler's intermediate representation, e.g., `AR=gcc-ar`). Consult your
|
|
129
|
+
compiler's documentation.
|
|
130
|
+
|
|
131
|
+
- While invoking `make libzstd`, the build macro `ZSTD_LEGACY_MULTITHREADED_API=1`
|
|
132
|
+
will expose the deprecated `ZSTDMT` API exposed by `zstdmt_compress.h` in
|
|
133
|
+
the shared library, which is now hidden by default.
|
|
134
|
+
|
|
135
|
+
- The build macro `DYNAMIC_BMI2` can be set to 1 or 0 in order to generate binaries
|
|
136
|
+
which can detect at runtime the presence of BMI2 instructions, and use them only if present.
|
|
137
|
+
These instructions contribute to better performance, notably on the decoder side.
|
|
138
|
+
By default, this feature is automatically enabled on detecting
|
|
139
|
+
the right instruction set (x64) and compiler (clang or gcc >= 5).
|
|
140
|
+
It's obviously disabled for different cpus,
|
|
141
|
+
or when BMI2 instruction set is _required_ by the compiler command line
|
|
142
|
+
(in this case, only the BMI2 code path is generated).
|
|
143
|
+
Setting this macro will either force to generate the BMI2 dispatcher (1)
|
|
144
|
+
or prevent it (0). It overrides automatic detection.
|
|
112
145
|
|
|
113
146
|
|
|
114
147
|
#### Windows : using MinGW+MSYS to create DLL
|