Home | History | Annotate | Line # | Download | only in dist
      1      1.1  christos # ################################################################
      2      1.1  christos # Copyright (c) Meta Platforms, Inc. and affiliates.
      3      1.1  christos # All rights reserved.
      4      1.1  christos #
      5      1.1  christos # This source code is licensed under both the BSD-style license (found in the
      6      1.1  christos # LICENSE file in the root directory of this source tree) and the GPLv2 (found
      7      1.1  christos # in the COPYING file in the root directory of this source tree).
      8      1.1  christos # You may select, at your option, one of the above-listed licenses.
      9      1.1  christos # ################################################################
     10      1.1  christos 
     11      1.1  christos # verbose mode (print commands) on V=1 or VERBOSE=1
     12      1.1  christos Q = $(if $(filter 1,$(V) $(VERBOSE)),,@)
     13      1.1  christos 
     14      1.1  christos PRGDIR   = programs
     15      1.1  christos ZSTDDIR  = lib
     16      1.1  christos BUILDIR  = build
     17      1.1  christos ZWRAPDIR = zlibWrapper
     18      1.1  christos TESTDIR  = tests
     19      1.1  christos FUZZDIR  = $(TESTDIR)/fuzz
     20      1.1  christos 
     21      1.1  christos # Define nul output
     22      1.1  christos VOID = /dev/null
     23      1.1  christos 
     24      1.1  christos # When cross-compiling from linux to windows, you might
     25      1.1  christos # need to specify this as "Windows." Fedora build fails
     26      1.1  christos # without it.
     27      1.1  christos #
     28      1.1  christos # Note: mingw-w64 build from linux to windows does not
     29      1.1  christos # fail on other tested distros (ubuntu, debian) even
     30      1.1  christos # without manually specifying the TARGET_SYSTEM.
     31      1.1  christos TARGET_SYSTEM ?= $(OS)
     32      1.1  christos CP ?= cp
     33      1.1  christos 
     34      1.1  christos ifneq (,$(filter Windows%,$(TARGET_SYSTEM)))
     35      1.1  christos   EXT =.exe
     36      1.1  christos else
     37      1.1  christos   EXT =
     38      1.1  christos endif
     39      1.1  christos 
     40      1.1  christos ## default: Build lib-release and zstd-release
     41      1.1  christos .PHONY: default
     42      1.1  christos default: lib-release zstd-release
     43      1.1  christos 
     44      1.1  christos .PHONY: all
     45      1.1  christos all: allmost examples manual contrib
     46      1.1  christos 
     47      1.1  christos .PHONY: allmost
     48      1.1  christos allmost: allzstd zlibwrapper
     49      1.1  christos 
     50      1.1  christos # skip zwrapper, can't build that on alternate architectures without the proper zlib installed
     51      1.1  christos .PHONY: allzstd
     52      1.1  christos allzstd: lib
     53      1.1  christos 	$(Q)$(MAKE) -C $(PRGDIR) all
     54      1.1  christos 	$(Q)$(MAKE) -C $(TESTDIR) all
     55      1.1  christos 
     56      1.1  christos .PHONY: all32
     57      1.1  christos all32:
     58      1.1  christos 	$(MAKE) -C $(PRGDIR) zstd32
     59      1.1  christos 	$(MAKE) -C $(TESTDIR) all32
     60      1.1  christos 
     61      1.1  christos .PHONY: lib lib-release lib-mt lib-nomt
     62      1.1  christos lib lib-release lib-mt lib-nomt:
     63      1.1  christos 	$(Q)$(MAKE) -C $(ZSTDDIR) $@
     64      1.1  christos 
     65      1.1  christos .PHONY: zstd zstd-release
     66      1.1  christos zstd zstd-release:
     67      1.1  christos 	$(Q)$(MAKE) -C $(PRGDIR) $@
     68      1.1  christos 	$(Q)ln -sf $(PRGDIR)/zstd$(EXT) zstd$(EXT)
     69      1.1  christos 
     70      1.1  christos .PHONY: zstdmt
     71      1.1  christos zstdmt:
     72      1.1  christos 	$(Q)$(MAKE) -C $(PRGDIR) $@
     73      1.1  christos 	$(Q)$(CP) $(PRGDIR)/zstd$(EXT) ./zstdmt$(EXT)
     74      1.1  christos 
     75      1.1  christos .PHONY: zlibwrapper
     76      1.1  christos zlibwrapper: lib
     77      1.1  christos 	$(MAKE) -C $(ZWRAPDIR) all
     78      1.1  christos 
     79      1.1  christos ## test: run long-duration tests
     80      1.1  christos .PHONY: test
     81      1.1  christos DEBUGLEVEL ?= 1
     82      1.1  christos test: MOREFLAGS += -g -Werror
     83      1.1  christos test:
     84      1.1  christos 	DEBUGLEVEL=$(DEBUGLEVEL) MOREFLAGS="$(MOREFLAGS)" $(MAKE) -j -C $(PRGDIR) allVariants
     85      1.1  christos 	$(MAKE) -C $(TESTDIR) $@
     86      1.1  christos 	ZSTD=../../programs/zstd $(MAKE) -C doc/educational_decoder $@
     87      1.1  christos 
     88      1.1  christos ## check: run basic tests for `zstd` cli
     89      1.1  christos .PHONY: check
     90  1.1.1.2  christos check:
     91  1.1.1.2  christos 	$(Q)$(MAKE) -C $(TESTDIR) $@
     92      1.1  christos 
     93      1.1  christos .PHONY: automated_benchmarking
     94      1.1  christos automated_benchmarking:
     95      1.1  christos 	$(MAKE) -C $(TESTDIR) $@
     96      1.1  christos 
     97      1.1  christos .PHONY: benchmarking
     98      1.1  christos benchmarking: automated_benchmarking
     99      1.1  christos 
    100      1.1  christos ## examples: build all examples in `examples/` directory
    101      1.1  christos .PHONY: examples
    102      1.1  christos examples: lib
    103      1.1  christos 	$(MAKE) -C examples all
    104      1.1  christos 
    105      1.1  christos ## manual: generate API documentation in html format
    106      1.1  christos .PHONY: manual
    107      1.1  christos manual:
    108      1.1  christos 	$(MAKE) -C contrib/gen_html $@
    109      1.1  christos 
    110      1.1  christos ## man: generate man page
    111      1.1  christos .PHONY: man
    112      1.1  christos man:
    113      1.1  christos 	$(MAKE) -C programs $@
    114      1.1  christos 
    115      1.1  christos ## contrib: build all supported projects in `/contrib` directory
    116      1.1  christos .PHONY: contrib
    117      1.1  christos contrib: lib
    118      1.1  christos 	$(MAKE) -C contrib/pzstd all
    119      1.1  christos 	$(MAKE) -C contrib/seekable_format/examples all
    120      1.1  christos 	$(MAKE) -C contrib/seekable_format/tests test
    121      1.1  christos 	$(MAKE) -C contrib/largeNbDicts all
    122      1.1  christos 	$(MAKE) -C contrib/externalSequenceProducer all
    123      1.1  christos 	cd build/single_file_libs/ ; ./build_decoder_test.sh
    124      1.1  christos 	cd build/single_file_libs/ ; ./build_library_test.sh
    125      1.1  christos 
    126      1.1  christos .PHONY: cleanTabs
    127      1.1  christos cleanTabs:
    128      1.1  christos 	cd contrib; ./cleanTabs
    129      1.1  christos 
    130      1.1  christos .PHONY: clean
    131      1.1  christos clean:
    132      1.1  christos 	$(Q)$(MAKE) -C $(ZSTDDIR) $@ > $(VOID)
    133      1.1  christos 	$(Q)$(MAKE) -C $(PRGDIR) $@ > $(VOID)
    134      1.1  christos 	$(Q)$(MAKE) -C $(TESTDIR) $@ > $(VOID)
    135      1.1  christos 	$(Q)$(MAKE) -C $(ZWRAPDIR) $@ > $(VOID)
    136      1.1  christos 	$(Q)$(MAKE) -C examples/ $@ > $(VOID)
    137      1.1  christos 	$(Q)$(MAKE) -C contrib/gen_html $@ > $(VOID)
    138      1.1  christos 	$(Q)$(MAKE) -C contrib/pzstd $@ > $(VOID)
    139      1.1  christos 	$(Q)$(MAKE) -C contrib/seekable_format/examples $@ > $(VOID)
    140      1.1  christos 	$(Q)$(MAKE) -C contrib/seekable_format/tests $@ > $(VOID)
    141      1.1  christos 	$(Q)$(MAKE) -C contrib/largeNbDicts $@ > $(VOID)
    142      1.1  christos 	$(Q)$(MAKE) -C contrib/externalSequenceProducer $@ > $(VOID)
    143      1.1  christos 	$(Q)$(RM) zstd$(EXT) zstdmt$(EXT) tmp*
    144  1.1.1.2  christos 	$(Q)$(RM) -r lz4 cmakebuild mesonbuild install
    145      1.1  christos 	@echo Cleaning completed
    146      1.1  christos 
    147      1.1  christos #------------------------------------------------------------------------------
    148      1.1  christos # make install is validated only for Linux, macOS, Hurd and some BSD targets
    149      1.1  christos #------------------------------------------------------------------------------
    150  1.1.1.2  christos ifneq (,$(filter Linux Darwin GNU/kFreeBSD GNU OpenBSD FreeBSD DragonFly NetBSD MSYS_NT% CYGWIN_NT% Haiku AIX,$(shell sh -c 'MSYSTEM="MSYS" uname') ))
    151      1.1  christos 
    152      1.1  christos HOST_OS = POSIX
    153      1.1  christos 
    154      1.1  christos MKDIR ?= mkdir -p
    155      1.1  christos 
    156      1.1  christos HAVE_COLORNEVER = $(shell echo a | egrep --color=never a > /dev/null 2> /dev/null && echo 1 || echo 0)
    157      1.1  christos EGREP_OPTIONS ?=
    158      1.1  christos ifeq ($(HAVE_COLORNEVER), 1)
    159      1.1  christos EGREP_OPTIONS += --color=never
    160      1.1  christos endif
    161      1.1  christos EGREP = egrep $(EGREP_OPTIONS)
    162      1.1  christos 
    163      1.1  christos # Print a two column output of targets and their description. To add a target description, put a
    164      1.1  christos # comment in the Makefile with the format "## <TARGET>: <DESCRIPTION>".  For example:
    165      1.1  christos #
    166      1.1  christos ## list: Print all targets and their descriptions (if provided)
    167      1.1  christos .PHONY: list
    168      1.1  christos list:
    169      1.1  christos 	$(Q)TARGETS=$$($(MAKE) -pRrq -f $(lastword $(MAKEFILE_LIST)) : 2>/dev/null \
    170      1.1  christos 		| awk -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' \
    171      1.1  christos 		| $(EGREP) -v  -e '^[^[:alnum:]]' | sort); \
    172      1.1  christos 	{ \
    173      1.1  christos 	    printf "Target Name\tDescription\n"; \
    174      1.1  christos 	    printf "%0.s-" {1..16}; printf "\t"; printf "%0.s-" {1..40}; printf "\n"; \
    175      1.1  christos 	    for target in $$TARGETS; do \
    176      1.1  christos 	        line=$$($(EGREP) "^##[[:space:]]+$$target:" $(lastword $(MAKEFILE_LIST))); \
    177      1.1  christos 	        description=$$(echo $$line | awk '{i=index($$0,":"); print substr($$0,i+1)}' | xargs); \
    178      1.1  christos 	        printf "$$target\t$$description\n"; \
    179      1.1  christos 	    done \
    180      1.1  christos 	} | column -t -s $$'\t'
    181      1.1  christos 
    182      1.1  christos .PHONY: install armtest usan asan uasan msan asan32
    183      1.1  christos install:
    184      1.1  christos 	$(Q)$(MAKE) -C $(ZSTDDIR) $@
    185      1.1  christos 	$(Q)$(MAKE) -C $(PRGDIR) $@
    186      1.1  christos 
    187      1.1  christos .PHONY: uninstall
    188      1.1  christos uninstall:
    189      1.1  christos 	$(Q)$(MAKE) -C $(ZSTDDIR) $@
    190      1.1  christos 	$(Q)$(MAKE) -C $(PRGDIR) $@
    191      1.1  christos 
    192      1.1  christos .PHONY: travis-install
    193      1.1  christos travis-install:
    194      1.1  christos 	$(MAKE) install PREFIX=~/install_test_dir
    195      1.1  christos 
    196      1.1  christos .PHONY: clangbuild-darwin-fat
    197      1.1  christos clangbuild-darwin-fat: clean
    198      1.1  christos 	clang -v
    199  1.1.1.2  christos 	CXX=clang++ CC=clang CFLAGS+="-Werror -Wconversion -Wno-sign-conversion -Wdocumentation -arch arm64" $(MAKE) zstd-release
    200      1.1  christos 	mv programs/zstd programs/zstd_arm64
    201  1.1.1.2  christos 	CXX=clang++ CC=clang CFLAGS+="-Werror -Wconversion -Wno-sign-conversion -Wdocumentation -arch x86_64" $(MAKE) zstd-release
    202      1.1  christos 	mv programs/zstd programs/zstd_x64
    203      1.1  christos 	lipo -create programs/zstd_x64 programs/zstd_arm64 -output programs/zstd
    204      1.1  christos 
    205      1.1  christos .PHONY: gcc5build gcc6build gcc7build clangbuild m32build armbuild aarch64build ppcbuild ppc64build
    206      1.1  christos gcc5build: clean
    207      1.1  christos 	gcc-5 -v
    208      1.1  christos 	CC=gcc-5 $(MAKE) all MOREFLAGS="-Werror $(MOREFLAGS)"
    209      1.1  christos 
    210      1.1  christos gcc6build: clean
    211      1.1  christos 	gcc-6 -v
    212      1.1  christos 	CC=gcc-6 $(MAKE) all MOREFLAGS="-Werror $(MOREFLAGS)"
    213      1.1  christos 
    214      1.1  christos gcc7build: clean
    215      1.1  christos 	gcc-7 -v
    216      1.1  christos 	CC=gcc-7 $(MAKE) all MOREFLAGS="-Werror $(MOREFLAGS)"
    217      1.1  christos 
    218      1.1  christos clangbuild: clean
    219      1.1  christos 	clang -v
    220      1.1  christos 	CXX=clang++ CC=clang CFLAGS="-Werror -Wconversion -Wno-sign-conversion -Wdocumentation" $(MAKE) all
    221      1.1  christos 
    222      1.1  christos m32build: clean
    223      1.1  christos 	gcc -v
    224      1.1  christos 	$(MAKE) all32
    225      1.1  christos 
    226      1.1  christos armbuild: clean
    227      1.1  christos 	CC=arm-linux-gnueabi-gcc CFLAGS="-Werror" $(MAKE) allzstd
    228      1.1  christos 
    229      1.1  christos aarch64build: clean
    230      1.1  christos 	CC=aarch64-linux-gnu-gcc CFLAGS="-Werror -O0" $(MAKE) allzstd
    231      1.1  christos 
    232      1.1  christos ppcbuild: clean
    233      1.1  christos 	CC=powerpc-linux-gnu-gcc CFLAGS="-m32 -Wno-attributes -Werror" $(MAKE) -j allzstd
    234      1.1  christos 
    235      1.1  christos ppc64build: clean
    236      1.1  christos 	CC=powerpc-linux-gnu-gcc CFLAGS="-m64 -Werror" $(MAKE) -j allzstd
    237      1.1  christos 
    238      1.1  christos .PHONY: armfuzz aarch64fuzz ppcfuzz ppc64fuzz
    239      1.1  christos armfuzz: clean
    240      1.1  christos 	CC=arm-linux-gnueabi-gcc QEMU_SYS=qemu-arm-static MOREFLAGS="-static $(MOREFLAGS)" FUZZER_FLAGS="--no-big-tests $(FUZZER_FLAGS)" $(MAKE) -C $(TESTDIR) fuzztest
    241      1.1  christos 
    242      1.1  christos aarch64fuzz: clean
    243      1.1  christos 	ld -v
    244      1.1  christos 	CC=aarch64-linux-gnu-gcc QEMU_SYS=qemu-aarch64-static MOREFLAGS="-static $(MOREFLAGS)" FUZZER_FLAGS="--no-big-tests $(FUZZER_FLAGS)" $(MAKE) -C $(TESTDIR) fuzztest
    245      1.1  christos 
    246      1.1  christos ppcfuzz: clean
    247      1.1  christos 	CC=powerpc-linux-gnu-gcc QEMU_SYS=qemu-ppc-static MOREFLAGS="-static $(MOREFLAGS)" FUZZER_FLAGS="--no-big-tests $(FUZZER_FLAGS)" $(MAKE) -C $(TESTDIR) fuzztest
    248      1.1  christos 
    249      1.1  christos ppc64fuzz: clean
    250      1.1  christos 	CC=powerpc-linux-gnu-gcc QEMU_SYS=qemu-ppc64-static MOREFLAGS="-m64 -static $(MOREFLAGS)" FUZZER_FLAGS="--no-big-tests $(FUZZER_FLAGS)" $(MAKE) -C $(TESTDIR) fuzztest
    251      1.1  christos 
    252      1.1  christos .PHONY: cxxtest gcc5test gcc6test armtest aarch64test ppctest ppc64test
    253      1.1  christos cxxtest: CXXFLAGS += -Wall -Wextra -Wundef -Wshadow -Wcast-align -Werror
    254      1.1  christos cxxtest: clean
    255      1.1  christos 	$(MAKE) -C $(PRGDIR) all CC="$(CXX) -Wno-deprecated" CFLAGS="$(CXXFLAGS)"   # adding -Wno-deprecated to avoid clang++ warning on dealing with C files directly
    256      1.1  christos 
    257      1.1  christos gcc5test: clean
    258      1.1  christos 	gcc-5 -v
    259      1.1  christos 	$(MAKE) all CC=gcc-5 MOREFLAGS="-Werror $(MOREFLAGS)"
    260      1.1  christos 
    261      1.1  christos gcc6test: clean
    262      1.1  christos 	gcc-6 -v
    263      1.1  christos 	$(MAKE) all CC=gcc-6 MOREFLAGS="-Werror $(MOREFLAGS)"
    264      1.1  christos 
    265      1.1  christos armtest: clean
    266      1.1  christos 	$(MAKE) -C $(TESTDIR) datagen   # use native, faster
    267      1.1  christos 	$(MAKE) -C $(TESTDIR) test CC=arm-linux-gnueabi-gcc QEMU_SYS=qemu-arm-static ZSTDRTTEST= MOREFLAGS="-Werror -static $(MOREFLAGS)" FUZZER_FLAGS="--no-big-tests $(FUZZER_FLAGS)"
    268      1.1  christos 
    269      1.1  christos aarch64test:
    270      1.1  christos 	$(MAKE) -C $(TESTDIR) datagen   # use native, faster
    271      1.1  christos 	$(MAKE) -C $(TESTDIR) test CC=aarch64-linux-gnu-gcc QEMU_SYS=qemu-aarch64-static ZSTDRTTEST= MOREFLAGS="-Werror -static $(MOREFLAGS)" FUZZER_FLAGS="--no-big-tests $(FUZZER_FLAGS)"
    272      1.1  christos 
    273      1.1  christos ppctest: clean
    274      1.1  christos 	$(MAKE) -C $(TESTDIR) datagen   # use native, faster
    275      1.1  christos 	$(MAKE) -C $(TESTDIR) test CC=powerpc-linux-gnu-gcc QEMU_SYS=qemu-ppc-static ZSTDRTTEST= MOREFLAGS="-Werror -Wno-attributes -static $(MOREFLAGS)" FUZZER_FLAGS="--no-big-tests $(FUZZER_FLAGS)"
    276      1.1  christos 
    277      1.1  christos ppc64test: clean
    278      1.1  christos 	$(MAKE) -C $(TESTDIR) datagen   # use native, faster
    279      1.1  christos 	$(MAKE) -C $(TESTDIR) test CC=powerpc-linux-gnu-gcc QEMU_SYS=qemu-ppc64-static ZSTDRTTEST= MOREFLAGS="-m64 -static $(MOREFLAGS)" FUZZER_FLAGS="--no-big-tests $(FUZZER_FLAGS)"
    280      1.1  christos 
    281      1.1  christos .PHONY: arm-ppc-compilation
    282      1.1  christos arm-ppc-compilation:
    283      1.1  christos 	$(MAKE) -C $(PRGDIR) clean zstd CC=arm-linux-gnueabi-gcc QEMU_SYS=qemu-arm-static ZSTDRTTEST= MOREFLAGS="-Werror -static $(MOREFLAGS)"
    284      1.1  christos 	$(MAKE) -C $(PRGDIR) clean zstd CC=aarch64-linux-gnu-gcc QEMU_SYS=qemu-aarch64-static ZSTDRTTEST= MOREFLAGS="-Werror -static $(MOREFLAGS)"
    285      1.1  christos 	$(MAKE) -C $(PRGDIR) clean zstd CC=powerpc-linux-gnu-gcc QEMU_SYS=qemu-ppc-static ZSTDRTTEST= MOREFLAGS="-Werror -Wno-attributes -static $(MOREFLAGS)"
    286      1.1  christos 	$(MAKE) -C $(PRGDIR) clean zstd CC=powerpc-linux-gnu-gcc QEMU_SYS=qemu-ppc64-static ZSTDRTTEST= MOREFLAGS="-m64 -static $(MOREFLAGS)"
    287      1.1  christos 
    288      1.1  christos regressiontest:
    289      1.1  christos 	$(MAKE) -C $(FUZZDIR) regressiontest
    290      1.1  christos 
    291      1.1  christos uasanregressiontest:
    292  1.1.1.2  christos 	$(MAKE) -C $(FUZZDIR) regressiontest CC=clang CXX=clang++ CFLAGS="-O3 -fsanitize=address,undefined -Werror" CXXFLAGS="-O3 -fsanitize=address,undefined -Werror"
    293      1.1  christos 
    294      1.1  christos msanregressiontest:
    295  1.1.1.2  christos 	$(MAKE) -C $(FUZZDIR) regressiontest CC=clang CXX=clang++ CFLAGS="-O3 -fsanitize=memory -Werror" CXXFLAGS="-O3 -fsanitize=memory -Werror"
    296      1.1  christos 
    297      1.1  christos update_regressionResults : REGRESS_RESULTS_DIR := /tmp/regress_results_dir/
    298      1.1  christos update_regressionResults:
    299  1.1.1.2  christos 	$(MAKE) -j -C programs zstd
    300  1.1.1.2  christos 	$(MAKE) -j -C tests/regression test
    301  1.1.1.2  christos 	$(RM) -r $(REGRESS_RESULTS_DIR)
    302      1.1  christos 	$(MKDIR) $(REGRESS_RESULTS_DIR)
    303      1.1  christos 	./tests/regression/test                         \
    304      1.1  christos         --cache  tests/regression/cache             \
    305      1.1  christos         --output $(REGRESS_RESULTS_DIR)/results.csv \
    306      1.1  christos         --zstd   programs/zstd
    307      1.1  christos 	echo "Showing results differences"
    308      1.1  christos 	! diff tests/regression/results.csv $(REGRESS_RESULTS_DIR)/results.csv
    309      1.1  christos 	echo "Updating results.csv"
    310      1.1  christos 	$(CP) $(REGRESS_RESULTS_DIR)/results.csv tests/regression/results.csv
    311      1.1  christos 
    312      1.1  christos 
    313      1.1  christos # run UBsan with -fsanitize-recover=pointer-overflow
    314      1.1  christos # this only works with recent compilers such as gcc 8+
    315      1.1  christos usan: clean
    316      1.1  christos 	$(MAKE) test CC=clang MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize=undefined -Werror $(MOREFLAGS)"
    317      1.1  christos 
    318      1.1  christos asan: clean
    319      1.1  christos 	$(MAKE) test CC=clang MOREFLAGS="-g -fsanitize=address -Werror $(MOREFLAGS)"
    320      1.1  christos 
    321      1.1  christos asan-%: clean
    322      1.1  christos 	LDFLAGS=-fuse-ld=gold MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize=address -Werror $(MOREFLAGS)" $(MAKE) -C $(TESTDIR) $*
    323      1.1  christos 
    324      1.1  christos msan: clean
    325      1.1  christos 	$(MAKE) test CC=clang MOREFLAGS="-g -fsanitize=memory -fno-omit-frame-pointer -Werror $(MOREFLAGS)" HAVE_LZMA=0   # datagen.c fails this test for no obvious reason
    326      1.1  christos 
    327      1.1  christos msan-%:
    328      1.1  christos 	$(MAKE) clean
    329      1.1  christos 	LDFLAGS=-fuse-ld=gold MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize=memory -fno-omit-frame-pointer -Werror $(MOREFLAGS)" FUZZER_FLAGS="--no-big-tests $(FUZZER_FLAGS)" $(MAKE) -j -C $(TESTDIR) HAVE_LZMA=0 $*
    330      1.1  christos 
    331      1.1  christos asan32: clean
    332      1.1  christos 	$(MAKE) -C $(TESTDIR) test32 CC=clang MOREFLAGS="-g -fsanitize=address $(MOREFLAGS)"
    333      1.1  christos 
    334      1.1  christos uasan: clean
    335      1.1  christos 	$(MAKE) test CC=clang MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize=address,undefined -Werror $(MOREFLAGS)"
    336      1.1  christos 
    337      1.1  christos uasan-%: clean
    338      1.1  christos 	LDFLAGS=-fuse-ld=gold MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize=address,undefined -Werror $(MOREFLAGS)" $(MAKE) -C $(TESTDIR) $*
    339      1.1  christos 
    340      1.1  christos tsan-%: clean
    341      1.1  christos 	LDFLAGS=-fuse-ld=gold MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize=thread -Werror $(MOREFLAGS)" $(MAKE) -C $(TESTDIR) $* FUZZER_FLAGS="--no-big-tests $(FUZZER_FLAGS)"
    342      1.1  christos 
    343      1.1  christos .PHONY: apt-install
    344      1.1  christos apt-install:
    345      1.1  christos 	# TODO: uncomment once issue 3011 is resolved and remove hack from Github Actions .yml
    346      1.1  christos 	# sudo apt-get update
    347      1.1  christos 	sudo apt-get -yq --no-install-suggests --no-install-recommends --force-yes install $(APT_PACKAGES)
    348      1.1  christos 
    349      1.1  christos .PHONY: apt-add-repo
    350      1.1  christos apt-add-repo:
    351      1.1  christos 	sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
    352      1.1  christos 	sudo apt-get update -y -qq
    353      1.1  christos 
    354      1.1  christos .PHONY: ppcinstall arminstall valgrindinstall libc6install gcc6install gcc7install gcc8install gpp6install clang38install lz4install
    355      1.1  christos ppcinstall:
    356      1.1  christos 	APT_PACKAGES="qemu-system-ppc qemu-user-static gcc-powerpc-linux-gnu" $(MAKE) apt-install
    357      1.1  christos 
    358      1.1  christos arminstall:
    359      1.1  christos 	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
    360      1.1  christos 
    361      1.1  christos valgrindinstall:
    362      1.1  christos 	APT_PACKAGES="valgrind" $(MAKE) apt-install
    363      1.1  christos 
    364      1.1  christos libc6install:
    365      1.1  christos 	APT_PACKAGES="libc6-dev-i386 gcc-multilib" $(MAKE) apt-install
    366      1.1  christos 
    367      1.1  christos gcc6install: apt-add-repo
    368      1.1  christos 	APT_PACKAGES="libc6-dev-i386 gcc-multilib gcc-6 gcc-6-multilib" $(MAKE) apt-install
    369      1.1  christos 
    370      1.1  christos gcc7install: apt-add-repo
    371      1.1  christos 	APT_PACKAGES="libc6-dev-i386 gcc-multilib gcc-7 gcc-7-multilib" $(MAKE) apt-install
    372      1.1  christos 
    373      1.1  christos gcc8install: apt-add-repo
    374      1.1  christos 	APT_PACKAGES="libc6-dev-i386 gcc-multilib gcc-8 gcc-8-multilib" $(MAKE) apt-install
    375      1.1  christos 
    376      1.1  christos gpp6install: apt-add-repo
    377      1.1  christos 	APT_PACKAGES="libc6-dev-i386 g++-multilib gcc-6 g++-6 g++-6-multilib" $(MAKE) apt-install
    378      1.1  christos 
    379      1.1  christos clang38install:
    380      1.1  christos 	APT_PACKAGES="clang-3.8" $(MAKE) apt-install
    381      1.1  christos 
    382      1.1  christos # Ubuntu 14.04 ships a too-old lz4
    383      1.1  christos lz4install:
    384      1.1  christos 	[ -e lz4 ] || git clone https://github.com/lz4/lz4 && sudo $(MAKE) -C lz4 install
    385      1.1  christos 
    386      1.1  christos endif
    387      1.1  christos 
    388      1.1  christos 
    389  1.1.1.2  christos ifneq (,$(filter MSYS%,$(shell sh -c 'MSYSTEM="MSYS" uname') ))
    390      1.1  christos HOST_OS = MSYS
    391      1.1  christos endif
    392      1.1  christos 
    393      1.1  christos #------------------------------------------------------------------------
    394      1.1  christos # target specific tests
    395      1.1  christos #------------------------------------------------------------------------
    396  1.1.1.2  christos ifneq (,$(filter MSYS POSIX,$(HOST_OS)))
    397      1.1  christos 
    398      1.1  christos CMAKE ?= cmake
    399      1.1  christos CMAKE_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
    400      1.1  christos 
    401  1.1.1.2  christos ifneq (,$(filter MSYS%,$(shell sh -c 'MSYSTEM="MSYS" uname')))
    402      1.1  christos CMAKE_PARAMS = -G"MSYS Makefiles" -DZSTD_MULTITHREAD_SUPPORT:BOOL=OFF -DZSTD_BUILD_STATIC:BOOL=ON -DZSTD_BUILD_TESTS:BOOL=ON
    403      1.1  christos endif
    404      1.1  christos 
    405      1.1  christos .PHONY: cmakebuild
    406      1.1  christos cmakebuild:
    407      1.1  christos 	$(CMAKE) --version
    408      1.1  christos 	$(RM) -r cmakebuild install
    409      1.1  christos 	$(MKDIR) cmakebuild install
    410      1.1  christos 	cd cmakebuild; $(CMAKE) -Wdev -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_FLAGS="-Werror -O0" -DCMAKE_INSTALL_PREFIX=install $(CMAKE_PARAMS) ../build/cmake
    411      1.1  christos 	$(CMAKE) --build cmakebuild --target install -- -j V=1
    412      1.1  christos 	cd cmakebuild; ctest -V -L Medium
    413      1.1  christos 
    414  1.1.1.2  christos MESON ?= meson
    415  1.1.1.2  christos NINJA ?= ninja
    416  1.1.1.2  christos 
    417  1.1.1.2  christos .PHONY: mesonbuild
    418  1.1.1.2  christos mesonbuild:
    419  1.1.1.2  christos 	$(MESON) setup \
    420  1.1.1.2  christos 		--buildtype=debugoptimized \
    421  1.1.1.2  christos 		-Db_lundef=false \
    422  1.1.1.2  christos 		-Dauto_features=enabled \
    423  1.1.1.2  christos 		-Dbin_programs=true \
    424  1.1.1.2  christos 		-Dbin_tests=true \
    425  1.1.1.2  christos 		-Dbin_contrib=true \
    426  1.1.1.2  christos 		-Ddefault_library=both \
    427  1.1.1.2  christos 		build/meson mesonbuild
    428  1.1.1.2  christos 	$(NINJA) -C mesonbuild/
    429  1.1.1.2  christos 	$(MESON) test -C mesonbuild/ --print-errorlogs
    430  1.1.1.2  christos 	$(MESON) install -C mesonbuild --destdir staging/
    431  1.1.1.2  christos 
    432      1.1  christos .PHONY: c89build gnu90build c99build gnu99build c11build bmix64build bmix32build bmi32build staticAnalyze
    433      1.1  christos c89build: clean
    434      1.1  christos 	$(CC) -v
    435      1.1  christos 	CFLAGS="-std=c89 -Werror -Wno-attributes -Wpedantic -Wno-long-long -Wno-variadic-macros -O0" $(MAKE) lib zstd
    436      1.1  christos 
    437      1.1  christos gnu90build: clean
    438      1.1  christos 	$(CC) -v
    439      1.1  christos 	CFLAGS="-std=gnu90 -Werror -O0" $(MAKE) allmost
    440      1.1  christos 
    441      1.1  christos c99build: clean
    442      1.1  christos 	$(CC) -v
    443      1.1  christos 	CFLAGS="-std=c99 -Werror -O0" $(MAKE) allmost
    444      1.1  christos 
    445      1.1  christos gnu99build: clean
    446      1.1  christos 	$(CC) -v
    447      1.1  christos 	CFLAGS="-std=gnu99 -Werror -O0" $(MAKE) allmost
    448      1.1  christos 
    449      1.1  christos c11build: clean
    450      1.1  christos 	$(CC) -v
    451      1.1  christos 	CFLAGS="-std=c11 -Werror -O0" $(MAKE) allmost
    452      1.1  christos 
    453      1.1  christos bmix64build: clean
    454      1.1  christos 	$(CC) -v
    455      1.1  christos 	CFLAGS="-O3 -mbmi -Werror" $(MAKE) -C $(TESTDIR) test
    456      1.1  christos 
    457      1.1  christos bmix32build: clean
    458      1.1  christos 	$(CC) -v
    459      1.1  christos 	CFLAGS="-O3 -mbmi -mx32 -Werror" $(MAKE) -C $(TESTDIR) test
    460      1.1  christos 
    461      1.1  christos bmi32build: clean
    462      1.1  christos 	$(CC) -v
    463      1.1  christos 	CFLAGS="-O3 -mbmi -m32 -Werror" $(MAKE) -C $(TESTDIR) test
    464      1.1  christos 
    465      1.1  christos # static analyzer test uses clang's scan-build
    466      1.1  christos # does not analyze zlibWrapper, due to detected issues in zlib source code
    467      1.1  christos staticAnalyze: SCANBUILD ?= scan-build
    468      1.1  christos staticAnalyze:
    469      1.1  christos 	$(CC) -v
    470      1.1  christos 	CC=$(CC) CPPFLAGS=-g $(SCANBUILD) --status-bugs -v $(MAKE) zstd
    471      1.1  christos endif
    472