extzstd 0.3 → 0.3.1

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.
Files changed (107) hide show
  1. checksums.yaml +4 -4
  2. data/HISTORY.ja.md +8 -0
  3. data/README.md +1 -1
  4. data/contrib/zstd/CHANGELOG +94 -0
  5. data/contrib/zstd/CONTRIBUTING.md +351 -1
  6. data/contrib/zstd/Makefile +32 -10
  7. data/contrib/zstd/README.md +33 -10
  8. data/contrib/zstd/TESTING.md +2 -2
  9. data/contrib/zstd/appveyor.yml +42 -4
  10. data/contrib/zstd/lib/Makefile +128 -60
  11. data/contrib/zstd/lib/README.md +47 -16
  12. data/contrib/zstd/lib/common/bitstream.h +38 -39
  13. data/contrib/zstd/lib/common/compiler.h +40 -5
  14. data/contrib/zstd/lib/common/cpu.h +1 -1
  15. data/contrib/zstd/lib/common/debug.c +11 -31
  16. data/contrib/zstd/lib/common/debug.h +11 -31
  17. data/contrib/zstd/lib/common/entropy_common.c +13 -33
  18. data/contrib/zstd/lib/common/error_private.c +2 -1
  19. data/contrib/zstd/lib/common/error_private.h +6 -2
  20. data/contrib/zstd/lib/common/fse.h +12 -32
  21. data/contrib/zstd/lib/common/fse_decompress.c +12 -35
  22. data/contrib/zstd/lib/common/huf.h +15 -33
  23. data/contrib/zstd/lib/common/mem.h +75 -2
  24. data/contrib/zstd/lib/common/pool.c +8 -4
  25. data/contrib/zstd/lib/common/pool.h +2 -2
  26. data/contrib/zstd/lib/common/threading.c +50 -4
  27. data/contrib/zstd/lib/common/threading.h +36 -4
  28. data/contrib/zstd/lib/common/xxhash.c +23 -35
  29. data/contrib/zstd/lib/common/xxhash.h +11 -31
  30. data/contrib/zstd/lib/common/zstd_common.c +1 -1
  31. data/contrib/zstd/lib/common/zstd_errors.h +2 -1
  32. data/contrib/zstd/lib/common/zstd_internal.h +154 -26
  33. data/contrib/zstd/lib/compress/fse_compress.c +17 -40
  34. data/contrib/zstd/lib/compress/hist.c +15 -35
  35. data/contrib/zstd/lib/compress/hist.h +12 -32
  36. data/contrib/zstd/lib/compress/huf_compress.c +92 -92
  37. data/contrib/zstd/lib/compress/zstd_compress.c +1191 -1330
  38. data/contrib/zstd/lib/compress/zstd_compress_internal.h +317 -55
  39. data/contrib/zstd/lib/compress/zstd_compress_literals.c +158 -0
  40. data/contrib/zstd/lib/compress/zstd_compress_literals.h +29 -0
  41. data/contrib/zstd/lib/compress/zstd_compress_sequences.c +419 -0
  42. data/contrib/zstd/lib/compress/zstd_compress_sequences.h +54 -0
  43. data/contrib/zstd/lib/compress/zstd_compress_superblock.c +845 -0
  44. data/contrib/zstd/lib/compress/zstd_compress_superblock.h +32 -0
  45. data/contrib/zstd/lib/compress/zstd_cwksp.h +525 -0
  46. data/contrib/zstd/lib/compress/zstd_double_fast.c +65 -43
  47. data/contrib/zstd/lib/compress/zstd_double_fast.h +2 -2
  48. data/contrib/zstd/lib/compress/zstd_fast.c +92 -66
  49. data/contrib/zstd/lib/compress/zstd_fast.h +2 -2
  50. data/contrib/zstd/lib/compress/zstd_lazy.c +74 -42
  51. data/contrib/zstd/lib/compress/zstd_lazy.h +1 -1
  52. data/contrib/zstd/lib/compress/zstd_ldm.c +32 -10
  53. data/contrib/zstd/lib/compress/zstd_ldm.h +7 -2
  54. data/contrib/zstd/lib/compress/zstd_opt.c +81 -114
  55. data/contrib/zstd/lib/compress/zstd_opt.h +1 -1
  56. data/contrib/zstd/lib/compress/zstdmt_compress.c +95 -51
  57. data/contrib/zstd/lib/compress/zstdmt_compress.h +3 -2
  58. data/contrib/zstd/lib/decompress/huf_decompress.c +76 -60
  59. data/contrib/zstd/lib/decompress/zstd_ddict.c +12 -8
  60. data/contrib/zstd/lib/decompress/zstd_ddict.h +2 -2
  61. data/contrib/zstd/lib/decompress/zstd_decompress.c +292 -172
  62. data/contrib/zstd/lib/decompress/zstd_decompress_block.c +459 -338
  63. data/contrib/zstd/lib/decompress/zstd_decompress_block.h +3 -3
  64. data/contrib/zstd/lib/decompress/zstd_decompress_internal.h +18 -4
  65. data/contrib/zstd/lib/deprecated/zbuff.h +9 -8
  66. data/contrib/zstd/lib/deprecated/zbuff_common.c +2 -2
  67. data/contrib/zstd/lib/deprecated/zbuff_compress.c +1 -1
  68. data/contrib/zstd/lib/deprecated/zbuff_decompress.c +1 -1
  69. data/contrib/zstd/lib/dictBuilder/cover.c +164 -54
  70. data/contrib/zstd/lib/dictBuilder/cover.h +52 -7
  71. data/contrib/zstd/lib/dictBuilder/fastcover.c +60 -43
  72. data/contrib/zstd/lib/dictBuilder/zdict.c +43 -19
  73. data/contrib/zstd/lib/dictBuilder/zdict.h +56 -28
  74. data/contrib/zstd/lib/legacy/zstd_legacy.h +8 -4
  75. data/contrib/zstd/lib/legacy/zstd_v01.c +110 -110
  76. data/contrib/zstd/lib/legacy/zstd_v01.h +1 -1
  77. data/contrib/zstd/lib/legacy/zstd_v02.c +23 -13
  78. data/contrib/zstd/lib/legacy/zstd_v02.h +1 -1
  79. data/contrib/zstd/lib/legacy/zstd_v03.c +23 -13
  80. data/contrib/zstd/lib/legacy/zstd_v03.h +1 -1
  81. data/contrib/zstd/lib/legacy/zstd_v04.c +30 -17
  82. data/contrib/zstd/lib/legacy/zstd_v04.h +1 -1
  83. data/contrib/zstd/lib/legacy/zstd_v05.c +113 -102
  84. data/contrib/zstd/lib/legacy/zstd_v05.h +2 -2
  85. data/contrib/zstd/lib/legacy/zstd_v06.c +20 -18
  86. data/contrib/zstd/lib/legacy/zstd_v06.h +1 -1
  87. data/contrib/zstd/lib/legacy/zstd_v07.c +25 -19
  88. data/contrib/zstd/lib/legacy/zstd_v07.h +1 -1
  89. data/contrib/zstd/lib/libzstd.pc.in +3 -2
  90. data/contrib/zstd/lib/zstd.h +265 -88
  91. data/ext/extzstd.h +1 -1
  92. data/ext/libzstd_conf.h +8 -0
  93. data/ext/zstd_common.c +1 -3
  94. data/ext/zstd_compress.c +3 -3
  95. data/ext/zstd_decompress.c +1 -5
  96. data/ext/zstd_dictbuilder.c +2 -3
  97. data/ext/zstd_dictbuilder_fastcover.c +1 -3
  98. data/ext/zstd_legacy_v01.c +2 -0
  99. data/ext/zstd_legacy_v02.c +2 -0
  100. data/ext/zstd_legacy_v03.c +2 -0
  101. data/ext/zstd_legacy_v04.c +2 -0
  102. data/ext/zstd_legacy_v05.c +2 -0
  103. data/ext/zstd_legacy_v06.c +2 -0
  104. data/ext/zstd_legacy_v07.c +2 -0
  105. data/lib/extzstd.rb +18 -10
  106. data/lib/extzstd/version.rb +1 -1
  107. metadata +15 -6
@@ -1,10 +1,11 @@
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
 
10
11
  PRGDIR = programs
@@ -17,7 +18,16 @@ FUZZDIR = $(TESTDIR)/fuzz
17
18
  # Define nul output
18
19
  VOID = /dev/null
19
20
 
20
- ifneq (,$(filter Windows%,$(OS)))
21
+ # When cross-compiling from linux to windows, you might
22
+ # need to specify this as "Windows." Fedora build fails
23
+ # without it.
24
+ #
25
+ # Note: mingw-w64 build from linux to windows does not
26
+ # fail on other tested distros (ubuntu, debian) even
27
+ # without manually specifying the TARGET_SYSTEM.
28
+ TARGET_SYSTEM ?= $(OS)
29
+
30
+ ifneq (,$(filter Windows%,$(TARGET_SYSTEM)))
21
31
  EXT =.exe
22
32
  else
23
33
  EXT =
@@ -35,7 +45,7 @@ allmost: allzstd zlibwrapper
35
45
 
36
46
  # skip zwrapper, can't build that on alternate architectures without the proper zlib installed
37
47
  .PHONY: allzstd
38
- allzstd: lib
48
+ allzstd: lib-all
39
49
  $(MAKE) -C $(PRGDIR) all
40
50
  $(MAKE) -C $(TESTDIR) all
41
51
 
@@ -45,7 +55,7 @@ all32:
45
55
  $(MAKE) -C $(TESTDIR) all32
46
56
 
47
57
  .PHONY: lib lib-release libzstd.a
48
- lib lib-release :
58
+ lib lib-release lib-all :
49
59
  @$(MAKE) -C $(ZSTDDIR) $@
50
60
 
51
61
  .PHONY: zstd zstd-release
@@ -69,6 +79,7 @@ test: MOREFLAGS += -g -DDEBUGLEVEL=$(DEBUGLEVEL) -Werror
69
79
  test:
70
80
  MOREFLAGS="$(MOREFLAGS)" $(MAKE) -j -C $(PRGDIR) allVariants
71
81
  $(MAKE) -C $(TESTDIR) $@
82
+ ZSTD=../../programs/zstd $(MAKE) -C doc/educational_decoder test
72
83
 
73
84
  ## shortest: same as `make check`
74
85
  .PHONY: shortest
@@ -79,6 +90,13 @@ shortest:
79
90
  .PHONY: check
80
91
  check: shortest
81
92
 
93
+ .PHONY: automated_benchmarking
94
+ automated_benchmarking:
95
+ $(MAKE) -C $(TESTDIR) $@
96
+
97
+ .PHONY: benchmarking
98
+ benchmarking: automated_benchmarking
99
+
82
100
  ## examples: build all examples in `/examples` directory
83
101
  .PHONY: examples
84
102
  examples: lib
@@ -99,8 +117,9 @@ man:
99
117
  contrib: lib
100
118
  $(MAKE) -C contrib/pzstd all
101
119
  $(MAKE) -C contrib/seekable_format/examples all
102
- $(MAKE) -C contrib/adaptive-compression all
103
120
  $(MAKE) -C contrib/largeNbDicts all
121
+ cd contrib/single_file_libs/ ; ./build_decoder_test.sh
122
+ cd contrib/single_file_libs/ ; ./build_library_test.sh
104
123
 
105
124
  .PHONY: cleanTabs
106
125
  cleanTabs:
@@ -116,7 +135,6 @@ clean:
116
135
  @$(MAKE) -C contrib/gen_html $@ > $(VOID)
117
136
  @$(MAKE) -C contrib/pzstd $@ > $(VOID)
118
137
  @$(MAKE) -C contrib/seekable_format/examples $@ > $(VOID)
119
- @$(MAKE) -C contrib/adaptive-compression $@ > $(VOID)
120
138
  @$(MAKE) -C contrib/largeNbDicts $@ > $(VOID)
121
139
  @$(RM) zstd$(EXT) zstdmt$(EXT) tmp*
122
140
  @$(RM) -r lz4
@@ -337,7 +355,7 @@ endif
337
355
 
338
356
  ifneq (,$(filter MSYS%,$(shell uname)))
339
357
  HOST_OS = MSYS
340
- CMAKE_PARAMS = -G"MSYS Makefiles" -DZSTD_MULTITHREAD_SUPPORT:BOOL=OFF -DZSTD_BUILD_STATIC:BOOL=ON -DZSTD_BUILD_TESTS:BOOL=ON
358
+ CMAKE_PARAMS = -G"MSYS Makefiles" -DCMAKE_BUILD_TYPE=Debug -DZSTD_MULTITHREAD_SUPPORT:BOOL=OFF -DZSTD_BUILD_STATIC:BOOL=ON -DZSTD_BUILD_TESTS:BOOL=ON
341
359
  endif
342
360
 
343
361
 
@@ -349,11 +367,15 @@ cmakebuild:
349
367
  cmake --version
350
368
  $(RM) -r $(BUILDIR)/cmake/build
351
369
  mkdir $(BUILDIR)/cmake/build
352
- cd $(BUILDIR)/cmake/build ; cmake -DCMAKE_INSTALL_PREFIX:PATH=~/install_test_dir $(CMAKE_PARAMS) .. ; $(MAKE) install ; $(MAKE) uninstall
370
+ cd $(BUILDIR)/cmake/build; cmake -DCMAKE_INSTALL_PREFIX:PATH=~/install_test_dir $(CMAKE_PARAMS) ..
371
+ $(MAKE) -C $(BUILDIR)/cmake/build -j4;
372
+ $(MAKE) -C $(BUILDIR)/cmake/build install;
373
+ $(MAKE) -C $(BUILDIR)/cmake/build uninstall;
374
+ cd $(BUILDIR)/cmake/build; ctest -V -L Medium
353
375
 
354
- c90build: clean
376
+ c89build: clean
355
377
  $(CC) -v
356
- CFLAGS="-std=c90 -Werror" $(MAKE) allmost # will fail, due to missing support for `long long`
378
+ CFLAGS="-std=c89 -Werror" $(MAKE) allmost # will fail, due to missing support for `long long`
357
379
 
358
380
  gnu90build: clean
359
381
  $(CC) -v
@@ -15,6 +15,7 @@ a list of known ports and bindings is provided on [Zstandard homepage](http://ww
15
15
  [![Build status][AppveyorDevBadge]][AppveyorLink]
16
16
  [![Build status][CircleDevBadge]][CircleLink]
17
17
  [![Build status][CirrusDevBadge]][CirrusLink]
18
+ [![Fuzzing Status][OSSFuzzBadge]][OSSFuzzLink]
18
19
 
19
20
  [travisDevBadge]: https://travis-ci.org/facebook/zstd.svg?branch=dev "Continuous Integration test suite"
20
21
  [travisLink]: https://travis-ci.org/facebook/zstd
@@ -24,14 +25,16 @@ a list of known ports and bindings is provided on [Zstandard homepage](http://ww
24
25
  [CircleLink]: https://circleci.com/gh/facebook/zstd
25
26
  [CirrusDevBadge]: https://api.cirrus-ci.com/github/facebook/zstd.svg?branch=dev
26
27
  [CirrusLink]: https://cirrus-ci.com/github/facebook/zstd
28
+ [OSSFuzzBadge]: https://oss-fuzz-build-logs.storage.googleapis.com/badges/zstd.svg
29
+ [OSSFuzzLink]: https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&can=1&q=proj:zstd
27
30
 
28
31
  ## Benchmarks
29
32
 
30
33
  For reference, several fast compression algorithms were tested and compared
31
- on a server running Arch Linux (`Linux version 5.0.5-arch1-1`),
34
+ on a server running Arch Linux (`Linux version 5.5.11-arch1-1`),
32
35
  with a Core i9-9900K CPU @ 5.0GHz,
33
36
  using [lzbench], an open-source in-memory benchmark by @inikep
34
- compiled with [gcc] 8.2.1,
37
+ compiled with [gcc] 9.3.0,
35
38
  on the [Silesia compression corpus].
36
39
 
37
40
  [lzbench]: https://github.com/inikep/lzbench
@@ -40,18 +43,26 @@ on the [Silesia compression corpus].
40
43
 
41
44
  | Compressor name | Ratio | Compression| Decompress.|
42
45
  | --------------- | ------| -----------| ---------- |
43
- | **zstd 1.4.0 -1** | 2.884 | 530 MB/s | 1360 MB/s |
44
- | zlib 1.2.11 -1 | 2.743 | 110 MB/s | 440 MB/s |
45
- | brotli 1.0.7 -0 | 2.701 | 430 MB/s | 470 MB/s |
46
- | quicklz 1.5.0 -1 | 2.238 | 600 MB/s | 800 MB/s |
47
- | lzo1x 2.09 -1 | 2.106 | 680 MB/s | 950 MB/s |
48
- | lz4 1.8.3 | 2.101 | 800 MB/s | 4220 MB/s |
49
- | snappy 1.1.4 | 2.073 | 580 MB/s | 2020 MB/s |
50
- | lzf 3.6 -1 | 2.077 | 440 MB/s | 930 MB/s |
46
+ | **zstd 1.4.5 -1** | 2.884 | 500 MB/s | 1660 MB/s |
47
+ | zlib 1.2.11 -1 | 2.743 | 90 MB/s | 400 MB/s |
48
+ | brotli 1.0.7 -0 | 2.703 | 400 MB/s | 450 MB/s |
49
+ | **zstd 1.4.5 --fast=1** | 2.434 | 570 MB/s | 2200 MB/s |
50
+ | **zstd 1.4.5 --fast=3** | 2.312 | 640 MB/s | 2300 MB/s |
51
+ | quicklz 1.5.0 -1 | 2.238 | 560 MB/s | 710 MB/s |
52
+ | **zstd 1.4.5 --fast=5** | 2.178 | 700 MB/s | 2420 MB/s |
53
+ | lzo1x 2.10 -1 | 2.106 | 690 MB/s | 820 MB/s |
54
+ | lz4 1.9.2 | 2.101 | 740 MB/s | 4530 MB/s |
55
+ | **zstd 1.4.5 --fast=7** | 2.096 | 750 MB/s | 2480 MB/s |
56
+ | lzf 3.6 -1 | 2.077 | 410 MB/s | 860 MB/s |
57
+ | snappy 1.1.8 | 2.073 | 560 MB/s | 1790 MB/s |
51
58
 
52
59
  [zlib]: http://www.zlib.net/
53
60
  [LZ4]: http://www.lz4.org/
54
61
 
62
+ The negative compression levels, specified with `--fast=#`,
63
+ offer faster compression and decompression speed in exchange for some loss in
64
+ compression ratio compared to level 1, as seen in the table above.
65
+
55
66
  Zstd can also offer stronger compression ratios at the cost of compression speed.
56
67
  Speed vs Compression trade-off is configurable by small increments.
57
68
  Decompression speed is preserved and remains roughly the same at all settings,
@@ -140,6 +151,18 @@ example about how Meson is used to build this project.
140
151
 
141
152
  Note that default build type is **release**.
142
153
 
154
+ ### VCPKG
155
+ You can build and install zstd [vcpkg](https://github.com/Microsoft/vcpkg/) dependency manager:
156
+
157
+ git clone https://github.com/Microsoft/vcpkg.git
158
+ cd vcpkg
159
+ ./bootstrap-vcpkg.sh
160
+ ./vcpkg integrate install
161
+ ./vcpkg install zstd
162
+
163
+ The zstd port in vcpkg is kept up to date by Microsoft team members and community contributors.
164
+ If the version is out of date, please [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg repository.
165
+
143
166
  ### Visual Studio (Windows)
144
167
 
145
168
  Going into `build` directory, you will find additional possibilities:
@@ -11,7 +11,7 @@ They consist of the following tests:
11
11
  - Compilation on all supported targets (x86, x86_64, ARM, AArch64, PowerPC, and PowerPC64)
12
12
  - Compilation on various versions of gcc, clang, and g++
13
13
  - `tests/playTests.sh` on x86_64, without the tests on long data (CLI tests)
14
- - Small tests (`tests/legacy.c`, `tests/longmatch.c`, `tests/symbols.c`) on x64_64
14
+ - Small tests (`tests/legacy.c`, `tests/longmatch.c`) on x64_64
15
15
 
16
16
  Medium Tests
17
17
  ------------
@@ -19,7 +19,7 @@ Medium tests run on every commit and pull request to `dev` branch, on TravisCI.
19
19
  They consist of the following tests:
20
20
  - The following tests run with UBsan and Asan on x86_64 and x86, as well as with
21
21
  Msan on x86_64
22
- - `tests/playTests.sh --test-long-data`
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
25
  - Valgrind Test (`make -C tests valgrindTest`) (testing CLI and fuzzer under valgrind)
@@ -1,3 +1,7 @@
1
+ # Following tests are run _only_ on master branch
2
+ # To reproduce these tests, it's possible to push into a branch `appveyorTest`
3
+ # or a branch `visual*`, they will intentionnally trigger `master` tests
4
+
1
5
  -
2
6
  version: 1.0.{build}
3
7
  branches:
@@ -10,7 +14,7 @@
10
14
  - COMPILER: "gcc"
11
15
  HOST: "mingw"
12
16
  PLATFORM: "x64"
13
- SCRIPT: "make allzstd MOREFLAGS=-static && make -C tests test-symbols fullbench-lib"
17
+ SCRIPT: "make allzstd MOREFLAGS=-static && make -C tests fullbench-lib"
14
18
  ARTIFACT: "true"
15
19
  BUILD: "true"
16
20
  - COMPILER: "gcc"
@@ -165,21 +169,28 @@
165
169
  - SET "FUZZERTEST=-T30s"
166
170
  - if [%HOST%]==[visual] if [%CONFIGURATION%]==[Release] (
167
171
  CD tests &&
168
- SET ZSTD=./zstd.exe &&
172
+ SET ZSTD_BIN=./zstd.exe&&
173
+ SET DATAGEN_BIN=./datagen.exe&&
169
174
  sh -e playTests.sh --test-large-data &&
170
175
  fullbench.exe -i1 &&
171
176
  fullbench.exe -i1 -P0 &&
172
- fuzzer_VS2008_%PLATFORM%_Release.exe %FUZZERTEST% &&
173
- fuzzer_VS2010_%PLATFORM%_Release.exe %FUZZERTEST% &&
174
177
  fuzzer_VS2012_%PLATFORM%_Release.exe %FUZZERTEST% &&
175
178
  fuzzer_VS2013_%PLATFORM%_Release.exe %FUZZERTEST% &&
176
179
  fuzzer_VS2015_%PLATFORM%_Release.exe %FUZZERTEST%
177
180
  )
178
181
 
182
+
183
+ # The following tests are for regular pushes
184
+ # into `dev` or some feature branch
185
+ # There run less tests, for shorter feedback loop
186
+
179
187
  -
180
188
  version: 1.0.{build}
181
189
  environment:
182
190
  matrix:
191
+ - COMPILER: "gcc"
192
+ HOST: "cygwin"
193
+ PLATFORM: "x64"
183
194
  - COMPILER: "gcc"
184
195
  HOST: "mingw"
185
196
  PLATFORM: "x64"
@@ -213,6 +224,14 @@
213
224
  install:
214
225
  - ECHO Installing %COMPILER% %PLATFORM% %CONFIGURATION%
215
226
  - SET PATH_ORIGINAL=%PATH%
227
+ - if [%HOST%]==[cygwin] (
228
+ ECHO Installing Cygwin Packages &&
229
+ C:\cygwin64\setup-x86_64.exe -qnNdO -R "C:\cygwin64" -g -P ^
230
+ gcc-g++,^
231
+ gcc,^
232
+ cmake,^
233
+ make
234
+ )
216
235
  - if [%HOST%]==[mingw] (
217
236
  SET "PATH_MINGW32=C:\mingw-w64\i686-6.3.0-posix-dwarf-rt_v5-rev1\mingw32\bin" &&
218
237
  SET "PATH_MINGW64=C:\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev1\mingw64\bin" &&
@@ -225,6 +244,17 @@
225
244
 
226
245
  build_script:
227
246
  - ECHO Building %COMPILER% %PLATFORM% %CONFIGURATION%
247
+ - if [%HOST%]==[cygwin] (
248
+ set CHERE_INVOKING=yes &&
249
+ set CC=%COMPILER% &&
250
+ C:\cygwin64\bin\bash --login -c "
251
+ set -e;
252
+ cd build/cmake;
253
+ CFLAGS='-Werror' cmake -G 'Unix Makefiles' -DCMAKE_BUILD_TYPE=Debug -DZSTD_BUILD_TESTS:BOOL=ON -DZSTD_FUZZER_FLAGS=-T30s -DZSTD_ZSTREAM_FLAGS=-T30s .;
254
+ make -j4;
255
+ ctest -V -L Medium;
256
+ "
257
+ )
228
258
  - if [%HOST%]==[mingw] (
229
259
  ( if [%PLATFORM%]==[x64] (
230
260
  SET "PATH=%PATH_MINGW64%;%PATH_ORIGINAL%"
@@ -249,3 +279,11 @@
249
279
  COPY build\VS2010\bin\%PLATFORM%_%CONFIGURATION%\fuzzer.exe tests\fuzzer_VS2015_%PLATFORM%_%CONFIGURATION%.exe &&
250
280
  COPY build\VS2010\bin\%PLATFORM%_%CONFIGURATION%\*.exe tests\
251
281
  )
282
+
283
+
284
+ test_script:
285
+ - ECHO Testing %COMPILER% %PLATFORM% %CONFIGURATION%
286
+ - if [%HOST%]==[mingw] (
287
+ set "CC=%COMPILER%" &&
288
+ make check
289
+ )
@@ -1,12 +1,24 @@
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`
@@ -17,12 +29,12 @@ 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+= -I. -I./common -DXXH_NAMESPACE=ZSTD_
22
- ifeq ($(OS),Windows_NT) # MinGW assumed
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
40
  -Wstrict-prototypes -Wundef -Wpointer-arith \
@@ -45,18 +57,50 @@ ZDICT_FILES := $(sort $(wildcard dictBuilder/*.c))
45
57
  ZDEPR_FILES := $(sort $(wildcard deprecated/*.c))
46
58
  ZSTD_FILES := $(ZSTDCOMMON_FILES)
47
59
 
48
- ZSTD_LEGACY_SUPPORT ?= 5
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
56
101
  ZSTD_FORCE_DECOMPRESS_LONG ?= 0
57
102
  ZSTD_NO_INLINE ?= 0
58
103
  ZSTD_STRIP_ERROR_STRINGS ?= 0
59
- ZSTD_LEGACY_MULTITHREADED_API ?= 0
60
104
 
61
105
  ifeq ($(ZSTD_LIB_COMPRESSION), 0)
62
106
  ZSTD_LIB_DICTBUILDER = 0
@@ -116,7 +160,6 @@ ifneq ($(ZSTD_LEGACY_SUPPORT), 0)
116
160
  ifeq ($(shell test $(ZSTD_LEGACY_SUPPORT) -lt 8; echo $$?), 0)
117
161
  ZSTD_FILES += $(shell ls legacy/*.c | $(GREP) 'v0[$(ZSTD_LEGACY_SUPPORT)-7]')
118
162
  endif
119
- CPPFLAGS += -I./legacy
120
163
  endif
121
164
  CPPFLAGS += -DZSTD_LEGACY_SUPPORT=$(ZSTD_LEGACY_SUPPORT)
122
165
 
@@ -137,26 +180,26 @@ else
137
180
  endif
138
181
 
139
182
 
140
- .PHONY: default all clean install uninstall
183
+ .PHONY: default lib-all all clean install uninstall
141
184
 
142
185
  default: lib-release
143
186
 
187
+ # alias
188
+ lib-all: all
189
+
144
190
  all: lib
145
191
 
146
192
  libzstd.a: ARFLAGS = rcs
147
193
  libzstd.a: $(ZSTD_OBJ)
148
194
  @echo compiling static library
149
- @$(AR) $(ARFLAGS) $@ $^
150
-
151
- libzstd.a-mt: CPPFLAGS += -DZSTD_MULTITHREAD
152
- libzstd.a-mt: libzstd.a
195
+ $(Q)$(AR) $(ARFLAGS) $@ $^
153
196
 
154
- ifneq (,$(filter Windows%,$(OS)))
197
+ ifneq (,$(filter Windows%,$(TARGET_SYSTEM)))
155
198
 
156
199
  LIBZSTD = dll\libzstd.dll
157
200
  $(LIBZSTD): $(ZSTD_FILES)
158
201
  @echo compiling dynamic library $(LIBVER)
159
- $(CC) $(FLAGS) -DZSTD_DLL_EXPORT=1 -Wl,--out-implib,dll\libzstd.lib -shared $^ -o $@
202
+ $(CC) $(FLAGS) -DZSTD_DLL_EXPORT=1 -Wl,--out-implib,dll\libzstd.dll.a -shared $^ -o $@
160
203
 
161
204
  else
162
205
 
@@ -164,27 +207,30 @@ LIBZSTD = libzstd.$(SHARED_EXT_VER)
164
207
  $(LIBZSTD): LDFLAGS += -shared -fPIC -fvisibility=hidden
165
208
  $(LIBZSTD): $(ZSTD_FILES)
166
209
  @echo compiling dynamic library $(LIBVER)
167
- @$(CC) $(FLAGS) $^ $(LDFLAGS) $(SONAME_FLAGS) -o $@
210
+ $(Q)$(CC) $(FLAGS) $^ $(LDFLAGS) $(SONAME_FLAGS) -o $@
168
211
  @echo creating versioned links
169
- @ln -sf $@ libzstd.$(SHARED_EXT_MAJOR)
170
- @ln -sf $@ libzstd.$(SHARED_EXT)
212
+ $(Q)ln -sf $@ libzstd.$(SHARED_EXT_MAJOR)
213
+ $(Q)ln -sf $@ libzstd.$(SHARED_EXT)
171
214
 
172
215
  endif
173
216
 
174
-
217
+ .PHONY: libzstd
175
218
  libzstd : $(LIBZSTD)
176
219
 
177
- libzstd-mt : CPPFLAGS += -DZSTD_MULTITHREAD
178
- libzstd-mt : libzstd
220
+ .PHONY: lib
221
+ lib : libzstd.a libzstd
179
222
 
180
- 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
181
228
 
182
- lib-mt: CPPFLAGS += -DZSTD_MULTITHREAD
183
- lib-mt: lib
229
+ .PHONY: lib-release
230
+ %-release : DEBUGFLAGS :=
231
+ %-release : %
232
+ @echo release build completed
184
233
 
185
- lib-release lib-release-mt: DEBUGFLAGS :=
186
- lib-release: lib
187
- lib-release-mt: lib-mt
188
234
 
189
235
  # Special case : building library in single-thread mode _and_ without zstdmt_compress.c
190
236
  ZSTDMT_FILES = compress/zstdmt_compress.c
@@ -193,20 +239,22 @@ libzstd-nomt: LDFLAGS += -shared -fPIC -fvisibility=hidden
193
239
  libzstd-nomt: $(ZSTD_NOMT_FILES)
194
240
  @echo compiling single-thread dynamic library $(LIBVER)
195
241
  @echo files : $(ZSTD_NOMT_FILES)
196
- @$(CC) $(FLAGS) $^ $(LDFLAGS) $(SONAME_FLAGS) -o $@
242
+ $(Q)$(CC) $(FLAGS) $^ $(LDFLAGS) $(SONAME_FLAGS) -o $@
197
243
 
198
244
  clean:
199
- @$(RM) -r *.dSYM # macOS-specific
200
- @$(RM) core *.o *.a *.gcda *.$(SHARED_EXT) *.$(SHARED_EXT).* libzstd.pc
201
- @$(RM) dll/libzstd.dll dll/libzstd.lib libzstd-nomt*
202
- @$(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
203
249
  @echo Cleaning library completed
204
250
 
205
251
  #-----------------------------------------------------------------------------
206
- # make install is validated only for Linux, macOS, BSD, Hurd and Solaris targets
252
+ # make install is validated only for below listed environments
207
253
  #-----------------------------------------------------------------------------
208
254
  ifneq (,$(filter $(shell uname),Linux Darwin GNU/kFreeBSD GNU OpenBSD FreeBSD NetBSD DragonFly SunOS Haiku))
209
255
 
256
+ all: libzstd.pc
257
+
210
258
  DESTDIR ?=
211
259
  # directory variables : GNU conventions prefer lowercase
212
260
  # see https://www.gnu.org/prep/standards/html_node/Makefile-Conventions.html
@@ -214,11 +262,31 @@ DESTDIR ?=
214
262
  prefix ?= /usr/local
215
263
  PREFIX ?= $(prefix)
216
264
  exec_prefix ?= $(PREFIX)
217
- libdir ?= $(exec_prefix)/lib
265
+ EXEC_PREFIX ?= $(exec_prefix)
266
+ libdir ?= $(EXEC_PREFIX)/lib
218
267
  LIBDIR ?= $(libdir)
219
268
  includedir ?= $(PREFIX)/include
220
269
  INCLUDEDIR ?= $(includedir)
221
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
+
222
290
  ifneq (,$(filter $(shell uname),FreeBSD NetBSD DragonFly))
223
291
  PKGCONFIGDIR ?= $(PREFIX)/libdata/pkgconfig
224
292
  else
@@ -238,49 +306,49 @@ INSTALL_DATA ?= $(INSTALL) -m 644
238
306
  libzstd.pc:
239
307
  libzstd.pc: libzstd.pc.in
240
308
  @echo creating pkgconfig
241
- @sed -e 's|@PREFIX@|$(PREFIX)|' \
242
- -e 's|@LIBDIR@|$(LIBDIR)|' \
243
- -e 's|@INCLUDEDIR@|$(INCLUDEDIR)|' \
244
- -e 's|@VERSION@|$(VERSION)|' \
245
- $< >$@
309
+ $(Q)@sed -E -e 's|@PREFIX@|$(PREFIX)|' \
310
+ -e 's|@LIBDIR@|$(PCLIBDIR)|' \
311
+ -e 's|@INCLUDEDIR@|$(PCINCDIR)|' \
312
+ -e 's|@VERSION@|$(VERSION)|' \
313
+ $< >$@
246
314
 
247
315
  install: install-pc install-static install-shared install-includes
248
316
  @echo zstd static and shared library installed
249
317
 
250
318
  install-pc: libzstd.pc
251
- @$(INSTALL) -d -m 755 $(DESTDIR)$(PKGCONFIGDIR)/
252
- @$(INSTALL_DATA) libzstd.pc $(DESTDIR)$(PKGCONFIGDIR)/
319
+ $(Q)$(INSTALL) -d -m 755 $(DESTDIR)$(PKGCONFIGDIR)/
320
+ $(Q)$(INSTALL_DATA) libzstd.pc $(DESTDIR)$(PKGCONFIGDIR)/
253
321
 
254
322
  install-static: libzstd.a
255
323
  @echo Installing static library
256
- @$(INSTALL) -d -m 755 $(DESTDIR)$(LIBDIR)/
257
- @$(INSTALL_DATA) libzstd.a $(DESTDIR)$(LIBDIR)
324
+ $(Q)$(INSTALL) -d -m 755 $(DESTDIR)$(LIBDIR)/
325
+ $(Q)$(INSTALL_DATA) libzstd.a $(DESTDIR)$(LIBDIR)
258
326
 
259
327
  install-shared: libzstd
260
328
  @echo Installing shared library
261
- @$(INSTALL) -d -m 755 $(DESTDIR)$(LIBDIR)/
262
- @$(INSTALL_PROGRAM) $(LIBZSTD) $(DESTDIR)$(LIBDIR)
263
- @ln -sf $(LIBZSTD) $(DESTDIR)$(LIBDIR)/libzstd.$(SHARED_EXT_MAJOR)
264
- @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)
265
333
 
266
334
  install-includes:
267
335
  @echo Installing includes
268
- @$(INSTALL) -d -m 755 $(DESTDIR)$(INCLUDEDIR)/
269
- @$(INSTALL_DATA) zstd.h $(DESTDIR)$(INCLUDEDIR)
270
- @$(INSTALL_DATA) common/zstd_errors.h $(DESTDIR)$(INCLUDEDIR)
271
- @$(INSTALL_DATA) deprecated/zbuff.h $(DESTDIR)$(INCLUDEDIR) # prototypes generate deprecation warnings
272
- @$(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)
273
341
 
274
342
  uninstall:
275
- @$(RM) $(DESTDIR)$(LIBDIR)/libzstd.a
276
- @$(RM) $(DESTDIR)$(LIBDIR)/libzstd.$(SHARED_EXT)
277
- @$(RM) $(DESTDIR)$(LIBDIR)/libzstd.$(SHARED_EXT_MAJOR)
278
- @$(RM) $(DESTDIR)$(LIBDIR)/$(LIBZSTD)
279
- @$(RM) $(DESTDIR)$(PKGCONFIGDIR)/libzstd.pc
280
- @$(RM) $(DESTDIR)$(INCLUDEDIR)/zstd.h
281
- @$(RM) $(DESTDIR)$(INCLUDEDIR)/zstd_errors.h
282
- @$(RM) $(DESTDIR)$(INCLUDEDIR)/zbuff.h # Deprecated streaming functions
283
- @$(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
284
352
  @echo zstd libraries successfully uninstalled
285
353
 
286
354
  endif