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