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