blob: 1735ab865b924931f23d35a11b446a06b69a8d8b [file] [log] [blame]
Yann Collet4856a002015-01-24 01:58:16 +01001# ################################################################
Nick Terrellac58c8d2020-03-26 15:19:05 -07002# Copyright (c) 2015-2020, Yann Collet, Facebook, Inc.
Yann Collet4856a002015-01-24 01:58:16 +01003# All rights reserved.
Yann Collet118bfc42016-05-30 18:50:28 +02004#
Yann Collete9dc2042017-08-31 11:24:54 -07005# This source code is licensed under both the BSD-style license (found in the
6# LICENSE file in the root directory of this source tree) and the GPLv2 (found
7# in the COPYING file in the root directory of this source tree).
Nick Terrellac58c8d2020-03-26 15:19:05 -07008# You may select, at your option, one of the above-listed licenses.
Yann Collet4856a002015-01-24 01:58:16 +01009# ################################################################
10
Yann Collet105b5832020-05-29 12:40:59 -070011# verbose mode (print commands) on V=1 or VERBOSE=1
Yann Collet6ac64722020-05-29 12:09:51 -070012Q = $(if $(filter 1,$(V) $(VERBOSE)),,@)
13
Yann Collet4c9a4c12016-09-19 14:58:14 +020014PRGDIR = programs
15ZSTDDIR = lib
16BUILDIR = build
inikepe9dfdf62016-05-27 11:56:15 +020017ZWRAPDIR = zlibWrapper
inikepa1c81152016-08-18 13:35:36 +020018TESTDIR = tests
Nick Terrell6bb781e2017-09-25 13:29:50 -070019FUZZDIR = $(TESTDIR)/fuzz
Yann Collet4856a002015-01-24 01:58:16 +010020
Yann Collet88fcd292015-11-25 14:42:45 +010021# Define nul output
Yann Collet88fcd292015-11-25 14:42:45 +010022VOID = /dev/null
Przemyslaw Skibinski3a415592016-11-03 12:59:20 +010023
Bimba Shresthadf9e5b62020-05-07 22:07:40 -050024# When cross-compiling from linux to windows, you might
25# need to specify this as "Windows." Fedora build fails
26# without it.
27#
28# Note: mingw-w64 build from linux to windows does not
29# fail on other tested distros (ubuntu, debian) even
30# without manually specifying the TARGET_SYSTEM.
31TARGET_SYSTEM ?= $(OS)
32
33ifneq (,$(filter Windows%,$(TARGET_SYSTEM)))
Przemyslaw Skibinski3a415592016-11-03 12:59:20 +010034EXT =.exe
35else
36EXT =
Yann Collet88fcd292015-11-25 14:42:45 +010037endif
38
Casey McGinty986ead62018-08-30 16:54:43 -070039## default: Build lib-release and zstd-release
Yann Colletf3f13212016-11-02 17:02:45 -070040.PHONY: default
Yann Collet8b1d0042017-03-05 21:17:32 -080041default: lib-release zstd-release
Yann Collet213089c2015-06-18 07:43:16 -080042
Yann Colletf3f13212016-11-02 17:02:45 -070043.PHONY: all
Yann Collet830fd442018-06-06 12:47:16 -070044all: allmost examples manual contrib
Yann Colleta86a09e2016-12-22 11:31:39 +010045
46.PHONY: allmost
Yann Colletda558652018-08-15 16:43:13 -070047allmost: allzstd zlibwrapper
Yann Collet7cedbd12016-12-22 12:43:00 +010048
Yann Collet5291d9a2018-08-15 17:41:44 -070049# skip zwrapper, can't build that on alternate architectures without the proper zlib installed
Yann Collet8e298382017-08-31 14:30:52 -070050.PHONY: allzstd
W. Felix Handte78aa9372020-05-08 13:06:31 -040051allzstd: lib-all
Yann Collet105b5832020-05-29 12:40:59 -070052 $(Q)$(MAKE) -C $(PRGDIR) all
53 $(Q)$(MAKE) -C $(TESTDIR) all
Sean Purcell3437bf22017-03-01 16:10:26 -080054
Yann Collet7cedbd12016-12-22 12:43:00 +010055.PHONY: all32
56all32:
57 $(MAKE) -C $(PRGDIR) zstd32
58 $(MAKE) -C $(TESTDIR) all32
Yann Collet4856a002015-01-24 01:58:16 +010059
Yann Colletda558652018-08-15 16:43:13 -070060.PHONY: lib lib-release libzstd.a
Yann Collet6ac64722020-05-29 12:09:51 -070061lib-all : lib
W. Felix Handte78aa9372020-05-08 13:06:31 -040062lib lib-release lib-all :
Yann Collet6ac64722020-05-29 12:09:51 -070063 $(Q)$(MAKE) -C $(ZSTDDIR) $@
Yann Collet8b1d0042017-03-05 21:17:32 -080064
Yann Collet830fd442018-06-06 12:47:16 -070065.PHONY: zstd zstd-release
66zstd zstd-release:
Yann Collet6ac64722020-05-29 12:09:51 -070067 $(Q)$(MAKE) -C $(PRGDIR) $@
68 $(Q)cp $(PRGDIR)/zstd$(EXT) .
Yann Collet4856a002015-01-24 01:58:16 +010069
Yann Collet563ef8a2017-01-18 12:12:10 -080070.PHONY: zstdmt
71zstdmt:
Yann Collet6ac64722020-05-29 12:09:51 -070072 $(Q)$(MAKE) -C $(PRGDIR) $@
73 $(Q)cp $(PRGDIR)/zstd$(EXT) ./zstdmt$(EXT)
Yann Collet563ef8a2017-01-18 12:12:10 -080074
Yann Colletf3f13212016-11-02 17:02:45 -070075.PHONY: zlibwrapper
Yann Collet5291d9a2018-08-15 17:41:44 -070076zlibwrapper: lib
Yann Colletda558652018-08-15 16:43:13 -070077 $(MAKE) -C $(ZWRAPDIR) all
inikepe9dfdf62016-05-27 11:56:15 +020078
Yann Collet1e6208e2018-10-11 14:40:12 -070079## test: run long-duration tests
Yann Colletcb5eba82018-01-19 11:26:35 -080080.PHONY: test
Yann Colletea441ee2018-12-09 23:20:51 -080081DEBUGLEVEL ?= 1
82test: MOREFLAGS += -g -DDEBUGLEVEL=$(DEBUGLEVEL) -Werror
Yann Colletcb5eba82018-01-19 11:26:35 -080083test:
Yann Collet5203f012018-08-03 07:54:29 -070084 MOREFLAGS="$(MOREFLAGS)" $(MAKE) -j -C $(PRGDIR) allVariants
inikepa1c81152016-08-18 13:35:36 +020085 $(MAKE) -C $(TESTDIR) $@
Yann Collet105b5832020-05-29 12:40:59 -070086 ZSTD=../../programs/zstd $(MAKE) -C doc/educational_decoder $@
Yann Collet6f9c0562016-05-01 10:26:30 +020087
Yann Collet1e6208e2018-10-11 14:40:12 -070088## shortest: same as `make check`
Yann Colletcb5eba82018-01-19 11:26:35 -080089.PHONY: shortest
90shortest:
Yann Collet105b5832020-05-29 12:40:59 -070091 $(Q)$(MAKE) -C $(TESTDIR) $@
Yann Colletcb5eba82018-01-19 11:26:35 -080092
Yann Collet1e6208e2018-10-11 14:40:12 -070093## check: run basic tests for `zstd` cli
Yann Colletcb5eba82018-01-19 11:26:35 -080094.PHONY: check
95check: shortest
96
Bimba Shresthaeb76f782020-01-06 14:19:11 -080097.PHONY: automated_benchmarking
98automated_benchmarking:
99 $(MAKE) -C $(TESTDIR) $@
100
101.PHONY: benchmarking
102benchmarking: automated_benchmarking
103
Yann Collet1e6208e2018-10-11 14:40:12 -0700104## examples: build all examples in `/examples` directory
Yann Collet77575772017-02-22 01:10:43 -0800105.PHONY: examples
Yann Collet830fd442018-06-06 12:47:16 -0700106examples: lib
Yann Collet77575772017-02-22 01:10:43 -0800107 CPPFLAGS=-I../lib LDFLAGS=-L../lib $(MAKE) -C examples/ all
108
Yann Collet1e6208e2018-10-11 14:40:12 -0700109## manual: generate API documentation in html format
Yann Collet77575772017-02-22 01:10:43 -0800110.PHONY: manual
111manual:
112 $(MAKE) -C contrib/gen_html $@
113
Yann Collet1e6208e2018-10-11 14:40:12 -0700114## man: generate man page
115.PHONY: man
116man:
117 $(MAKE) -C programs $@
118
119## contrib: build all supported projects in `/contrib` directory
Yann Collet97816402018-03-15 16:39:59 -0700120.PHONY: contrib
121contrib: lib
122 $(MAKE) -C contrib/pzstd all
123 $(MAKE) -C contrib/seekable_format/examples all
Yann Colleta5a77962018-08-29 16:17:22 -0700124 $(MAKE) -C contrib/largeNbDicts all
Carl Woffenden4e6027f2020-04-07 13:35:19 +0200125 cd contrib/single_file_libs/ ; ./build_decoder_test.sh
126 cd contrib/single_file_libs/ ; ./build_library_test.sh
Yann Collet97816402018-03-15 16:39:59 -0700127
Yann Collet6851db42017-03-30 12:42:44 -0700128.PHONY: cleanTabs
129cleanTabs:
130 cd contrib; ./cleanTabs
131
Yann Colletf3f13212016-11-02 17:02:45 -0700132.PHONY: clean
Yann Collet4856a002015-01-24 01:58:16 +0100133clean:
Yann Collet6ac64722020-05-29 12:09:51 -0700134 $(Q)$(MAKE) -C $(ZSTDDIR) $@ > $(VOID)
135 $(Q)$(MAKE) -C $(PRGDIR) $@ > $(VOID)
136 $(Q)$(MAKE) -C $(TESTDIR) $@ > $(VOID)
137 $(Q)$(MAKE) -C $(ZWRAPDIR) $@ > $(VOID)
138 $(Q)$(MAKE) -C examples/ $@ > $(VOID)
139 $(Q)$(MAKE) -C contrib/gen_html $@ > $(VOID)
140 $(Q)$(MAKE) -C contrib/pzstd $@ > $(VOID)
141 $(Q)$(MAKE) -C contrib/seekable_format/examples $@ > $(VOID)
142 $(Q)$(MAKE) -C contrib/largeNbDicts $@ > $(VOID)
143 $(Q)$(RM) zstd$(EXT) zstdmt$(EXT) tmp*
144 $(Q)$(RM) -r lz4
Yann Collet4856a002015-01-24 01:58:16 +0100145 @echo Cleaning completed
146
Yann Collete405c7a2016-10-12 15:29:22 -0700147#------------------------------------------------------------------------------
Ryan Schmidtb567ce92018-06-09 14:31:17 -0500148# make install is validated only for Linux, macOS, Hurd and some BSD targets
Yann Collete405c7a2016-10-12 15:29:22 -0700149#------------------------------------------------------------------------------
Jerome Duval87c10e22017-08-06 22:27:54 +0200150ifneq (,$(filter $(shell uname),Linux Darwin GNU/kFreeBSD GNU OpenBSD FreeBSD DragonFly NetBSD MSYS_NT Haiku))
Yann Colletb402f1e2017-04-18 14:34:24 -0700151
inikep13f42d92016-06-01 14:44:31 +0200152HOST_OS = POSIX
Yann Collet42a02ab2018-08-15 14:35:38 -0700153CMAKE_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
Yann Colletf3f13212016-11-02 17:02:45 -0700154
Yann Collet7ef7dc52018-12-03 15:46:55 -0800155HAVE_COLORNEVER = $(shell echo a | egrep --color=never a > /dev/null 2> /dev/null && echo 1 || echo 0)
156EGREP_OPTIONS ?=
157ifeq ($HAVE_COLORNEVER, 1)
158EGREP_OPTIONS += --color=never
159endif
160EGREP = egrep $(EGREP_OPTIONS)
Yann Collet08f68d82018-09-25 16:56:53 -0700161
Casey McGinty986ead62018-08-30 16:54:43 -0700162# Print a two column output of targets and their description. To add a target description, put a
163# comment in the Makefile with the format "## <TARGET>: <DESCRIPTION>". For example:
164#
165## list: Print all targets and their descriptions (if provided)
Yann Colletb402f1e2017-04-18 14:34:24 -0700166.PHONY: list
167list:
Yann Collet6ac64722020-05-29 12:09:51 -0700168 $(Q)TARGETS=$$($(MAKE) -pRrq -f $(lastword $(MAKEFILE_LIST)) : 2>/dev/null \
Casey McGinty986ead62018-08-30 16:54:43 -0700169 | awk -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' \
Yann Collet08f68d82018-09-25 16:56:53 -0700170 | $(EGREP) -v -e '^[^[:alnum:]]' | sort); \
Casey McGinty986ead62018-08-30 16:54:43 -0700171 { \
172 printf "Target Name\tDescription\n"; \
173 printf "%0.s-" {1..16}; printf "\t"; printf "%0.s-" {1..40}; printf "\n"; \
174 for target in $$TARGETS; do \
Yann Collet08f68d82018-09-25 16:56:53 -0700175 line=$$($(EGREP) "^##[[:space:]]+$$target:" $(lastword $(MAKEFILE_LIST))); \
Casey McGinty986ead62018-08-30 16:54:43 -0700176 description=$$(echo $$line | awk '{i=index($$0,":"); print substr($$0,i+1)}' | xargs); \
177 printf "$$target\t$$description\n"; \
178 done \
179 } | column -t -s $$'\t'
Yann Colletb402f1e2017-04-18 14:34:24 -0700180
Yann Collet2a6aa6b2019-01-19 23:40:41 -0800181.PHONY: install armtest usan asan uasan
Yann Collet4856a002015-01-24 01:58:16 +0100182install:
Yann Collet6ac64722020-05-29 12:09:51 -0700183 $(Q)$(MAKE) -C $(ZSTDDIR) $@
184 $(Q)$(MAKE) -C $(PRGDIR) $@
Yann Collet4856a002015-01-24 01:58:16 +0100185
Yann Colletafb0aca2017-06-29 18:19:09 -0700186.PHONY: uninstall
Yann Collet4856a002015-01-24 01:58:16 +0100187uninstall:
Yann Collet6ac64722020-05-29 12:09:51 -0700188 $(Q)$(MAKE) -C $(ZSTDDIR) $@
189 $(Q)$(MAKE) -C $(PRGDIR) $@
Yann Collet4856a002015-01-24 01:58:16 +0100190
Yann Colletafb0aca2017-06-29 18:19:09 -0700191.PHONY: travis-install
Yann Collet4856a002015-01-24 01:58:16 +0100192travis-install:
Yann Colletc620b482015-12-01 01:56:02 +0100193 $(MAKE) install PREFIX=~/install_test_dir
Yann Collet4856a002015-01-24 01:58:16 +0100194
Yann Colletafb0aca2017-06-29 18:19:09 -0700195.PHONY: gcc5build
Sean Purcell3437bf22017-03-01 16:10:26 -0800196gcc5build: clean
197 gcc-5 -v
198 CC=gcc-5 $(MAKE) all MOREFLAGS="-Werror"
199
Yann Colletafb0aca2017-06-29 18:19:09 -0700200.PHONY: gcc6build
Sean Purcell3437bf22017-03-01 16:10:26 -0800201gcc6build: clean
202 gcc-6 -v
203 CC=gcc-6 $(MAKE) all MOREFLAGS="-Werror"
204
Nick Terrell9ba97182017-08-08 12:32:26 -0700205.PHONY: gcc7build
206gcc7build: clean
207 gcc-7 -v
208 CC=gcc-7 $(MAKE) all MOREFLAGS="-Werror"
209
Yann Colletafb0aca2017-06-29 18:19:09 -0700210.PHONY: clangbuild
Sean Purcell3437bf22017-03-01 16:10:26 -0800211clangbuild: clean
212 clang -v
Yann Collet2a6aa6b2019-01-19 23:40:41 -0800213 CXX=clang++ CC=clang CFLAGS="-Werror -Wconversion -Wno-sign-conversion -Wdocumentation" $(MAKE) all
Sean Purcell3437bf22017-03-01 16:10:26 -0800214
215m32build: clean
216 gcc -v
217 $(MAKE) all32
218
219armbuild: clean
Yann Collet8e298382017-08-31 14:30:52 -0700220 CC=arm-linux-gnueabi-gcc CFLAGS="-Werror" $(MAKE) allzstd
Sean Purcell3437bf22017-03-01 16:10:26 -0800221
222aarch64build: clean
Yann Collet8e298382017-08-31 14:30:52 -0700223 CC=aarch64-linux-gnu-gcc CFLAGS="-Werror" $(MAKE) allzstd
Sean Purcell3437bf22017-03-01 16:10:26 -0800224
225ppcbuild: clean
Yann Colletc6f5bf02017-12-01 17:35:19 -0800226 CC=powerpc-linux-gnu-gcc CFLAGS="-m32 -Wno-attributes -Werror" $(MAKE) allzstd
Sean Purcell3437bf22017-03-01 16:10:26 -0800227
228ppc64build: clean
Yann Collet8e298382017-08-31 14:30:52 -0700229 CC=powerpc-linux-gnu-gcc CFLAGS="-m64 -Werror" $(MAKE) allzstd
Sean Purcell3437bf22017-03-01 16:10:26 -0800230
Sean Purcelldaec40d2017-03-07 12:08:15 -0800231armfuzz: clean
Sean Purcell0b0b10e2017-03-20 11:32:24 -0700232 CC=arm-linux-gnueabi-gcc QEMU_SYS=qemu-arm-static MOREFLAGS="-static" FUZZER_FLAGS=--no-big-tests $(MAKE) -C $(TESTDIR) fuzztest
Sean Purcelldaec40d2017-03-07 12:08:15 -0800233
234aarch64fuzz: clean
Yann Collet36922b12018-06-06 18:15:57 -0700235 ld -v
Sean Purcell0b0b10e2017-03-20 11:32:24 -0700236 CC=aarch64-linux-gnu-gcc QEMU_SYS=qemu-aarch64-static MOREFLAGS="-static" FUZZER_FLAGS=--no-big-tests $(MAKE) -C $(TESTDIR) fuzztest
Sean Purcelldaec40d2017-03-07 12:08:15 -0800237
238ppcfuzz: clean
Sean Purcell0b0b10e2017-03-20 11:32:24 -0700239 CC=powerpc-linux-gnu-gcc QEMU_SYS=qemu-ppc-static MOREFLAGS="-static" FUZZER_FLAGS=--no-big-tests $(MAKE) -C $(TESTDIR) fuzztest
Sean Purcelldaec40d2017-03-07 12:08:15 -0800240
241ppc64fuzz: clean
Sean Purcell0b0b10e2017-03-20 11:32:24 -0700242 CC=powerpc-linux-gnu-gcc QEMU_SYS=qemu-ppc64-static MOREFLAGS="-m64 -static" FUZZER_FLAGS=--no-big-tests $(MAKE) -C $(TESTDIR) fuzztest
Sean Purcelldaec40d2017-03-07 12:08:15 -0800243
Yann Collet60ca44b2017-09-27 12:24:13 -0700244.PHONY: cxxtest
245cxxtest: CXXFLAGS += -Wall -Wextra -Wundef -Wshadow -Wcast-align -Werror
246cxxtest: clean
Yann Collet763f8b52017-09-27 12:09:52 -0700247 $(MAKE) -C $(PRGDIR) all CC="$(CXX) -Wno-deprecated" CFLAGS="$(CXXFLAGS)" # adding -Wno-deprecated to avoid clang++ warning on dealing with C files directly
Sean Purcell3437bf22017-03-01 16:10:26 -0800248
inikepc9bb1022016-06-21 18:04:13 +0200249gcc5test: clean
250 gcc-5 -v
251 $(MAKE) all CC=gcc-5 MOREFLAGS="-Werror"
252
253gcc6test: clean
254 gcc-6 -v
255 $(MAKE) all CC=gcc-6 MOREFLAGS="-Werror"
256
Yann Collet7083b8a2015-07-06 23:58:59 -0800257armtest: clean
inikep2d5eb2b2016-08-18 13:53:26 +0200258 $(MAKE) -C $(TESTDIR) datagen # use native, faster
Sean Purcell0b0b10e2017-03-20 11:32:24 -0700259 $(MAKE) -C $(TESTDIR) test CC=arm-linux-gnueabi-gcc QEMU_SYS=qemu-arm-static ZSTDRTTEST= MOREFLAGS="-Werror -static" FUZZER_FLAGS=--no-big-tests
Przemyslaw Skibinskie579ab52016-11-14 12:57:05 +0100260
261aarch64test:
262 $(MAKE) -C $(TESTDIR) datagen # use native, faster
Sean Purcell0b0b10e2017-03-20 11:32:24 -0700263 $(MAKE) -C $(TESTDIR) test CC=aarch64-linux-gnu-gcc QEMU_SYS=qemu-aarch64-static ZSTDRTTEST= MOREFLAGS="-Werror -static" FUZZER_FLAGS=--no-big-tests
Yann Collet521b0102016-02-08 01:27:59 +0100264
Yann Collet521b0102016-02-08 01:27:59 +0100265ppctest: clean
inikep2d5eb2b2016-08-18 13:53:26 +0200266 $(MAKE) -C $(TESTDIR) datagen # use native, faster
Sean Purcell0b0b10e2017-03-20 11:32:24 -0700267 $(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
Yann Collet521b0102016-02-08 01:27:59 +0100268
inikep1981d5a2016-05-30 10:18:56 +0200269ppc64test: clean
inikep2d5eb2b2016-08-18 13:53:26 +0200270 $(MAKE) -C $(TESTDIR) datagen # use native, faster
Sean Purcell0b0b10e2017-03-20 11:32:24 -0700271 $(MAKE) -C $(TESTDIR) test CC=powerpc-linux-gnu-gcc QEMU_SYS=qemu-ppc64-static ZSTDRTTEST= MOREFLAGS="-m64 -static" FUZZER_FLAGS=--no-big-tests
inikep1981d5a2016-05-30 10:18:56 +0200272
Przemyslaw Skibinskid41c0482017-02-22 11:07:28 +0100273arm-ppc-compilation:
274 $(MAKE) -C $(PRGDIR) clean zstd CC=arm-linux-gnueabi-gcc QEMU_SYS=qemu-arm-static ZSTDRTTEST= MOREFLAGS="-Werror -static"
275 $(MAKE) -C $(PRGDIR) clean zstd CC=aarch64-linux-gnu-gcc QEMU_SYS=qemu-aarch64-static ZSTDRTTEST= MOREFLAGS="-Werror -static"
276 $(MAKE) -C $(PRGDIR) clean zstd CC=powerpc-linux-gnu-gcc QEMU_SYS=qemu-ppc-static ZSTDRTTEST= MOREFLAGS="-Werror -Wno-attributes -static"
277 $(MAKE) -C $(PRGDIR) clean zstd CC=powerpc-linux-gnu-gcc QEMU_SYS=qemu-ppc64-static ZSTDRTTEST= MOREFLAGS="-m64 -static"
278
Nick Terrell6bb781e2017-09-25 13:29:50 -0700279regressiontest:
280 $(MAKE) -C $(FUZZDIR) regressiontest
281
282uasanregressiontest:
283 $(MAKE) -C $(FUZZDIR) regressiontest CC=clang CXX=clang++ CFLAGS="-O3 -fsanitize=address,undefined" CXXFLAGS="-O3 -fsanitize=address,undefined"
284
285msanregressiontest:
286 $(MAKE) -C $(FUZZDIR) regressiontest CC=clang CXX=clang++ CFLAGS="-O3 -fsanitize=memory" CXXFLAGS="-O3 -fsanitize=memory"
287
Sean Purcellcaf0ee82017-03-09 17:28:08 -0800288# run UBsan with -fsanitize-recover=signed-integer-overflow
289# due to a bug in UBsan when doing pointer subtraction
290# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63303
291
Yann Collet83fae972015-10-23 15:21:53 +0100292usan: clean
Yann Collet19cb37f2018-01-16 11:40:42 -0800293 $(MAKE) test CC=clang MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize-recover=signed-integer-overflow -fsanitize=undefined -Werror"
Yann Collet213089c2015-06-18 07:43:16 -0800294
Yann Collet83fae972015-10-23 15:21:53 +0100295asan: clean
Yann Collet19cb37f2018-01-16 11:40:42 -0800296 $(MAKE) test CC=clang MOREFLAGS="-g -fsanitize=address -Werror"
Yann Collet83fae972015-10-23 15:21:53 +0100297
Sean Purcellcaf0ee82017-03-09 17:28:08 -0800298asan-%: clean
Yann Collet19cb37f2018-01-16 11:40:42 -0800299 LDFLAGS=-fuse-ld=gold MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize=address -Werror" $(MAKE) -C $(TESTDIR) $*
Sean Purcellcaf0ee82017-03-09 17:28:08 -0800300
Yann Colletd9967432016-05-18 14:16:49 +0200301msan: clean
Yann Collet19cb37f2018-01-16 11:40:42 -0800302 $(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
Yann Colletd9967432016-05-18 14:16:49 +0200303
Sean Purcelldaec40d2017-03-07 12:08:15 -0800304msan-%: clean
Yann Collet19cb37f2018-01-16 11:40:42 -0800305 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 $*
Sean Purcelldaec40d2017-03-07 12:08:15 -0800306
Yann Collet6c3e2e72015-12-11 10:44:07 +0100307asan32: clean
inikep2d5eb2b2016-08-18 13:53:26 +0200308 $(MAKE) -C $(TESTDIR) test32 CC=clang MOREFLAGS="-g -fsanitize=address"
Yann Collet6c3e2e72015-12-11 10:44:07 +0100309
Yann Collet83fae972015-10-23 15:21:53 +0100310uasan: clean
Yann Collet19cb37f2018-01-16 11:40:42 -0800311 $(MAKE) test CC=clang MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize-recover=signed-integer-overflow -fsanitize=address,undefined -Werror"
Yann Collet83fae972015-10-23 15:21:53 +0100312
Przemyslaw Skibinski8a51c692017-02-21 22:48:04 +0100313uasan-%: clean
Yann Collet19cb37f2018-01-16 11:40:42 -0800314 LDFLAGS=-fuse-ld=gold MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize-recover=signed-integer-overflow -fsanitize=address,undefined -Werror" $(MAKE) -C $(TESTDIR) $*
Przemyslaw Skibinski8a51c692017-02-21 22:48:04 +0100315
Sean Purcelldaec40d2017-03-07 12:08:15 -0800316tsan-%: clean
Yann Collet19cb37f2018-01-16 11:40:42 -0800317 LDFLAGS=-fuse-ld=gold MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize=thread -Werror" $(MAKE) -C $(TESTDIR) $* FUZZER_FLAGS=--no-big-tests
Yann Colletbfc2f002017-06-21 17:57:14 -0700318
Przemyslaw Skibinski21911ad2017-02-22 08:54:56 +0100319apt-install:
320 sudo apt-get -yq --no-install-suggests --no-install-recommends --force-yes install $(APT_PACKAGES)
321
322apt-add-repo:
323 sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
324 sudo apt-get update -y -qq
325
326ppcinstall:
327 APT_PACKAGES="qemu-system-ppc qemu-user-static gcc-powerpc-linux-gnu" $(MAKE) apt-install
328
329arminstall:
Sean Purcelldaec40d2017-03-07 12:08:15 -0800330 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
Przemyslaw Skibinski21911ad2017-02-22 08:54:56 +0100331
Yann Collet27526c72017-03-01 17:02:49 -0800332valgrindinstall:
Przemyslaw Skibinski21911ad2017-02-22 08:54:56 +0100333 APT_PACKAGES="valgrind" $(MAKE) apt-install
334
335libc6install:
336 APT_PACKAGES="libc6-dev-i386 gcc-multilib" $(MAKE) apt-install
337
338gcc6install: apt-add-repo
339 APT_PACKAGES="libc6-dev-i386 gcc-multilib gcc-6 gcc-6-multilib" $(MAKE) apt-install
340
Yann Collet19cb37f2018-01-16 11:40:42 -0800341gcc7install: apt-add-repo
342 APT_PACKAGES="libc6-dev-i386 gcc-multilib gcc-7 gcc-7-multilib" $(MAKE) apt-install
343
Yann Collet23ab7872018-08-08 10:26:54 -0700344gcc8install: apt-add-repo
345 APT_PACKAGES="libc6-dev-i386 gcc-multilib gcc-8 gcc-8-multilib" $(MAKE) apt-install
346
Przemyslaw Skibinski21911ad2017-02-22 08:54:56 +0100347gpp6install: apt-add-repo
348 APT_PACKAGES="libc6-dev-i386 g++-multilib gcc-6 g++-6 g++-6-multilib" $(MAKE) apt-install
349
Sean Purcelldaec40d2017-03-07 12:08:15 -0800350clang38install:
351 APT_PACKAGES="clang-3.8" $(MAKE) apt-install
352
W. Felix Handte5705d9f2017-09-21 17:30:43 -0700353# Ubuntu 14.04 ships a too-old lz4
354lz4install:
355 [ -e lz4 ] || git clone https://github.com/lz4/lz4 && sudo $(MAKE) -C lz4 install
356
Yann Collet4856a002015-01-24 01:58:16 +0100357endif
inikep13f42d92016-06-01 14:44:31 +0200358
359
360ifneq (,$(filter MSYS%,$(shell uname)))
361HOST_OS = MSYS
Nick Terrell3ed0f652020-01-13 11:52:33 -0800362CMAKE_PARAMS = -G"MSYS Makefiles" -DCMAKE_BUILD_TYPE=Debug -DZSTD_MULTITHREAD_SUPPORT:BOOL=OFF -DZSTD_BUILD_STATIC:BOOL=ON -DZSTD_BUILD_TESTS:BOOL=ON
inikep13f42d92016-06-01 14:44:31 +0200363endif
364
365
366#------------------------------------------------------------------------
Yann Colletbc32b402017-09-27 17:27:38 -0700367# target specific tests
inikep13f42d92016-06-01 14:44:31 +0200368#------------------------------------------------------------------------
369ifneq (,$(filter $(HOST_OS),MSYS POSIX))
Sean Purcell3437bf22017-03-01 16:10:26 -0800370cmakebuild:
inikep13f42d92016-06-01 14:44:31 +0200371 cmake --version
Yann Collet0704df32016-09-19 16:55:35 +0200372 $(RM) -r $(BUILDIR)/cmake/build
373 mkdir $(BUILDIR)/cmake/build
Nick Terrell3ed0f652020-01-13 11:52:33 -0800374 cd $(BUILDIR)/cmake/build; cmake -DCMAKE_INSTALL_PREFIX:PATH=~/install_test_dir $(CMAKE_PARAMS) ..
375 $(MAKE) -C $(BUILDIR)/cmake/build -j4;
376 $(MAKE) -C $(BUILDIR)/cmake/build install;
377 $(MAKE) -C $(BUILDIR)/cmake/build uninstall;
Taylor Braun-Jones5b054d92020-03-23 16:08:52 -0400378 cd $(BUILDIR)/cmake/build; ctest -V -L Medium
inikep13f42d92016-06-01 14:44:31 +0200379
Ryan Schmidt6ddb7832019-11-07 11:01:13 -0600380c89build: clean
Yann Colletbc32b402017-09-27 17:27:38 -0700381 $(CC) -v
Ryan Schmidt6ddb7832019-11-07 11:01:13 -0600382 CFLAGS="-std=c89 -Werror" $(MAKE) allmost # will fail, due to missing support for `long long`
inikep13f42d92016-06-01 14:44:31 +0200383
Sean Purcell3437bf22017-03-01 16:10:26 -0800384gnu90build: clean
Yann Colletbc32b402017-09-27 17:27:38 -0700385 $(CC) -v
Nick Terrell43146d82018-09-28 14:59:40 -0700386 CFLAGS="-std=gnu90 -Werror" $(MAKE) allmost
inikep13f42d92016-06-01 14:44:31 +0200387
Sean Purcell3437bf22017-03-01 16:10:26 -0800388c99build: clean
Yann Colletbc32b402017-09-27 17:27:38 -0700389 $(CC) -v
Nick Terrell43146d82018-09-28 14:59:40 -0700390 CFLAGS="-std=c99 -Werror" $(MAKE) allmost
inikep13f42d92016-06-01 14:44:31 +0200391
Sean Purcell3437bf22017-03-01 16:10:26 -0800392gnu99build: clean
Yann Colletbc32b402017-09-27 17:27:38 -0700393 $(CC) -v
Nick Terrell43146d82018-09-28 14:59:40 -0700394 CFLAGS="-std=gnu99 -Werror" $(MAKE) allmost
inikep13f42d92016-06-01 14:44:31 +0200395
Sean Purcell3437bf22017-03-01 16:10:26 -0800396c11build: clean
Yann Colletbc32b402017-09-27 17:27:38 -0700397 $(CC) -v
Nick Terrell43146d82018-09-28 14:59:40 -0700398 CFLAGS="-std=c11 -Werror" $(MAKE) allmost
inikep13f42d92016-06-01 14:44:31 +0200399
Sean Purcell3437bf22017-03-01 16:10:26 -0800400bmix64build: clean
Yann Colletbc32b402017-09-27 17:27:38 -0700401 $(CC) -v
inikep2d5eb2b2016-08-18 13:53:26 +0200402 CFLAGS="-O3 -mbmi -Werror" $(MAKE) -C $(TESTDIR) test
inikep13f42d92016-06-01 14:44:31 +0200403
Sean Purcell3437bf22017-03-01 16:10:26 -0800404bmix32build: clean
Yann Colletbc32b402017-09-27 17:27:38 -0700405 $(CC) -v
inikep2d5eb2b2016-08-18 13:53:26 +0200406 CFLAGS="-O3 -mbmi -mx32 -Werror" $(MAKE) -C $(TESTDIR) test
inikep13f42d92016-06-01 14:44:31 +0200407
Sean Purcell3437bf22017-03-01 16:10:26 -0800408bmi32build: clean
Yann Colletbc32b402017-09-27 17:27:38 -0700409 $(CC) -v
inikep2d5eb2b2016-08-18 13:53:26 +0200410 CFLAGS="-O3 -mbmi -m32 -Werror" $(MAKE) -C $(TESTDIR) test
Yann Colletc35cd5b2016-06-30 15:40:28 +0200411
Yann Collet5291d9a2018-08-15 17:41:44 -0700412# static analyzer test uses clang's scan-build
413# does not analyze zlibWrapper, due to detected issues in zlib source code
Yann Collet36d61652018-08-16 15:41:56 -0700414staticAnalyze: SCANBUILD ?= scan-build
Yann Collet42a02ab2018-08-15 14:35:38 -0700415staticAnalyze:
Yann Colletbc32b402017-09-27 17:27:38 -0700416 $(CC) -v
Yann Collet36d61652018-08-16 15:41:56 -0700417 CC=$(CC) CPPFLAGS=-g $(SCANBUILD) --status-bugs -v $(MAKE) allzstd examples contrib
inikep13f42d92016-06-01 14:44:31 +0200418endif