]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - Makefile
Import zstd 1.3.1
[FreeBSD/FreeBSD.git] / Makefile
1 # ################################################################
2 # Copyright (c) 2016-present, Yann Collet, Facebook, Inc.
3 # All rights reserved.
4 #
5 # This source code is licensed under the BSD-style license found in the
6 # LICENSE file in the root directory of this source tree. An additional grant
7 # of patent rights can be found in the PATENTS file in the same directory.
8 # ################################################################
9
10 PRGDIR   = programs
11 ZSTDDIR  = lib
12 BUILDIR  = build
13 ZWRAPDIR = zlibWrapper
14 TESTDIR  = tests
15
16 # Define nul output
17 VOID = /dev/null
18
19 ifneq (,$(filter Windows%,$(OS)))
20 EXT =.exe
21 else
22 EXT =
23 endif
24
25 .PHONY: default
26 default: lib-release zstd-release
27
28 .PHONY: all
29 all: | allmost examples manual
30
31 .PHONY: allmost
32 allmost:
33         $(MAKE) -C $(ZSTDDIR) all
34         $(MAKE) -C $(PRGDIR) all
35         $(MAKE) -C $(TESTDIR) all
36         $(MAKE) -C $(ZWRAPDIR) all
37
38 #skip zwrapper, can't build that on alternate architectures without the proper zlib installed
39 .PHONY: allarch
40 allarch:
41         $(MAKE) -C $(ZSTDDIR) all
42         $(MAKE) -C $(PRGDIR) all
43         $(MAKE) -C $(TESTDIR) all
44
45 .PHONY: all32
46 all32:
47         $(MAKE) -C $(PRGDIR) zstd32
48         $(MAKE) -C $(TESTDIR) all32
49
50 .PHONY: lib
51 lib:
52         @$(MAKE) -C $(ZSTDDIR) $@
53
54 .PHONY: lib-release
55 lib-release:
56         @$(MAKE) -C $(ZSTDDIR)
57
58 .PHONY: zstd
59 zstd:
60         @$(MAKE) -C $(PRGDIR) $@
61         cp $(PRGDIR)/zstd$(EXT) .
62
63 .PHONY: zstd-release
64 zstd-release:
65         @$(MAKE) -C $(PRGDIR)
66         cp $(PRGDIR)/zstd$(EXT) .
67
68 .PHONY: zstdmt
69 zstdmt:
70         @$(MAKE) -C $(PRGDIR) $@
71         cp $(PRGDIR)/zstd$(EXT) ./zstdmt$(EXT)
72
73 .PHONY: zlibwrapper
74 zlibwrapper:
75         $(MAKE) -C $(ZWRAPDIR) test
76
77 .PHONY: test shortest
78 test shortest:
79         $(MAKE) -C $(PRGDIR) allVariants
80         $(MAKE) -C $(TESTDIR) $@
81
82 .PHONY: examples
83 examples:
84         CPPFLAGS=-I../lib LDFLAGS=-L../lib $(MAKE) -C examples/ all
85
86 .PHONY: manual
87 manual:
88         $(MAKE) -C contrib/gen_html $@
89
90 .PHONY: cleanTabs
91 cleanTabs:
92         cd contrib; ./cleanTabs
93
94 .PHONY: clean
95 clean:
96         @$(MAKE) -C $(ZSTDDIR) $@ > $(VOID)
97         @$(MAKE) -C $(PRGDIR) $@ > $(VOID)
98         @$(MAKE) -C $(TESTDIR) $@ > $(VOID)
99         @$(MAKE) -C $(ZWRAPDIR) $@ > $(VOID)
100         @$(MAKE) -C examples/ $@ > $(VOID)
101         @$(MAKE) -C contrib/gen_html $@ > $(VOID)
102         @$(RM) zstd$(EXT) zstdmt$(EXT) tmp*
103         @echo Cleaning completed
104
105 #------------------------------------------------------------------------------
106 # make install is validated only for Linux, OSX, Hurd and some BSD targets
107 #------------------------------------------------------------------------------
108 ifneq (,$(filter $(shell uname),Linux Darwin GNU/kFreeBSD GNU FreeBSD DragonFly NetBSD MSYS_NT))
109
110 HOST_OS = POSIX
111 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
112
113 .PHONY: list
114 list:
115         @$(MAKE) -pRrq -f $(lastword $(MAKEFILE_LIST)) : 2>/dev/null | awk -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | sort | egrep -v -e '^[^[:alnum:]]' -e '^$@$$' | xargs
116
117 .PHONY: install clangtest gpptest armtest usan asan uasan
118 install:
119         @$(MAKE) -C $(ZSTDDIR) $@
120         @$(MAKE) -C $(PRGDIR) $@
121
122 .PHONY: uninstall
123 uninstall:
124         @$(MAKE) -C $(ZSTDDIR) $@
125         @$(MAKE) -C $(PRGDIR) $@
126
127 .PHONY: travis-install
128 travis-install:
129         $(MAKE) install PREFIX=~/install_test_dir
130
131 .PHONY: gppbuild
132 gppbuild: clean
133         g++ -v
134         CC=g++ $(MAKE) -C programs all CFLAGS="-O3 -Wall -Wextra -Wundef -Wshadow -Wcast-align -Werror"
135
136 .PHONY: gcc5build
137 gcc5build: clean
138         gcc-5 -v
139         CC=gcc-5 $(MAKE) all MOREFLAGS="-Werror"
140
141 .PHONY: gcc6build
142 gcc6build: clean
143         gcc-6 -v
144         CC=gcc-6 $(MAKE) all MOREFLAGS="-Werror"
145
146 .PHONY: gcc7build
147 gcc7build: clean
148         gcc-7 -v
149         CC=gcc-7 $(MAKE) all MOREFLAGS="-Werror"
150
151 .PHONY: clangbuild
152 clangbuild: clean
153         clang -v
154         CXX=clang++ CC=clang $(MAKE) all MOREFLAGS="-Werror -Wconversion -Wno-sign-conversion -Wdocumentation"
155
156 m32build: clean
157         gcc -v
158         $(MAKE) all32
159
160 armbuild: clean
161         CC=arm-linux-gnueabi-gcc CFLAGS="-Werror" $(MAKE) allarch
162
163 aarch64build: clean
164         CC=aarch64-linux-gnu-gcc CFLAGS="-Werror" $(MAKE) allarch
165
166 ppcbuild: clean
167         CC=powerpc-linux-gnu-gcc CLAGS="-m32 -Wno-attributes -Werror" $(MAKE) allarch
168
169 ppc64build: clean
170         CC=powerpc-linux-gnu-gcc CFLAGS="-m64 -Werror" $(MAKE) allarch
171
172 armfuzz: clean
173         CC=arm-linux-gnueabi-gcc QEMU_SYS=qemu-arm-static MOREFLAGS="-static" FUZZER_FLAGS=--no-big-tests $(MAKE) -C $(TESTDIR) fuzztest
174
175 aarch64fuzz: clean
176         CC=aarch64-linux-gnu-gcc QEMU_SYS=qemu-aarch64-static MOREFLAGS="-static" FUZZER_FLAGS=--no-big-tests $(MAKE) -C $(TESTDIR) fuzztest
177
178 ppcfuzz: clean
179         CC=powerpc-linux-gnu-gcc QEMU_SYS=qemu-ppc-static MOREFLAGS="-static" FUZZER_FLAGS=--no-big-tests $(MAKE) -C $(TESTDIR) fuzztest
180
181 ppc64fuzz: clean
182         CC=powerpc-linux-gnu-gcc QEMU_SYS=qemu-ppc64-static MOREFLAGS="-m64 -static" FUZZER_FLAGS=--no-big-tests $(MAKE) -C $(TESTDIR) fuzztest
183
184 gpptest: clean
185         CC=$(CXX) $(MAKE) -C $(PRGDIR) all CFLAGS="-O3 -Wall -Wextra -Wundef -Wshadow -Wcast-align -Werror"
186
187 gcc5test: clean
188         gcc-5 -v
189         $(MAKE) all CC=gcc-5 MOREFLAGS="-Werror"
190
191 gcc6test: clean
192         gcc-6 -v
193         $(MAKE) all CC=gcc-6 MOREFLAGS="-Werror"
194
195 clangtest: clean
196         clang -v
197         $(MAKE) all CXX=clang-++ CC=clang MOREFLAGS="-Werror -Wconversion -Wno-sign-conversion -Wdocumentation"
198
199 armtest: clean
200         $(MAKE) -C $(TESTDIR) datagen   # use native, faster
201         $(MAKE) -C $(TESTDIR) test CC=arm-linux-gnueabi-gcc QEMU_SYS=qemu-arm-static ZSTDRTTEST= MOREFLAGS="-Werror -static" FUZZER_FLAGS=--no-big-tests
202
203 aarch64test:
204         $(MAKE) -C $(TESTDIR) datagen   # use native, faster
205         $(MAKE) -C $(TESTDIR) test CC=aarch64-linux-gnu-gcc QEMU_SYS=qemu-aarch64-static ZSTDRTTEST= MOREFLAGS="-Werror -static" FUZZER_FLAGS=--no-big-tests
206
207 ppctest: clean
208         $(MAKE) -C $(TESTDIR) datagen   # use native, faster
209         $(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
210
211 ppc64test: clean
212         $(MAKE) -C $(TESTDIR) datagen   # use native, faster
213         $(MAKE) -C $(TESTDIR) test CC=powerpc-linux-gnu-gcc QEMU_SYS=qemu-ppc64-static ZSTDRTTEST= MOREFLAGS="-m64 -static" FUZZER_FLAGS=--no-big-tests
214
215 arm-ppc-compilation:
216         $(MAKE) -C $(PRGDIR) clean zstd CC=arm-linux-gnueabi-gcc QEMU_SYS=qemu-arm-static ZSTDRTTEST= MOREFLAGS="-Werror -static"
217         $(MAKE) -C $(PRGDIR) clean zstd CC=aarch64-linux-gnu-gcc QEMU_SYS=qemu-aarch64-static ZSTDRTTEST= MOREFLAGS="-Werror -static"
218         $(MAKE) -C $(PRGDIR) clean zstd CC=powerpc-linux-gnu-gcc QEMU_SYS=qemu-ppc-static ZSTDRTTEST= MOREFLAGS="-Werror -Wno-attributes -static"
219         $(MAKE) -C $(PRGDIR) clean zstd CC=powerpc-linux-gnu-gcc QEMU_SYS=qemu-ppc64-static ZSTDRTTEST= MOREFLAGS="-m64 -static"
220
221 # run UBsan with -fsanitize-recover=signed-integer-overflow
222 # due to a bug in UBsan when doing pointer subtraction
223 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63303
224
225 usan: clean
226         $(MAKE) test CC=clang MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize-recover=signed-integer-overflow -fsanitize=undefined"
227
228 asan: clean
229         $(MAKE) test CC=clang MOREFLAGS="-g -fsanitize=address"
230
231 asan-%: clean
232         LDFLAGS=-fuse-ld=gold MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize=address" $(MAKE) -C $(TESTDIR) $*
233
234 msan: clean
235         $(MAKE) test CC=clang MOREFLAGS="-g -fsanitize=memory -fno-omit-frame-pointer" HAVE_LZMA=0   # datagen.c fails this test for no obvious reason
236
237 msan-%: clean
238         LDFLAGS=-fuse-ld=gold MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize=memory -fno-omit-frame-pointer" FUZZER_FLAGS=--no-big-tests $(MAKE) -C $(TESTDIR) HAVE_LZMA=0 $*
239
240 asan32: clean
241         $(MAKE) -C $(TESTDIR) test32 CC=clang MOREFLAGS="-g -fsanitize=address"
242
243 uasan: clean
244         $(MAKE) test CC=clang MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize-recover=signed-integer-overflow -fsanitize=address,undefined"
245
246 uasan-%: clean
247         LDFLAGS=-fuse-ld=gold MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize-recover=signed-integer-overflow -fsanitize=address,undefined" $(MAKE) -C $(TESTDIR) $*
248
249 tsan-%: clean
250         LDFLAGS=-fuse-ld=gold MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize=thread" $(MAKE) -C $(TESTDIR) $* FUZZER_FLAGS=--no-big-tests
251
252 apt-install:
253         sudo apt-get -yq --no-install-suggests --no-install-recommends --force-yes install $(APT_PACKAGES)
254
255 apt-add-repo:
256         sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
257         sudo apt-get update -y -qq
258
259 ppcinstall:
260         APT_PACKAGES="qemu-system-ppc qemu-user-static gcc-powerpc-linux-gnu" $(MAKE) apt-install
261
262 arminstall:
263         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
264
265 valgrindinstall:
266         APT_PACKAGES="valgrind" $(MAKE) apt-install
267
268 libc6install:
269         APT_PACKAGES="libc6-dev-i386 gcc-multilib" $(MAKE) apt-install
270
271 gcc6install: apt-add-repo
272         APT_PACKAGES="libc6-dev-i386 gcc-multilib gcc-6 gcc-6-multilib" $(MAKE) apt-install
273
274 gpp6install: apt-add-repo
275         APT_PACKAGES="libc6-dev-i386 g++-multilib gcc-6 g++-6 g++-6-multilib" $(MAKE) apt-install
276
277 clang38install:
278         APT_PACKAGES="clang-3.8" $(MAKE) apt-install
279
280 endif
281
282
283 ifneq (,$(filter MSYS%,$(shell uname)))
284 HOST_OS = MSYS
285 CMAKE_PARAMS = -G"MSYS Makefiles" -DZSTD_MULTITHREAD_SUPPORT:BOOL=OFF -DZSTD_BUILD_STATIC:BOOL=ON -DZSTD_BUILD_TESTS:BOOL=ON
286 endif
287
288
289 #------------------------------------------------------------------------
290 #make tests validated only for MSYS, Linux, OSX, kFreeBSD and Hurd targets
291 #------------------------------------------------------------------------
292 ifneq (,$(filter $(HOST_OS),MSYS POSIX))
293 cmakebuild:
294         cmake --version
295         $(RM) -r $(BUILDIR)/cmake/build
296         mkdir $(BUILDIR)/cmake/build
297         cd $(BUILDIR)/cmake/build ; cmake -DCMAKE_INSTALL_PREFIX:PATH=~/install_test_dir $(CMAKE_PARAMS) .. ; $(MAKE) install ; $(MAKE) uninstall
298
299 c90build: clean
300         gcc -v
301         CFLAGS="-std=c90" $(MAKE) allmost  # will fail, due to missing support for `long long`
302
303 gnu90build: clean
304         gcc -v
305         CFLAGS="-std=gnu90" $(MAKE) allmost
306
307 c99build: clean
308         gcc -v
309         CFLAGS="-std=c99" $(MAKE) allmost
310
311 gnu99build: clean
312         gcc -v
313         CFLAGS="-std=gnu99" $(MAKE) allmost
314
315 c11build: clean
316         gcc -v
317         CFLAGS="-std=c11" $(MAKE) allmost
318
319 bmix64build: clean
320         gcc -v
321         CFLAGS="-O3 -mbmi -Werror" $(MAKE) -C $(TESTDIR) test
322
323 bmix32build: clean
324         gcc -v
325         CFLAGS="-O3 -mbmi -mx32 -Werror" $(MAKE) -C $(TESTDIR) test
326
327 bmi32build: clean
328         gcc -v
329         CFLAGS="-O3 -mbmi -m32 -Werror" $(MAKE) -C $(TESTDIR) test
330
331 staticAnalyze: clean
332         gcc -v
333         CPPFLAGS=-g scan-build --status-bugs -v $(MAKE) all
334 endif