Makefile revision 1.1.1.2 1 1.1 christos
2 1.1 christos # ################################################################
3 1.1 christos # Copyright (c) Meta Platforms, Inc. and affiliates.
4 1.1 christos # All rights reserved.
5 1.1 christos #
6 1.1 christos # This source code is licensed under both the BSD-style license (found in the
7 1.1 christos # LICENSE file in the root directory of this source tree) and the GPLv2 (found
8 1.1 christos # in the COPYING file in the root directory of this source tree).
9 1.1 christos # You may select, at your option, one of the above-listed licenses.
10 1.1 christos # ################################################################
11 1.1 christos # datagen : Synthetic and parametrable data generator, for tests
12 1.1 christos # fullbench : Precisely measure speed for each zstd inner functions
13 1.1 christos # fullbench32: Same as fullbench, but forced to compile in 32-bits mode
14 1.1 christos # fuzzer : Test tool, to check zstd integrity on target platform
15 1.1 christos # fuzzer32: Same as fuzzer, but forced to compile in 32-bits mode
16 1.1 christos # paramgrill : parameter tester for zstd
17 1.1 christos # test-zstd-speed.py : script for testing zstd speed difference between commits
18 1.1 christos # versionsTest : compatibility test between zstd versions stored on Github (v0.1+)
19 1.1 christos # zstreamtest : Fuzzer test tool for zstd streaming API
20 1.1 christos # zstreamtest32: Same as zstreamtest, but forced to compile in 32-bits mode
21 1.1 christos # ##########################################################################
22 1.1 christos
23 1.1 christos ZSTD_LEGACY_SUPPORT ?= 5
24 1.1 christos export ZSTD_LEGACY_SUPPORT
25 1.1 christos
26 1.1 christos DEBUGLEVEL ?= 2
27 1.1 christos export DEBUGLEVEL # transmit value to sub-makefiles
28 1.1 christos
29 1.1.1.2 christos .PHONY: default
30 1.1.1.2 christos default: fullbench
31 1.1.1.2 christos
32 1.1 christos LIBZSTD_MK_DIR := ../lib
33 1.1 christos include $(LIBZSTD_MK_DIR)/libzstd.mk
34 1.1 christos
35 1.1 christos PRGDIR = ../programs
36 1.1 christos PYTHON ?= python3
37 1.1 christos TESTARTEFACT := versionsTest
38 1.1 christos
39 1.1 christos DEBUGFLAGS += -g -Wno-c++-compat
40 1.1 christos CPPFLAGS += -I$(LIB_SRCDIR) -I$(LIB_SRCDIR)/common -I$(LIB_SRCDIR)/compress -I$(LIB_SRCDIR)/legacy \
41 1.1 christos -I$(LIB_SRCDIR)/dictBuilder -I$(LIB_SRCDIR)/deprecated -I$(PRGDIR) \
42 1.1 christos -DZSTD_WINDOW_OVERFLOW_CORRECT_FREQUENTLY=1
43 1.1 christos
44 1.1 christos ZSTDCOMMON_FILES := $(sort $(ZSTD_COMMON_FILES))
45 1.1 christos ZSTDCOMP_FILES := $(sort $(ZSTD_COMPRESS_FILES))
46 1.1 christos ZSTDDECOMP_FILES := $(sort $(ZSTD_DECOMPRESS_FILES))
47 1.1 christos ZSTDLEGACY_FILES := $(sort $(wildcard $(LIB_SRCDIR)/legacy/*.c))
48 1.1 christos ZSTD_FILES := $(ZSTDDECOMP_FILES) $(ZSTDCOMMON_FILES) $(ZSTDCOMP_FILES) $(ZSTDLEGACY_FILES)
49 1.1 christos ZDICT_FILES := $(sort $(ZSTD_DICTBUILDER_FILES))
50 1.1 christos
51 1.1 christos ZSTD_F1 := $(sort $(wildcard $(ZSTD_FILES)))
52 1.1 christos ZSTD_OBJ1 := $(subst $(LIB_SRCDIR)/common/,zstdm_,$(ZSTD_F1))
53 1.1 christos ZSTD_OBJ2 := $(subst $(LIB_SRCDIR)/compress/,zstdc_,$(ZSTD_OBJ1))
54 1.1 christos ZSTD_OBJ3 := $(subst $(LIB_SRCDIR)/decompress/,zstdd_,$(ZSTD_OBJ2))
55 1.1 christos ZSTD_OBJ4 := $(subst $(LIB_SRCDIR)/legacy/,zstdl_,$(ZSTD_OBJ3))
56 1.1 christos ZSTD_OBJ5 := $(ZSTD_OBJ4:.c=.o)
57 1.1 christos ZSTD_OBJECTS := $(ZSTD_OBJ5:.S=.o)
58 1.1 christos
59 1.1 christos ZSTDMT_OBJ1 := $(subst $(LIB_SRCDIR)/common/,zstdmt_m_,$(ZSTD_F1))
60 1.1 christos ZSTDMT_OBJ2 := $(subst $(LIB_SRCDIR)/compress/,zstdmt_c_,$(ZSTDMT_OBJ1))
61 1.1 christos ZSTDMT_OBJ3 := $(subst $(LIB_SRCDIR)/decompress/,zstdmt_d_,$(ZSTDMT_OBJ2))
62 1.1 christos ZSTDMT_OBJ4 := $(subst $(LIB_SRCDIR)/legacy/,zstdmt_l_,$(ZSTDMT_OBJ3))
63 1.1 christos ZSTDMT_OBJ5 := $(ZSTDMT_OBJ4:.c=.o)
64 1.1 christos ZSTDMT_OBJECTS := $(ZSTDMT_OBJ5:.S=.o)
65 1.1 christos
66 1.1 christos # Define *.exe as extension for Windows systems
67 1.1 christos ifneq (,$(filter Windows%,$(OS)))
68 1.1 christos EXT =.exe
69 1.1 christos MULTITHREAD_CPP = -DZSTD_MULTITHREAD
70 1.1 christos MULTITHREAD_LD =
71 1.1 christos else
72 1.1 christos EXT =
73 1.1 christos MULTITHREAD_CPP = -DZSTD_MULTITHREAD
74 1.1 christos MULTITHREAD_LD = -pthread
75 1.1 christos endif
76 1.1 christos MULTITHREAD = $(MULTITHREAD_CPP) $(MULTITHREAD_LD)
77 1.1 christos
78 1.1 christos VOID = /dev/null
79 1.1 christos ZSTREAM_TESTTIME ?= -T90s
80 1.1 christos FUZZERTEST ?= -T200s
81 1.1 christos ZSTDRTTEST = --test-large-data
82 1.1 christos DECODECORPUS_TESTTIME ?= -T30
83 1.1 christos
84 1.1 christos .PHONY: all
85 1.1 christos all: fullbench fuzzer zstreamtest paramgrill datagen decodecorpus roundTripCrash poolTests
86 1.1 christos
87 1.1 christos .PHONY: all32
88 1.1 christos all32: fullbench32 fuzzer32 zstreamtest32
89 1.1 christos
90 1.1 christos .PHONY: allnothread
91 1.1 christos allnothread: MULTITHREAD_CPP=
92 1.1 christos allnothread: MULTITHREAD_LD=
93 1.1 christos allnothread: fullbench fuzzer paramgrill datagen decodecorpus
94 1.1 christos
95 1.1 christos # note : broken : requires symbols unavailable from dynamic library
96 1.1 christos .PHONY: dll
97 1.1 christos dll: fuzzer-dll zstreamtest-dll
98 1.1 christos
99 1.1 christos .PHONY: zstd zstd32 zstd-nolegacy # only external makefile knows how to build or update them
100 1.1 christos zstd zstd32 zstd-nolegacy zstd-dll:
101 1.1 christos $(MAKE) -C $(PRGDIR) $@ MOREFLAGS+="$(DEBUGFLAGS)"
102 1.1 christos
103 1.1 christos .PHONY: libzstd
104 1.1 christos libzstd :
105 1.1 christos $(MAKE) -C $(LIB_SRCDIR) libzstd MOREFLAGS+="$(DEBUGFLAGS)"
106 1.1 christos
107 1.1 christos %-dll : libzstd
108 1.1 christos %-dll : LDFLAGS += -L$(LIB_BINDIR) -lzstd
109 1.1 christos
110 1.1 christos $(LIB_BINDIR)/libzstd.a :
111 1.1 christos $(MAKE) -C $(LIB_SRCDIR) libzstd.a
112 1.1 christos
113 1.1 christos zstdm_%.o : $(LIB_SRCDIR)/common/%.c
114 1.1 christos $(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o $@
115 1.1 christos
116 1.1 christos zstdc_%.o : $(LIB_SRCDIR)/compress/%.c
117 1.1 christos $(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o $@
118 1.1 christos
119 1.1 christos zstdd_%.o : $(LIB_SRCDIR)/decompress/%.c
120 1.1 christos $(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o $@
121 1.1 christos
122 1.1 christos zstdd_%.o : $(LIB_SRCDIR)/decompress/%.S
123 1.1 christos $(CC) -c $(CPPFLAGS) $(ASFLAGS) $< -o $@
124 1.1 christos
125 1.1 christos zstdl_%.o : $(LIB_SRCDIR)/legacy/%.c
126 1.1 christos $(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o $@
127 1.1 christos
128 1.1 christos zstdmt%.o : CPPFLAGS += $(MULTITHREAD_CPP)
129 1.1 christos
130 1.1 christos zstdmt_m_%.o : $(LIB_SRCDIR)/common/%.c
131 1.1 christos $(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o $@
132 1.1 christos
133 1.1 christos zstdmt_c_%.o : $(LIB_SRCDIR)/compress/%.c
134 1.1 christos $(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o $@
135 1.1 christos
136 1.1 christos zstdmt_d_%.o : $(LIB_SRCDIR)/decompress/%.c
137 1.1 christos $(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o $@
138 1.1 christos
139 1.1 christos zstdmt_d_%.o : $(LIB_SRCDIR)/decompress/%.S
140 1.1 christos $(CC) -c $(CPPFLAGS) $(ASFLAGS) $< -o $@
141 1.1 christos
142 1.1 christos zstdmt_l_%.o : $(LIB_SRCDIR)/legacy/%.c
143 1.1 christos $(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o $@
144 1.1 christos
145 1.1 christos FULLBENCHS := fullbench fullbench32
146 1.1 christos CLEAN += $(FULLBENCHS)
147 1.1 christos fullbench32: CPPFLAGS += -m32
148 1.1 christos $(FULLBENCHS) : CPPFLAGS += $(MULTITHREAD_CPP) -Wno-deprecated-declarations
149 1.1 christos $(FULLBENCHS) : LDFLAGS += $(MULTITHREAD_LD)
150 1.1 christos $(FULLBENCHS) : DEBUGFLAGS = -DNDEBUG # turn off assert() for speed measurements
151 1.1.1.2 christos $(FULLBENCHS) : DEBUGLEVEL = 0 # turn off assert() for speed measurements
152 1.1 christos $(FULLBENCHS) : $(ZSTD_FILES)
153 1.1.1.2 christos $(FULLBENCHS) : $(PRGDIR)/datagen.c $(PRGDIR)/lorem.c $(PRGDIR)/util.c $(PRGDIR)/timefn.c $(PRGDIR)/benchfn.c fullbench.c
154 1.1 christos $(LINK.c) $^ -o $@$(EXT)
155 1.1 christos
156 1.1 christos CLEAN += fullbench-lib
157 1.1 christos fullbench-lib : CPPFLAGS += -DXXH_NAMESPACE=ZSTD_
158 1.1.1.2 christos fullbench-lib : $(PRGDIR)/datagen.c $(PRGDIR)/lorem.c $(PRGDIR)/util.c $(PRGDIR)/timefn.c $(PRGDIR)/benchfn.c $(LIB_SRCDIR)/libzstd.a fullbench.c
159 1.1 christos $(LINK.c) $^ -o $@$(EXT)
160 1.1 christos
161 1.1 christos # note : broken : requires symbols unavailable from dynamic library
162 1.1 christos fullbench-dll: $(PRGDIR)/datagen.c $(PRGDIR)/util.c $(PRGDIR)/benchfn.c $(PRGDIR)/timefn.c fullbench.c
163 1.1 christos # $(CC) $(FLAGS) $(filter %.c,$^) -o $@$(EXT) -DZSTD_DLL_IMPORT=1 $(LIB_SRCDIR)/dll/libzstd.dll
164 1.1 christos $(LINK.c) $^ $(LDLIBS) -o $@$(EXT)
165 1.1 christos
166 1.1 christos CLEAN += fuzzer fuzzer32
167 1.1 christos fuzzer : CPPFLAGS += $(MULTITHREAD_CPP) -Wno-deprecated-declarations
168 1.1 christos fuzzer : LDFLAGS += $(MULTITHREAD_LD)
169 1.1 christos fuzzer : $(ZSTDMT_OBJECTS)
170 1.1 christos fuzzer fuzzer32 : $(ZDICT_FILES) $(PRGDIR)/util.c $(PRGDIR)/timefn.c $(PRGDIR)/datagen.c fuzzer.c
171 1.1 christos
172 1.1 christos fuzzer32 : CFLAGS += -m32 $(MULTITHREAD)
173 1.1 christos fuzzer32 : $(ZSTD_FILES)
174 1.1 christos $(LINK.c) $^ -o $@$(EXT)
175 1.1 christos
176 1.1 christos # note : broken : requires symbols unavailable from dynamic library
177 1.1 christos fuzzer-dll : $(LIB_SRCDIR)/common/xxhash.c $(PRGDIR)/util.c $(PRGDIR)/timefn.c $(PRGDIR)/datagen.c fuzzer.c
178 1.1 christos $(CC) $(CPPFLAGS) $(CFLAGS) $(filter %.c,$^) $(LDFLAGS) -o $@$(EXT)
179 1.1 christos
180 1.1 christos CLEAN += zstreamtest zstreamtest32
181 1.1 christos ZSTREAM_LOCAL_FILES := $(PRGDIR)/datagen.c $(PRGDIR)/util.c $(PRGDIR)/timefn.c seqgen.c zstreamtest.c external_matchfinder.c
182 1.1 christos ZSTREAM_PROPER_FILES := $(ZDICT_FILES) $(ZSTREAM_LOCAL_FILES)
183 1.1 christos ZSTREAMFILES := $(ZSTD_FILES) $(ZSTREAM_PROPER_FILES)
184 1.1 christos zstreamtest32 : CFLAGS += -m32
185 1.1 christos zstreamtest zstreamtest32 : CPPFLAGS += $(MULTITHREAD_CPP)
186 1.1 christos zstreamtest zstreamtest32 : LDFLAGS += $(MULTITHREAD_LD)
187 1.1 christos zstreamtest : $(ZSTDMT_OBJECTS) $(ZSTREAM_PROPER_FILES)
188 1.1 christos zstreamtest32 : $(ZSTREAMFILES)
189 1.1 christos zstreamtest zstreamtest32 :
190 1.1 christos $(LINK.c) $^ -o $@$(EXT)
191 1.1 christos
192 1.1 christos CLEAN += zstreamtest_asan
193 1.1 christos zstreamtest_asan : CFLAGS += -fsanitize=address
194 1.1 christos zstreamtest_asan : $(ZSTREAMFILES)
195 1.1 christos $(LINK.c) $(MULTITHREAD) $^ -o $@$(EXT)
196 1.1 christos
197 1.1 christos CLEAN += zstreamtest_tsan
198 1.1 christos zstreamtest_tsan : CFLAGS += -fsanitize=thread
199 1.1 christos zstreamtest_tsan : $(ZSTREAMFILES)
200 1.1 christos $(LINK.c) $(MULTITHREAD) $^ -o $@$(EXT)
201 1.1 christos
202 1.1 christos CLEAN += zstreamtest_ubsan
203 1.1 christos zstreamtest_ubsan : CFLAGS += -fsanitize=undefined
204 1.1 christos zstreamtest_ubsan : $(ZSTREAMFILES)
205 1.1 christos $(LINK.c) $(MULTITHREAD) $^ -o $@$(EXT)
206 1.1 christos
207 1.1 christos # note : broken : requires symbols unavailable from dynamic library
208 1.1 christos zstreamtest-dll : $(LIB_SRCDIR)/common/xxhash.c # xxh symbols not exposed from dll
209 1.1 christos zstreamtest-dll : $(ZSTREAM_LOCAL_FILES)
210 1.1 christos $(CC) $(CPPFLAGS) $(CFLAGS) $(filter %.c,$^) $(LDFLAGS) -o $@$(EXT)
211 1.1 christos
212 1.1 christos CLEAN += paramgrill
213 1.1 christos paramgrill : DEBUGFLAGS = # turn off debug for speed measurements
214 1.1 christos paramgrill : LDLIBS += -lm
215 1.1 christos paramgrill : $(ZSTD_FILES) $(PRGDIR)/util.c $(PRGDIR)/timefn.c $(PRGDIR)/benchfn.c $(PRGDIR)/benchzstd.c $(PRGDIR)/datagen.c $(PRGDIR)/lorem.c paramgrill.c
216 1.1 christos
217 1.1 christos CLEAN += datagen
218 1.1 christos datagen : $(PRGDIR)/datagen.c $(PRGDIR)/lorem.c loremOut.c datagencli.c
219 1.1 christos $(LINK.c) $^ -o $@$(EXT)
220 1.1 christos
221 1.1 christos CLEAN += roundTripCrash
222 1.1 christos roundTripCrash: CFLAGS += $(MULTITHREAD)
223 1.1 christos roundTripCrash : $(ZSTD_OBJECTS) roundTripCrash.c
224 1.1 christos
225 1.1 christos CLEAN += longmatch
226 1.1 christos longmatch : $(ZSTD_OBJECTS) longmatch.c
227 1.1 christos
228 1.1.1.2 christos CLEAN += largeDictionary
229 1.1.1.2 christos largeDictionary: CFLAGS += $(MULTITHREAD)
230 1.1.1.2 christos largeDictionary: $(ZSTDMT_OBJECTS) $(PRGDIR)/datagen.c largeDictionary.c
231 1.1 christos
232 1.1 christos CLEAN += invalidDictionaries
233 1.1 christos invalidDictionaries : $(ZSTD_OBJECTS) invalidDictionaries.c
234 1.1 christos
235 1.1 christos CLEAN += legacy
236 1.1 christos legacy : CPPFLAGS += -UZSTD_LEGACY_SUPPORT -DZSTD_LEGACY_SUPPORT=4
237 1.1 christos legacy : $(ZSTD_FILES) legacy.c
238 1.1 christos
239 1.1 christos CLEAN += decodecorpus
240 1.1 christos decodecorpus : LDLIBS += -lm
241 1.1 christos decodecorpus : $(filter-out zstdc_zstd_compress.o, $(ZSTD_OBJECTS)) $(ZDICT_FILES) $(PRGDIR)/util.c $(PRGDIR)/timefn.c decodecorpus.c
242 1.1 christos
243 1.1 christos CLEAN += poolTests
244 1.1 christos poolTests : $(PRGDIR)/util.c $(PRGDIR)/timefn.c poolTests.c $(LIB_SRCDIR)/common/pool.c $(LIB_SRCDIR)/common/threading.c $(LIB_SRCDIR)/common/zstd_common.c $(LIB_SRCDIR)/common/error_private.c
245 1.1 christos $(LINK.c) $(MULTITHREAD) $^ -o $@$(EXT)
246 1.1 christos
247 1.1 christos .PHONY: versionsTest
248 1.1 christos versionsTest: clean
249 1.1 christos $(PYTHON) test-zstd-versions.py
250 1.1 christos
251 1.1 christos .PHONY: automated_benchmarking
252 1.1 christos automated_benchmarking: clean
253 1.1 christos $(PYTHON) automated_benchmarking.py
254 1.1 christos
255 1.1 christos # make checkTag : check that release tag corresponds to release version
256 1.1 christos CLEAN += checkTag
257 1.1 christos checkTag.o : $(LIB_SRCDIR)/zstd.h
258 1.1 christos
259 1.1 christos .PHONY: clean
260 1.1 christos clean:
261 1.1 christos $(MAKE) -C $(LIB_SRCDIR) clean
262 1.1 christos $(MAKE) -C $(PRGDIR) clean
263 1.1 christos $(MAKE) -C fuzz clean
264 1.1 christos $(RM) -R $(TESTARTEFACT)
265 1.1 christos $(RM) -r tmp* # some test directories are named tmp*
266 1.1 christos $(RM) $(CLEAN) core *.o *.tmp result* *.gcda dictionary *.zst \
267 1.1 christos $(PRGDIR)/zstd$(EXT) $(PRGDIR)/zstd32$(EXT) \
268 1.1 christos fullbench-dll$(EXT) fuzzer-dll$(EXT) zstreamtest-dll$(EXT)
269 1.1 christos @echo Cleaning completed
270 1.1 christos
271 1.1 christos
272 1.1 christos #----------------------------------------------------------------------------------
273 1.1 christos # valgrind tests validated only for some posix platforms
274 1.1 christos #----------------------------------------------------------------------------------
275 1.1.1.2 christos UNAME := $(shell sh -c 'MSYSTEM="MSYS" uname')
276 1.1.1.2 christos ifneq (,$(filter Linux Darwin GNU/kFreeBSD GNU OpenBSD FreeBSD NetBSD DragonFly SunOS AIX CYGWIN_NT%,$(UNAME)))
277 1.1 christos HOST_OS = POSIX
278 1.1 christos
279 1.1 christos .PHONY: test-valgrind
280 1.1 christos test-valgrind: VALGRIND = valgrind --leak-check=full --show-leak-kinds=all --error-exitcode=1
281 1.1 christos test-valgrind: zstd datagen fuzzer fullbench
282 1.1 christos @echo "\n ---- valgrind tests : memory analyzer ----"
283 1.1 christos $(VALGRIND) ./datagen -g50M > $(VOID)
284 1.1 christos $(VALGRIND) $(PRGDIR)/zstd ; if [ $$? -eq 0 ] ; then echo "zstd without argument should have failed"; false; fi
285 1.1 christos ./datagen -g80 | $(VALGRIND) $(PRGDIR)/zstd - -c > $(VOID)
286 1.1 christos ./datagen -g16KB | $(VALGRIND) $(PRGDIR)/zstd -vf - -c > $(VOID)
287 1.1 christos ./datagen -g2930KB | $(VALGRIND) $(PRGDIR)/zstd -5 -vf - -o tmp
288 1.1 christos $(VALGRIND) $(PRGDIR)/zstd -vdf tmp -c > $(VOID)
289 1.1 christos ./datagen -g64MB | $(VALGRIND) $(PRGDIR)/zstd -vf - -c > $(VOID)
290 1.1 christos $(RM) tmp
291 1.1 christos $(VALGRIND) ./fuzzer -T1mn -t1
292 1.1 christos $(VALGRIND) ./fullbench -i1
293 1.1 christos
294 1.1 christos endif
295 1.1 christos
296 1.1 christos ifneq (,$(filter MINGW% MSYS%,$(UNAME)))
297 1.1 christos HOST_OS = MSYS
298 1.1 christos endif
299 1.1 christos
300 1.1 christos
301 1.1 christos #-----------------------------------------------------------------------------
302 1.1 christos # make tests validated only for below targets
303 1.1 christos #-----------------------------------------------------------------------------
304 1.1.1.2 christos ifneq (,$(filter MSYS POSIX,$(HOST_OS)))
305 1.1 christos
306 1.1 christos DIFF:=diff
307 1.1.1.2 christos ifneq (,$(filter SunOS,$(UNAME)))
308 1.1 christos DIFF:=gdiff
309 1.1 christos endif
310 1.1 christos
311 1.1 christos .PHONY: list
312 1.1 christos list:
313 1.1 christos @$(MAKE) -pRrq -f $(lastword $(MAKEFILE_LIST)) : 2>/dev/null | awk -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | sort | egrep -v -e '^[^[:alnum:]]' -e '^$@$$' | xargs
314 1.1 christos
315 1.1 christos .PHONY: check
316 1.1.1.2 christos check: ZSTDRTTEST= # remove long tests
317 1.1.1.2 christos check: test-zstd
318 1.1.1.2 christos @echo "\n******************************"
319 1.1.1.2 christos @echo "All tests completed successfully"
320 1.1.1.2 christos @echo "******************************"
321 1.1 christos
322 1.1 christos .PHONY: fuzztest
323 1.1 christos fuzztest: test-fuzzer test-zstream test-decodecorpus
324 1.1 christos
325 1.1 christos .PHONY: test
326 1.1 christos test: test-zstd test-cli-tests test-fullbench test-fuzzer test-zstream test-invalidDictionaries test-legacy test-decodecorpus
327 1.1 christos ifeq ($(QEMU_SYS),)
328 1.1 christos test: test-pool
329 1.1 christos endif
330 1.1.1.2 christos @echo "\n******************************"
331 1.1.1.2 christos @echo "All tests completed successfully"
332 1.1.1.2 christos @echo "******************************"
333 1.1 christos
334 1.1 christos .PHONY: test32
335 1.1 christos test32: test-zstd32 test-fullbench32 test-fuzzer32 test-zstream32
336 1.1 christos
337 1.1 christos .PHONY: test-all
338 1.1 christos test-all: test test32 test-decodecorpus-cli
339 1.1 christos
340 1.1 christos .PHONY: test-zstd test-zstd32 test-zstd-nolegacy
341 1.1 christos test-zstd: ZSTD = $(PRGDIR)/zstd
342 1.1 christos test-zstd: zstd
343 1.1 christos
344 1.1 christos .PHONY: test-zstd-dll
345 1.1 christos test-zstd-dll: ZSTD = $(PRGDIR)/zstd
346 1.1 christos test-zstd-dll: zstd-dll
347 1.1 christos
348 1.1 christos test-zstd32: ZSTD = $(PRGDIR)/zstd32
349 1.1 christos test-zstd32: zstd32
350 1.1 christos
351 1.1 christos test-zstd-nolegacy: ZSTD = $(PRGDIR)/zstd-nolegacy
352 1.1 christos test-zstd-nolegacy: zstd-nolegacy
353 1.1 christos
354 1.1 christos test-zstd test-zstd32 test-zstd-nolegacy test-zstd-dll: datagen
355 1.1 christos file $(ZSTD)
356 1.1 christos EXE_PREFIX="$(QEMU_SYS)" ZSTD_BIN="$(ZSTD)" DATAGEN_BIN=./datagen ./playTests.sh $(ZSTDRTTEST)
357 1.1 christos
358 1.1 christos .PHONY: test-cli-tests
359 1.1 christos test-cli-tests: ZSTD = $(PRGDIR)/zstd
360 1.1 christos test-cli-tests: zstd datagen
361 1.1 christos file $(ZSTD)
362 1.1 christos ./cli-tests/run.py --exec-prefix="$(QEMU_SYS)" --zstd="$(ZSTD)" --datagen=./datagen
363 1.1 christos
364 1.1 christos .PHONY: test-fullbench
365 1.1 christos test-fullbench: fullbench datagen
366 1.1 christos $(QEMU_SYS) ./fullbench -i1
367 1.1 christos $(QEMU_SYS) ./fullbench -i1 -P0
368 1.1 christos
369 1.1 christos .PHONY: test-fullbench32
370 1.1 christos test-fullbench32: fullbench32 datagen
371 1.1 christos $(QEMU_SYS) ./fullbench32 -i1
372 1.1 christos $(QEMU_SYS) ./fullbench32 -i1 -P0
373 1.1 christos
374 1.1 christos .PHONY: test-fuzzer
375 1.1 christos test-fuzzer: fuzzer
376 1.1 christos $(QEMU_SYS) ./fuzzer -v $(FUZZERTEST) $(FUZZER_FLAGS)
377 1.1 christos
378 1.1 christos # Note : this test presumes `fuzzer` will be built
379 1.1 christos .PHONY: test-fuzzer-stackmode
380 1.1 christos test-fuzzer-stackmode: MOREFLAGS += -DZSTD_HEAPMODE=0
381 1.1 christos test-fuzzer-stackmode: test-fuzzer
382 1.1 christos
383 1.1 christos .PHONY: test-fuzzer32
384 1.1 christos test-fuzzer32: fuzzer32
385 1.1 christos $(QEMU_SYS) ./fuzzer32 -v $(FUZZERTEST) $(FUZZER_FLAGS)
386 1.1 christos
387 1.1 christos .PHONY: test-zstream
388 1.1 christos test-zstream: zstreamtest
389 1.1 christos $(QEMU_SYS) ./zstreamtest -v $(ZSTREAM_TESTTIME) $(FUZZER_FLAGS)
390 1.1 christos $(QEMU_SYS) ./zstreamtest --newapi -t1 $(ZSTREAM_TESTTIME) $(FUZZER_FLAGS)
391 1.1 christos
392 1.1 christos test-zstream32: zstreamtest32
393 1.1 christos $(QEMU_SYS) ./zstreamtest32 -v $(ZSTREAM_TESTTIME) $(FUZZER_FLAGS)
394 1.1 christos
395 1.1 christos test-longmatch: longmatch
396 1.1 christos $(QEMU_SYS) ./longmatch
397 1.1 christos
398 1.1.1.2 christos test-largeDictionary: largeDictionary
399 1.1.1.2 christos $(QEMU_SYS) ./largeDictionary
400 1.1 christos
401 1.1 christos test-invalidDictionaries: invalidDictionaries
402 1.1 christos $(QEMU_SYS) ./invalidDictionaries
403 1.1 christos
404 1.1 christos test-legacy: legacy
405 1.1 christos $(QEMU_SYS) ./legacy
406 1.1 christos
407 1.1 christos test-decodecorpus: decodecorpus
408 1.1 christos $(QEMU_SYS) ./decodecorpus -t $(DECODECORPUS_TESTTIME)
409 1.1 christos
410 1.1 christos test-decodecorpus-cli: decodecorpus
411 1.1 christos @echo "\n ---- decodecorpus basic cli tests ----"
412 1.1 christos @mkdir testdir
413 1.1 christos ./decodecorpus -n5 -otestdir -ptestdir
414 1.1 christos @cd testdir && \
415 1.1 christos $(ZSTD) -d z000000.zst -o tmp0 && \
416 1.1 christos $(ZSTD) -d z000001.zst -o tmp1 && \
417 1.1 christos $(ZSTD) -d z000002.zst -o tmp2 && \
418 1.1 christos $(ZSTD) -d z000003.zst -o tmp3 && \
419 1.1 christos $(ZSTD) -d z000004.zst -o tmp4 && \
420 1.1 christos diff z000000 tmp0 && \
421 1.1 christos diff z000001 tmp1 && \
422 1.1 christos diff z000002 tmp2 && \
423 1.1 christos diff z000003 tmp3 && \
424 1.1 christos diff z000004 tmp4 && \
425 1.1 christos rm ./* && \
426 1.1 christos cd ..
427 1.1 christos @echo "\n ---- decodecorpus dictionary cli tests ----"
428 1.1 christos ./decodecorpus -n5 -otestdir -ptestdir --use-dict=1MB
429 1.1 christos @cd testdir && \
430 1.1 christos $(ZSTD) -d z000000.zst -D dictionary -o tmp0 && \
431 1.1 christos $(ZSTD) -d z000001.zst -D dictionary -o tmp1 && \
432 1.1 christos $(ZSTD) -d z000002.zst -D dictionary -o tmp2 && \
433 1.1 christos $(ZSTD) -d z000003.zst -D dictionary -o tmp3 && \
434 1.1 christos $(ZSTD) -d z000004.zst -D dictionary -o tmp4 && \
435 1.1 christos diff z000000 tmp0 && \
436 1.1 christos diff z000001 tmp1 && \
437 1.1 christos diff z000002 tmp2 && \
438 1.1 christos diff z000003 tmp3 && \
439 1.1 christos diff z000004 tmp4 && \
440 1.1 christos cd ..
441 1.1 christos @rm -rf testdir
442 1.1 christos
443 1.1 christos test-pool: poolTests
444 1.1 christos $(QEMU_SYS) ./poolTests
445 1.1 christos
446 1.1 christos test-lz4: ZSTD = LD_LIBRARY_PATH=/usr/local/lib $(PRGDIR)/zstd
447 1.1 christos test-lz4: ZSTD_LZ4 = LD_LIBRARY_PATH=/usr/local/lib ./lz4
448 1.1 christos test-lz4: ZSTD_UNLZ4 = LD_LIBRARY_PATH=/usr/local/lib ./unlz4
449 1.1 christos test-lz4: zstd decodecorpus datagen
450 1.1 christos [ -f lz4 ] || ln -s $(PRGDIR)/zstd lz4
451 1.1 christos [ -f unlz4 ] || ln -s $(PRGDIR)/zstd unlz4
452 1.1 christos
453 1.1 christos ./decodecorpus -ptmp
454 1.1 christos # lz4 -> zstd
455 1.1 christos lz4 < tmp | \
456 1.1 christos $(ZSTD) -d | \
457 1.1 christos cmp - tmp
458 1.1 christos lz4 < tmp | \
459 1.1 christos $(ZSTD_UNLZ4) | \
460 1.1 christos cmp - tmp
461 1.1 christos # zstd -> lz4
462 1.1 christos $(ZSTD) --format=lz4 < tmp | \
463 1.1 christos lz4 -d | \
464 1.1 christos cmp - tmp
465 1.1 christos $(ZSTD_LZ4) < tmp | \
466 1.1 christos lz4 -d | \
467 1.1 christos cmp - tmp
468 1.1 christos # zstd -> zstd
469 1.1 christos $(ZSTD) --format=lz4 < tmp | \
470 1.1 christos $(ZSTD) -d | \
471 1.1 christos cmp - tmp
472 1.1 christos # zstd -> zstd
473 1.1 christos $(ZSTD) < tmp | \
474 1.1 christos $(ZSTD) -d | \
475 1.1 christos cmp - tmp
476 1.1 christos
477 1.1 christos ./datagen -g384KB | $(ZSTD) --format=lz4 | $(ZSTD) -d > /dev/null
478 1.1 christos
479 1.1 christos rm tmp lz4 unlz4
480 1.1 christos
481 1.1 christos endif
482