zstd-ruby 1.4.4.0 → 1.5.1.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.
Files changed (102) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +8 -0
  3. data/.github/workflows/ruby.yml +35 -0
  4. data/README.md +2 -2
  5. data/ext/zstdruby/extconf.rb +1 -0
  6. data/ext/zstdruby/libzstd/BUCK +5 -7
  7. data/ext/zstdruby/libzstd/Makefile +241 -173
  8. data/ext/zstdruby/libzstd/README.md +76 -18
  9. data/ext/zstdruby/libzstd/common/bitstream.h +75 -57
  10. data/ext/zstdruby/libzstd/common/compiler.h +196 -20
  11. data/ext/zstdruby/libzstd/common/cpu.h +1 -3
  12. data/ext/zstdruby/libzstd/common/debug.c +11 -31
  13. data/ext/zstdruby/libzstd/common/debug.h +22 -49
  14. data/ext/zstdruby/libzstd/common/entropy_common.c +208 -76
  15. data/ext/zstdruby/libzstd/common/error_private.c +3 -1
  16. data/ext/zstdruby/libzstd/common/error_private.h +87 -4
  17. data/ext/zstdruby/libzstd/common/fse.h +51 -42
  18. data/ext/zstdruby/libzstd/common/fse_decompress.c +149 -57
  19. data/ext/zstdruby/libzstd/common/huf.h +60 -54
  20. data/ext/zstdruby/libzstd/common/mem.h +87 -98
  21. data/ext/zstdruby/libzstd/common/pool.c +23 -17
  22. data/ext/zstdruby/libzstd/common/pool.h +3 -3
  23. data/ext/zstdruby/libzstd/common/portability_macros.h +131 -0
  24. data/ext/zstdruby/libzstd/common/threading.c +10 -8
  25. data/ext/zstdruby/libzstd/common/threading.h +4 -3
  26. data/ext/zstdruby/libzstd/common/xxhash.c +15 -873
  27. data/ext/zstdruby/libzstd/common/xxhash.h +5572 -191
  28. data/ext/zstdruby/libzstd/common/zstd_common.c +10 -10
  29. data/ext/zstdruby/libzstd/common/zstd_deps.h +111 -0
  30. data/ext/zstdruby/libzstd/common/zstd_internal.h +252 -108
  31. data/ext/zstdruby/libzstd/common/zstd_trace.h +163 -0
  32. data/ext/zstdruby/libzstd/compress/clevels.h +134 -0
  33. data/ext/zstdruby/libzstd/compress/fse_compress.c +105 -85
  34. data/ext/zstdruby/libzstd/compress/hist.c +41 -63
  35. data/ext/zstdruby/libzstd/compress/hist.h +13 -33
  36. data/ext/zstdruby/libzstd/compress/huf_compress.c +831 -259
  37. data/ext/zstdruby/libzstd/compress/zstd_compress.c +3213 -1007
  38. data/ext/zstdruby/libzstd/compress/zstd_compress_internal.h +493 -71
  39. data/ext/zstdruby/libzstd/compress/zstd_compress_literals.c +21 -16
  40. data/ext/zstdruby/libzstd/compress/zstd_compress_literals.h +4 -2
  41. data/ext/zstdruby/libzstd/compress/zstd_compress_sequences.c +51 -24
  42. data/ext/zstdruby/libzstd/compress/zstd_compress_sequences.h +10 -3
  43. data/ext/zstdruby/libzstd/compress/zstd_compress_superblock.c +573 -0
  44. data/ext/zstdruby/libzstd/compress/zstd_compress_superblock.h +32 -0
  45. data/ext/zstdruby/libzstd/compress/zstd_cwksp.h +208 -81
  46. data/ext/zstdruby/libzstd/compress/zstd_double_fast.c +315 -137
  47. data/ext/zstdruby/libzstd/compress/zstd_double_fast.h +2 -2
  48. data/ext/zstdruby/libzstd/compress/zstd_fast.c +319 -128
  49. data/ext/zstdruby/libzstd/compress/zstd_fast.h +2 -2
  50. data/ext/zstdruby/libzstd/compress/zstd_lazy.c +1156 -171
  51. data/ext/zstdruby/libzstd/compress/zstd_lazy.h +59 -1
  52. data/ext/zstdruby/libzstd/compress/zstd_ldm.c +331 -206
  53. data/ext/zstdruby/libzstd/compress/zstd_ldm.h +15 -3
  54. data/ext/zstdruby/libzstd/compress/zstd_ldm_geartab.h +106 -0
  55. data/ext/zstdruby/libzstd/compress/zstd_opt.c +403 -226
  56. data/ext/zstdruby/libzstd/compress/zstd_opt.h +1 -1
  57. data/ext/zstdruby/libzstd/compress/zstdmt_compress.c +188 -453
  58. data/ext/zstdruby/libzstd/compress/zstdmt_compress.h +32 -114
  59. data/ext/zstdruby/libzstd/decompress/huf_decompress.c +1065 -410
  60. data/ext/zstdruby/libzstd/decompress/huf_decompress_amd64.S +571 -0
  61. data/ext/zstdruby/libzstd/decompress/zstd_ddict.c +20 -16
  62. data/ext/zstdruby/libzstd/decompress/zstd_ddict.h +3 -3
  63. data/ext/zstdruby/libzstd/decompress/zstd_decompress.c +691 -230
  64. data/ext/zstdruby/libzstd/decompress/zstd_decompress_block.c +1072 -323
  65. data/ext/zstdruby/libzstd/decompress/zstd_decompress_block.h +16 -7
  66. data/ext/zstdruby/libzstd/decompress/zstd_decompress_internal.h +71 -10
  67. data/ext/zstdruby/libzstd/deprecated/zbuff.h +3 -3
  68. data/ext/zstdruby/libzstd/deprecated/zbuff_common.c +2 -2
  69. data/ext/zstdruby/libzstd/deprecated/zbuff_compress.c +24 -4
  70. data/ext/zstdruby/libzstd/deprecated/zbuff_decompress.c +1 -1
  71. data/ext/zstdruby/libzstd/dictBuilder/cover.c +57 -40
  72. data/ext/zstdruby/libzstd/dictBuilder/cover.h +20 -9
  73. data/ext/zstdruby/libzstd/dictBuilder/divsufsort.c +1 -1
  74. data/ext/zstdruby/libzstd/dictBuilder/fastcover.c +54 -35
  75. data/ext/zstdruby/libzstd/dictBuilder/zdict.c +151 -57
  76. data/ext/zstdruby/libzstd/dll/example/Makefile +2 -1
  77. data/ext/zstdruby/libzstd/dll/example/README.md +16 -22
  78. data/ext/zstdruby/libzstd/legacy/zstd_legacy.h +4 -4
  79. data/ext/zstdruby/libzstd/legacy/zstd_v01.c +25 -19
  80. data/ext/zstdruby/libzstd/legacy/zstd_v01.h +1 -1
  81. data/ext/zstdruby/libzstd/legacy/zstd_v02.c +18 -14
  82. data/ext/zstdruby/libzstd/legacy/zstd_v02.h +1 -1
  83. data/ext/zstdruby/libzstd/legacy/zstd_v03.c +18 -14
  84. data/ext/zstdruby/libzstd/legacy/zstd_v03.h +1 -1
  85. data/ext/zstdruby/libzstd/legacy/zstd_v04.c +22 -16
  86. data/ext/zstdruby/libzstd/legacy/zstd_v04.h +1 -1
  87. data/ext/zstdruby/libzstd/legacy/zstd_v05.c +29 -25
  88. data/ext/zstdruby/libzstd/legacy/zstd_v05.h +2 -2
  89. data/ext/zstdruby/libzstd/legacy/zstd_v06.c +29 -25
  90. data/ext/zstdruby/libzstd/legacy/zstd_v06.h +1 -1
  91. data/ext/zstdruby/libzstd/legacy/zstd_v07.c +34 -26
  92. data/ext/zstdruby/libzstd/legacy/zstd_v07.h +1 -1
  93. data/ext/zstdruby/libzstd/libzstd.mk +185 -0
  94. data/ext/zstdruby/libzstd/libzstd.pc.in +4 -3
  95. data/ext/zstdruby/libzstd/modulemap/module.modulemap +4 -0
  96. data/ext/zstdruby/libzstd/{dictBuilder/zdict.h → zdict.h} +201 -31
  97. data/ext/zstdruby/libzstd/zstd.h +760 -234
  98. data/ext/zstdruby/libzstd/{common/zstd_errors.h → zstd_errors.h} +3 -1
  99. data/ext/zstdruby/zstdruby.c +2 -2
  100. data/lib/zstd-ruby/version.rb +1 -1
  101. metadata +20 -9
  102. data/.travis.yml +0 -14
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 53be8076094a9ed214cbc86a174eeb3b587dc3d4781f7fbcf8ee280ffd0ca169
4
- data.tar.gz: ebf9bcf8d062447dab0589c1acfe63f2481f9445c78f51653daf1f60750dfdd5
3
+ metadata.gz: 9c5390f204466dadf3276d3d7841d5dcc0c2be4f9cdafd11be705b6304b8cb27
4
+ data.tar.gz: 3538385c093224f15c6199ae51cdedb944a1b6e0ff4e9c3287ea907911fb07b9
5
5
  SHA512:
6
- metadata.gz: 7f3ac7650f5ec553aea615d60737bc092bca9d06c998eecc0570b5d542344f4cfc703335154e845c53927878d424ca244fa494f4bddb3e59f01bbd6111de5172
7
- data.tar.gz: b96f8df37df844f461fab2cd1b60fe9b6a729a1a411f62f1dcef34c9684672ebd7c42963d79abdf5fe1e8d5d443104509492fe9128a7dbf3773e9db180592cbd
6
+ metadata.gz: 8fc0f3ca375ee6b9fd6564eb0807c8d9e5c0f39e19ba9a9692d07c28e55e2fc70a625d3dc682ae402eb7bce76caf114f0c5b103a047f46c88b033bc2bdccc52f
7
+ data.tar.gz: 2bdb03fade1bca81eedcac96a63b5cbaea4774373f06f483ce77978a3795241e523905b6845c5fac0c70465df3575691e70441cca7a68b7f32b81202c82e69c0
@@ -0,0 +1,8 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: bundler
4
+ directory: "/"
5
+ schedule:
6
+ interval: weekly
7
+ time: "20:00"
8
+ open-pull-requests-limit: 10
@@ -0,0 +1,35 @@
1
+ # This workflow uses actions that are not certified by GitHub.
2
+ # They are provided by a third-party and are governed by
3
+ # separate terms of service, privacy policy, and support
4
+ # documentation.
5
+ # This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
6
+ # For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
7
+
8
+ name: Ruby
9
+
10
+ on: [push, pull_request]
11
+
12
+ jobs:
13
+ test:
14
+
15
+ runs-on: ubuntu-latest
16
+ strategy:
17
+ matrix:
18
+ ruby-version: ['2.6', '2.7', '3.0', '3.1']
19
+
20
+ steps:
21
+ - uses: actions/checkout@v2
22
+ - name: Set up Ruby
23
+ # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
24
+ # change this to (see https://github.com/ruby/setup-ruby#versioning):
25
+ # uses: ruby/setup-ruby@v1
26
+ uses: ruby/setup-ruby@168d6a54b412713c0ed60998a78093a270ca8d84
27
+ with:
28
+ ruby-version: ${{ matrix.ruby-version }}
29
+ bundler-cache: true # runs 'bundle install' and caches installed gems automatically
30
+ - name: Install dependencies
31
+ run: bundle install
32
+ - name: Compile
33
+ run: bundle exec rake compile
34
+ - name: Run tests
35
+ run: bundle exec rspec
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  [![Gem Version](https://badge.fury.io/rb/zstd-ruby.svg)](https://badge.fury.io/rb/zstd-ruby)
2
- [![Build Status](https://travis-ci.org/SpringMT/zstd-ruby.svg?branch=master)](https://travis-ci.org/SpringMT/zstd-ruby)
2
+ ![Build Status](https://github.com/SpringMT/zstd-ruby/actions/workflows/ruby.yml/badge.svg?branch=master)
3
3
 
4
4
  # zstd-ruby
5
5
 
@@ -10,7 +10,7 @@ See https://github.com/facebook/zstd
10
10
  Fork from https://github.com/jarredholman/ruby-zstd.
11
11
 
12
12
  ## Zstd version
13
- v1.4.4 (https://github.com/facebook/zstd/tree/v1.4.4)
13
+ v1.5.1 (https://github.com/facebook/zstd/tree/v1.5.1)
14
14
 
15
15
  ## Installation
16
16
 
@@ -1,6 +1,7 @@
1
1
  require "mkmf"
2
2
 
3
3
  $CFLAGS = '-I. -O3 -std=c99'
4
+ $CPPFLAGS += " -fdeclspec" if CONFIG['CXX'] =~ /clang/
4
5
 
5
6
  Dir.chdir File.expand_path('..', __FILE__) do
6
7
  $srcs = Dir['**/*.c']
@@ -65,9 +65,7 @@ cxx_library(
65
65
  name='zdict',
66
66
  header_namespace='',
67
67
  visibility=['PUBLIC'],
68
- exported_headers=subdir_glob([
69
- ('dictBuilder', 'zdict.h'),
70
- ]),
68
+ exported_headers=['zdict.h'],
71
69
  headers=subdir_glob([
72
70
  ('dictBuilder', 'divsufsort.h'),
73
71
  ('dictBuilder', 'cover.h'),
@@ -131,10 +129,10 @@ cxx_library(
131
129
  name='errors',
132
130
  header_namespace='',
133
131
  visibility=['PUBLIC'],
134
- exported_headers=subdir_glob([
135
- ('common', 'error_private.h'),
136
- ('common', 'zstd_errors.h'),
137
- ]),
132
+ exported_headers=[
133
+ 'zstd_errors.h',
134
+ 'common/error_private.h',
135
+ ]
138
136
  srcs=['common/error_private.c'],
139
137
  )
140
138
 
@@ -1,216 +1,259 @@
1
1
  # ################################################################
2
- # Copyright (c) 2015-present, Yann Collet, Facebook, Inc.
2
+ # Copyright (c) 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
- # Version numbers
11
- LIBVER_MAJOR_SCRIPT:=`sed -n '/define ZSTD_VERSION_MAJOR/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p' < ./zstd.h`
12
- LIBVER_MINOR_SCRIPT:=`sed -n '/define ZSTD_VERSION_MINOR/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p' < ./zstd.h`
13
- LIBVER_PATCH_SCRIPT:=`sed -n '/define ZSTD_VERSION_RELEASE/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p' < ./zstd.h`
14
- LIBVER_SCRIPT:= $(LIBVER_MAJOR_SCRIPT).$(LIBVER_MINOR_SCRIPT).$(LIBVER_PATCH_SCRIPT)
15
- LIBVER_MAJOR := $(shell echo $(LIBVER_MAJOR_SCRIPT))
16
- LIBVER_MINOR := $(shell echo $(LIBVER_MINOR_SCRIPT))
17
- LIBVER_PATCH := $(shell echo $(LIBVER_PATCH_SCRIPT))
18
- LIBVER := $(shell echo $(LIBVER_SCRIPT))
19
- VERSION?= $(LIBVER)
20
- CCVER := $(shell $(CC) --version)
21
-
22
- CPPFLAGS+= -I. -I./common -DXXH_NAMESPACE=ZSTD_
23
- ifeq ($(OS),Windows_NT) # MinGW assumed
24
- CPPFLAGS += -D__USE_MINGW_ANSI_STDIO # compatibility with %zu formatting
25
- endif
26
- CFLAGS ?= -O3
27
- DEBUGFLAGS= -Wall -Wextra -Wcast-qual -Wcast-align -Wshadow \
28
- -Wstrict-aliasing=1 -Wswitch-enum -Wdeclaration-after-statement \
29
- -Wstrict-prototypes -Wundef -Wpointer-arith \
30
- -Wvla -Wformat=2 -Winit-self -Wfloat-equal -Wwrite-strings \
31
- -Wredundant-decls -Wmissing-prototypes -Wc++-compat
32
- CFLAGS += $(DEBUGFLAGS) $(MOREFLAGS)
33
- FLAGS = $(CPPFLAGS) $(CFLAGS)
34
-
35
- HAVE_COLORNEVER = $(shell echo a | grep --color=never a > /dev/null 2> /dev/null && echo 1 || echo 0)
36
- GREP_OPTIONS ?=
37
- ifeq ($HAVE_COLORNEVER, 1)
38
- GREP_OPTIONS += --color=never
39
- endif
40
- GREP = grep $(GREP_OPTIONS)
41
-
42
- ZSTDCOMMON_FILES := $(sort $(wildcard common/*.c))
43
- ZSTDCOMP_FILES := $(sort $(wildcard compress/*.c))
44
- ZSTDDECOMP_FILES := $(sort $(wildcard decompress/*.c))
45
- ZDICT_FILES := $(sort $(wildcard dictBuilder/*.c))
46
- ZDEPR_FILES := $(sort $(wildcard deprecated/*.c))
47
- ZSTD_FILES := $(ZSTDCOMMON_FILES)
48
-
49
- ifeq ($(findstring GCC,$(CCVER)),GCC)
50
- decompress/zstd_decompress_block.o : CFLAGS+=-fno-tree-vectorize
51
- endif
52
-
53
- ZSTD_LEGACY_SUPPORT ?= 5
11
+ # Modules
54
12
  ZSTD_LIB_COMPRESSION ?= 1
55
13
  ZSTD_LIB_DECOMPRESSION ?= 1
56
14
  ZSTD_LIB_DICTBUILDER ?= 1
57
- ZSTD_LIB_DEPRECATED ?= 1
58
- HUF_FORCE_DECOMPRESS_X1 ?= 0
59
- HUF_FORCE_DECOMPRESS_X2 ?= 0
60
- ZSTD_FORCE_DECOMPRESS_SHORT ?= 0
61
- ZSTD_FORCE_DECOMPRESS_LONG ?= 0
62
- ZSTD_NO_INLINE ?= 0
63
- ZSTD_STRIP_ERROR_STRINGS ?= 0
64
- ZSTD_LEGACY_MULTITHREADED_API ?= 0
15
+ ZSTD_LIB_DEPRECATED ?= 0
65
16
 
17
+ # Input variables for libzstd.mk
66
18
  ifeq ($(ZSTD_LIB_COMPRESSION), 0)
67
- ZSTD_LIB_DICTBUILDER = 0
68
- ZSTD_LIB_DEPRECATED = 0
19
+ ZSTD_LIB_DICTBUILDER = 0
20
+ ZSTD_LIB_DEPRECATED = 0
69
21
  endif
70
22
 
71
23
  ifeq ($(ZSTD_LIB_DECOMPRESSION), 0)
72
- ZSTD_LEGACY_SUPPORT = 0
73
- ZSTD_LIB_DEPRECATED = 0
24
+ ZSTD_LEGACY_SUPPORT = 0
25
+ ZSTD_LIB_DEPRECATED = 0
74
26
  endif
75
27
 
28
+ include libzstd.mk
29
+
30
+ ZSTD_FILES := $(ZSTD_COMMON_FILES) $(ZSTD_LEGACY_FILES)
31
+
76
32
  ifneq ($(ZSTD_LIB_COMPRESSION), 0)
77
- ZSTD_FILES += $(ZSTDCOMP_FILES)
33
+ ZSTD_FILES += $(ZSTD_COMPRESS_FILES)
78
34
  endif
79
35
 
80
36
  ifneq ($(ZSTD_LIB_DECOMPRESSION), 0)
81
- ZSTD_FILES += $(ZSTDDECOMP_FILES)
37
+ ZSTD_FILES += $(ZSTD_DECOMPRESS_FILES)
82
38
  endif
83
39
 
84
40
  ifneq ($(ZSTD_LIB_DEPRECATED), 0)
85
- ZSTD_FILES += $(ZDEPR_FILES)
41
+ ZSTD_FILES += $(ZSTD_DEPRECATED_FILES)
86
42
  endif
87
43
 
88
44
  ifneq ($(ZSTD_LIB_DICTBUILDER), 0)
89
- ZSTD_FILES += $(ZDICT_FILES)
90
- endif
91
-
92
- ifneq ($(HUF_FORCE_DECOMPRESS_X1), 0)
93
- CFLAGS += -DHUF_FORCE_DECOMPRESS_X1
45
+ ZSTD_FILES += $(ZSTD_DICTBUILDER_FILES)
94
46
  endif
95
47
 
96
- ifneq ($(HUF_FORCE_DECOMPRESS_X2), 0)
97
- CFLAGS += -DHUF_FORCE_DECOMPRESS_X2
98
- endif
48
+ ZSTD_LOCAL_SRC := $(notdir $(ZSTD_FILES))
49
+ ZSTD_LOCAL_OBJ0 := $(ZSTD_LOCAL_SRC:.c=.o)
50
+ ZSTD_LOCAL_OBJ := $(ZSTD_LOCAL_OBJ0:.S=.o)
99
51
 
100
- ifneq ($(ZSTD_FORCE_DECOMPRESS_SHORT), 0)
101
- CFLAGS += -DZSTD_FORCE_DECOMPRESS_SHORT
102
- endif
103
-
104
- ifneq ($(ZSTD_FORCE_DECOMPRESS_LONG), 0)
105
- CFLAGS += -DZSTD_FORCE_DECOMPRESS_LONG
106
- endif
52
+ VERSION := $(ZSTD_VERSION)
107
53
 
108
- ifneq ($(ZSTD_NO_INLINE), 0)
109
- CFLAGS += -DZSTD_NO_INLINE
110
- endif
54
+ # Note: by default, the static library is built single-threaded and dynamic library is built
55
+ # multi-threaded. It is possible to force multi or single threaded builds by appending
56
+ # -mt or -nomt to the build target (like lib-mt for multi-threaded, lib-nomt for single-threaded).
57
+ .PHONY: default
58
+ default: lib-release
111
59
 
112
- ifneq ($(ZSTD_STRIP_ERROR_STRINGS), 0)
113
- CFLAGS += -DZSTD_STRIP_ERROR_STRINGS
114
- endif
60
+ CPPFLAGS_DYNLIB += -DZSTD_MULTITHREAD # dynamic library build defaults to multi-threaded
61
+ LDFLAGS_DYNLIB += -pthread
62
+ CPPFLAGS_STATLIB += # static library build defaults to single-threaded
115
63
 
116
- ifneq ($(ZSTD_LEGACY_MULTITHREADED_API), 0)
117
- CFLAGS += -DZSTD_LEGACY_MULTITHREADED_API
118
- endif
119
64
 
120
- ifneq ($(ZSTD_LEGACY_SUPPORT), 0)
121
- ifeq ($(shell test $(ZSTD_LEGACY_SUPPORT) -lt 8; echo $$?), 0)
122
- ZSTD_FILES += $(shell ls legacy/*.c | $(GREP) 'v0[$(ZSTD_LEGACY_SUPPORT)-7]')
123
- endif
124
- CPPFLAGS += -I./legacy
65
+ ifeq ($(findstring GCC,$(CCVER)),GCC)
66
+ decompress/zstd_decompress_block.o : CFLAGS+=-fno-tree-vectorize
125
67
  endif
126
- CPPFLAGS += -DZSTD_LEGACY_SUPPORT=$(ZSTD_LEGACY_SUPPORT)
127
68
 
128
- ZSTD_OBJ := $(patsubst %.c,%.o,$(ZSTD_FILES))
129
69
 
130
70
  # macOS linker doesn't support -soname, and use different extension
131
71
  # see : https://developer.apple.com/library/mac/documentation/DeveloperTools/Conceptual/DynamicLibraries/100-Articles/DynamicLibraryDesignGuidelines.html
132
- ifeq ($(shell uname), Darwin)
133
- SHARED_EXT = dylib
134
- SHARED_EXT_MAJOR = $(LIBVER_MAJOR).$(SHARED_EXT)
135
- SHARED_EXT_VER = $(LIBVER).$(SHARED_EXT)
136
- SONAME_FLAGS = -install_name $(LIBDIR)/libzstd.$(SHARED_EXT_MAJOR) -compatibility_version $(LIBVER_MAJOR) -current_version $(LIBVER)
72
+ ifeq ($(UNAME), Darwin)
73
+ SHARED_EXT = dylib
74
+ SHARED_EXT_MAJOR = $(LIBVER_MAJOR).$(SHARED_EXT)
75
+ SHARED_EXT_VER = $(LIBVER).$(SHARED_EXT)
76
+ SONAME_FLAGS = -install_name $(LIBDIR)/libzstd.$(SHARED_EXT_MAJOR) -compatibility_version $(LIBVER_MAJOR) -current_version $(LIBVER)
137
77
  else
138
- SONAME_FLAGS = -Wl,-soname=libzstd.$(SHARED_EXT).$(LIBVER_MAJOR)
139
- SHARED_EXT = so
140
- SHARED_EXT_MAJOR = $(SHARED_EXT).$(LIBVER_MAJOR)
141
- SHARED_EXT_VER = $(SHARED_EXT).$(LIBVER)
78
+ ifeq ($(UNAME), AIX)
79
+ SONAME_FLAGS =
80
+ else
81
+ SONAME_FLAGS = -Wl,-soname=libzstd.$(SHARED_EXT).$(LIBVER_MAJOR)
82
+ endif
83
+ SHARED_EXT = so
84
+ SHARED_EXT_MAJOR = $(SHARED_EXT).$(LIBVER_MAJOR)
85
+ SHARED_EXT_VER = $(SHARED_EXT).$(LIBVER)
142
86
  endif
143
87
 
144
88
 
145
- .PHONY: default all clean install uninstall
89
+ .PHONY: all
90
+ all: lib
91
+
146
92
 
147
- default: lib-release
93
+ .PHONY: libzstd.a # must be run every time
94
+ libzstd.a: CPPFLAGS += $(CPPFLAGS_STATLIB)
148
95
 
149
- all: lib
96
+ SET_CACHE_DIRECTORY = \
97
+ +$(MAKE) --no-print-directory $@ \
98
+ BUILD_DIR=obj/$(HASH_DIR) \
99
+ CPPFLAGS="$(CPPFLAGS)" \
100
+ CFLAGS="$(CFLAGS)" \
101
+ LDFLAGS="$(LDFLAGS)"
102
+
103
+ ifndef BUILD_DIR
104
+ # determine BUILD_DIR from compilation flags
150
105
 
151
- libzstd.a: ARFLAGS = rcs
152
- libzstd.a: $(ZSTD_OBJ)
153
- @echo compiling static library
154
- @$(AR) $(ARFLAGS) $@ $^
106
+ libzstd.a:
107
+ $(SET_CACHE_DIRECTORY)
155
108
 
156
- libzstd.a-mt: CPPFLAGS += -DZSTD_MULTITHREAD
157
- libzstd.a-mt: libzstd.a
109
+ else
110
+ # BUILD_DIR is defined
111
+
112
+ ZSTD_STATLIB_DIR := $(BUILD_DIR)/static
113
+ ZSTD_STATLIB := $(ZSTD_STATLIB_DIR)/libzstd.a
114
+ ZSTD_STATLIB_OBJ := $(addprefix $(ZSTD_STATLIB_DIR)/,$(ZSTD_LOCAL_OBJ))
115
+ $(ZSTD_STATLIB): ARFLAGS = rcs
116
+ $(ZSTD_STATLIB): | $(ZSTD_STATLIB_DIR)
117
+ $(ZSTD_STATLIB): $(ZSTD_STATLIB_OBJ)
118
+ # Check for multithread flag at target execution time
119
+ $(if $(filter -DZSTD_MULTITHREAD,$(CPPFLAGS)),\
120
+ @echo compiling multi-threaded static library $(LIBVER),\
121
+ @echo compiling single-threaded static library $(LIBVER))
122
+ $(AR) $(ARFLAGS) $@ $^
123
+
124
+ libzstd.a: $(ZSTD_STATLIB)
125
+ cp -f $< $@
126
+
127
+ endif
158
128
 
159
- ifneq (,$(filter Windows%,$(OS)))
129
+ ifneq (,$(filter Windows%,$(TARGET_SYSTEM)))
160
130
 
161
- LIBZSTD = dll\libzstd.dll
131
+ LIBZSTD = dll/libzstd.dll
162
132
  $(LIBZSTD): $(ZSTD_FILES)
163
133
  @echo compiling dynamic library $(LIBVER)
164
- $(CC) $(FLAGS) -DZSTD_DLL_EXPORT=1 -Wl,--out-implib,dll\libzstd.lib -shared $^ -o $@
134
+ $(CC) $(FLAGS) -DZSTD_DLL_EXPORT=1 -Wl,--out-implib,dll/libzstd.dll.a -shared $^ -o $@
165
135
 
166
- else
136
+ else # not Windows
167
137
 
168
138
  LIBZSTD = libzstd.$(SHARED_EXT_VER)
169
- $(LIBZSTD): LDFLAGS += -shared -fPIC -fvisibility=hidden
170
- $(LIBZSTD): $(ZSTD_FILES)
171
- @echo compiling dynamic library $(LIBVER)
172
- @$(CC) $(FLAGS) $^ $(LDFLAGS) $(SONAME_FLAGS) -o $@
139
+ .PHONY: $(LIBZSTD) # must be run every time
140
+ $(LIBZSTD): CPPFLAGS += $(CPPFLAGS_DYNLIB)
141
+ $(LIBZSTD): CFLAGS += -fPIC -fvisibility=hidden
142
+ $(LIBZSTD): LDFLAGS += -shared $(LDFLAGS_DYNLIB)
143
+
144
+ ifndef BUILD_DIR
145
+ # determine BUILD_DIR from compilation flags
146
+
147
+ $(LIBZSTD):
148
+ $(SET_CACHE_DIRECTORY)
149
+
150
+ else
151
+ # BUILD_DIR is defined
152
+
153
+ ZSTD_DYNLIB_DIR := $(BUILD_DIR)/dynamic
154
+ ZSTD_DYNLIB := $(ZSTD_DYNLIB_DIR)/$(LIBZSTD)
155
+ ZSTD_DYNLIB_OBJ := $(addprefix $(ZSTD_DYNLIB_DIR)/,$(ZSTD_LOCAL_OBJ))
156
+
157
+ $(ZSTD_DYNLIB): | $(ZSTD_DYNLIB_DIR)
158
+ $(ZSTD_DYNLIB): $(ZSTD_DYNLIB_OBJ)
159
+ # Check for multithread flag at target execution time
160
+ $(if $(filter -DZSTD_MULTITHREAD,$(CPPFLAGS)),\
161
+ @echo compiling multi-threaded dynamic library $(LIBVER),\
162
+ @echo compiling single-threaded dynamic library $(LIBVER))
163
+ $(CC) $(FLAGS) $^ $(LDFLAGS) $(SONAME_FLAGS) -o $@
173
164
  @echo creating versioned links
174
- @ln -sf $@ libzstd.$(SHARED_EXT_MAJOR)
175
- @ln -sf $@ libzstd.$(SHARED_EXT)
165
+ ln -sf $@ libzstd.$(SHARED_EXT_MAJOR)
166
+ ln -sf $@ libzstd.$(SHARED_EXT)
176
167
 
177
- endif
168
+ $(LIBZSTD): $(ZSTD_DYNLIB)
169
+ cp -f $< $@
178
170
 
171
+ endif # ifndef BUILD_DIR
172
+ endif # if windows
179
173
 
174
+ .PHONY: libzstd
180
175
  libzstd : $(LIBZSTD)
181
176
 
182
- libzstd-mt : CPPFLAGS += -DZSTD_MULTITHREAD
183
- libzstd-mt : libzstd
177
+ .PHONY: lib
178
+ lib : libzstd.a libzstd
179
+
180
+
181
+ # note : do not define lib-mt or lib-release as .PHONY
182
+ # make does not consider implicit pattern rule for .PHONY target
183
+
184
+ %-mt : CPPFLAGS_DYNLIB := -DZSTD_MULTITHREAD
185
+ %-mt : CPPFLAGS_STATLIB := -DZSTD_MULTITHREAD
186
+ %-mt : LDFLAGS_DYNLIB := -pthread
187
+ %-mt : %
188
+ @echo multi-threaded build completed
189
+
190
+ %-nomt : CPPFLAGS_DYNLIB :=
191
+ %-nomt : LDFLAGS_DYNLIB :=
192
+ %-nomt : CPPFLAGS_STATLIB :=
193
+ %-nomt : %
194
+ @echo single-threaded build completed
195
+
196
+ %-release : DEBUGFLAGS :=
197
+ %-release : %
198
+ @echo release build completed
199
+
184
200
 
185
- lib: libzstd.a libzstd
201
+ # Generate .h dependencies automatically
186
202
 
187
- lib-mt: CPPFLAGS += -DZSTD_MULTITHREAD
188
- lib-mt: lib
203
+ DEPFLAGS = -MT $@ -MMD -MP -MF
204
+
205
+ $(ZSTD_DYNLIB_DIR)/%.o : %.c $(ZSTD_DYNLIB_DIR)/%.d | $(ZSTD_DYNLIB_DIR)
206
+ @echo CC $@
207
+ $(COMPILE.c) $(DEPFLAGS) $(ZSTD_DYNLIB_DIR)/$*.d $(OUTPUT_OPTION) $<
208
+
209
+ $(ZSTD_STATLIB_DIR)/%.o : %.c $(ZSTD_STATLIB_DIR)/%.d | $(ZSTD_STATLIB_DIR)
210
+ @echo CC $@
211
+ $(COMPILE.c) $(DEPFLAGS) $(ZSTD_STATLIB_DIR)/$*.d $(OUTPUT_OPTION) $<
212
+
213
+ $(ZSTD_DYNLIB_DIR)/%.o : %.S | $(ZSTD_DYNLIB_DIR)
214
+ @echo AS $@
215
+ $(COMPILE.c) $(OUTPUT_OPTION) $<
216
+
217
+ $(ZSTD_STATLIB_DIR)/%.o : %.S | $(ZSTD_STATLIB_DIR)
218
+ @echo AS $@
219
+ $(COMPILE.c) $(OUTPUT_OPTION) $<
220
+
221
+ MKDIR ?= mkdir
222
+ $(BUILD_DIR) $(ZSTD_DYNLIB_DIR) $(ZSTD_STATLIB_DIR):
223
+ $(MKDIR) -p $@
224
+
225
+ DEPFILES := $(ZSTD_DYNLIB_OBJ:.o=.d) $(ZSTD_STATLIB_OBJ:.o=.d)
226
+ $(DEPFILES):
227
+
228
+ include $(wildcard $(DEPFILES))
189
229
 
190
- lib-release lib-release-mt: DEBUGFLAGS :=
191
- lib-release: lib
192
- lib-release-mt: lib-mt
193
230
 
194
231
  # Special case : building library in single-thread mode _and_ without zstdmt_compress.c
195
232
  ZSTDMT_FILES = compress/zstdmt_compress.c
196
233
  ZSTD_NOMT_FILES = $(filter-out $(ZSTDMT_FILES),$(ZSTD_FILES))
197
- libzstd-nomt: LDFLAGS += -shared -fPIC -fvisibility=hidden
234
+ libzstd-nomt: CFLAGS += -fPIC -fvisibility=hidden
235
+ libzstd-nomt: LDFLAGS += -shared
198
236
  libzstd-nomt: $(ZSTD_NOMT_FILES)
199
237
  @echo compiling single-thread dynamic library $(LIBVER)
200
238
  @echo files : $(ZSTD_NOMT_FILES)
201
- @$(CC) $(FLAGS) $^ $(LDFLAGS) $(SONAME_FLAGS) -o $@
239
+ $(CC) $(FLAGS) $^ $(LDFLAGS) $(SONAME_FLAGS) -o $@
202
240
 
241
+ .PHONY: clean
203
242
  clean:
204
- @$(RM) -r *.dSYM # macOS-specific
205
- @$(RM) core *.o *.a *.gcda *.$(SHARED_EXT) *.$(SHARED_EXT).* libzstd.pc
206
- @$(RM) dll/libzstd.dll dll/libzstd.lib libzstd-nomt*
207
- @$(RM) common/*.o compress/*.o decompress/*.o dictBuilder/*.o legacy/*.o deprecated/*.o
243
+ $(RM) -r *.dSYM # macOS-specific
244
+ $(RM) core *.o *.a *.gcda *.$(SHARED_EXT) *.$(SHARED_EXT).* libzstd.pc
245
+ $(RM) dll/libzstd.dll dll/libzstd.lib libzstd-nomt*
246
+ $(RM) -r obj/*
208
247
  @echo Cleaning library completed
209
248
 
210
249
  #-----------------------------------------------------------------------------
211
- # make install is validated only for Linux, macOS, BSD, Hurd and Solaris targets
250
+ # make install is validated only for below listed environments
212
251
  #-----------------------------------------------------------------------------
213
- ifneq (,$(filter $(shell uname),Linux Darwin GNU/kFreeBSD GNU OpenBSD FreeBSD NetBSD DragonFly SunOS Haiku))
252
+ ifneq (,$(filter $(UNAME),Linux Darwin GNU/kFreeBSD GNU OpenBSD FreeBSD NetBSD DragonFly SunOS Haiku AIX))
253
+
254
+ lib: libzstd.pc
255
+
256
+ HAS_EXPLICIT_EXEC_PREFIX := $(if $(or $(EXEC_PREFIX),$(exec_prefix)),1,)
214
257
 
215
258
  DESTDIR ?=
216
259
  # directory variables : GNU conventions prefer lowercase
@@ -219,71 +262,96 @@ DESTDIR ?=
219
262
  prefix ?= /usr/local
220
263
  PREFIX ?= $(prefix)
221
264
  exec_prefix ?= $(PREFIX)
222
- libdir ?= $(exec_prefix)/lib
265
+ EXEC_PREFIX ?= $(exec_prefix)
266
+ libdir ?= $(EXEC_PREFIX)/lib
223
267
  LIBDIR ?= $(libdir)
224
268
  includedir ?= $(PREFIX)/include
225
269
  INCLUDEDIR ?= $(includedir)
226
270
 
227
- ifneq (,$(filter $(shell uname),FreeBSD NetBSD DragonFly))
228
- PKGCONFIGDIR ?= $(PREFIX)/libdata/pkgconfig
271
+ PCINCDIR := $(patsubst $(PREFIX)%,%,$(INCLUDEDIR))
272
+ PCLIBDIR := $(patsubst $(EXEC_PREFIX)%,%,$(LIBDIR))
273
+
274
+ # If we successfully stripped off a prefix, we'll add a reference to the
275
+ # relevant pc variable.
276
+ PCINCPREFIX := $(if $(findstring $(INCLUDEDIR),$(PCINCDIR)),,$${prefix})
277
+ PCLIBPREFIX := $(if $(findstring $(LIBDIR),$(PCLIBDIR)),,$${exec_prefix})
278
+
279
+ # If no explicit EXEC_PREFIX was set by the caller, write it out as a reference
280
+ # to PREFIX, rather than as a resolved value.
281
+ PCEXEC_PREFIX := $(if $(HAS_EXPLICIT_EXEC_PREFIX),$(EXEC_PREFIX),$${prefix})
282
+
283
+ ifneq (,$(filter $(UNAME),FreeBSD NetBSD DragonFly))
284
+ PKGCONFIGDIR ?= $(PREFIX)/libdata/pkgconfig
229
285
  else
230
- PKGCONFIGDIR ?= $(LIBDIR)/pkgconfig
286
+ PKGCONFIGDIR ?= $(LIBDIR)/pkgconfig
231
287
  endif
232
288
 
233
- ifneq (,$(filter $(shell uname),SunOS))
234
- INSTALL ?= ginstall
289
+ ifneq (,$(filter $(UNAME),SunOS))
290
+ INSTALL ?= ginstall
235
291
  else
236
- INSTALL ?= install
292
+ INSTALL ?= install
237
293
  endif
238
294
 
239
295
  INSTALL_PROGRAM ?= $(INSTALL)
240
296
  INSTALL_DATA ?= $(INSTALL) -m 644
241
297
 
242
298
 
243
- libzstd.pc:
244
299
  libzstd.pc: libzstd.pc.in
245
300
  @echo creating pkgconfig
246
- @sed -e 's|@PREFIX@|$(PREFIX)|' \
247
- -e 's|@VERSION@|$(VERSION)|' \
248
- $< >$@
249
-
301
+ @sed $(SED_ERE_OPT) \
302
+ -e 's|@PREFIX@|$(PREFIX)|' \
303
+ -e 's|@EXEC_PREFIX@|$(PCEXEC_PREFIX)|' \
304
+ -e 's|@INCLUDEDIR@|$(PCINCPREFIX)$(PCINCDIR)|' \
305
+ -e 's|@LIBDIR@|$(PCLIBPREFIX)$(PCLIBDIR)|' \
306
+ -e 's|@VERSION@|$(VERSION)|' \
307
+ -e 's|@LIBS_PRIVATE@|$(LDFLAGS_DYNLIB)|' \
308
+ $< >$@
309
+
310
+ .PHONY: install
250
311
  install: install-pc install-static install-shared install-includes
251
312
  @echo zstd static and shared library installed
252
313
 
314
+ .PHONY: install-pc
253
315
  install-pc: libzstd.pc
254
- @$(INSTALL) -d -m 755 $(DESTDIR)$(PKGCONFIGDIR)/
255
- @$(INSTALL_DATA) libzstd.pc $(DESTDIR)$(PKGCONFIGDIR)/
256
-
257
- install-static: libzstd.a
316
+ [ -e $(DESTDIR)$(PKGCONFIGDIR) ] || $(INSTALL) -d -m 755 $(DESTDIR)$(PKGCONFIGDIR)/
317
+ $(INSTALL_DATA) libzstd.pc $(DESTDIR)$(PKGCONFIGDIR)/
318
+
319
+ .PHONY: install-static
320
+ install-static:
321
+ # only generate libzstd.a if it's not already present
322
+ [ -e libzstd.a ] || $(MAKE) libzstd.a-release
323
+ [ -e $(DESTDIR)$(LIBDIR) ] || $(INSTALL) -d -m 755 $(DESTDIR)$(LIBDIR)/
258
324
  @echo Installing static library
259
- @$(INSTALL) -d -m 755 $(DESTDIR)$(LIBDIR)/
260
- @$(INSTALL_DATA) libzstd.a $(DESTDIR)$(LIBDIR)
325
+ $(INSTALL_DATA) libzstd.a $(DESTDIR)$(LIBDIR)
261
326
 
262
- install-shared: libzstd
327
+ .PHONY: install-shared
328
+ install-shared:
329
+ # only generate libzstd.so if it's not already present
330
+ [ -e $(LIBZSTD) ] || $(MAKE) libzstd-release
331
+ [ -e $(DESTDIR)$(LIBDIR) ] || $(INSTALL) -d -m 755 $(DESTDIR)$(LIBDIR)/
263
332
  @echo Installing shared library
264
- @$(INSTALL) -d -m 755 $(DESTDIR)$(LIBDIR)/
265
- @$(INSTALL_PROGRAM) $(LIBZSTD) $(DESTDIR)$(LIBDIR)
266
- @ln -sf $(LIBZSTD) $(DESTDIR)$(LIBDIR)/libzstd.$(SHARED_EXT_MAJOR)
267
- @ln -sf $(LIBZSTD) $(DESTDIR)$(LIBDIR)/libzstd.$(SHARED_EXT)
333
+ $(INSTALL_PROGRAM) $(LIBZSTD) $(DESTDIR)$(LIBDIR)
334
+ ln -sf $(LIBZSTD) $(DESTDIR)$(LIBDIR)/libzstd.$(SHARED_EXT_MAJOR)
335
+ ln -sf $(LIBZSTD) $(DESTDIR)$(LIBDIR)/libzstd.$(SHARED_EXT)
268
336
 
337
+ .PHONY: install-includes
269
338
  install-includes:
339
+ [ -e $(DESTDIR)$(INCLUDEDIR) ] || $(INSTALL) -d -m 755 $(DESTDIR)$(INCLUDEDIR)/
270
340
  @echo Installing includes
271
- @$(INSTALL) -d -m 755 $(DESTDIR)$(INCLUDEDIR)/
272
- @$(INSTALL_DATA) zstd.h $(DESTDIR)$(INCLUDEDIR)
273
- @$(INSTALL_DATA) common/zstd_errors.h $(DESTDIR)$(INCLUDEDIR)
274
- @$(INSTALL_DATA) deprecated/zbuff.h $(DESTDIR)$(INCLUDEDIR) # prototypes generate deprecation warnings
275
- @$(INSTALL_DATA) dictBuilder/zdict.h $(DESTDIR)$(INCLUDEDIR)
341
+ $(INSTALL_DATA) zstd.h $(DESTDIR)$(INCLUDEDIR)
342
+ $(INSTALL_DATA) zstd_errors.h $(DESTDIR)$(INCLUDEDIR)
343
+ $(INSTALL_DATA) zdict.h $(DESTDIR)$(INCLUDEDIR)
276
344
 
345
+ .PHONY: uninstall
277
346
  uninstall:
278
- @$(RM) $(DESTDIR)$(LIBDIR)/libzstd.a
279
- @$(RM) $(DESTDIR)$(LIBDIR)/libzstd.$(SHARED_EXT)
280
- @$(RM) $(DESTDIR)$(LIBDIR)/libzstd.$(SHARED_EXT_MAJOR)
281
- @$(RM) $(DESTDIR)$(LIBDIR)/$(LIBZSTD)
282
- @$(RM) $(DESTDIR)$(PKGCONFIGDIR)/libzstd.pc
283
- @$(RM) $(DESTDIR)$(INCLUDEDIR)/zstd.h
284
- @$(RM) $(DESTDIR)$(INCLUDEDIR)/zstd_errors.h
285
- @$(RM) $(DESTDIR)$(INCLUDEDIR)/zbuff.h # Deprecated streaming functions
286
- @$(RM) $(DESTDIR)$(INCLUDEDIR)/zdict.h
347
+ $(RM) $(DESTDIR)$(LIBDIR)/libzstd.a
348
+ $(RM) $(DESTDIR)$(LIBDIR)/libzstd.$(SHARED_EXT)
349
+ $(RM) $(DESTDIR)$(LIBDIR)/libzstd.$(SHARED_EXT_MAJOR)
350
+ $(RM) $(DESTDIR)$(LIBDIR)/$(LIBZSTD)
351
+ $(RM) $(DESTDIR)$(PKGCONFIGDIR)/libzstd.pc
352
+ $(RM) $(DESTDIR)$(INCLUDEDIR)/zstd.h
353
+ $(RM) $(DESTDIR)$(INCLUDEDIR)/zstd_errors.h
354
+ $(RM) $(DESTDIR)$(INCLUDEDIR)/zdict.h
287
355
  @echo zstd libraries successfully uninstalled
288
356
 
289
357
  endif