xref: /f-stack/freebsd/contrib/zstd/Makefile (revision 22ce4aff)
1*22ce4affSfengbojiang# ################################################################
2*22ce4affSfengbojiang# Copyright (c) 2015-2020, Yann Collet, Facebook, Inc.
3*22ce4affSfengbojiang# All rights reserved.
4*22ce4affSfengbojiang#
5*22ce4affSfengbojiang# This source code is licensed under both the BSD-style license (found in the
6*22ce4affSfengbojiang# LICENSE file in the root directory of this source tree) and the GPLv2 (found
7*22ce4affSfengbojiang# in the COPYING file in the root directory of this source tree).
8*22ce4affSfengbojiang# You may select, at your option, one of the above-listed licenses.
9*22ce4affSfengbojiang# ################################################################
10*22ce4affSfengbojiang
11*22ce4affSfengbojiang# verbose mode (print commands) on V=1 or VERBOSE=1
12*22ce4affSfengbojiangQ = $(if $(filter 1,$(V) $(VERBOSE)),,@)
13*22ce4affSfengbojiang
14*22ce4affSfengbojiangPRGDIR   = programs
15*22ce4affSfengbojiangZSTDDIR  = lib
16*22ce4affSfengbojiangBUILDIR  = build
17*22ce4affSfengbojiangZWRAPDIR = zlibWrapper
18*22ce4affSfengbojiangTESTDIR  = tests
19*22ce4affSfengbojiangFUZZDIR  = $(TESTDIR)/fuzz
20*22ce4affSfengbojiang
21*22ce4affSfengbojiang# Define nul output
22*22ce4affSfengbojiangVOID = /dev/null
23*22ce4affSfengbojiang
24*22ce4affSfengbojiang# When cross-compiling from linux to windows, you might
25*22ce4affSfengbojiang# need to specify this as "Windows." Fedora build fails
26*22ce4affSfengbojiang# without it.
27*22ce4affSfengbojiang#
28*22ce4affSfengbojiang# Note: mingw-w64 build from linux to windows does not
29*22ce4affSfengbojiang# fail on other tested distros (ubuntu, debian) even
30*22ce4affSfengbojiang# without manually specifying the TARGET_SYSTEM.
31*22ce4affSfengbojiangTARGET_SYSTEM ?= $(OS)
32*22ce4affSfengbojiang
33*22ce4affSfengbojiangifneq (,$(filter Windows%,$(TARGET_SYSTEM)))
34*22ce4affSfengbojiang  EXT =.exe
35*22ce4affSfengbojiangelse
36*22ce4affSfengbojiang  EXT =
37*22ce4affSfengbojiangendif
38*22ce4affSfengbojiang
39*22ce4affSfengbojiang## default: Build lib-release and zstd-release
40*22ce4affSfengbojiang.PHONY: default
41*22ce4affSfengbojiangdefault: lib-release zstd-release
42*22ce4affSfengbojiang
43*22ce4affSfengbojiang.PHONY: all
44*22ce4affSfengbojiangall: allmost examples manual contrib
45*22ce4affSfengbojiang
46*22ce4affSfengbojiang.PHONY: allmost
47*22ce4affSfengbojiangallmost: allzstd zlibwrapper
48*22ce4affSfengbojiang
49*22ce4affSfengbojiang# skip zwrapper, can't build that on alternate architectures without the proper zlib installed
50*22ce4affSfengbojiang.PHONY: allzstd
51*22ce4affSfengbojiangallzstd: lib-all
52*22ce4affSfengbojiang	$(Q)$(MAKE) -C $(PRGDIR) all
53*22ce4affSfengbojiang	$(Q)$(MAKE) -C $(TESTDIR) all
54*22ce4affSfengbojiang
55*22ce4affSfengbojiang.PHONY: all32
56*22ce4affSfengbojiangall32:
57*22ce4affSfengbojiang	$(MAKE) -C $(PRGDIR) zstd32
58*22ce4affSfengbojiang	$(MAKE) -C $(TESTDIR) all32
59*22ce4affSfengbojiang
60*22ce4affSfengbojiang.PHONY: lib lib-release libzstd.a
61*22ce4affSfengbojianglib-all : lib
62*22ce4affSfengbojianglib lib-release lib-all :
63*22ce4affSfengbojiang	$(Q)$(MAKE) -C $(ZSTDDIR) $@
64*22ce4affSfengbojiang
65*22ce4affSfengbojiang.PHONY: zstd zstd-release
66*22ce4affSfengbojiangzstd zstd-release:
67*22ce4affSfengbojiang	$(Q)$(MAKE) -C $(PRGDIR) $@
68*22ce4affSfengbojiang	$(Q)ln -sf $(PRGDIR)/zstd$(EXT) zstd$(EXT)
69*22ce4affSfengbojiang
70*22ce4affSfengbojiang.PHONY: zstdmt
71*22ce4affSfengbojiangzstdmt:
72*22ce4affSfengbojiang	$(Q)$(MAKE) -C $(PRGDIR) $@
73*22ce4affSfengbojiang	$(Q)cp $(PRGDIR)/zstd$(EXT) ./zstdmt$(EXT)
74*22ce4affSfengbojiang
75*22ce4affSfengbojiang.PHONY: zlibwrapper
76*22ce4affSfengbojiangzlibwrapper: lib
77*22ce4affSfengbojiang	$(MAKE) -C $(ZWRAPDIR) all
78*22ce4affSfengbojiang
79*22ce4affSfengbojiang## test: run long-duration tests
80*22ce4affSfengbojiang.PHONY: test
81*22ce4affSfengbojiangDEBUGLEVEL ?= 1
82*22ce4affSfengbojiangtest: MOREFLAGS += -g -Werror
83*22ce4affSfengbojiangtest:
84*22ce4affSfengbojiang	DEBUGLEVEL=$(DEBUGLEVEL) MOREFLAGS="$(MOREFLAGS)" $(MAKE) -j -C $(PRGDIR) allVariants
85*22ce4affSfengbojiang	$(MAKE) -C $(TESTDIR) $@
86*22ce4affSfengbojiang	ZSTD=../../programs/zstd $(MAKE) -C doc/educational_decoder $@
87*22ce4affSfengbojiang
88*22ce4affSfengbojiang## shortest: same as `make check`
89*22ce4affSfengbojiang.PHONY: shortest
90*22ce4affSfengbojiangshortest:
91*22ce4affSfengbojiang	$(Q)$(MAKE) -C $(TESTDIR) $@
92*22ce4affSfengbojiang
93*22ce4affSfengbojiang## check: run basic tests for `zstd` cli
94*22ce4affSfengbojiang.PHONY: check
95*22ce4affSfengbojiangcheck: shortest
96*22ce4affSfengbojiang
97*22ce4affSfengbojiang.PHONY: automated_benchmarking
98*22ce4affSfengbojiangautomated_benchmarking:
99*22ce4affSfengbojiang	$(MAKE) -C $(TESTDIR) $@
100*22ce4affSfengbojiang
101*22ce4affSfengbojiang.PHONY: benchmarking
102*22ce4affSfengbojiangbenchmarking: automated_benchmarking
103*22ce4affSfengbojiang
104*22ce4affSfengbojiang## examples: build all examples in `examples/` directory
105*22ce4affSfengbojiang.PHONY: examples
106*22ce4affSfengbojiangexamples: lib
107*22ce4affSfengbojiang	$(MAKE) -C examples all
108*22ce4affSfengbojiang
109*22ce4affSfengbojiang## manual: generate API documentation in html format
110*22ce4affSfengbojiang.PHONY: manual
111*22ce4affSfengbojiangmanual:
112*22ce4affSfengbojiang	$(MAKE) -C contrib/gen_html $@
113*22ce4affSfengbojiang
114*22ce4affSfengbojiang## man: generate man page
115*22ce4affSfengbojiang.PHONY: man
116*22ce4affSfengbojiangman:
117*22ce4affSfengbojiang	$(MAKE) -C programs $@
118*22ce4affSfengbojiang
119*22ce4affSfengbojiang## contrib: build all supported projects in `/contrib` directory
120*22ce4affSfengbojiang.PHONY: contrib
121*22ce4affSfengbojiangcontrib: lib
122*22ce4affSfengbojiang	$(MAKE) -C contrib/pzstd all
123*22ce4affSfengbojiang	$(MAKE) -C contrib/seekable_format/examples all
124*22ce4affSfengbojiang	$(MAKE) -C contrib/seekable_format/tests test
125*22ce4affSfengbojiang	$(MAKE) -C contrib/largeNbDicts all
126*22ce4affSfengbojiang	cd contrib/single_file_libs/ ; ./build_decoder_test.sh
127*22ce4affSfengbojiang	cd contrib/single_file_libs/ ; ./build_library_test.sh
128*22ce4affSfengbojiang
129*22ce4affSfengbojiang.PHONY: cleanTabs
130*22ce4affSfengbojiangcleanTabs:
131*22ce4affSfengbojiang	cd contrib; ./cleanTabs
132*22ce4affSfengbojiang
133*22ce4affSfengbojiang.PHONY: clean
134*22ce4affSfengbojiangclean:
135*22ce4affSfengbojiang	$(Q)$(MAKE) -C $(ZSTDDIR) $@ > $(VOID)
136*22ce4affSfengbojiang	$(Q)$(MAKE) -C $(PRGDIR) $@ > $(VOID)
137*22ce4affSfengbojiang	$(Q)$(MAKE) -C $(TESTDIR) $@ > $(VOID)
138*22ce4affSfengbojiang	$(Q)$(MAKE) -C $(ZWRAPDIR) $@ > $(VOID)
139*22ce4affSfengbojiang	$(Q)$(MAKE) -C examples/ $@ > $(VOID)
140*22ce4affSfengbojiang	$(Q)$(MAKE) -C contrib/gen_html $@ > $(VOID)
141*22ce4affSfengbojiang	$(Q)$(MAKE) -C contrib/pzstd $@ > $(VOID)
142*22ce4affSfengbojiang	$(Q)$(MAKE) -C contrib/seekable_format/examples $@ > $(VOID)
143*22ce4affSfengbojiang	$(Q)$(MAKE) -C contrib/seekable_format/tests $@ > $(VOID)
144*22ce4affSfengbojiang	$(Q)$(MAKE) -C contrib/largeNbDicts $@ > $(VOID)
145*22ce4affSfengbojiang	$(Q)$(RM) zstd$(EXT) zstdmt$(EXT) tmp*
146*22ce4affSfengbojiang	$(Q)$(RM) -r lz4
147*22ce4affSfengbojiang	@echo Cleaning completed
148*22ce4affSfengbojiang
149*22ce4affSfengbojiang#------------------------------------------------------------------------------
150*22ce4affSfengbojiang# make install is validated only for Linux, macOS, Hurd and some BSD targets
151*22ce4affSfengbojiang#------------------------------------------------------------------------------
152*22ce4affSfengbojiangifneq (,$(filter $(shell uname),Linux Darwin GNU/kFreeBSD GNU OpenBSD FreeBSD DragonFly NetBSD MSYS_NT Haiku))
153*22ce4affSfengbojiang
154*22ce4affSfengbojiangHOST_OS = POSIX
155*22ce4affSfengbojiangCMAKE_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
156*22ce4affSfengbojiang
157*22ce4affSfengbojiangHAVE_COLORNEVER = $(shell echo a | egrep --color=never a > /dev/null 2> /dev/null && echo 1 || echo 0)
158*22ce4affSfengbojiangEGREP_OPTIONS ?=
159*22ce4affSfengbojiangifeq ($HAVE_COLORNEVER, 1)
160*22ce4affSfengbojiangEGREP_OPTIONS += --color=never
161*22ce4affSfengbojiangendif
162*22ce4affSfengbojiangEGREP = egrep $(EGREP_OPTIONS)
163*22ce4affSfengbojiang
164*22ce4affSfengbojiang# Print a two column output of targets and their description. To add a target description, put a
165*22ce4affSfengbojiang# comment in the Makefile with the format "## <TARGET>: <DESCRIPTION>".  For example:
166*22ce4affSfengbojiang#
167*22ce4affSfengbojiang## list: Print all targets and their descriptions (if provided)
168*22ce4affSfengbojiang.PHONY: list
169*22ce4affSfengbojianglist:
170*22ce4affSfengbojiang	$(Q)TARGETS=$$($(MAKE) -pRrq -f $(lastword $(MAKEFILE_LIST)) : 2>/dev/null \
171*22ce4affSfengbojiang		| awk -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' \
172*22ce4affSfengbojiang		| $(EGREP) -v  -e '^[^[:alnum:]]' | sort); \
173*22ce4affSfengbojiang	{ \
174*22ce4affSfengbojiang	    printf "Target Name\tDescription\n"; \
175*22ce4affSfengbojiang	    printf "%0.s-" {1..16}; printf "\t"; printf "%0.s-" {1..40}; printf "\n"; \
176*22ce4affSfengbojiang	    for target in $$TARGETS; do \
177*22ce4affSfengbojiang	        line=$$($(EGREP) "^##[[:space:]]+$$target:" $(lastword $(MAKEFILE_LIST))); \
178*22ce4affSfengbojiang	        description=$$(echo $$line | awk '{i=index($$0,":"); print substr($$0,i+1)}' | xargs); \
179*22ce4affSfengbojiang	        printf "$$target\t$$description\n"; \
180*22ce4affSfengbojiang	    done \
181*22ce4affSfengbojiang	} | column -t -s $$'\t'
182*22ce4affSfengbojiang
183*22ce4affSfengbojiang.PHONY: install armtest usan asan uasan
184*22ce4affSfengbojianginstall:
185*22ce4affSfengbojiang	$(Q)$(MAKE) -C $(ZSTDDIR) $@
186*22ce4affSfengbojiang	$(Q)$(MAKE) -C $(PRGDIR) $@
187*22ce4affSfengbojiang
188*22ce4affSfengbojiang.PHONY: uninstall
189*22ce4affSfengbojianguninstall:
190*22ce4affSfengbojiang	$(Q)$(MAKE) -C $(ZSTDDIR) $@
191*22ce4affSfengbojiang	$(Q)$(MAKE) -C $(PRGDIR) $@
192*22ce4affSfengbojiang
193*22ce4affSfengbojiang.PHONY: travis-install
194*22ce4affSfengbojiangtravis-install:
195*22ce4affSfengbojiang	$(MAKE) install PREFIX=~/install_test_dir
196*22ce4affSfengbojiang
197*22ce4affSfengbojiang.PHONY: gcc5build
198*22ce4affSfengbojianggcc5build: clean
199*22ce4affSfengbojiang	gcc-5 -v
200*22ce4affSfengbojiang	CC=gcc-5 $(MAKE) all MOREFLAGS="-Werror"
201*22ce4affSfengbojiang
202*22ce4affSfengbojiang.PHONY: gcc6build
203*22ce4affSfengbojianggcc6build: clean
204*22ce4affSfengbojiang	gcc-6 -v
205*22ce4affSfengbojiang	CC=gcc-6 $(MAKE) all MOREFLAGS="-Werror"
206*22ce4affSfengbojiang
207*22ce4affSfengbojiang.PHONY: gcc7build
208*22ce4affSfengbojianggcc7build: clean
209*22ce4affSfengbojiang	gcc-7 -v
210*22ce4affSfengbojiang	CC=gcc-7 $(MAKE) all MOREFLAGS="-Werror"
211*22ce4affSfengbojiang
212*22ce4affSfengbojiang.PHONY: clangbuild
213*22ce4affSfengbojiangclangbuild: clean
214*22ce4affSfengbojiang	clang -v
215*22ce4affSfengbojiang	CXX=clang++ CC=clang CFLAGS="-Werror -Wconversion -Wno-sign-conversion -Wdocumentation" $(MAKE) all
216*22ce4affSfengbojiang
217*22ce4affSfengbojiangm32build: clean
218*22ce4affSfengbojiang	gcc -v
219*22ce4affSfengbojiang	$(MAKE) all32
220*22ce4affSfengbojiang
221*22ce4affSfengbojiangarmbuild: clean
222*22ce4affSfengbojiang	CC=arm-linux-gnueabi-gcc CFLAGS="-Werror" $(MAKE) allzstd
223*22ce4affSfengbojiang
224*22ce4affSfengbojiangaarch64build: clean
225*22ce4affSfengbojiang	CC=aarch64-linux-gnu-gcc CFLAGS="-Werror" $(MAKE) allzstd
226*22ce4affSfengbojiang
227*22ce4affSfengbojiangppcbuild: clean
228*22ce4affSfengbojiang	CC=powerpc-linux-gnu-gcc CFLAGS="-m32 -Wno-attributes -Werror" $(MAKE) allzstd
229*22ce4affSfengbojiang
230*22ce4affSfengbojiangppc64build: clean
231*22ce4affSfengbojiang	CC=powerpc-linux-gnu-gcc CFLAGS="-m64 -Werror" $(MAKE) allzstd
232*22ce4affSfengbojiang
233*22ce4affSfengbojiangarmfuzz: clean
234*22ce4affSfengbojiang	CC=arm-linux-gnueabi-gcc QEMU_SYS=qemu-arm-static MOREFLAGS="-static" FUZZER_FLAGS=--no-big-tests $(MAKE) -C $(TESTDIR) fuzztest
235*22ce4affSfengbojiang
236*22ce4affSfengbojiangaarch64fuzz: clean
237*22ce4affSfengbojiang	ld -v
238*22ce4affSfengbojiang	CC=aarch64-linux-gnu-gcc QEMU_SYS=qemu-aarch64-static MOREFLAGS="-static" FUZZER_FLAGS=--no-big-tests $(MAKE) -C $(TESTDIR) fuzztest
239*22ce4affSfengbojiang
240*22ce4affSfengbojiangppcfuzz: clean
241*22ce4affSfengbojiang	CC=powerpc-linux-gnu-gcc QEMU_SYS=qemu-ppc-static MOREFLAGS="-static" FUZZER_FLAGS=--no-big-tests $(MAKE) -C $(TESTDIR) fuzztest
242*22ce4affSfengbojiang
243*22ce4affSfengbojiangppc64fuzz: clean
244*22ce4affSfengbojiang	CC=powerpc-linux-gnu-gcc QEMU_SYS=qemu-ppc64-static MOREFLAGS="-m64 -static" FUZZER_FLAGS=--no-big-tests $(MAKE) -C $(TESTDIR) fuzztest
245*22ce4affSfengbojiang
246*22ce4affSfengbojiang.PHONY: cxxtest
247*22ce4affSfengbojiangcxxtest: CXXFLAGS += -Wall -Wextra -Wundef -Wshadow -Wcast-align -Werror
248*22ce4affSfengbojiangcxxtest: clean
249*22ce4affSfengbojiang	$(MAKE) -C $(PRGDIR) all CC="$(CXX) -Wno-deprecated" CFLAGS="$(CXXFLAGS)"   # adding -Wno-deprecated to avoid clang++ warning on dealing with C files directly
250*22ce4affSfengbojiang
251*22ce4affSfengbojianggcc5test: clean
252*22ce4affSfengbojiang	gcc-5 -v
253*22ce4affSfengbojiang	$(MAKE) all CC=gcc-5 MOREFLAGS="-Werror"
254*22ce4affSfengbojiang
255*22ce4affSfengbojianggcc6test: clean
256*22ce4affSfengbojiang	gcc-6 -v
257*22ce4affSfengbojiang	$(MAKE) all CC=gcc-6 MOREFLAGS="-Werror"
258*22ce4affSfengbojiang
259*22ce4affSfengbojiangarmtest: clean
260*22ce4affSfengbojiang	$(MAKE) -C $(TESTDIR) datagen   # use native, faster
261*22ce4affSfengbojiang	$(MAKE) -C $(TESTDIR) test CC=arm-linux-gnueabi-gcc QEMU_SYS=qemu-arm-static ZSTDRTTEST= MOREFLAGS="-Werror -static" FUZZER_FLAGS=--no-big-tests
262*22ce4affSfengbojiang
263*22ce4affSfengbojiangaarch64test:
264*22ce4affSfengbojiang	$(MAKE) -C $(TESTDIR) datagen   # use native, faster
265*22ce4affSfengbojiang	$(MAKE) -C $(TESTDIR) test CC=aarch64-linux-gnu-gcc QEMU_SYS=qemu-aarch64-static ZSTDRTTEST= MOREFLAGS="-Werror -static" FUZZER_FLAGS=--no-big-tests
266*22ce4affSfengbojiang
267*22ce4affSfengbojiangppctest: clean
268*22ce4affSfengbojiang	$(MAKE) -C $(TESTDIR) datagen   # use native, faster
269*22ce4affSfengbojiang	$(MAKE) -C $(TESTDIR) test CC=powerpc-linux-gnu-gcc QEMU_SYS=qemu-ppc-static ZSTDRTTEST= MOREFLAGS="-Werror -Wno-attributes -static" FUZZER_FLAGS=--no-big-tests
270*22ce4affSfengbojiang
271*22ce4affSfengbojiangppc64test: clean
272*22ce4affSfengbojiang	$(MAKE) -C $(TESTDIR) datagen   # use native, faster
273*22ce4affSfengbojiang	$(MAKE) -C $(TESTDIR) test CC=powerpc-linux-gnu-gcc QEMU_SYS=qemu-ppc64-static ZSTDRTTEST= MOREFLAGS="-m64 -static" FUZZER_FLAGS=--no-big-tests
274*22ce4affSfengbojiang
275*22ce4affSfengbojiangarm-ppc-compilation:
276*22ce4affSfengbojiang	$(MAKE) -C $(PRGDIR) clean zstd CC=arm-linux-gnueabi-gcc QEMU_SYS=qemu-arm-static ZSTDRTTEST= MOREFLAGS="-Werror -static"
277*22ce4affSfengbojiang	$(MAKE) -C $(PRGDIR) clean zstd CC=aarch64-linux-gnu-gcc QEMU_SYS=qemu-aarch64-static ZSTDRTTEST= MOREFLAGS="-Werror -static"
278*22ce4affSfengbojiang	$(MAKE) -C $(PRGDIR) clean zstd CC=powerpc-linux-gnu-gcc QEMU_SYS=qemu-ppc-static ZSTDRTTEST= MOREFLAGS="-Werror -Wno-attributes -static"
279*22ce4affSfengbojiang	$(MAKE) -C $(PRGDIR) clean zstd CC=powerpc-linux-gnu-gcc QEMU_SYS=qemu-ppc64-static ZSTDRTTEST= MOREFLAGS="-m64 -static"
280*22ce4affSfengbojiang
281*22ce4affSfengbojiangregressiontest:
282*22ce4affSfengbojiang	$(MAKE) -C $(FUZZDIR) regressiontest
283*22ce4affSfengbojiang
284*22ce4affSfengbojianguasanregressiontest:
285*22ce4affSfengbojiang	$(MAKE) -C $(FUZZDIR) regressiontest CC=clang CXX=clang++ CFLAGS="-O3 -fsanitize=address,undefined" CXXFLAGS="-O3 -fsanitize=address,undefined"
286*22ce4affSfengbojiang
287*22ce4affSfengbojiangmsanregressiontest:
288*22ce4affSfengbojiang	$(MAKE) -C $(FUZZDIR) regressiontest CC=clang CXX=clang++ CFLAGS="-O3 -fsanitize=memory" CXXFLAGS="-O3 -fsanitize=memory"
289*22ce4affSfengbojiang
290*22ce4affSfengbojiang# run UBsan with -fsanitize-recover=signed-integer-overflow
291*22ce4affSfengbojiang# due to a bug in UBsan when doing pointer subtraction
292*22ce4affSfengbojiang# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63303
293*22ce4affSfengbojiang
294*22ce4affSfengbojiangusan: clean
295*22ce4affSfengbojiang	$(MAKE) test CC=clang MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize-recover=signed-integer-overflow -fsanitize=undefined -Werror"
296*22ce4affSfengbojiang
297*22ce4affSfengbojiangasan: clean
298*22ce4affSfengbojiang	$(MAKE) test CC=clang MOREFLAGS="-g -fsanitize=address -Werror"
299*22ce4affSfengbojiang
300*22ce4affSfengbojiangasan-%: clean
301*22ce4affSfengbojiang	LDFLAGS=-fuse-ld=gold MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize=address -Werror" $(MAKE) -C $(TESTDIR) $*
302*22ce4affSfengbojiang
303*22ce4affSfengbojiangmsan: clean
304*22ce4affSfengbojiang	$(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
305*22ce4affSfengbojiang
306*22ce4affSfengbojiangmsan-%: clean
307*22ce4affSfengbojiang	LDFLAGS=-fuse-ld=gold MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize=memory -fno-omit-frame-pointer -Werror" FUZZER_FLAGS=--no-big-tests $(MAKE) -C $(TESTDIR) HAVE_LZMA=0 $*
308*22ce4affSfengbojiang
309*22ce4affSfengbojiangasan32: clean
310*22ce4affSfengbojiang	$(MAKE) -C $(TESTDIR) test32 CC=clang MOREFLAGS="-g -fsanitize=address"
311*22ce4affSfengbojiang
312*22ce4affSfengbojianguasan: clean
313*22ce4affSfengbojiang	$(MAKE) test CC=clang MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize-recover=signed-integer-overflow -fsanitize=address,undefined -Werror"
314*22ce4affSfengbojiang
315*22ce4affSfengbojianguasan-%: clean
316*22ce4affSfengbojiang	LDFLAGS=-fuse-ld=gold MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize-recover=signed-integer-overflow -fsanitize=address,undefined -Werror" $(MAKE) -C $(TESTDIR) $*
317*22ce4affSfengbojiang
318*22ce4affSfengbojiangtsan-%: clean
319*22ce4affSfengbojiang	LDFLAGS=-fuse-ld=gold MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize=thread -Werror" $(MAKE) -C $(TESTDIR) $* FUZZER_FLAGS=--no-big-tests
320*22ce4affSfengbojiang
321*22ce4affSfengbojiangapt-install:
322*22ce4affSfengbojiang	sudo apt-get -yq --no-install-suggests --no-install-recommends --force-yes install $(APT_PACKAGES)
323*22ce4affSfengbojiang
324*22ce4affSfengbojiangapt-add-repo:
325*22ce4affSfengbojiang	sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
326*22ce4affSfengbojiang	sudo apt-get update -y -qq
327*22ce4affSfengbojiang
328*22ce4affSfengbojiangppcinstall:
329*22ce4affSfengbojiang	APT_PACKAGES="qemu-system-ppc qemu-user-static gcc-powerpc-linux-gnu" $(MAKE) apt-install
330*22ce4affSfengbojiang
331*22ce4affSfengbojiangarminstall:
332*22ce4affSfengbojiang	APT_PACKAGES="qemu-system-arm qemu-user-static gcc-arm-linux-gnueabi libc6-dev-armel-cross gcc-aarch64-linux-gnu libc6-dev-arm64-cross" $(MAKE) apt-install
333*22ce4affSfengbojiang
334*22ce4affSfengbojiangvalgrindinstall:
335*22ce4affSfengbojiang	APT_PACKAGES="valgrind" $(MAKE) apt-install
336*22ce4affSfengbojiang
337*22ce4affSfengbojianglibc6install:
338*22ce4affSfengbojiang	APT_PACKAGES="libc6-dev-i386 gcc-multilib" $(MAKE) apt-install
339*22ce4affSfengbojiang
340*22ce4affSfengbojianggcc6install: apt-add-repo
341*22ce4affSfengbojiang	APT_PACKAGES="libc6-dev-i386 gcc-multilib gcc-6 gcc-6-multilib" $(MAKE) apt-install
342*22ce4affSfengbojiang
343*22ce4affSfengbojianggcc7install: apt-add-repo
344*22ce4affSfengbojiang	APT_PACKAGES="libc6-dev-i386 gcc-multilib gcc-7 gcc-7-multilib" $(MAKE) apt-install
345*22ce4affSfengbojiang
346*22ce4affSfengbojianggcc8install: apt-add-repo
347*22ce4affSfengbojiang	APT_PACKAGES="libc6-dev-i386 gcc-multilib gcc-8 gcc-8-multilib" $(MAKE) apt-install
348*22ce4affSfengbojiang
349*22ce4affSfengbojianggpp6install: apt-add-repo
350*22ce4affSfengbojiang	APT_PACKAGES="libc6-dev-i386 g++-multilib gcc-6 g++-6 g++-6-multilib" $(MAKE) apt-install
351*22ce4affSfengbojiang
352*22ce4affSfengbojiangclang38install:
353*22ce4affSfengbojiang	APT_PACKAGES="clang-3.8" $(MAKE) apt-install
354*22ce4affSfengbojiang
355*22ce4affSfengbojiang# Ubuntu 14.04 ships a too-old lz4
356*22ce4affSfengbojianglz4install:
357*22ce4affSfengbojiang	[ -e lz4 ] || git clone https://github.com/lz4/lz4 && sudo $(MAKE) -C lz4 install
358*22ce4affSfengbojiang
359*22ce4affSfengbojiangendif
360*22ce4affSfengbojiang
361*22ce4affSfengbojiang
362*22ce4affSfengbojiangifneq (,$(filter MSYS%,$(shell uname)))
363*22ce4affSfengbojiangHOST_OS = MSYS
364*22ce4affSfengbojiangCMAKE_PARAMS = -G"MSYS Makefiles" -DCMAKE_BUILD_TYPE=Debug -DZSTD_MULTITHREAD_SUPPORT:BOOL=OFF -DZSTD_BUILD_STATIC:BOOL=ON -DZSTD_BUILD_TESTS:BOOL=ON
365*22ce4affSfengbojiangendif
366*22ce4affSfengbojiang
367*22ce4affSfengbojiang
368*22ce4affSfengbojiang#------------------------------------------------------------------------
369*22ce4affSfengbojiang# target specific tests
370*22ce4affSfengbojiang#------------------------------------------------------------------------
371*22ce4affSfengbojiangifneq (,$(filter $(HOST_OS),MSYS POSIX))
372*22ce4affSfengbojiangcmakebuild:
373*22ce4affSfengbojiang	cmake --version
374*22ce4affSfengbojiang	$(RM) -r $(BUILDIR)/cmake/build
375*22ce4affSfengbojiang	mkdir $(BUILDIR)/cmake/build
376*22ce4affSfengbojiang	cd $(BUILDIR)/cmake/build; cmake -DCMAKE_INSTALL_PREFIX:PATH=~/install_test_dir $(CMAKE_PARAMS) ..
377*22ce4affSfengbojiang	$(MAKE) -C $(BUILDIR)/cmake/build -j4;
378*22ce4affSfengbojiang	$(MAKE) -C $(BUILDIR)/cmake/build install;
379*22ce4affSfengbojiang	$(MAKE) -C $(BUILDIR)/cmake/build uninstall;
380*22ce4affSfengbojiang	cd $(BUILDIR)/cmake/build; ctest -V -L Medium
381*22ce4affSfengbojiang
382*22ce4affSfengbojiangc89build: clean
383*22ce4affSfengbojiang	$(CC) -v
384*22ce4affSfengbojiang	CFLAGS="-std=c89 -Werror" $(MAKE) allmost  # will fail, due to missing support for `long long`
385*22ce4affSfengbojiang
386*22ce4affSfengbojianggnu90build: clean
387*22ce4affSfengbojiang	$(CC) -v
388*22ce4affSfengbojiang	CFLAGS="-std=gnu90 -Werror" $(MAKE) allmost
389*22ce4affSfengbojiang
390*22ce4affSfengbojiangc99build: clean
391*22ce4affSfengbojiang	$(CC) -v
392*22ce4affSfengbojiang	CFLAGS="-std=c99 -Werror" $(MAKE) allmost
393*22ce4affSfengbojiang
394*22ce4affSfengbojianggnu99build: clean
395*22ce4affSfengbojiang	$(CC) -v
396*22ce4affSfengbojiang	CFLAGS="-std=gnu99 -Werror" $(MAKE) allmost
397*22ce4affSfengbojiang
398*22ce4affSfengbojiangc11build: clean
399*22ce4affSfengbojiang	$(CC) -v
400*22ce4affSfengbojiang	CFLAGS="-std=c11 -Werror" $(MAKE) allmost
401*22ce4affSfengbojiang
402*22ce4affSfengbojiangbmix64build: clean
403*22ce4affSfengbojiang	$(CC) -v
404*22ce4affSfengbojiang	CFLAGS="-O3 -mbmi -Werror" $(MAKE) -C $(TESTDIR) test
405*22ce4affSfengbojiang
406*22ce4affSfengbojiangbmix32build: clean
407*22ce4affSfengbojiang	$(CC) -v
408*22ce4affSfengbojiang	CFLAGS="-O3 -mbmi -mx32 -Werror" $(MAKE) -C $(TESTDIR) test
409*22ce4affSfengbojiang
410*22ce4affSfengbojiangbmi32build: clean
411*22ce4affSfengbojiang	$(CC) -v
412*22ce4affSfengbojiang	CFLAGS="-O3 -mbmi -m32 -Werror" $(MAKE) -C $(TESTDIR) test
413*22ce4affSfengbojiang
414*22ce4affSfengbojiang# static analyzer test uses clang's scan-build
415*22ce4affSfengbojiang# does not analyze zlibWrapper, due to detected issues in zlib source code
416*22ce4affSfengbojiangstaticAnalyze: SCANBUILD ?= scan-build
417*22ce4affSfengbojiangstaticAnalyze:
418*22ce4affSfengbojiang	$(CC) -v
419*22ce4affSfengbojiang	CC=$(CC) CPPFLAGS=-g $(SCANBUILD) --status-bugs -v $(MAKE) allzstd examples contrib
420*22ce4affSfengbojiangendif
421