blob: 0ad44a679468a7f257028ac41b037e9e9ff1cb01 [file] [log] [blame]
Yann Collet4856a002015-01-24 01:58:16 +01001# ################################################################
Yann Collete9dc2042017-08-31 11:24:54 -07002# Copyright (c) 2015-present, 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).
Yann Collet4856a002015-01-24 01:58:16 +01008# ################################################################
9
Yann Collet4c9a4c12016-09-19 14:58:14 +020010PRGDIR = programs
11ZSTDDIR = lib
12BUILDIR = build
inikepe9dfdf62016-05-27 11:56:15 +020013ZWRAPDIR = zlibWrapper
inikepa1c81152016-08-18 13:35:36 +020014TESTDIR = tests
Nick Terrell6bb781e2017-09-25 13:29:50 -070015FUZZDIR = $(TESTDIR)/fuzz
Yann Collet4856a002015-01-24 01:58:16 +010016
Yann Collet88fcd292015-11-25 14:42:45 +010017# Define nul output
Yann Collet88fcd292015-11-25 14:42:45 +010018VOID = /dev/null
Przemyslaw Skibinski3a415592016-11-03 12:59:20 +010019
20ifneq (,$(filter Windows%,$(OS)))
21EXT =.exe
22else
23EXT =
Yann Collet88fcd292015-11-25 14:42:45 +010024endif
25
Casey McGinty986ead62018-08-30 16:54:43 -070026## default: Build lib-release and zstd-release
Yann Colletf3f13212016-11-02 17:02:45 -070027.PHONY: default
Yann Collet8b1d0042017-03-05 21:17:32 -080028default: lib-release zstd-release
Yann Collet213089c2015-06-18 07:43:16 -080029
Yann Colletf3f13212016-11-02 17:02:45 -070030.PHONY: all
Yann Collet830fd442018-06-06 12:47:16 -070031all: allmost examples manual contrib
Yann Colleta86a09e2016-12-22 11:31:39 +010032
33.PHONY: allmost
Yann Colletda558652018-08-15 16:43:13 -070034allmost: allzstd zlibwrapper
Yann Collet7cedbd12016-12-22 12:43:00 +010035
Yann Collet5291d9a2018-08-15 17:41:44 -070036# skip zwrapper, can't build that on alternate architectures without the proper zlib installed
Yann Collet8e298382017-08-31 14:30:52 -070037.PHONY: allzstd
Yann Collet830fd442018-06-06 12:47:16 -070038allzstd: lib
Sean Purcell3437bf22017-03-01 16:10:26 -080039 $(MAKE) -C $(PRGDIR) all
40 $(MAKE) -C $(TESTDIR) all
41
Yann Collet7cedbd12016-12-22 12:43:00 +010042.PHONY: all32
43all32:
44 $(MAKE) -C $(PRGDIR) zstd32
45 $(MAKE) -C $(TESTDIR) all32
Yann Collet4856a002015-01-24 01:58:16 +010046
Yann Colletda558652018-08-15 16:43:13 -070047.PHONY: lib lib-release libzstd.a
Yann Collet5291d9a2018-08-15 17:41:44 -070048lib lib-release :
Yann Collet8b1d0042017-03-05 21:17:32 -080049 @$(MAKE) -C $(ZSTDDIR) $@
50
Yann Collet830fd442018-06-06 12:47:16 -070051.PHONY: zstd zstd-release
52zstd zstd-release:
Yann Colletd41380e2016-11-07 14:55:12 -080053 @$(MAKE) -C $(PRGDIR) $@
Przemyslaw Skibinski3a415592016-11-03 12:59:20 +010054 cp $(PRGDIR)/zstd$(EXT) .
Yann Collet4856a002015-01-24 01:58:16 +010055
Yann Collet563ef8a2017-01-18 12:12:10 -080056.PHONY: zstdmt
57zstdmt:
58 @$(MAKE) -C $(PRGDIR) $@
59 cp $(PRGDIR)/zstd$(EXT) ./zstdmt$(EXT)
60
Yann Colletf3f13212016-11-02 17:02:45 -070061.PHONY: zlibwrapper
Yann Collet5291d9a2018-08-15 17:41:44 -070062zlibwrapper: lib
Yann Colletda558652018-08-15 16:43:13 -070063 $(MAKE) -C $(ZWRAPDIR) all
inikepe9dfdf62016-05-27 11:56:15 +020064
Yann Colletcb5eba82018-01-19 11:26:35 -080065.PHONY: test
cyan49730840d022018-07-17 19:19:48 +020066test: MOREFLAGS += -g -DDEBUGLEVEL=1 -Werror
Yann Colletcb5eba82018-01-19 11:26:35 -080067test:
Yann Collet5203f012018-08-03 07:54:29 -070068 MOREFLAGS="$(MOREFLAGS)" $(MAKE) -j -C $(PRGDIR) allVariants
inikepa1c81152016-08-18 13:35:36 +020069 $(MAKE) -C $(TESTDIR) $@
Yann Collet6f9c0562016-05-01 10:26:30 +020070
Yann Colletcb5eba82018-01-19 11:26:35 -080071.PHONY: shortest
72shortest:
73 $(MAKE) -C $(TESTDIR) $@
74
75.PHONY: check
76check: shortest
77
Yann Collet77575772017-02-22 01:10:43 -080078.PHONY: examples
Yann Collet830fd442018-06-06 12:47:16 -070079examples: lib
Yann Collet77575772017-02-22 01:10:43 -080080 CPPFLAGS=-I../lib LDFLAGS=-L../lib $(MAKE) -C examples/ all
81
82.PHONY: manual
83manual:
84 $(MAKE) -C contrib/gen_html $@
85
Yann Collet97816402018-03-15 16:39:59 -070086.PHONY: contrib
87contrib: lib
88 $(MAKE) -C contrib/pzstd all
89 $(MAKE) -C contrib/seekable_format/examples all
Yann Collet5373e442018-03-15 17:10:15 -070090 $(MAKE) -C contrib/adaptive-compression all
Yann Colleta5a77962018-08-29 16:17:22 -070091 $(MAKE) -C contrib/largeNbDicts all
Yann Collet97816402018-03-15 16:39:59 -070092
Yann Collet6851db42017-03-30 12:42:44 -070093.PHONY: cleanTabs
94cleanTabs:
95 cd contrib; ./cleanTabs
96
Yann Colletf3f13212016-11-02 17:02:45 -070097.PHONY: clean
Yann Collet4856a002015-01-24 01:58:16 +010098clean:
Yann Collet88fcd292015-11-25 14:42:45 +010099 @$(MAKE) -C $(ZSTDDIR) $@ > $(VOID)
100 @$(MAKE) -C $(PRGDIR) $@ > $(VOID)
inikepa1c81152016-08-18 13:35:36 +0200101 @$(MAKE) -C $(TESTDIR) $@ > $(VOID)
inikepe9dfdf62016-05-27 11:56:15 +0200102 @$(MAKE) -C $(ZWRAPDIR) $@ > $(VOID)
Yann Collet1f57c2e2016-12-21 16:20:11 +0100103 @$(MAKE) -C examples/ $@ > $(VOID)
Yann Collet88ba6472017-02-22 10:52:36 -0800104 @$(MAKE) -C contrib/gen_html $@ > $(VOID)
Yann Collet97816402018-03-15 16:39:59 -0700105 @$(MAKE) -C contrib/pzstd $@ > $(VOID)
106 @$(MAKE) -C contrib/seekable_format/examples $@ > $(VOID)
Yann Collet5373e442018-03-15 17:10:15 -0700107 @$(MAKE) -C contrib/adaptive-compression $@ > $(VOID)
Yann Collet39ef91a2018-08-30 14:59:10 -0700108 @$(MAKE) -C contrib/largeNbDicts $@ > $(VOID)
Yann Collet900f39e2017-01-20 16:36:29 -0800109 @$(RM) zstd$(EXT) zstdmt$(EXT) tmp*
W. Felix Handte5705d9f2017-09-21 17:30:43 -0700110 @$(RM) -r lz4
Yann Collet4856a002015-01-24 01:58:16 +0100111 @echo Cleaning completed
112
Yann Collete405c7a2016-10-12 15:29:22 -0700113#------------------------------------------------------------------------------
Ryan Schmidtb567ce92018-06-09 14:31:17 -0500114# make install is validated only for Linux, macOS, Hurd and some BSD targets
Yann Collete405c7a2016-10-12 15:29:22 -0700115#------------------------------------------------------------------------------
Jerome Duval87c10e22017-08-06 22:27:54 +0200116ifneq (,$(filter $(shell uname),Linux Darwin GNU/kFreeBSD GNU OpenBSD FreeBSD DragonFly NetBSD MSYS_NT Haiku))
Yann Colletb402f1e2017-04-18 14:34:24 -0700117
inikep13f42d92016-06-01 14:44:31 +0200118HOST_OS = POSIX
Yann Collet42a02ab2018-08-15 14:35:38 -0700119CMAKE_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 -0700120
Casey McGinty986ead62018-08-30 16:54:43 -0700121# Print a two column output of targets and their description. To add a target description, put a
122# comment in the Makefile with the format "## <TARGET>: <DESCRIPTION>". For example:
123#
124## list: Print all targets and their descriptions (if provided)
Yann Colletb402f1e2017-04-18 14:34:24 -0700125.PHONY: list
126list:
Casey McGinty986ead62018-08-30 16:54:43 -0700127 @TARGETS=$$($(MAKE) -pRrq -f $(lastword $(MAKEFILE_LIST)) : 2>/dev/null \
128 | awk -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' \
129 | egrep -v -e '^[^[:alnum:]]' | sort); \
130 { \
131 printf "Target Name\tDescription\n"; \
132 printf "%0.s-" {1..16}; printf "\t"; printf "%0.s-" {1..40}; printf "\n"; \
133 for target in $$TARGETS; do \
134 line=$$(egrep "^##[[:space:]]+$$target:" $(lastword $(MAKEFILE_LIST))); \
135 description=$$(echo $$line | awk '{i=index($$0,":"); print substr($$0,i+1)}' | xargs); \
136 printf "$$target\t$$description\n"; \
137 done \
138 } | column -t -s $$'\t'
Yann Colletb402f1e2017-04-18 14:34:24 -0700139
Yann Collet763f8b52017-09-27 12:09:52 -0700140.PHONY: install clangtest armtest usan asan uasan
Yann Collet4856a002015-01-24 01:58:16 +0100141install:
Yann Collete19111c2016-10-12 11:09:36 -0700142 @$(MAKE) -C $(ZSTDDIR) $@
143 @$(MAKE) -C $(PRGDIR) $@
Yann Collet4856a002015-01-24 01:58:16 +0100144
Yann Colletafb0aca2017-06-29 18:19:09 -0700145.PHONY: uninstall
Yann Collet4856a002015-01-24 01:58:16 +0100146uninstall:
Yann Collete19111c2016-10-12 11:09:36 -0700147 @$(MAKE) -C $(ZSTDDIR) $@
148 @$(MAKE) -C $(PRGDIR) $@
Yann Collet4856a002015-01-24 01:58:16 +0100149
Yann Colletafb0aca2017-06-29 18:19:09 -0700150.PHONY: travis-install
Yann Collet4856a002015-01-24 01:58:16 +0100151travis-install:
Yann Colletc620b482015-12-01 01:56:02 +0100152 $(MAKE) install PREFIX=~/install_test_dir
Yann Collet4856a002015-01-24 01:58:16 +0100153
Yann Colletafb0aca2017-06-29 18:19:09 -0700154.PHONY: gcc5build
Sean Purcell3437bf22017-03-01 16:10:26 -0800155gcc5build: clean
156 gcc-5 -v
157 CC=gcc-5 $(MAKE) all MOREFLAGS="-Werror"
158
Yann Colletafb0aca2017-06-29 18:19:09 -0700159.PHONY: gcc6build
Sean Purcell3437bf22017-03-01 16:10:26 -0800160gcc6build: clean
161 gcc-6 -v
162 CC=gcc-6 $(MAKE) all MOREFLAGS="-Werror"
163
Nick Terrell9ba97182017-08-08 12:32:26 -0700164.PHONY: gcc7build
165gcc7build: clean
166 gcc-7 -v
167 CC=gcc-7 $(MAKE) all MOREFLAGS="-Werror"
168
Yann Colletafb0aca2017-06-29 18:19:09 -0700169.PHONY: clangbuild
Sean Purcell3437bf22017-03-01 16:10:26 -0800170clangbuild: clean
171 clang -v
172 CXX=clang++ CC=clang $(MAKE) all MOREFLAGS="-Werror -Wconversion -Wno-sign-conversion -Wdocumentation"
173
174m32build: clean
175 gcc -v
176 $(MAKE) all32
177
178armbuild: clean
Yann Collet8e298382017-08-31 14:30:52 -0700179 CC=arm-linux-gnueabi-gcc CFLAGS="-Werror" $(MAKE) allzstd
Sean Purcell3437bf22017-03-01 16:10:26 -0800180
181aarch64build: clean
Yann Collet8e298382017-08-31 14:30:52 -0700182 CC=aarch64-linux-gnu-gcc CFLAGS="-Werror" $(MAKE) allzstd
Sean Purcell3437bf22017-03-01 16:10:26 -0800183
184ppcbuild: clean
Yann Colletc6f5bf02017-12-01 17:35:19 -0800185 CC=powerpc-linux-gnu-gcc CFLAGS="-m32 -Wno-attributes -Werror" $(MAKE) allzstd
Sean Purcell3437bf22017-03-01 16:10:26 -0800186
187ppc64build: clean
Yann Collet8e298382017-08-31 14:30:52 -0700188 CC=powerpc-linux-gnu-gcc CFLAGS="-m64 -Werror" $(MAKE) allzstd
Sean Purcell3437bf22017-03-01 16:10:26 -0800189
Sean Purcelldaec40d2017-03-07 12:08:15 -0800190armfuzz: clean
Sean Purcell0b0b10e2017-03-20 11:32:24 -0700191 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 -0800192
193aarch64fuzz: clean
Yann Collet36922b12018-06-06 18:15:57 -0700194 ld -v
Sean Purcell0b0b10e2017-03-20 11:32:24 -0700195 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 -0800196
197ppcfuzz: clean
Sean Purcell0b0b10e2017-03-20 11:32:24 -0700198 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 -0800199
200ppc64fuzz: clean
Sean Purcell0b0b10e2017-03-20 11:32:24 -0700201 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 -0800202
Yann Collet60ca44b2017-09-27 12:24:13 -0700203.PHONY: cxxtest
204cxxtest: CXXFLAGS += -Wall -Wextra -Wundef -Wshadow -Wcast-align -Werror
205cxxtest: clean
Yann Collet763f8b52017-09-27 12:09:52 -0700206 $(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 -0800207
inikepc9bb1022016-06-21 18:04:13 +0200208gcc5test: clean
209 gcc-5 -v
210 $(MAKE) all CC=gcc-5 MOREFLAGS="-Werror"
211
212gcc6test: clean
213 gcc-6 -v
214 $(MAKE) all CC=gcc-6 MOREFLAGS="-Werror"
215
Yann Collet213089c2015-06-18 07:43:16 -0800216clangtest: clean
Yann Colletf4ce8912015-08-11 14:18:45 +0100217 clang -v
ko-zu18b4a1d2018-09-16 10:27:02 +0900218 $(MAKE) all CXX=clang++ CC=clang MOREFLAGS="-Werror -Wconversion -Wno-sign-conversion -Wdocumentation"
Yann Collet213089c2015-06-18 07:43:16 -0800219
Yann Collet7083b8a2015-07-06 23:58:59 -0800220armtest: clean
inikep2d5eb2b2016-08-18 13:53:26 +0200221 $(MAKE) -C $(TESTDIR) datagen # use native, faster
Sean Purcell0b0b10e2017-03-20 11:32:24 -0700222 $(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 +0100223
224aarch64test:
225 $(MAKE) -C $(TESTDIR) datagen # use native, faster
Sean Purcell0b0b10e2017-03-20 11:32:24 -0700226 $(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 +0100227
Yann Collet521b0102016-02-08 01:27:59 +0100228ppctest: clean
inikep2d5eb2b2016-08-18 13:53:26 +0200229 $(MAKE) -C $(TESTDIR) datagen # use native, faster
Sean Purcell0b0b10e2017-03-20 11:32:24 -0700230 $(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 +0100231
inikep1981d5a2016-05-30 10:18:56 +0200232ppc64test: clean
inikep2d5eb2b2016-08-18 13:53:26 +0200233 $(MAKE) -C $(TESTDIR) datagen # use native, faster
Sean Purcell0b0b10e2017-03-20 11:32:24 -0700234 $(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 +0200235
Przemyslaw Skibinskid41c0482017-02-22 11:07:28 +0100236arm-ppc-compilation:
237 $(MAKE) -C $(PRGDIR) clean zstd CC=arm-linux-gnueabi-gcc QEMU_SYS=qemu-arm-static ZSTDRTTEST= MOREFLAGS="-Werror -static"
238 $(MAKE) -C $(PRGDIR) clean zstd CC=aarch64-linux-gnu-gcc QEMU_SYS=qemu-aarch64-static ZSTDRTTEST= MOREFLAGS="-Werror -static"
239 $(MAKE) -C $(PRGDIR) clean zstd CC=powerpc-linux-gnu-gcc QEMU_SYS=qemu-ppc-static ZSTDRTTEST= MOREFLAGS="-Werror -Wno-attributes -static"
240 $(MAKE) -C $(PRGDIR) clean zstd CC=powerpc-linux-gnu-gcc QEMU_SYS=qemu-ppc64-static ZSTDRTTEST= MOREFLAGS="-m64 -static"
241
Nick Terrell6bb781e2017-09-25 13:29:50 -0700242regressiontest:
243 $(MAKE) -C $(FUZZDIR) regressiontest
244
245uasanregressiontest:
246 $(MAKE) -C $(FUZZDIR) regressiontest CC=clang CXX=clang++ CFLAGS="-O3 -fsanitize=address,undefined" CXXFLAGS="-O3 -fsanitize=address,undefined"
247
248msanregressiontest:
249 $(MAKE) -C $(FUZZDIR) regressiontest CC=clang CXX=clang++ CFLAGS="-O3 -fsanitize=memory" CXXFLAGS="-O3 -fsanitize=memory"
250
Sean Purcellcaf0ee82017-03-09 17:28:08 -0800251# run UBsan with -fsanitize-recover=signed-integer-overflow
252# due to a bug in UBsan when doing pointer subtraction
253# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63303
254
Yann Collet83fae972015-10-23 15:21:53 +0100255usan: clean
Yann Collet19cb37f2018-01-16 11:40:42 -0800256 $(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 -0800257
Yann Collet83fae972015-10-23 15:21:53 +0100258asan: clean
Yann Collet19cb37f2018-01-16 11:40:42 -0800259 $(MAKE) test CC=clang MOREFLAGS="-g -fsanitize=address -Werror"
Yann Collet83fae972015-10-23 15:21:53 +0100260
Sean Purcellcaf0ee82017-03-09 17:28:08 -0800261asan-%: clean
Yann Collet19cb37f2018-01-16 11:40:42 -0800262 LDFLAGS=-fuse-ld=gold MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize=address -Werror" $(MAKE) -C $(TESTDIR) $*
Sean Purcellcaf0ee82017-03-09 17:28:08 -0800263
Yann Colletd9967432016-05-18 14:16:49 +0200264msan: clean
Yann Collet19cb37f2018-01-16 11:40:42 -0800265 $(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 +0200266
Sean Purcelldaec40d2017-03-07 12:08:15 -0800267msan-%: clean
Yann Collet19cb37f2018-01-16 11:40:42 -0800268 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 -0800269
Yann Collet6c3e2e72015-12-11 10:44:07 +0100270asan32: clean
inikep2d5eb2b2016-08-18 13:53:26 +0200271 $(MAKE) -C $(TESTDIR) test32 CC=clang MOREFLAGS="-g -fsanitize=address"
Yann Collet6c3e2e72015-12-11 10:44:07 +0100272
Yann Collet83fae972015-10-23 15:21:53 +0100273uasan: clean
Yann Collet19cb37f2018-01-16 11:40:42 -0800274 $(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 +0100275
Przemyslaw Skibinski8a51c692017-02-21 22:48:04 +0100276uasan-%: clean
Yann Collet19cb37f2018-01-16 11:40:42 -0800277 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 +0100278
Sean Purcelldaec40d2017-03-07 12:08:15 -0800279tsan-%: clean
Yann Collet19cb37f2018-01-16 11:40:42 -0800280 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 -0700281
Przemyslaw Skibinski21911ad2017-02-22 08:54:56 +0100282apt-install:
283 sudo apt-get -yq --no-install-suggests --no-install-recommends --force-yes install $(APT_PACKAGES)
284
285apt-add-repo:
286 sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
287 sudo apt-get update -y -qq
288
289ppcinstall:
290 APT_PACKAGES="qemu-system-ppc qemu-user-static gcc-powerpc-linux-gnu" $(MAKE) apt-install
291
292arminstall:
Sean Purcelldaec40d2017-03-07 12:08:15 -0800293 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 +0100294
Yann Collet27526c72017-03-01 17:02:49 -0800295valgrindinstall:
Przemyslaw Skibinski21911ad2017-02-22 08:54:56 +0100296 APT_PACKAGES="valgrind" $(MAKE) apt-install
297
298libc6install:
299 APT_PACKAGES="libc6-dev-i386 gcc-multilib" $(MAKE) apt-install
300
301gcc6install: apt-add-repo
302 APT_PACKAGES="libc6-dev-i386 gcc-multilib gcc-6 gcc-6-multilib" $(MAKE) apt-install
303
Yann Collet19cb37f2018-01-16 11:40:42 -0800304gcc7install: apt-add-repo
305 APT_PACKAGES="libc6-dev-i386 gcc-multilib gcc-7 gcc-7-multilib" $(MAKE) apt-install
306
Yann Collet23ab7872018-08-08 10:26:54 -0700307gcc8install: apt-add-repo
308 APT_PACKAGES="libc6-dev-i386 gcc-multilib gcc-8 gcc-8-multilib" $(MAKE) apt-install
309
Przemyslaw Skibinski21911ad2017-02-22 08:54:56 +0100310gpp6install: apt-add-repo
311 APT_PACKAGES="libc6-dev-i386 g++-multilib gcc-6 g++-6 g++-6-multilib" $(MAKE) apt-install
312
Sean Purcelldaec40d2017-03-07 12:08:15 -0800313clang38install:
314 APT_PACKAGES="clang-3.8" $(MAKE) apt-install
315
W. Felix Handte5705d9f2017-09-21 17:30:43 -0700316# Ubuntu 14.04 ships a too-old lz4
317lz4install:
318 [ -e lz4 ] || git clone https://github.com/lz4/lz4 && sudo $(MAKE) -C lz4 install
319
Yann Collet4856a002015-01-24 01:58:16 +0100320endif
inikep13f42d92016-06-01 14:44:31 +0200321
322
323ifneq (,$(filter MSYS%,$(shell uname)))
324HOST_OS = MSYS
Milan Ševčík0d09c772017-03-20 15:57:08 +0100325CMAKE_PARAMS = -G"MSYS Makefiles" -DZSTD_MULTITHREAD_SUPPORT:BOOL=OFF -DZSTD_BUILD_STATIC:BOOL=ON -DZSTD_BUILD_TESTS:BOOL=ON
inikep13f42d92016-06-01 14:44:31 +0200326endif
327
328
329#------------------------------------------------------------------------
Yann Colletbc32b402017-09-27 17:27:38 -0700330# target specific tests
inikep13f42d92016-06-01 14:44:31 +0200331#------------------------------------------------------------------------
332ifneq (,$(filter $(HOST_OS),MSYS POSIX))
Sean Purcell3437bf22017-03-01 16:10:26 -0800333cmakebuild:
inikep13f42d92016-06-01 14:44:31 +0200334 cmake --version
Yann Collet0704df32016-09-19 16:55:35 +0200335 $(RM) -r $(BUILDIR)/cmake/build
336 mkdir $(BUILDIR)/cmake/build
Milan Ševčíka8c0c2a2017-03-16 22:59:11 +0100337 cd $(BUILDIR)/cmake/build ; cmake -DCMAKE_INSTALL_PREFIX:PATH=~/install_test_dir $(CMAKE_PARAMS) .. ; $(MAKE) install ; $(MAKE) uninstall
inikep13f42d92016-06-01 14:44:31 +0200338
Sean Purcell3437bf22017-03-01 16:10:26 -0800339c90build: clean
Yann Colletbc32b402017-09-27 17:27:38 -0700340 $(CC) -v
Yann Collet88ba6472017-02-22 10:52:36 -0800341 CFLAGS="-std=c90" $(MAKE) allmost # will fail, due to missing support for `long long`
inikep13f42d92016-06-01 14:44:31 +0200342
Sean Purcell3437bf22017-03-01 16:10:26 -0800343gnu90build: clean
Yann Colletbc32b402017-09-27 17:27:38 -0700344 $(CC) -v
Yann Collet88ba6472017-02-22 10:52:36 -0800345 CFLAGS="-std=gnu90" $(MAKE) allmost
inikep13f42d92016-06-01 14:44:31 +0200346
Sean Purcell3437bf22017-03-01 16:10:26 -0800347c99build: clean
Yann Colletbc32b402017-09-27 17:27:38 -0700348 $(CC) -v
Yann Colleta86a09e2016-12-22 11:31:39 +0100349 CFLAGS="-std=c99" $(MAKE) allmost
inikep13f42d92016-06-01 14:44:31 +0200350
Sean Purcell3437bf22017-03-01 16:10:26 -0800351gnu99build: clean
Yann Colletbc32b402017-09-27 17:27:38 -0700352 $(CC) -v
Yann Collet88ba6472017-02-22 10:52:36 -0800353 CFLAGS="-std=gnu99" $(MAKE) allmost
inikep13f42d92016-06-01 14:44:31 +0200354
Sean Purcell3437bf22017-03-01 16:10:26 -0800355c11build: clean
Yann Colletbc32b402017-09-27 17:27:38 -0700356 $(CC) -v
Yann Colleta86a09e2016-12-22 11:31:39 +0100357 CFLAGS="-std=c11" $(MAKE) allmost
inikep13f42d92016-06-01 14:44:31 +0200358
Sean Purcell3437bf22017-03-01 16:10:26 -0800359bmix64build: clean
Yann Colletbc32b402017-09-27 17:27:38 -0700360 $(CC) -v
inikep2d5eb2b2016-08-18 13:53:26 +0200361 CFLAGS="-O3 -mbmi -Werror" $(MAKE) -C $(TESTDIR) test
inikep13f42d92016-06-01 14:44:31 +0200362
Sean Purcell3437bf22017-03-01 16:10:26 -0800363bmix32build: clean
Yann Colletbc32b402017-09-27 17:27:38 -0700364 $(CC) -v
inikep2d5eb2b2016-08-18 13:53:26 +0200365 CFLAGS="-O3 -mbmi -mx32 -Werror" $(MAKE) -C $(TESTDIR) test
inikep13f42d92016-06-01 14:44:31 +0200366
Sean Purcell3437bf22017-03-01 16:10:26 -0800367bmi32build: clean
Yann Colletbc32b402017-09-27 17:27:38 -0700368 $(CC) -v
inikep2d5eb2b2016-08-18 13:53:26 +0200369 CFLAGS="-O3 -mbmi -m32 -Werror" $(MAKE) -C $(TESTDIR) test
Yann Colletc35cd5b2016-06-30 15:40:28 +0200370
Yann Collet5291d9a2018-08-15 17:41:44 -0700371# static analyzer test uses clang's scan-build
372# does not analyze zlibWrapper, due to detected issues in zlib source code
Yann Collet36d61652018-08-16 15:41:56 -0700373staticAnalyze: SCANBUILD ?= scan-build
Yann Collet42a02ab2018-08-15 14:35:38 -0700374staticAnalyze:
Yann Colletbc32b402017-09-27 17:27:38 -0700375 $(CC) -v
Yann Collet36d61652018-08-16 15:41:56 -0700376 CC=$(CC) CPPFLAGS=-g $(SCANBUILD) --status-bugs -v $(MAKE) allzstd examples contrib
inikep13f42d92016-06-01 14:44:31 +0200377endif