blob: 9b5451d3d748aa299c9319dc55d8b4489df71c3d [file] [log] [blame]
Yann Collet4856a002015-01-24 01:58:16 +01001# ################################################################
Nick Terrell66e811d2021-01-04 17:53:52 -05002# Copyright (c) 2015-2021, 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)
Yann Collet9fc7f382021-12-16 21:01:10 -080032CP ?= cp
Bimba Shresthadf9e5b62020-05-07 22:07:40 -050033
34ifneq (,$(filter Windows%,$(TARGET_SYSTEM)))
Yann Collet01ecad22020-10-21 23:13:46 -070035 EXT =.exe
Przemyslaw Skibinski3a415592016-11-03 12:59:20 +010036else
Yann Collet01ecad22020-10-21 23:13:46 -070037 EXT =
Yann Collet88fcd292015-11-25 14:42:45 +010038endif
39
Casey McGinty986ead62018-08-30 16:54:43 -070040## default: Build lib-release and zstd-release
Yann Colletf3f13212016-11-02 17:02:45 -070041.PHONY: default
Yann Collet8b1d0042017-03-05 21:17:32 -080042default: lib-release zstd-release
Yann Collet213089c2015-06-18 07:43:16 -080043
Yann Colletf3f13212016-11-02 17:02:45 -070044.PHONY: all
Yann Collet830fd442018-06-06 12:47:16 -070045all: allmost examples manual contrib
Yann Colleta86a09e2016-12-22 11:31:39 +010046
47.PHONY: allmost
Yann Colletda558652018-08-15 16:43:13 -070048allmost: allzstd zlibwrapper
Yann Collet7cedbd12016-12-22 12:43:00 +010049
Yann Collet5291d9a2018-08-15 17:41:44 -070050# skip zwrapper, can't build that on alternate architectures without the proper zlib installed
Yann Collet8e298382017-08-31 14:30:52 -070051.PHONY: allzstd
Yann Collet9648bf02020-12-20 17:10:57 -080052allzstd: lib
Yann Collet105b5832020-05-29 12:40:59 -070053 $(Q)$(MAKE) -C $(PRGDIR) all
54 $(Q)$(MAKE) -C $(TESTDIR) all
Sean Purcell3437bf22017-03-01 16:10:26 -080055
Yann Collet7cedbd12016-12-22 12:43:00 +010056.PHONY: all32
57all32:
58 $(MAKE) -C $(PRGDIR) zstd32
59 $(MAKE) -C $(TESTDIR) all32
Yann Collet4856a002015-01-24 01:58:16 +010060
sen91465e22021-05-07 11:13:30 -040061.PHONY: lib lib-release lib-mt lib-nomt
62lib lib-release lib-mt lib-nomt:
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) $@
Yann Collet01ecad22020-10-21 23:13:46 -070068 $(Q)ln -sf $(PRGDIR)/zstd$(EXT) 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) $@
Yann Collet9fc7f382021-12-16 21:01:10 -080073 $(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
Yann Collet01ecad22020-10-21 23:13:46 -070082test: MOREFLAGS += -g -Werror
Yann Colletcb5eba82018-01-19 11:26:35 -080083test:
Yann Collet01ecad22020-10-21 23:13:46 -070084 DEBUGLEVEL=$(DEBUGLEVEL) 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 Colletecffa772020-12-15 02:06:01 -0800104## 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 Colletecffa772020-12-15 02:06:01 -0800107 $(MAKE) -C examples all
Yann Collet77575772017-02-22 01:10:43 -0800108
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
senhuang42a8693dd2020-12-03 09:25:45 -0500124 $(MAKE) -C contrib/seekable_format/tests test
Yann Colleta5a77962018-08-29 16:17:22 -0700125 $(MAKE) -C contrib/largeNbDicts all
W. Felix Handte4ba49af2021-05-05 18:03:48 -0400126 cd build/single_file_libs/ ; ./build_decoder_test.sh
127 cd build/single_file_libs/ ; ./build_library_test.sh
Yann Collet97816402018-03-15 16:39:59 -0700128
Yann Collet6851db42017-03-30 12:42:44 -0700129.PHONY: cleanTabs
130cleanTabs:
131 cd contrib; ./cleanTabs
132
Yann Colletf3f13212016-11-02 17:02:45 -0700133.PHONY: clean
Yann Collet4856a002015-01-24 01:58:16 +0100134clean:
Yann Collet6ac64722020-05-29 12:09:51 -0700135 $(Q)$(MAKE) -C $(ZSTDDIR) $@ > $(VOID)
136 $(Q)$(MAKE) -C $(PRGDIR) $@ > $(VOID)
137 $(Q)$(MAKE) -C $(TESTDIR) $@ > $(VOID)
138 $(Q)$(MAKE) -C $(ZWRAPDIR) $@ > $(VOID)
139 $(Q)$(MAKE) -C examples/ $@ > $(VOID)
140 $(Q)$(MAKE) -C contrib/gen_html $@ > $(VOID)
141 $(Q)$(MAKE) -C contrib/pzstd $@ > $(VOID)
142 $(Q)$(MAKE) -C contrib/seekable_format/examples $@ > $(VOID)
senhuang42a8693dd2020-12-03 09:25:45 -0500143 $(Q)$(MAKE) -C contrib/seekable_format/tests $@ > $(VOID)
Yann Collet6ac64722020-05-29 12:09:51 -0700144 $(Q)$(MAKE) -C contrib/largeNbDicts $@ > $(VOID)
145 $(Q)$(RM) zstd$(EXT) zstdmt$(EXT) tmp*
146 $(Q)$(RM) -r lz4
Yann Collet4856a002015-01-24 01:58:16 +0100147 @echo Cleaning completed
148
Yann Collete405c7a2016-10-12 15:29:22 -0700149#------------------------------------------------------------------------------
Ryan Schmidtb567ce92018-06-09 14:31:17 -0500150# make install is validated only for Linux, macOS, Hurd and some BSD targets
Yann Collete405c7a2016-10-12 15:29:22 -0700151#------------------------------------------------------------------------------
Clément Chigot399849e2021-08-03 12:39:44 +0200152ifneq (,$(filter $(shell uname),Linux Darwin GNU/kFreeBSD GNU OpenBSD FreeBSD DragonFly NetBSD MSYS_NT Haiku AIX))
Yann Colletb402f1e2017-04-18 14:34:24 -0700153
inikep13f42d92016-06-01 14:44:31 +0200154HOST_OS = POSIX
Yann Colletf3f13212016-11-02 17:02:45 -0700155
Yann Collet9fc7f382021-12-16 21:01:10 -0800156MKDIR ?= mkdir -p
157
Yann Collet7ef7dc52018-12-03 15:46:55 -0800158HAVE_COLORNEVER = $(shell echo a | egrep --color=never a > /dev/null 2> /dev/null && echo 1 || echo 0)
159EGREP_OPTIONS ?=
160ifeq ($HAVE_COLORNEVER, 1)
161EGREP_OPTIONS += --color=never
162endif
163EGREP = egrep $(EGREP_OPTIONS)
Yann Collet08f68d82018-09-25 16:56:53 -0700164
Casey McGinty986ead62018-08-30 16:54:43 -0700165# Print a two column output of targets and their description. To add a target description, put a
166# comment in the Makefile with the format "## <TARGET>: <DESCRIPTION>". For example:
167#
168## list: Print all targets and their descriptions (if provided)
Yann Colletb402f1e2017-04-18 14:34:24 -0700169.PHONY: list
170list:
Yann Collet6ac64722020-05-29 12:09:51 -0700171 $(Q)TARGETS=$$($(MAKE) -pRrq -f $(lastword $(MAKEFILE_LIST)) : 2>/dev/null \
Casey McGinty986ead62018-08-30 16:54:43 -0700172 | awk -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' \
Yann Collet08f68d82018-09-25 16:56:53 -0700173 | $(EGREP) -v -e '^[^[:alnum:]]' | sort); \
Casey McGinty986ead62018-08-30 16:54:43 -0700174 { \
175 printf "Target Name\tDescription\n"; \
176 printf "%0.s-" {1..16}; printf "\t"; printf "%0.s-" {1..40}; printf "\n"; \
177 for target in $$TARGETS; do \
Yann Collet08f68d82018-09-25 16:56:53 -0700178 line=$$($(EGREP) "^##[[:space:]]+$$target:" $(lastword $(MAKEFILE_LIST))); \
Casey McGinty986ead62018-08-30 16:54:43 -0700179 description=$$(echo $$line | awk '{i=index($$0,":"); print substr($$0,i+1)}' | xargs); \
180 printf "$$target\t$$description\n"; \
181 done \
182 } | column -t -s $$'\t'
Yann Colletb402f1e2017-04-18 14:34:24 -0700183
sen13449d72021-05-07 14:03:19 -0400184.PHONY: install armtest usan asan uasan msan asan32
Yann Collet4856a002015-01-24 01:58:16 +0100185install:
Yann Collet6ac64722020-05-29 12:09:51 -0700186 $(Q)$(MAKE) -C $(ZSTDDIR) $@
187 $(Q)$(MAKE) -C $(PRGDIR) $@
Yann Collet4856a002015-01-24 01:58:16 +0100188
Yann Colletafb0aca2017-06-29 18:19:09 -0700189.PHONY: uninstall
Yann Collet4856a002015-01-24 01:58:16 +0100190uninstall:
Yann Collet6ac64722020-05-29 12:09:51 -0700191 $(Q)$(MAKE) -C $(ZSTDDIR) $@
192 $(Q)$(MAKE) -C $(PRGDIR) $@
Yann Collet4856a002015-01-24 01:58:16 +0100193
Yann Colletafb0aca2017-06-29 18:19:09 -0700194.PHONY: travis-install
Yann Collet4856a002015-01-24 01:58:16 +0100195travis-install:
Yann Colletc620b482015-12-01 01:56:02 +0100196 $(MAKE) install PREFIX=~/install_test_dir
Yann Collet4856a002015-01-24 01:58:16 +0100197
sen13449d72021-05-07 14:03:19 -0400198.PHONY: gcc5build gcc6build gcc7build clangbuild m32build armbuild aarch64build ppcbuild ppc64build
Sean Purcell3437bf22017-03-01 16:10:26 -0800199gcc5build: clean
200 gcc-5 -v
201 CC=gcc-5 $(MAKE) all MOREFLAGS="-Werror"
202
203gcc6build: clean
204 gcc-6 -v
205 CC=gcc-6 $(MAKE) all MOREFLAGS="-Werror"
206
Nick Terrell9ba97182017-08-08 12:32:26 -0700207gcc7build: clean
208 gcc-7 -v
209 CC=gcc-7 $(MAKE) all MOREFLAGS="-Werror"
210
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
Nick Terrell8bf699a2021-09-17 11:42:08 -0700223 CC=aarch64-linux-gnu-gcc CFLAGS="-Werror -O0" $(MAKE) allzstd
Sean Purcell3437bf22017-03-01 16:10:26 -0800224
225ppcbuild: clean
Yann Collet58519632020-12-20 21:44:40 -0800226 CC=powerpc-linux-gnu-gcc CFLAGS="-m32 -Wno-attributes -Werror" $(MAKE) -j allzstd
Sean Purcell3437bf22017-03-01 16:10:26 -0800227
228ppc64build: clean
Yann Colletf2ac2b72020-12-21 15:43:14 -0800229 CC=powerpc-linux-gnu-gcc CFLAGS="-m64 -Werror" $(MAKE) -j allzstd
Sean Purcell3437bf22017-03-01 16:10:26 -0800230
sen13449d72021-05-07 14:03:19 -0400231.PHONY: armfuzz aarch64fuzz ppcfuzz ppc64fuzz
Sean Purcelldaec40d2017-03-07 12:08:15 -0800232armfuzz: clean
Sean Purcell0b0b10e2017-03-20 11:32:24 -0700233 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 -0800234
235aarch64fuzz: clean
Yann Collet36922b12018-06-06 18:15:57 -0700236 ld -v
Sean Purcell0b0b10e2017-03-20 11:32:24 -0700237 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 -0800238
239ppcfuzz: clean
Sean Purcell0b0b10e2017-03-20 11:32:24 -0700240 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 -0800241
242ppc64fuzz: clean
Sean Purcell0b0b10e2017-03-20 11:32:24 -0700243 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 -0800244
sen13449d72021-05-07 14:03:19 -0400245.PHONY: cxxtest gcc5test gcc6test armtest aarch64test ppctest ppc64test
Yann Collet60ca44b2017-09-27 12:24:13 -0700246cxxtest: CXXFLAGS += -Wall -Wextra -Wundef -Wshadow -Wcast-align -Werror
247cxxtest: clean
Yann Collet763f8b52017-09-27 12:09:52 -0700248 $(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 -0800249
inikepc9bb1022016-06-21 18:04:13 +0200250gcc5test: clean
251 gcc-5 -v
252 $(MAKE) all CC=gcc-5 MOREFLAGS="-Werror"
253
254gcc6test: clean
255 gcc-6 -v
256 $(MAKE) all CC=gcc-6 MOREFLAGS="-Werror"
257
Yann Collet7083b8a2015-07-06 23:58:59 -0800258armtest: clean
inikep2d5eb2b2016-08-18 13:53:26 +0200259 $(MAKE) -C $(TESTDIR) datagen # use native, faster
Sean Purcell0b0b10e2017-03-20 11:32:24 -0700260 $(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 +0100261
262aarch64test:
263 $(MAKE) -C $(TESTDIR) datagen # use native, faster
Sean Purcell0b0b10e2017-03-20 11:32:24 -0700264 $(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 +0100265
Yann Collet521b0102016-02-08 01:27:59 +0100266ppctest: clean
inikep2d5eb2b2016-08-18 13:53:26 +0200267 $(MAKE) -C $(TESTDIR) datagen # use native, faster
Sean Purcell0b0b10e2017-03-20 11:32:24 -0700268 $(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 +0100269
inikep1981d5a2016-05-30 10:18:56 +0200270ppc64test: clean
inikep2d5eb2b2016-08-18 13:53:26 +0200271 $(MAKE) -C $(TESTDIR) datagen # use native, faster
Sean Purcell0b0b10e2017-03-20 11:32:24 -0700272 $(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 +0200273
sen13449d72021-05-07 14:03:19 -0400274.PHONY: arm-ppc-compilation
Przemyslaw Skibinskid41c0482017-02-22 11:07:28 +0100275arm-ppc-compilation:
276 $(MAKE) -C $(PRGDIR) clean zstd CC=arm-linux-gnueabi-gcc QEMU_SYS=qemu-arm-static ZSTDRTTEST= MOREFLAGS="-Werror -static"
277 $(MAKE) -C $(PRGDIR) clean zstd CC=aarch64-linux-gnu-gcc QEMU_SYS=qemu-aarch64-static ZSTDRTTEST= MOREFLAGS="-Werror -static"
278 $(MAKE) -C $(PRGDIR) clean zstd CC=powerpc-linux-gnu-gcc QEMU_SYS=qemu-ppc-static ZSTDRTTEST= MOREFLAGS="-Werror -Wno-attributes -static"
279 $(MAKE) -C $(PRGDIR) clean zstd CC=powerpc-linux-gnu-gcc QEMU_SYS=qemu-ppc64-static ZSTDRTTEST= MOREFLAGS="-m64 -static"
280
Nick Terrell6bb781e2017-09-25 13:29:50 -0700281regressiontest:
282 $(MAKE) -C $(FUZZDIR) regressiontest
283
284uasanregressiontest:
285 $(MAKE) -C $(FUZZDIR) regressiontest CC=clang CXX=clang++ CFLAGS="-O3 -fsanitize=address,undefined" CXXFLAGS="-O3 -fsanitize=address,undefined"
286
287msanregressiontest:
288 $(MAKE) -C $(FUZZDIR) regressiontest CC=clang CXX=clang++ CFLAGS="-O3 -fsanitize=memory" CXXFLAGS="-O3 -fsanitize=memory"
289
Yann Collet9fc7f382021-12-16 21:01:10 -0800290update_regressionResults : REGRESS_RESULTS_DIR := /tmp/regress_results_dir/
291update_regressionResults:
292 $(MAKE) -C programs zstd
293 $(MAKE) -C tests/regression test
294 $(RM) -rf $(REGRESS_RESULTS_DIR)
295 $(MKDIR) $(REGRESS_RESULTS_DIR)
296 ./tests/regression/test \
297 --cache tests/regression/cache \
298 --output $(REGRESS_RESULTS_DIR)/results.csv \
299 --zstd programs/zstd
300 echo "Showing results differences"
Yann Collet80a28f22021-12-20 07:54:57 -0800301 ! diff tests/regression/results.csv $(REGRESS_RESULTS_DIR)/results.csv
Yann Collet9fc7f382021-12-16 21:01:10 -0800302 echo "Updating results.csv"
303 $(CP) $(REGRESS_RESULTS_DIR)/results.csv tests/regression/results.csv
304
305
Yann Colletf2c03122021-02-19 16:30:06 -0800306# run UBsan with -fsanitize-recover=pointer-overflow
307# this only works with recent compilers such as gcc 8+
Yann Collet83fae972015-10-23 15:21:53 +0100308usan: clean
Yann Colletf2c03122021-02-19 16:30:06 -0800309 $(MAKE) test CC=clang MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize-recover=pointer-overflow -fsanitize=undefined -Werror"
Yann Collet213089c2015-06-18 07:43:16 -0800310
Yann Collet83fae972015-10-23 15:21:53 +0100311asan: clean
Yann Collet19cb37f2018-01-16 11:40:42 -0800312 $(MAKE) test CC=clang MOREFLAGS="-g -fsanitize=address -Werror"
Yann Collet83fae972015-10-23 15:21:53 +0100313
Sean Purcellcaf0ee82017-03-09 17:28:08 -0800314asan-%: clean
Yann Collet19cb37f2018-01-16 11:40:42 -0800315 LDFLAGS=-fuse-ld=gold MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize=address -Werror" $(MAKE) -C $(TESTDIR) $*
Sean Purcellcaf0ee82017-03-09 17:28:08 -0800316
Yann Colletd9967432016-05-18 14:16:49 +0200317msan: clean
Yann Collet19cb37f2018-01-16 11:40:42 -0800318 $(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 +0200319
Sean Purcelldaec40d2017-03-07 12:08:15 -0800320msan-%: clean
Yann Collet19cb37f2018-01-16 11:40:42 -0800321 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 -0800322
Yann Collet6c3e2e72015-12-11 10:44:07 +0100323asan32: clean
inikep2d5eb2b2016-08-18 13:53:26 +0200324 $(MAKE) -C $(TESTDIR) test32 CC=clang MOREFLAGS="-g -fsanitize=address"
Yann Collet6c3e2e72015-12-11 10:44:07 +0100325
Yann Collet83fae972015-10-23 15:21:53 +0100326uasan: clean
Yann Colletf2c03122021-02-19 16:30:06 -0800327 $(MAKE) test CC=clang MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize-recover=pointer-overflow -fsanitize=address,undefined -Werror"
Yann Collet83fae972015-10-23 15:21:53 +0100328
Przemyslaw Skibinski8a51c692017-02-21 22:48:04 +0100329uasan-%: clean
Yann Colletf2c03122021-02-19 16:30:06 -0800330 LDFLAGS=-fuse-ld=gold MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize-recover=pointer-overflow -fsanitize=address,undefined -Werror" $(MAKE) -C $(TESTDIR) $*
Przemyslaw Skibinski8a51c692017-02-21 22:48:04 +0100331
Sean Purcelldaec40d2017-03-07 12:08:15 -0800332tsan-%: clean
Yann Collet19cb37f2018-01-16 11:40:42 -0800333 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 -0700334
sen13449d72021-05-07 14:03:19 -0400335.PHONY: apt-install
Przemyslaw Skibinski21911ad2017-02-22 08:54:56 +0100336apt-install:
337 sudo apt-get -yq --no-install-suggests --no-install-recommends --force-yes install $(APT_PACKAGES)
338
sen13449d72021-05-07 14:03:19 -0400339.PHONY: apt-add-repo
Przemyslaw Skibinski21911ad2017-02-22 08:54:56 +0100340apt-add-repo:
341 sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
342 sudo apt-get update -y -qq
343
sen13449d72021-05-07 14:03:19 -0400344.PHONY: ppcinstall arminstall valgrindinstall libc6install gcc6install gcc7install gcc8install gpp6install clang38install lz4install
Przemyslaw Skibinski21911ad2017-02-22 08:54:56 +0100345ppcinstall:
346 APT_PACKAGES="qemu-system-ppc qemu-user-static gcc-powerpc-linux-gnu" $(MAKE) apt-install
347
348arminstall:
Sean Purcelldaec40d2017-03-07 12:08:15 -0800349 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 +0100350
Yann Collet27526c72017-03-01 17:02:49 -0800351valgrindinstall:
Przemyslaw Skibinski21911ad2017-02-22 08:54:56 +0100352 APT_PACKAGES="valgrind" $(MAKE) apt-install
353
354libc6install:
355 APT_PACKAGES="libc6-dev-i386 gcc-multilib" $(MAKE) apt-install
356
357gcc6install: apt-add-repo
358 APT_PACKAGES="libc6-dev-i386 gcc-multilib gcc-6 gcc-6-multilib" $(MAKE) apt-install
359
Yann Collet19cb37f2018-01-16 11:40:42 -0800360gcc7install: apt-add-repo
361 APT_PACKAGES="libc6-dev-i386 gcc-multilib gcc-7 gcc-7-multilib" $(MAKE) apt-install
362
Yann Collet23ab7872018-08-08 10:26:54 -0700363gcc8install: apt-add-repo
364 APT_PACKAGES="libc6-dev-i386 gcc-multilib gcc-8 gcc-8-multilib" $(MAKE) apt-install
365
Przemyslaw Skibinski21911ad2017-02-22 08:54:56 +0100366gpp6install: apt-add-repo
367 APT_PACKAGES="libc6-dev-i386 g++-multilib gcc-6 g++-6 g++-6-multilib" $(MAKE) apt-install
368
Sean Purcelldaec40d2017-03-07 12:08:15 -0800369clang38install:
370 APT_PACKAGES="clang-3.8" $(MAKE) apt-install
371
W. Felix Handte5705d9f2017-09-21 17:30:43 -0700372# Ubuntu 14.04 ships a too-old lz4
373lz4install:
374 [ -e lz4 ] || git clone https://github.com/lz4/lz4 && sudo $(MAKE) -C lz4 install
375
Yann Collet4856a002015-01-24 01:58:16 +0100376endif
inikep13f42d92016-06-01 14:44:31 +0200377
378
sen91465e22021-05-07 11:13:30 -0400379CMAKE_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
380
inikep13f42d92016-06-01 14:44:31 +0200381ifneq (,$(filter MSYS%,$(shell uname)))
382HOST_OS = MSYS
Nick Terrell3ed0f652020-01-13 11:52:33 -0800383CMAKE_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 +0200384endif
385
inikep13f42d92016-06-01 14:44:31 +0200386#------------------------------------------------------------------------
Yann Colletbc32b402017-09-27 17:27:38 -0700387# target specific tests
inikep13f42d92016-06-01 14:44:31 +0200388#------------------------------------------------------------------------
389ifneq (,$(filter $(HOST_OS),MSYS POSIX))
sen13449d72021-05-07 14:03:19 -0400390.PHONY: cmakebuild c89build gnu90build c99build gnu99build c11build bmix64build bmix32build bmi32build staticAnalyze
Sean Purcell3437bf22017-03-01 16:10:26 -0800391cmakebuild:
inikep13f42d92016-06-01 14:44:31 +0200392 cmake --version
Yann Collet0704df32016-09-19 16:55:35 +0200393 $(RM) -r $(BUILDIR)/cmake/build
Yann Collet9fc7f382021-12-16 21:01:10 -0800394 $(MKDIR) $(BUILDIR)/cmake/build
Nick Terrell3ed0f652020-01-13 11:52:33 -0800395 cd $(BUILDIR)/cmake/build; cmake -DCMAKE_INSTALL_PREFIX:PATH=~/install_test_dir $(CMAKE_PARAMS) ..
396 $(MAKE) -C $(BUILDIR)/cmake/build -j4;
397 $(MAKE) -C $(BUILDIR)/cmake/build install;
398 $(MAKE) -C $(BUILDIR)/cmake/build uninstall;
Taylor Braun-Jones5b054d92020-03-23 16:08:52 -0400399 cd $(BUILDIR)/cmake/build; ctest -V -L Medium
inikep13f42d92016-06-01 14:44:31 +0200400
Ryan Schmidt6ddb7832019-11-07 11:01:13 -0600401c89build: clean
Yann Colletbc32b402017-09-27 17:27:38 -0700402 $(CC) -v
Nick Terrell8bf699a2021-09-17 11:42:08 -0700403 CFLAGS="-std=c89 -Werror -O0" $(MAKE) allmost # will fail, due to missing support for `long long`
inikep13f42d92016-06-01 14:44:31 +0200404
Sean Purcell3437bf22017-03-01 16:10:26 -0800405gnu90build: clean
Yann Colletbc32b402017-09-27 17:27:38 -0700406 $(CC) -v
Nick Terrell8bf699a2021-09-17 11:42:08 -0700407 CFLAGS="-std=gnu90 -Werror -O0" $(MAKE) allmost
inikep13f42d92016-06-01 14:44:31 +0200408
Sean Purcell3437bf22017-03-01 16:10:26 -0800409c99build: clean
Yann Colletbc32b402017-09-27 17:27:38 -0700410 $(CC) -v
Nick Terrell8bf699a2021-09-17 11:42:08 -0700411 CFLAGS="-std=c99 -Werror -O0" $(MAKE) allmost
inikep13f42d92016-06-01 14:44:31 +0200412
Sean Purcell3437bf22017-03-01 16:10:26 -0800413gnu99build: clean
Yann Colletbc32b402017-09-27 17:27:38 -0700414 $(CC) -v
Nick Terrell8bf699a2021-09-17 11:42:08 -0700415 CFLAGS="-std=gnu99 -Werror -O0" $(MAKE) allmost
inikep13f42d92016-06-01 14:44:31 +0200416
Sean Purcell3437bf22017-03-01 16:10:26 -0800417c11build: clean
Yann Colletbc32b402017-09-27 17:27:38 -0700418 $(CC) -v
Nick Terrell8bf699a2021-09-17 11:42:08 -0700419 CFLAGS="-std=c11 -Werror -O0" $(MAKE) allmost
inikep13f42d92016-06-01 14:44:31 +0200420
Sean Purcell3437bf22017-03-01 16:10:26 -0800421bmix64build: clean
Yann Colletbc32b402017-09-27 17:27:38 -0700422 $(CC) -v
inikep2d5eb2b2016-08-18 13:53:26 +0200423 CFLAGS="-O3 -mbmi -Werror" $(MAKE) -C $(TESTDIR) test
inikep13f42d92016-06-01 14:44:31 +0200424
Sean Purcell3437bf22017-03-01 16:10:26 -0800425bmix32build: clean
Yann Colletbc32b402017-09-27 17:27:38 -0700426 $(CC) -v
inikep2d5eb2b2016-08-18 13:53:26 +0200427 CFLAGS="-O3 -mbmi -mx32 -Werror" $(MAKE) -C $(TESTDIR) test
inikep13f42d92016-06-01 14:44:31 +0200428
Sean Purcell3437bf22017-03-01 16:10:26 -0800429bmi32build: clean
Yann Colletbc32b402017-09-27 17:27:38 -0700430 $(CC) -v
inikep2d5eb2b2016-08-18 13:53:26 +0200431 CFLAGS="-O3 -mbmi -m32 -Werror" $(MAKE) -C $(TESTDIR) test
Yann Colletc35cd5b2016-06-30 15:40:28 +0200432
Yann Collet5291d9a2018-08-15 17:41:44 -0700433# static analyzer test uses clang's scan-build
434# does not analyze zlibWrapper, due to detected issues in zlib source code
Yann Collet36d61652018-08-16 15:41:56 -0700435staticAnalyze: SCANBUILD ?= scan-build
Yann Collet42a02ab2018-08-15 14:35:38 -0700436staticAnalyze:
Yann Colletbc32b402017-09-27 17:27:38 -0700437 $(CC) -v
Yann Collet72bd2a82021-08-29 15:26:31 -0700438 CC=$(CC) CPPFLAGS=-g $(SCANBUILD) --status-bugs -v $(MAKE) zstd
inikep13f42d92016-06-01 14:44:31 +0200439endif