extzstd 0.3.1 → 0.3.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +28 -14
- data/contrib/zstd/CHANGELOG +301 -56
- data/contrib/zstd/CONTRIBUTING.md +169 -72
- data/contrib/zstd/LICENSE +4 -4
- data/contrib/zstd/Makefile +116 -87
- data/contrib/zstd/Package.swift +36 -0
- data/contrib/zstd/README.md +62 -32
- data/contrib/zstd/TESTING.md +2 -3
- data/contrib/zstd/appveyor.yml +52 -136
- data/contrib/zstd/lib/BUCK +5 -7
- data/contrib/zstd/lib/Makefile +225 -222
- data/contrib/zstd/lib/README.md +51 -6
- data/contrib/zstd/lib/common/allocations.h +55 -0
- data/contrib/zstd/lib/common/bits.h +200 -0
- data/contrib/zstd/lib/common/bitstream.h +45 -62
- data/contrib/zstd/lib/common/compiler.h +205 -22
- data/contrib/zstd/lib/common/cpu.h +1 -3
- data/contrib/zstd/lib/common/debug.c +1 -1
- data/contrib/zstd/lib/common/debug.h +12 -19
- data/contrib/zstd/lib/common/entropy_common.c +172 -48
- data/contrib/zstd/lib/common/error_private.c +10 -2
- data/contrib/zstd/lib/common/error_private.h +82 -3
- data/contrib/zstd/lib/common/fse.h +37 -86
- data/contrib/zstd/lib/common/fse_decompress.c +117 -92
- data/contrib/zstd/lib/common/huf.h +99 -166
- data/contrib/zstd/lib/common/mem.h +124 -142
- data/contrib/zstd/lib/common/pool.c +54 -27
- data/contrib/zstd/lib/common/pool.h +10 -4
- data/contrib/zstd/lib/common/portability_macros.h +156 -0
- data/contrib/zstd/lib/common/threading.c +74 -19
- data/contrib/zstd/lib/common/threading.h +5 -10
- data/contrib/zstd/lib/common/xxhash.c +7 -847
- data/contrib/zstd/lib/common/xxhash.h +5568 -167
- data/contrib/zstd/lib/common/zstd_common.c +2 -37
- data/contrib/zstd/lib/common/zstd_deps.h +111 -0
- data/contrib/zstd/lib/common/zstd_internal.h +132 -187
- data/contrib/zstd/lib/common/zstd_trace.h +163 -0
- data/contrib/zstd/lib/compress/clevels.h +134 -0
- data/contrib/zstd/lib/compress/fse_compress.c +83 -157
- data/contrib/zstd/lib/compress/hist.c +27 -29
- data/contrib/zstd/lib/compress/hist.h +2 -2
- data/contrib/zstd/lib/compress/huf_compress.c +916 -279
- data/contrib/zstd/lib/compress/zstd_compress.c +3773 -1019
- data/contrib/zstd/lib/compress/zstd_compress_internal.h +610 -203
- data/contrib/zstd/lib/compress/zstd_compress_literals.c +119 -42
- data/contrib/zstd/lib/compress/zstd_compress_literals.h +16 -6
- data/contrib/zstd/lib/compress/zstd_compress_sequences.c +42 -19
- data/contrib/zstd/lib/compress/zstd_compress_sequences.h +1 -1
- data/contrib/zstd/lib/compress/zstd_compress_superblock.c +49 -317
- data/contrib/zstd/lib/compress/zstd_compress_superblock.h +1 -1
- data/contrib/zstd/lib/compress/zstd_cwksp.h +320 -103
- data/contrib/zstd/lib/compress/zstd_double_fast.c +388 -151
- data/contrib/zstd/lib/compress/zstd_double_fast.h +3 -2
- data/contrib/zstd/lib/compress/zstd_fast.c +729 -265
- data/contrib/zstd/lib/compress/zstd_fast.h +3 -2
- data/contrib/zstd/lib/compress/zstd_lazy.c +1270 -251
- data/contrib/zstd/lib/compress/zstd_lazy.h +61 -1
- data/contrib/zstd/lib/compress/zstd_ldm.c +324 -219
- data/contrib/zstd/lib/compress/zstd_ldm.h +9 -2
- data/contrib/zstd/lib/compress/zstd_ldm_geartab.h +106 -0
- data/contrib/zstd/lib/compress/zstd_opt.c +481 -209
- data/contrib/zstd/lib/compress/zstd_opt.h +1 -1
- data/contrib/zstd/lib/compress/zstdmt_compress.c +181 -457
- data/contrib/zstd/lib/compress/zstdmt_compress.h +34 -113
- data/contrib/zstd/lib/decompress/huf_decompress.c +1199 -565
- data/contrib/zstd/lib/decompress/huf_decompress_amd64.S +576 -0
- data/contrib/zstd/lib/decompress/zstd_ddict.c +12 -12
- data/contrib/zstd/lib/decompress/zstd_ddict.h +2 -2
- data/contrib/zstd/lib/decompress/zstd_decompress.c +627 -157
- data/contrib/zstd/lib/decompress/zstd_decompress_block.c +1086 -326
- data/contrib/zstd/lib/decompress/zstd_decompress_block.h +19 -5
- data/contrib/zstd/lib/decompress/zstd_decompress_internal.h +62 -13
- data/contrib/zstd/lib/deprecated/zbuff.h +1 -1
- data/contrib/zstd/lib/deprecated/zbuff_common.c +1 -1
- data/contrib/zstd/lib/deprecated/zbuff_compress.c +24 -4
- data/contrib/zstd/lib/deprecated/zbuff_decompress.c +3 -1
- data/contrib/zstd/lib/dictBuilder/cover.c +73 -52
- data/contrib/zstd/lib/dictBuilder/cover.h +7 -6
- data/contrib/zstd/lib/dictBuilder/divsufsort.c +1 -1
- data/contrib/zstd/lib/dictBuilder/fastcover.c +44 -35
- data/contrib/zstd/lib/dictBuilder/zdict.c +103 -111
- data/contrib/zstd/lib/legacy/zstd_legacy.h +8 -1
- data/contrib/zstd/lib/legacy/zstd_v01.c +21 -54
- data/contrib/zstd/lib/legacy/zstd_v01.h +1 -1
- data/contrib/zstd/lib/legacy/zstd_v02.c +29 -70
- data/contrib/zstd/lib/legacy/zstd_v02.h +1 -1
- data/contrib/zstd/lib/legacy/zstd_v03.c +30 -73
- data/contrib/zstd/lib/legacy/zstd_v03.h +1 -1
- data/contrib/zstd/lib/legacy/zstd_v04.c +29 -71
- data/contrib/zstd/lib/legacy/zstd_v04.h +1 -1
- data/contrib/zstd/lib/legacy/zstd_v05.c +40 -86
- data/contrib/zstd/lib/legacy/zstd_v05.h +1 -1
- data/contrib/zstd/lib/legacy/zstd_v06.c +47 -88
- data/contrib/zstd/lib/legacy/zstd_v06.h +1 -1
- data/contrib/zstd/lib/legacy/zstd_v07.c +40 -83
- data/contrib/zstd/lib/legacy/zstd_v07.h +1 -1
- data/contrib/zstd/lib/libzstd.mk +214 -0
- data/contrib/zstd/lib/libzstd.pc.in +7 -6
- data/contrib/zstd/lib/module.modulemap +35 -0
- data/contrib/zstd/lib/{dictBuilder/zdict.h → zdict.h} +203 -34
- data/contrib/zstd/lib/zstd.h +1217 -287
- data/contrib/zstd/lib/{common/zstd_errors.h → zstd_errors.h} +28 -8
- data/ext/extconf.rb +7 -6
- data/ext/extzstd.c +19 -10
- data/ext/extzstd.h +6 -0
- data/ext/libzstd_conf.h +0 -1
- data/ext/zstd_decompress_asm.S +1 -0
- data/gemstub.rb +3 -21
- data/lib/extzstd/version.rb +6 -1
- data/lib/extzstd.rb +0 -2
- data/test/test_basic.rb +0 -5
- metadata +18 -6
data/contrib/zstd/Makefile
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# ################################################################
|
2
|
-
# Copyright (c)
|
2
|
+
# Copyright (c) Meta Platforms, Inc. and affiliates.
|
3
3
|
# All rights reserved.
|
4
4
|
#
|
5
5
|
# This source code is licensed under both the BSD-style license (found in the
|
@@ -8,6 +8,9 @@
|
|
8
8
|
# You may select, at your option, one of the above-listed licenses.
|
9
9
|
# ################################################################
|
10
10
|
|
11
|
+
# verbose mode (print commands) on V=1 or VERBOSE=1
|
12
|
+
Q = $(if $(filter 1,$(V) $(VERBOSE)),,@)
|
13
|
+
|
11
14
|
PRGDIR = programs
|
12
15
|
ZSTDDIR = lib
|
13
16
|
BUILDIR = build
|
@@ -26,11 +29,12 @@ VOID = /dev/null
|
|
26
29
|
# fail on other tested distros (ubuntu, debian) even
|
27
30
|
# without manually specifying the TARGET_SYSTEM.
|
28
31
|
TARGET_SYSTEM ?= $(OS)
|
32
|
+
CP ?= cp
|
29
33
|
|
30
34
|
ifneq (,$(filter Windows%,$(TARGET_SYSTEM)))
|
31
|
-
EXT =.exe
|
35
|
+
EXT =.exe
|
32
36
|
else
|
33
|
-
EXT =
|
37
|
+
EXT =
|
34
38
|
endif
|
35
39
|
|
36
40
|
## default: Build lib-release and zstd-release
|
@@ -45,28 +49,28 @@ allmost: allzstd zlibwrapper
|
|
45
49
|
|
46
50
|
# skip zwrapper, can't build that on alternate architectures without the proper zlib installed
|
47
51
|
.PHONY: allzstd
|
48
|
-
allzstd: lib
|
49
|
-
$(MAKE) -C $(PRGDIR) all
|
50
|
-
$(MAKE) -C $(TESTDIR) all
|
52
|
+
allzstd: lib
|
53
|
+
$(Q)$(MAKE) -C $(PRGDIR) all
|
54
|
+
$(Q)$(MAKE) -C $(TESTDIR) all
|
51
55
|
|
52
56
|
.PHONY: all32
|
53
57
|
all32:
|
54
58
|
$(MAKE) -C $(PRGDIR) zstd32
|
55
59
|
$(MAKE) -C $(TESTDIR) all32
|
56
60
|
|
57
|
-
.PHONY: lib lib-release
|
58
|
-
lib lib-release lib-
|
59
|
-
|
61
|
+
.PHONY: lib lib-release lib-mt lib-nomt
|
62
|
+
lib lib-release lib-mt lib-nomt:
|
63
|
+
$(Q)$(MAKE) -C $(ZSTDDIR) $@
|
60
64
|
|
61
65
|
.PHONY: zstd zstd-release
|
62
66
|
zstd zstd-release:
|
63
|
-
|
64
|
-
|
67
|
+
$(Q)$(MAKE) -C $(PRGDIR) $@
|
68
|
+
$(Q)ln -sf $(PRGDIR)/zstd$(EXT) zstd$(EXT)
|
65
69
|
|
66
70
|
.PHONY: zstdmt
|
67
71
|
zstdmt:
|
68
|
-
|
69
|
-
|
72
|
+
$(Q)$(MAKE) -C $(PRGDIR) $@
|
73
|
+
$(Q)$(CP) $(PRGDIR)/zstd$(EXT) ./zstdmt$(EXT)
|
70
74
|
|
71
75
|
.PHONY: zlibwrapper
|
72
76
|
zlibwrapper: lib
|
@@ -75,16 +79,16 @@ zlibwrapper: lib
|
|
75
79
|
## test: run long-duration tests
|
76
80
|
.PHONY: test
|
77
81
|
DEBUGLEVEL ?= 1
|
78
|
-
test: MOREFLAGS += -g -
|
82
|
+
test: MOREFLAGS += -g -Werror
|
79
83
|
test:
|
80
|
-
MOREFLAGS="$(MOREFLAGS)" $(MAKE) -j -C $(PRGDIR) allVariants
|
84
|
+
DEBUGLEVEL=$(DEBUGLEVEL) MOREFLAGS="$(MOREFLAGS)" $(MAKE) -j -C $(PRGDIR) allVariants
|
81
85
|
$(MAKE) -C $(TESTDIR) $@
|
82
|
-
ZSTD=../../programs/zstd $(MAKE) -C doc/educational_decoder
|
86
|
+
ZSTD=../../programs/zstd $(MAKE) -C doc/educational_decoder $@
|
83
87
|
|
84
88
|
## shortest: same as `make check`
|
85
89
|
.PHONY: shortest
|
86
90
|
shortest:
|
87
|
-
$(MAKE) -C $(TESTDIR) $@
|
91
|
+
$(Q)$(MAKE) -C $(TESTDIR) $@
|
88
92
|
|
89
93
|
## check: run basic tests for `zstd` cli
|
90
94
|
.PHONY: check
|
@@ -97,10 +101,10 @@ automated_benchmarking:
|
|
97
101
|
.PHONY: benchmarking
|
98
102
|
benchmarking: automated_benchmarking
|
99
103
|
|
100
|
-
## examples: build all examples in
|
104
|
+
## examples: build all examples in `examples/` directory
|
101
105
|
.PHONY: examples
|
102
106
|
examples: lib
|
103
|
-
|
107
|
+
$(MAKE) -C examples all
|
104
108
|
|
105
109
|
## manual: generate API documentation in html format
|
106
110
|
.PHONY: manual
|
@@ -117,9 +121,11 @@ man:
|
|
117
121
|
contrib: lib
|
118
122
|
$(MAKE) -C contrib/pzstd all
|
119
123
|
$(MAKE) -C contrib/seekable_format/examples all
|
124
|
+
$(MAKE) -C contrib/seekable_format/tests test
|
120
125
|
$(MAKE) -C contrib/largeNbDicts all
|
121
|
-
|
122
|
-
cd
|
126
|
+
$(MAKE) -C contrib/externalSequenceProducer all
|
127
|
+
cd build/single_file_libs/ ; ./build_decoder_test.sh
|
128
|
+
cd build/single_file_libs/ ; ./build_library_test.sh
|
123
129
|
|
124
130
|
.PHONY: cleanTabs
|
125
131
|
cleanTabs:
|
@@ -127,30 +133,33 @@ cleanTabs:
|
|
127
133
|
|
128
134
|
.PHONY: clean
|
129
135
|
clean:
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
136
|
+
$(Q)$(MAKE) -C $(ZSTDDIR) $@ > $(VOID)
|
137
|
+
$(Q)$(MAKE) -C $(PRGDIR) $@ > $(VOID)
|
138
|
+
$(Q)$(MAKE) -C $(TESTDIR) $@ > $(VOID)
|
139
|
+
$(Q)$(MAKE) -C $(ZWRAPDIR) $@ > $(VOID)
|
140
|
+
$(Q)$(MAKE) -C examples/ $@ > $(VOID)
|
141
|
+
$(Q)$(MAKE) -C contrib/gen_html $@ > $(VOID)
|
142
|
+
$(Q)$(MAKE) -C contrib/pzstd $@ > $(VOID)
|
143
|
+
$(Q)$(MAKE) -C contrib/seekable_format/examples $@ > $(VOID)
|
144
|
+
$(Q)$(MAKE) -C contrib/seekable_format/tests $@ > $(VOID)
|
145
|
+
$(Q)$(MAKE) -C contrib/largeNbDicts $@ > $(VOID)
|
146
|
+
$(Q)$(MAKE) -C contrib/externalSequenceProducer $@ > $(VOID)
|
147
|
+
$(Q)$(RM) zstd$(EXT) zstdmt$(EXT) tmp*
|
148
|
+
$(Q)$(RM) -r lz4
|
141
149
|
@echo Cleaning completed
|
142
150
|
|
143
151
|
#------------------------------------------------------------------------------
|
144
152
|
# make install is validated only for Linux, macOS, Hurd and some BSD targets
|
145
153
|
#------------------------------------------------------------------------------
|
146
|
-
ifneq (,$(filter $(shell uname),Linux Darwin GNU/kFreeBSD GNU OpenBSD FreeBSD DragonFly NetBSD MSYS_NT Haiku))
|
154
|
+
ifneq (,$(filter $(shell uname),Linux Darwin GNU/kFreeBSD GNU OpenBSD FreeBSD DragonFly NetBSD MSYS_NT Haiku AIX))
|
147
155
|
|
148
156
|
HOST_OS = POSIX
|
149
|
-
|
157
|
+
|
158
|
+
MKDIR ?= mkdir -p
|
150
159
|
|
151
160
|
HAVE_COLORNEVER = $(shell echo a | egrep --color=never a > /dev/null 2> /dev/null && echo 1 || echo 0)
|
152
161
|
EGREP_OPTIONS ?=
|
153
|
-
ifeq ($HAVE_COLORNEVER, 1)
|
162
|
+
ifeq ($(HAVE_COLORNEVER), 1)
|
154
163
|
EGREP_OPTIONS += --color=never
|
155
164
|
endif
|
156
165
|
EGREP = egrep $(EGREP_OPTIONS)
|
@@ -161,7 +170,7 @@ EGREP = egrep $(EGREP_OPTIONS)
|
|
161
170
|
## list: Print all targets and their descriptions (if provided)
|
162
171
|
.PHONY: list
|
163
172
|
list:
|
164
|
-
|
173
|
+
$(Q)TARGETS=$$($(MAKE) -pRrq -f $(lastword $(MAKEFILE_LIST)) : 2>/dev/null \
|
165
174
|
| awk -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' \
|
166
175
|
| $(EGREP) -v -e '^[^[:alnum:]]' | sort); \
|
167
176
|
{ \
|
@@ -174,36 +183,33 @@ list:
|
|
174
183
|
done \
|
175
184
|
} | column -t -s $$'\t'
|
176
185
|
|
177
|
-
.PHONY: install armtest usan asan uasan
|
186
|
+
.PHONY: install armtest usan asan uasan msan asan32
|
178
187
|
install:
|
179
|
-
|
180
|
-
|
188
|
+
$(Q)$(MAKE) -C $(ZSTDDIR) $@
|
189
|
+
$(Q)$(MAKE) -C $(PRGDIR) $@
|
181
190
|
|
182
191
|
.PHONY: uninstall
|
183
192
|
uninstall:
|
184
|
-
|
185
|
-
|
193
|
+
$(Q)$(MAKE) -C $(ZSTDDIR) $@
|
194
|
+
$(Q)$(MAKE) -C $(PRGDIR) $@
|
186
195
|
|
187
196
|
.PHONY: travis-install
|
188
197
|
travis-install:
|
189
198
|
$(MAKE) install PREFIX=~/install_test_dir
|
190
199
|
|
191
|
-
.PHONY: gcc5build
|
200
|
+
.PHONY: gcc5build gcc6build gcc7build clangbuild m32build armbuild aarch64build ppcbuild ppc64build
|
192
201
|
gcc5build: clean
|
193
202
|
gcc-5 -v
|
194
|
-
CC=gcc-5 $(MAKE) all MOREFLAGS="-Werror"
|
203
|
+
CC=gcc-5 $(MAKE) all MOREFLAGS="-Werror $(MOREFLAGS)"
|
195
204
|
|
196
|
-
.PHONY: gcc6build
|
197
205
|
gcc6build: clean
|
198
206
|
gcc-6 -v
|
199
|
-
CC=gcc-6 $(MAKE) all MOREFLAGS="-Werror"
|
207
|
+
CC=gcc-6 $(MAKE) all MOREFLAGS="-Werror $(MOREFLAGS)"
|
200
208
|
|
201
|
-
.PHONY: gcc7build
|
202
209
|
gcc7build: clean
|
203
210
|
gcc-7 -v
|
204
|
-
CC=gcc-7 $(MAKE) all MOREFLAGS="-Werror"
|
211
|
+
CC=gcc-7 $(MAKE) all MOREFLAGS="-Werror $(MOREFLAGS)"
|
205
212
|
|
206
|
-
.PHONY: clangbuild
|
207
213
|
clangbuild: clean
|
208
214
|
clang -v
|
209
215
|
CXX=clang++ CC=clang CFLAGS="-Werror -Wconversion -Wno-sign-conversion -Wdocumentation" $(MAKE) all
|
@@ -216,61 +222,63 @@ armbuild: clean
|
|
216
222
|
CC=arm-linux-gnueabi-gcc CFLAGS="-Werror" $(MAKE) allzstd
|
217
223
|
|
218
224
|
aarch64build: clean
|
219
|
-
CC=aarch64-linux-gnu-gcc CFLAGS="-Werror" $(MAKE) allzstd
|
225
|
+
CC=aarch64-linux-gnu-gcc CFLAGS="-Werror -O0" $(MAKE) allzstd
|
220
226
|
|
221
227
|
ppcbuild: clean
|
222
|
-
CC=powerpc-linux-gnu-gcc CFLAGS="-m32 -Wno-attributes -Werror" $(MAKE) allzstd
|
228
|
+
CC=powerpc-linux-gnu-gcc CFLAGS="-m32 -Wno-attributes -Werror" $(MAKE) -j allzstd
|
223
229
|
|
224
230
|
ppc64build: clean
|
225
|
-
CC=powerpc-linux-gnu-gcc CFLAGS="-m64 -Werror" $(MAKE) allzstd
|
231
|
+
CC=powerpc-linux-gnu-gcc CFLAGS="-m64 -Werror" $(MAKE) -j allzstd
|
226
232
|
|
233
|
+
.PHONY: armfuzz aarch64fuzz ppcfuzz ppc64fuzz
|
227
234
|
armfuzz: clean
|
228
|
-
CC=arm-linux-gnueabi-gcc QEMU_SYS=qemu-arm-static MOREFLAGS="-static" FUZZER_FLAGS
|
235
|
+
CC=arm-linux-gnueabi-gcc QEMU_SYS=qemu-arm-static MOREFLAGS="-static $(MOREFLAGS)" FUZZER_FLAGS="--no-big-tests $(FUZZER_FLAGS)" $(MAKE) -C $(TESTDIR) fuzztest
|
229
236
|
|
230
237
|
aarch64fuzz: clean
|
231
238
|
ld -v
|
232
|
-
CC=aarch64-linux-gnu-gcc QEMU_SYS=qemu-aarch64-static MOREFLAGS="-static" FUZZER_FLAGS
|
239
|
+
CC=aarch64-linux-gnu-gcc QEMU_SYS=qemu-aarch64-static MOREFLAGS="-static $(MOREFLAGS)" FUZZER_FLAGS="--no-big-tests $(FUZZER_FLAGS)" $(MAKE) -C $(TESTDIR) fuzztest
|
233
240
|
|
234
241
|
ppcfuzz: clean
|
235
|
-
CC=powerpc-linux-gnu-gcc QEMU_SYS=qemu-ppc-static MOREFLAGS="-static" FUZZER_FLAGS
|
242
|
+
CC=powerpc-linux-gnu-gcc QEMU_SYS=qemu-ppc-static MOREFLAGS="-static $(MOREFLAGS)" FUZZER_FLAGS="--no-big-tests $(FUZZER_FLAGS)" $(MAKE) -C $(TESTDIR) fuzztest
|
236
243
|
|
237
244
|
ppc64fuzz: clean
|
238
|
-
CC=powerpc-linux-gnu-gcc QEMU_SYS=qemu-ppc64-static MOREFLAGS="-m64 -static" FUZZER_FLAGS
|
245
|
+
CC=powerpc-linux-gnu-gcc QEMU_SYS=qemu-ppc64-static MOREFLAGS="-m64 -static $(MOREFLAGS)" FUZZER_FLAGS="--no-big-tests $(FUZZER_FLAGS)" $(MAKE) -C $(TESTDIR) fuzztest
|
239
246
|
|
240
|
-
.PHONY: cxxtest
|
247
|
+
.PHONY: cxxtest gcc5test gcc6test armtest aarch64test ppctest ppc64test
|
241
248
|
cxxtest: CXXFLAGS += -Wall -Wextra -Wundef -Wshadow -Wcast-align -Werror
|
242
249
|
cxxtest: clean
|
243
250
|
$(MAKE) -C $(PRGDIR) all CC="$(CXX) -Wno-deprecated" CFLAGS="$(CXXFLAGS)" # adding -Wno-deprecated to avoid clang++ warning on dealing with C files directly
|
244
251
|
|
245
252
|
gcc5test: clean
|
246
253
|
gcc-5 -v
|
247
|
-
$(MAKE) all CC=gcc-5 MOREFLAGS="-Werror"
|
254
|
+
$(MAKE) all CC=gcc-5 MOREFLAGS="-Werror $(MOREFLAGS)"
|
248
255
|
|
249
256
|
gcc6test: clean
|
250
257
|
gcc-6 -v
|
251
|
-
$(MAKE) all CC=gcc-6 MOREFLAGS="-Werror"
|
258
|
+
$(MAKE) all CC=gcc-6 MOREFLAGS="-Werror $(MOREFLAGS)"
|
252
259
|
|
253
260
|
armtest: clean
|
254
261
|
$(MAKE) -C $(TESTDIR) datagen # use native, faster
|
255
|
-
$(MAKE) -C $(TESTDIR) test CC=arm-linux-gnueabi-gcc QEMU_SYS=qemu-arm-static ZSTDRTTEST= MOREFLAGS="-Werror -static" FUZZER_FLAGS
|
262
|
+
$(MAKE) -C $(TESTDIR) test CC=arm-linux-gnueabi-gcc QEMU_SYS=qemu-arm-static ZSTDRTTEST= MOREFLAGS="-Werror -static $(MOREFLAGS)" FUZZER_FLAGS="--no-big-tests $(FUZZER_FLAGS)"
|
256
263
|
|
257
264
|
aarch64test:
|
258
265
|
$(MAKE) -C $(TESTDIR) datagen # use native, faster
|
259
|
-
$(MAKE) -C $(TESTDIR) test CC=aarch64-linux-gnu-gcc QEMU_SYS=qemu-aarch64-static ZSTDRTTEST= MOREFLAGS="-Werror -static" FUZZER_FLAGS
|
266
|
+
$(MAKE) -C $(TESTDIR) test CC=aarch64-linux-gnu-gcc QEMU_SYS=qemu-aarch64-static ZSTDRTTEST= MOREFLAGS="-Werror -static $(MOREFLAGS)" FUZZER_FLAGS="--no-big-tests $(FUZZER_FLAGS)"
|
260
267
|
|
261
268
|
ppctest: clean
|
262
269
|
$(MAKE) -C $(TESTDIR) datagen # use native, faster
|
263
|
-
$(MAKE) -C $(TESTDIR) test CC=powerpc-linux-gnu-gcc QEMU_SYS=qemu-ppc-static ZSTDRTTEST= MOREFLAGS="-Werror -Wno-attributes -static" FUZZER_FLAGS
|
270
|
+
$(MAKE) -C $(TESTDIR) test CC=powerpc-linux-gnu-gcc QEMU_SYS=qemu-ppc-static ZSTDRTTEST= MOREFLAGS="-Werror -Wno-attributes -static $(MOREFLAGS)" FUZZER_FLAGS="--no-big-tests $(FUZZER_FLAGS)"
|
264
271
|
|
265
272
|
ppc64test: clean
|
266
273
|
$(MAKE) -C $(TESTDIR) datagen # use native, faster
|
267
|
-
$(MAKE) -C $(TESTDIR) test CC=powerpc-linux-gnu-gcc QEMU_SYS=qemu-ppc64-static ZSTDRTTEST= MOREFLAGS="-m64 -static" FUZZER_FLAGS
|
274
|
+
$(MAKE) -C $(TESTDIR) test CC=powerpc-linux-gnu-gcc QEMU_SYS=qemu-ppc64-static ZSTDRTTEST= MOREFLAGS="-m64 -static $(MOREFLAGS)" FUZZER_FLAGS="--no-big-tests $(FUZZER_FLAGS)"
|
268
275
|
|
276
|
+
.PHONY: arm-ppc-compilation
|
269
277
|
arm-ppc-compilation:
|
270
|
-
$(MAKE) -C $(PRGDIR) clean zstd CC=arm-linux-gnueabi-gcc QEMU_SYS=qemu-arm-static ZSTDRTTEST= MOREFLAGS="-Werror -static"
|
271
|
-
$(MAKE) -C $(PRGDIR) clean zstd CC=aarch64-linux-gnu-gcc QEMU_SYS=qemu-aarch64-static ZSTDRTTEST= MOREFLAGS="-Werror -static"
|
272
|
-
$(MAKE) -C $(PRGDIR) clean zstd CC=powerpc-linux-gnu-gcc QEMU_SYS=qemu-ppc-static ZSTDRTTEST= MOREFLAGS="-Werror -Wno-attributes -static"
|
273
|
-
$(MAKE) -C $(PRGDIR) clean zstd CC=powerpc-linux-gnu-gcc QEMU_SYS=qemu-ppc64-static ZSTDRTTEST= MOREFLAGS="-m64 -static"
|
278
|
+
$(MAKE) -C $(PRGDIR) clean zstd CC=arm-linux-gnueabi-gcc QEMU_SYS=qemu-arm-static ZSTDRTTEST= MOREFLAGS="-Werror -static $(MOREFLAGS)"
|
279
|
+
$(MAKE) -C $(PRGDIR) clean zstd CC=aarch64-linux-gnu-gcc QEMU_SYS=qemu-aarch64-static ZSTDRTTEST= MOREFLAGS="-Werror -static $(MOREFLAGS)"
|
280
|
+
$(MAKE) -C $(PRGDIR) clean zstd CC=powerpc-linux-gnu-gcc QEMU_SYS=qemu-ppc-static ZSTDRTTEST= MOREFLAGS="-Werror -Wno-attributes -static $(MOREFLAGS)"
|
281
|
+
$(MAKE) -C $(PRGDIR) clean zstd CC=powerpc-linux-gnu-gcc QEMU_SYS=qemu-ppc64-static ZSTDRTTEST= MOREFLAGS="-m64 -static $(MOREFLAGS)"
|
274
282
|
|
275
283
|
regressiontest:
|
276
284
|
$(MAKE) -C $(FUZZDIR) regressiontest
|
@@ -281,44 +289,63 @@ uasanregressiontest:
|
|
281
289
|
msanregressiontest:
|
282
290
|
$(MAKE) -C $(FUZZDIR) regressiontest CC=clang CXX=clang++ CFLAGS="-O3 -fsanitize=memory" CXXFLAGS="-O3 -fsanitize=memory"
|
283
291
|
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
292
|
+
update_regressionResults : REGRESS_RESULTS_DIR := /tmp/regress_results_dir/
|
293
|
+
update_regressionResults:
|
294
|
+
$(MAKE) -C programs zstd
|
295
|
+
$(MAKE) -C tests/regression test
|
296
|
+
$(RM) -rf $(REGRESS_RESULTS_DIR)
|
297
|
+
$(MKDIR) $(REGRESS_RESULTS_DIR)
|
298
|
+
./tests/regression/test \
|
299
|
+
--cache tests/regression/cache \
|
300
|
+
--output $(REGRESS_RESULTS_DIR)/results.csv \
|
301
|
+
--zstd programs/zstd
|
302
|
+
echo "Showing results differences"
|
303
|
+
! diff tests/regression/results.csv $(REGRESS_RESULTS_DIR)/results.csv
|
304
|
+
echo "Updating results.csv"
|
305
|
+
$(CP) $(REGRESS_RESULTS_DIR)/results.csv tests/regression/results.csv
|
306
|
+
|
307
|
+
|
308
|
+
# run UBsan with -fsanitize-recover=pointer-overflow
|
309
|
+
# this only works with recent compilers such as gcc 8+
|
288
310
|
usan: clean
|
289
|
-
$(MAKE) test CC=clang MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize-recover=
|
311
|
+
$(MAKE) test CC=clang MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize-recover=pointer-overflow -fsanitize=undefined -Werror $(MOREFLAGS)"
|
290
312
|
|
291
313
|
asan: clean
|
292
|
-
$(MAKE) test CC=clang MOREFLAGS="-g -fsanitize=address -Werror"
|
314
|
+
$(MAKE) test CC=clang MOREFLAGS="-g -fsanitize=address -Werror $(MOREFLAGS)"
|
293
315
|
|
294
316
|
asan-%: clean
|
295
|
-
LDFLAGS=-fuse-ld=gold MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize=address -Werror" $(MAKE) -C $(TESTDIR) $*
|
317
|
+
LDFLAGS=-fuse-ld=gold MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize=address -Werror $(MOREFLAGS)" $(MAKE) -C $(TESTDIR) $*
|
296
318
|
|
297
319
|
msan: clean
|
298
|
-
$(MAKE) test CC=clang MOREFLAGS="-g -fsanitize=memory -fno-omit-frame-pointer -Werror" HAVE_LZMA=0 # datagen.c fails this test for no obvious reason
|
320
|
+
$(MAKE) test CC=clang MOREFLAGS="-g -fsanitize=memory -fno-omit-frame-pointer -Werror $(MOREFLAGS)" HAVE_LZMA=0 # datagen.c fails this test for no obvious reason
|
299
321
|
|
300
322
|
msan-%: clean
|
301
|
-
LDFLAGS=-fuse-ld=gold MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize=memory -fno-omit-frame-pointer -Werror" FUZZER_FLAGS
|
323
|
+
LDFLAGS=-fuse-ld=gold MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize=memory -fno-omit-frame-pointer -Werror $(MOREFLAGS)" FUZZER_FLAGS="--no-big-tests $(FUZZER_FLAGS)" $(MAKE) -C $(TESTDIR) HAVE_LZMA=0 $*
|
302
324
|
|
303
325
|
asan32: clean
|
304
|
-
$(MAKE) -C $(TESTDIR) test32 CC=clang MOREFLAGS="-g -fsanitize=address"
|
326
|
+
$(MAKE) -C $(TESTDIR) test32 CC=clang MOREFLAGS="-g -fsanitize=address $(MOREFLAGS)"
|
305
327
|
|
306
328
|
uasan: clean
|
307
|
-
$(MAKE) test CC=clang MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize-recover=
|
329
|
+
$(MAKE) test CC=clang MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize-recover=pointer-overflow -fsanitize=address,undefined -Werror $(MOREFLAGS)"
|
308
330
|
|
309
331
|
uasan-%: clean
|
310
|
-
LDFLAGS=-fuse-ld=gold MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize-recover=
|
332
|
+
LDFLAGS=-fuse-ld=gold MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize-recover=pointer-overflow -fsanitize=address,undefined -Werror $(MOREFLAGS)" $(MAKE) -C $(TESTDIR) $*
|
311
333
|
|
312
334
|
tsan-%: clean
|
313
|
-
LDFLAGS=-fuse-ld=gold MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize=thread -Werror" $(MAKE) -C $(TESTDIR) $* FUZZER_FLAGS
|
335
|
+
LDFLAGS=-fuse-ld=gold MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize=thread -Werror $(MOREFLAGS)" $(MAKE) -C $(TESTDIR) $* FUZZER_FLAGS="--no-big-tests $(FUZZER_FLAGS)"
|
314
336
|
|
337
|
+
.PHONY: apt-install
|
315
338
|
apt-install:
|
339
|
+
# TODO: uncomment once issue 3011 is resolved and remove hack from Github Actions .yml
|
340
|
+
# sudo apt-get update
|
316
341
|
sudo apt-get -yq --no-install-suggests --no-install-recommends --force-yes install $(APT_PACKAGES)
|
317
342
|
|
343
|
+
.PHONY: apt-add-repo
|
318
344
|
apt-add-repo:
|
319
345
|
sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
|
320
346
|
sudo apt-get update -y -qq
|
321
347
|
|
348
|
+
.PHONY: ppcinstall arminstall valgrindinstall libc6install gcc6install gcc7install gcc8install gpp6install clang38install lz4install
|
322
349
|
ppcinstall:
|
323
350
|
APT_PACKAGES="qemu-system-ppc qemu-user-static gcc-powerpc-linux-gnu" $(MAKE) apt-install
|
324
351
|
|
@@ -353,20 +380,22 @@ lz4install:
|
|
353
380
|
endif
|
354
381
|
|
355
382
|
|
383
|
+
CMAKE_PARAMS = -DZSTD_BUILD_CONTRIB:BOOL=ON -DZSTD_BUILD_STATIC:BOOL=ON -DZSTD_BUILD_TESTS:BOOL=ON -DZSTD_ZLIB_SUPPORT:BOOL=ON -DZSTD_LZMA_SUPPORT:BOOL=ON -DCMAKE_BUILD_TYPE=Release
|
384
|
+
|
356
385
|
ifneq (,$(filter MSYS%,$(shell uname)))
|
357
386
|
HOST_OS = MSYS
|
358
387
|
CMAKE_PARAMS = -G"MSYS Makefiles" -DCMAKE_BUILD_TYPE=Debug -DZSTD_MULTITHREAD_SUPPORT:BOOL=OFF -DZSTD_BUILD_STATIC:BOOL=ON -DZSTD_BUILD_TESTS:BOOL=ON
|
359
388
|
endif
|
360
389
|
|
361
|
-
|
362
390
|
#------------------------------------------------------------------------
|
363
391
|
# target specific tests
|
364
392
|
#------------------------------------------------------------------------
|
365
393
|
ifneq (,$(filter $(HOST_OS),MSYS POSIX))
|
394
|
+
.PHONY: cmakebuild c89build gnu90build c99build gnu99build c11build bmix64build bmix32build bmi32build staticAnalyze
|
366
395
|
cmakebuild:
|
367
396
|
cmake --version
|
368
397
|
$(RM) -r $(BUILDIR)/cmake/build
|
369
|
-
|
398
|
+
$(MKDIR) $(BUILDIR)/cmake/build
|
370
399
|
cd $(BUILDIR)/cmake/build; cmake -DCMAKE_INSTALL_PREFIX:PATH=~/install_test_dir $(CMAKE_PARAMS) ..
|
371
400
|
$(MAKE) -C $(BUILDIR)/cmake/build -j4;
|
372
401
|
$(MAKE) -C $(BUILDIR)/cmake/build install;
|
@@ -375,23 +404,23 @@ cmakebuild:
|
|
375
404
|
|
376
405
|
c89build: clean
|
377
406
|
$(CC) -v
|
378
|
-
CFLAGS="-std=c89 -Werror" $(MAKE)
|
407
|
+
CFLAGS="-std=c89 -Werror -Wno-attributes -Wpedantic -Wno-long-long -Wno-variadic-macros -O0" $(MAKE) lib zstd
|
379
408
|
|
380
409
|
gnu90build: clean
|
381
410
|
$(CC) -v
|
382
|
-
CFLAGS="-std=gnu90 -Werror" $(MAKE) allmost
|
411
|
+
CFLAGS="-std=gnu90 -Werror -O0" $(MAKE) allmost
|
383
412
|
|
384
413
|
c99build: clean
|
385
414
|
$(CC) -v
|
386
|
-
CFLAGS="-std=c99 -Werror" $(MAKE) allmost
|
415
|
+
CFLAGS="-std=c99 -Werror -O0" $(MAKE) allmost
|
387
416
|
|
388
417
|
gnu99build: clean
|
389
418
|
$(CC) -v
|
390
|
-
CFLAGS="-std=gnu99 -Werror" $(MAKE) allmost
|
419
|
+
CFLAGS="-std=gnu99 -Werror -O0" $(MAKE) allmost
|
391
420
|
|
392
421
|
c11build: clean
|
393
422
|
$(CC) -v
|
394
|
-
CFLAGS="-std=c11 -Werror" $(MAKE) allmost
|
423
|
+
CFLAGS="-std=c11 -Werror -O0" $(MAKE) allmost
|
395
424
|
|
396
425
|
bmix64build: clean
|
397
426
|
$(CC) -v
|
@@ -410,5 +439,5 @@ bmi32build: clean
|
|
410
439
|
staticAnalyze: SCANBUILD ?= scan-build
|
411
440
|
staticAnalyze:
|
412
441
|
$(CC) -v
|
413
|
-
CC=$(CC) CPPFLAGS=-g $(SCANBUILD) --status-bugs -v $(MAKE)
|
442
|
+
CC=$(CC) CPPFLAGS=-g $(SCANBUILD) --status-bugs -v $(MAKE) zstd
|
414
443
|
endif
|
@@ -0,0 +1,36 @@
|
|
1
|
+
// swift-tools-version:5.0
|
2
|
+
// The swift-tools-version declares the minimum version of Swift required to build this package.
|
3
|
+
|
4
|
+
import PackageDescription
|
5
|
+
|
6
|
+
let package = Package(
|
7
|
+
name: "zstd",
|
8
|
+
platforms: [
|
9
|
+
.macOS(.v10_10), .iOS(.v9), .tvOS(.v9)
|
10
|
+
],
|
11
|
+
products: [
|
12
|
+
// Products define the executables and libraries a package produces, and make them visible to other packages.
|
13
|
+
.library(
|
14
|
+
name: "libzstd",
|
15
|
+
targets: [ "libzstd" ])
|
16
|
+
],
|
17
|
+
dependencies: [
|
18
|
+
// Dependencies declare other packages that this package depends on.
|
19
|
+
// .package(url: /* package url */, from: "1.0.0"),
|
20
|
+
],
|
21
|
+
targets: [
|
22
|
+
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
|
23
|
+
// Targets can depend on other targets in this package, and on products in packages this package depends on.
|
24
|
+
.target(
|
25
|
+
name: "libzstd",
|
26
|
+
path: "lib",
|
27
|
+
sources: [ "common", "compress", "decompress", "dictBuilder" ],
|
28
|
+
publicHeadersPath: ".",
|
29
|
+
cSettings: [
|
30
|
+
.headerSearchPath(".")
|
31
|
+
])
|
32
|
+
],
|
33
|
+
swiftLanguageVersions: [.v5],
|
34
|
+
cLanguageStandard: .gnu11,
|
35
|
+
cxxLanguageStandard: .gnucxx14
|
36
|
+
)
|
data/contrib/zstd/README.md
CHANGED
@@ -4,23 +4,21 @@ __Zstandard__, or `zstd` as short version, is a fast lossless compression algori
|
|
4
4
|
targeting real-time compression scenarios at zlib-level and better compression ratios.
|
5
5
|
It's backed by a very fast entropy stage, provided by [Huff0 and FSE library](https://github.com/Cyan4973/FiniteStateEntropy).
|
6
6
|
|
7
|
-
|
7
|
+
Zstandard's format is stable and documented in [RFC8878](https://datatracker.ietf.org/doc/html/rfc8878). Multiple independent implementations are already available.
|
8
|
+
This repository represents the reference implementation, provided as an open-source dual [BSD](LICENSE) and [GPLv2](COPYING) licensed **C** library,
|
8
9
|
and a command line utility producing and decoding `.zst`, `.gz`, `.xz` and `.lz4` files.
|
9
10
|
Should your project require another programming language,
|
10
|
-
a list of known ports and bindings is provided on [Zstandard homepage](
|
11
|
+
a list of known ports and bindings is provided on [Zstandard homepage](https://facebook.github.io/zstd/#other-languages).
|
11
12
|
|
12
13
|
**Development branch status:**
|
13
14
|
|
14
15
|
[![Build Status][travisDevBadge]][travisLink]
|
15
|
-
[![Build status][AppveyorDevBadge]][AppveyorLink]
|
16
16
|
[![Build status][CircleDevBadge]][CircleLink]
|
17
17
|
[![Build status][CirrusDevBadge]][CirrusLink]
|
18
18
|
[![Fuzzing Status][OSSFuzzBadge]][OSSFuzzLink]
|
19
19
|
|
20
|
-
[travisDevBadge]: https://travis-ci.
|
21
|
-
[travisLink]: https://travis-ci.
|
22
|
-
[AppveyorDevBadge]: https://ci.appveyor.com/api/projects/status/xt38wbdxjk5mrbem/branch/dev?svg=true "Windows test suite"
|
23
|
-
[AppveyorLink]: https://ci.appveyor.com/project/YannCollet/zstd-p0yf0
|
20
|
+
[travisDevBadge]: https://api.travis-ci.com/facebook/zstd.svg?branch=dev "Continuous Integration test suite"
|
21
|
+
[travisLink]: https://travis-ci.com/facebook/zstd
|
24
22
|
[CircleDevBadge]: https://circleci.com/gh/facebook/zstd/tree/dev.svg?style=shield "Short test suite"
|
25
23
|
[CircleLink]: https://circleci.com/gh/facebook/zstd
|
26
24
|
[CirrusDevBadge]: https://api.cirrus-ci.com/github/facebook/zstd.svg?branch=dev
|
@@ -31,37 +29,36 @@ a list of known ports and bindings is provided on [Zstandard homepage](http://ww
|
|
31
29
|
## Benchmarks
|
32
30
|
|
33
31
|
For reference, several fast compression algorithms were tested and compared
|
34
|
-
on a
|
35
|
-
with a Core
|
32
|
+
on a desktop running Ubuntu 20.04 (`Linux 5.11.0-41-generic`),
|
33
|
+
with a Core i7-9700K CPU @ 4.9GHz,
|
36
34
|
using [lzbench], an open-source in-memory benchmark by @inikep
|
37
35
|
compiled with [gcc] 9.3.0,
|
38
36
|
on the [Silesia compression corpus].
|
39
37
|
|
40
38
|
[lzbench]: https://github.com/inikep/lzbench
|
41
|
-
[Silesia compression corpus]:
|
39
|
+
[Silesia compression corpus]: https://sun.aei.polsl.pl//~sdeor/index.php?page=silesia
|
42
40
|
[gcc]: https://gcc.gnu.org/
|
43
41
|
|
44
42
|
| Compressor name | Ratio | Compression| Decompress.|
|
45
43
|
| --------------- | ------| -----------| ---------- |
|
46
|
-
| **zstd 1.
|
47
|
-
| zlib 1.2.11 -1
|
48
|
-
| brotli 1.0.
|
49
|
-
| **zstd 1.
|
50
|
-
| **zstd 1.
|
51
|
-
| quicklz 1.5.0 -1 | 2.238 |
|
52
|
-
| **zstd 1.
|
53
|
-
| lzo1x 2.10 -1 | 2.106 |
|
54
|
-
| lz4 1.9.
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
58
|
-
|
59
|
-
[
|
60
|
-
[LZ4]: http://www.lz4.org/
|
44
|
+
| **zstd 1.5.1 -1** | 2.887 | 530 MB/s | 1700 MB/s |
|
45
|
+
| [zlib] 1.2.11 -1 | 2.743 | 95 MB/s | 400 MB/s |
|
46
|
+
| brotli 1.0.9 -0 | 2.702 | 395 MB/s | 450 MB/s |
|
47
|
+
| **zstd 1.5.1 --fast=1** | 2.437 | 600 MB/s | 2150 MB/s |
|
48
|
+
| **zstd 1.5.1 --fast=3** | 2.239 | 670 MB/s | 2250 MB/s |
|
49
|
+
| quicklz 1.5.0 -1 | 2.238 | 540 MB/s | 760 MB/s |
|
50
|
+
| **zstd 1.5.1 --fast=4** | 2.148 | 710 MB/s | 2300 MB/s |
|
51
|
+
| lzo1x 2.10 -1 | 2.106 | 660 MB/s | 845 MB/s |
|
52
|
+
| [lz4] 1.9.3 | 2.101 | 740 MB/s | 4500 MB/s |
|
53
|
+
| lzf 3.6 -1 | 2.077 | 410 MB/s | 830 MB/s |
|
54
|
+
| snappy 1.1.9 | 2.073 | 550 MB/s | 1750 MB/s |
|
55
|
+
|
56
|
+
[zlib]: https://www.zlib.net/
|
57
|
+
[lz4]: https://lz4.github.io/lz4/
|
61
58
|
|
62
59
|
The negative compression levels, specified with `--fast=#`,
|
63
|
-
offer faster compression and decompression speed
|
64
|
-
compression ratio compared to level 1
|
60
|
+
offer faster compression and decompression speed
|
61
|
+
at the cost of compression ratio (compared to level 1).
|
65
62
|
|
66
63
|
Zstd can also offer stronger compression ratios at the cost of compression speed.
|
67
64
|
Speed vs Compression trade-off is configurable by small increments.
|
@@ -124,14 +121,27 @@ Dictionary gains are mostly effective in the first few KB. Then, the compression
|
|
124
121
|
|
125
122
|
## Build instructions
|
126
123
|
|
124
|
+
`make` is the officially maintained build system of this project.
|
125
|
+
All other build systems are "compatible" and 3rd-party maintained,
|
126
|
+
they may feature small differences in advanced options.
|
127
|
+
When your system allows it, prefer using `make` to build `zstd` and `libzstd`.
|
128
|
+
|
127
129
|
### Makefile
|
128
130
|
|
129
131
|
If your system is compatible with standard `make` (or `gmake`),
|
130
132
|
invoking `make` in root directory will generate `zstd` cli in root directory.
|
133
|
+
It will also create `libzstd` into `lib/`.
|
131
134
|
|
132
135
|
Other available options include:
|
133
136
|
- `make install` : create and install zstd cli, library and man pages
|
134
|
-
- `make check` : create and run `zstd`,
|
137
|
+
- `make check` : create and run `zstd`, test its behavior on local platform
|
138
|
+
|
139
|
+
The `Makefile` follows the [GNU Standard Makefile conventions](https://www.gnu.org/prep/standards/html_node/Makefile-Conventions.html),
|
140
|
+
allowing staged install, standard flags, directory variables and command variables.
|
141
|
+
|
142
|
+
For advanced use cases, specialized compilation flags which control binary generation
|
143
|
+
are documented in [`lib/README.md`](lib/README.md#modular-build) for the `libzstd` library
|
144
|
+
and in [`programs/README.md`](programs/README.md#compilation-variables) for the `zstd` CLI.
|
135
145
|
|
136
146
|
### cmake
|
137
147
|
|
@@ -141,6 +151,18 @@ to create `zstd` binary, and `libzstd` dynamic and static libraries.
|
|
141
151
|
|
142
152
|
By default, `CMAKE_BUILD_TYPE` is set to `Release`.
|
143
153
|
|
154
|
+
#### Support for Fat (Universal2) Output
|
155
|
+
|
156
|
+
`zstd` can be built and installed with support for both Apple Silicon (M1/M2) as well as Intel by using CMake's Universal2 support.
|
157
|
+
To perform a Fat/Universal2 build and install use the following commands:
|
158
|
+
|
159
|
+
```bash
|
160
|
+
cmake -B build-cmake-debug -S build/cmake -G Ninja -DCMAKE_OSX_ARCHITECTURES="x86_64;x86_64h;arm64"
|
161
|
+
cd build-cmake-debug
|
162
|
+
ninja
|
163
|
+
sudo ninja install
|
164
|
+
```
|
165
|
+
|
144
166
|
### Meson
|
145
167
|
|
146
168
|
A Meson project is provided within [`build/meson`](build/meson). Follow
|
@@ -176,9 +198,17 @@ Going into `build` directory, you will find additional possibilities:
|
|
176
198
|
You can build the zstd binary via buck by executing: `buck build programs:zstd` from the root of the repo.
|
177
199
|
The output binary will be in `buck-out/gen/programs/`.
|
178
200
|
|
201
|
+
## Testing
|
202
|
+
|
203
|
+
You can run quick local smoke tests by running `make check`.
|
204
|
+
If you can't use `make`, execute the `playTest.sh` script from the `src/tests` directory.
|
205
|
+
Two env variables `$ZSTD_BIN` and `$DATAGEN_BIN` are needed for the test script to locate the `zstd` and `datagen` binary.
|
206
|
+
For information on CI testing, please refer to `TESTING.md`.
|
207
|
+
|
179
208
|
## Status
|
180
209
|
|
181
|
-
Zstandard is currently deployed within Facebook
|
210
|
+
Zstandard is currently deployed within Facebook and many other large cloud infrastructures.
|
211
|
+
It is run continuously to compress large amounts of data in multiple formats and use cases.
|
182
212
|
Zstandard is considered safe for production environments.
|
183
213
|
|
184
214
|
## License
|
@@ -187,7 +217,7 @@ Zstandard is dual-licensed under [BSD](LICENSE) and [GPLv2](COPYING).
|
|
187
217
|
|
188
218
|
## Contributing
|
189
219
|
|
190
|
-
The
|
191
|
-
If you plan to propose a patch, please commit into the
|
192
|
-
Direct commit to
|
220
|
+
The `dev` branch is the one where all contributions are merged before reaching `release`.
|
221
|
+
If you plan to propose a patch, please commit into the `dev` branch, or its own feature branch.
|
222
|
+
Direct commit to `release` are not permitted.
|
193
223
|
For more information, please read [CONTRIBUTING](CONTRIBUTING.md).
|
data/contrib/zstd/TESTING.md
CHANGED
@@ -22,12 +22,12 @@ They consist of the following tests:
|
|
22
22
|
- `tests/playTests.sh --test-large-data`
|
23
23
|
- Fuzzer tests: `tests/fuzzer.c`, `tests/zstreamtest.c`, and `tests/decodecorpus.c`
|
24
24
|
- `tests/zstreamtest.c` under Tsan (streaming mode, including multithreaded mode)
|
25
|
-
- Valgrind Test (`make -C tests
|
25
|
+
- Valgrind Test (`make -C tests test-valgrind`) (testing CLI and fuzzer under `valgrind`)
|
26
26
|
- Fuzzer tests (see above) on ARM, AArch64, PowerPC, and PowerPC64
|
27
27
|
|
28
28
|
Long Tests
|
29
29
|
----------
|
30
|
-
Long tests run on all commits to `
|
30
|
+
Long tests run on all commits to `release` branch,
|
31
31
|
and once a day on the current version of `dev` branch,
|
32
32
|
on TravisCI.
|
33
33
|
They consist of the following tests:
|
@@ -40,5 +40,4 @@ They consist of the following tests:
|
|
40
40
|
- Versions test (ensuring `zstd` can decode files from all previous versions)
|
41
41
|
- `pzstd` with asan and tsan, as well as in 32-bits mode
|
42
42
|
- Testing `zstd` with legacy mode off
|
43
|
-
- Testing `zbuff` (old streaming API)
|
44
43
|
- Entire test suite and make install on macOS
|