]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - Makefile
Import zstd 1.3.0
[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: shortest
78 shortest:
79         $(MAKE) -C $(TESTDIR) $@
80
81 .PHONY: test
82 test:
83         $(MAKE) -C $(TESTDIR) $@
84
85 .PHONY: examples
86 examples:
87         CPPFLAGS=-I../lib LDFLAGS=-L../lib $(MAKE) -C examples/ all
88
89 .PHONY: manual
90 manual:
91         $(MAKE) -C contrib/gen_html $@
92
93 .PHONY: cleanTabs
94 cleanTabs:
95         cd contrib; ./cleanTabs
96
97 .PHONY: clean
98 clean:
99         @$(MAKE) -C $(ZSTDDIR) $@ > $(VOID)
100         @$(MAKE) -C $(PRGDIR) $@ > $(VOID)
101         @$(MAKE) -C $(TESTDIR) $@ > $(VOID)
102         @$(MAKE) -C $(ZWRAPDIR) $@ > $(VOID)
103         @$(MAKE) -C examples/ $@ > $(VOID)
104         @$(MAKE) -C contrib/gen_html $@ > $(VOID)
105         @$(RM) zstd$(EXT) zstdmt$(EXT) tmp*
106         @echo Cleaning completed
107
108 #------------------------------------------------------------------------------
109 # make install is validated only for Linux, OSX, Hurd and some BSD targets
110 #------------------------------------------------------------------------------
111 ifneq (,$(filter $(shell uname),Linux Darwin GNU/kFreeBSD GNU FreeBSD DragonFly NetBSD MSYS_NT))
112
113 HOST_OS = POSIX
114 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
115
116 .PHONY: list
117 list:
118         @$(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
119
120 .PHONY: install clangtest gpptest armtest usan asan uasan
121 install:
122         @$(MAKE) -C $(ZSTDDIR) $@
123         @$(MAKE) -C $(PRGDIR) $@
124
125 .PHONY: uninstall
126 uninstall:
127         @$(MAKE) -C $(ZSTDDIR) $@
128         @$(MAKE) -C $(PRGDIR) $@
129
130 .PHONY: travis-install
131 travis-install:
132         $(MAKE) install PREFIX=~/install_test_dir
133
134 .PHONY: gppbuild
135 gppbuild: clean
136         g++ -v
137         CC=g++ $(MAKE) -C programs all CFLAGS="-O3 -Wall -Wextra -Wundef -Wshadow -Wcast-align -Werror"
138
139 .PHONY: gcc5build
140 gcc5build: clean
141         gcc-5 -v
142         CC=gcc-5 $(MAKE) all MOREFLAGS="-Werror"
143
144 .PHONY: gcc6build
145 gcc6build: clean
146         gcc-6 -v
147         CC=gcc-6 $(MAKE) all MOREFLAGS="-Werror"
148
149 .PHONY: clangbuild
150 clangbuild: clean
151         clang -v
152         CXX=clang++ CC=clang $(MAKE) all MOREFLAGS="-Werror -Wconversion -Wno-sign-conversion -Wdocumentation"
153
154 m32build: clean
155         gcc -v
156         $(MAKE) all32
157
158 armbuild: clean
159         CC=arm-linux-gnueabi-gcc CFLAGS="-Werror" $(MAKE) allarch
160
161 aarch64build: clean
162         CC=aarch64-linux-gnu-gcc CFLAGS="-Werror" $(MAKE) allarch
163
164 ppcbuild: clean
165         CC=powerpc-linux-gnu-gcc CLAGS="-m32 -Wno-attributes -Werror" $(MAKE) allarch
166
167 ppc64build: clean
168         CC=powerpc-linux-gnu-gcc CFLAGS="-m64 -Werror" $(MAKE) allarch
169
170 armfuzz: clean
171         CC=arm-linux-gnueabi-gcc QEMU_SYS=qemu-arm-static MOREFLAGS="-static" FUZZER_FLAGS=--no-big-tests $(MAKE) -C $(TESTDIR) fuzztest
172
173 aarch64fuzz: clean
174         CC=aarch64-linux-gnu-gcc QEMU_SYS=qemu-aarch64-static MOREFLAGS="-static" FUZZER_FLAGS=--no-big-tests $(MAKE) -C $(TESTDIR) fuzztest
175
176 ppcfuzz: clean
177         CC=powerpc-linux-gnu-gcc QEMU_SYS=qemu-ppc-static MOREFLAGS="-static" FUZZER_FLAGS=--no-big-tests $(MAKE) -C $(TESTDIR) fuzztest
178
179 ppc64fuzz: clean
180         CC=powerpc-linux-gnu-gcc QEMU_SYS=qemu-ppc64-static MOREFLAGS="-m64 -static" FUZZER_FLAGS=--no-big-tests $(MAKE) -C $(TESTDIR) fuzztest
181
182 gpptest: clean
183         CC=g++ $(MAKE) -C $(PRGDIR) all CFLAGS="-O3 -Wall -Wextra -Wundef -Wshadow -Wcast-align -Werror"
184
185 gcc5test: clean
186         gcc-5 -v
187         $(MAKE) all CC=gcc-5 MOREFLAGS="-Werror"
188
189 gcc6test: clean
190         gcc-6 -v
191         $(MAKE) all CC=gcc-6 MOREFLAGS="-Werror"
192
193 clangtest: clean
194         clang -v
195         $(MAKE) all CXX=clang-++ CC=clang MOREFLAGS="-Werror -Wconversion -Wno-sign-conversion -Wdocumentation"
196
197 armtest: clean
198         $(MAKE) -C $(TESTDIR) datagen   # use native, faster
199         $(MAKE) -C $(TESTDIR) test CC=arm-linux-gnueabi-gcc QEMU_SYS=qemu-arm-static ZSTDRTTEST= MOREFLAGS="-Werror -static" FUZZER_FLAGS=--no-big-tests
200
201 aarch64test:
202         $(MAKE) -C $(TESTDIR) datagen   # use native, faster
203         $(MAKE) -C $(TESTDIR) test CC=aarch64-linux-gnu-gcc QEMU_SYS=qemu-aarch64-static ZSTDRTTEST= MOREFLAGS="-Werror -static" FUZZER_FLAGS=--no-big-tests
204
205 ppctest: clean
206         $(MAKE) -C $(TESTDIR) datagen   # use native, faster
207         $(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
208
209 ppc64test: clean
210         $(MAKE) -C $(TESTDIR) datagen   # use native, faster
211         $(MAKE) -C $(TESTDIR) test CC=powerpc-linux-gnu-gcc QEMU_SYS=qemu-ppc64-static ZSTDRTTEST= MOREFLAGS="-m64 -static" FUZZER_FLAGS=--no-big-tests
212
213 arm-ppc-compilation:
214         $(MAKE) -C $(PRGDIR) clean zstd CC=arm-linux-gnueabi-gcc QEMU_SYS=qemu-arm-static ZSTDRTTEST= MOREFLAGS="-Werror -static"
215         $(MAKE) -C $(PRGDIR) clean zstd CC=aarch64-linux-gnu-gcc QEMU_SYS=qemu-aarch64-static ZSTDRTTEST= MOREFLAGS="-Werror -static"
216         $(MAKE) -C $(PRGDIR) clean zstd CC=powerpc-linux-gnu-gcc QEMU_SYS=qemu-ppc-static ZSTDRTTEST= MOREFLAGS="-Werror -Wno-attributes -static"
217         $(MAKE) -C $(PRGDIR) clean zstd CC=powerpc-linux-gnu-gcc QEMU_SYS=qemu-ppc64-static ZSTDRTTEST= MOREFLAGS="-m64 -static"
218
219 # run UBsan with -fsanitize-recover=signed-integer-overflow
220 # due to a bug in UBsan when doing pointer subtraction
221 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63303
222
223 usan: clean
224         $(MAKE) test CC=clang MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize-recover=signed-integer-overflow -fsanitize=undefined"
225
226 asan: clean
227         $(MAKE) test CC=clang MOREFLAGS="-g -fsanitize=address"
228
229 asan-%: clean
230         LDFLAGS=-fuse-ld=gold MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize=address" $(MAKE) -C $(TESTDIR) $*
231
232 msan: clean
233         $(MAKE) test CC=clang MOREFLAGS="-g -fsanitize=memory -fno-omit-frame-pointer" HAVE_LZMA=0   # datagen.c fails this test for no obvious reason
234
235 msan-%: clean
236         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 $*
237
238 asan32: clean
239         $(MAKE) -C $(TESTDIR) test32 CC=clang MOREFLAGS="-g -fsanitize=address"
240
241 uasan: clean
242         $(MAKE) test CC=clang MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize-recover=signed-integer-overflow -fsanitize=address,undefined"
243
244 uasan-%: clean
245         LDFLAGS=-fuse-ld=gold MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize-recover=signed-integer-overflow -fsanitize=address,undefined" $(MAKE) -C $(TESTDIR) $*
246
247 tsan-%: clean
248         LDFLAGS=-fuse-ld=gold MOREFLAGS="-g -fno-sanitize-recover=all -fsanitize=thread" $(MAKE) -C $(TESTDIR) $* FUZZER_FLAGS=--no-big-tests
249
250 apt-install:
251         sudo apt-get -yq --no-install-suggests --no-install-recommends --force-yes install $(APT_PACKAGES)
252
253 apt-add-repo:
254         sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
255         sudo apt-get update -y -qq
256
257 ppcinstall:
258         APT_PACKAGES="qemu-system-ppc qemu-user-static gcc-powerpc-linux-gnu" $(MAKE) apt-install
259
260 arminstall:
261         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
262
263 valgrindinstall:
264         APT_PACKAGES="valgrind" $(MAKE) apt-install
265
266 libc6install:
267         APT_PACKAGES="libc6-dev-i386 gcc-multilib" $(MAKE) apt-install
268
269 gcc6install: apt-add-repo
270         APT_PACKAGES="libc6-dev-i386 gcc-multilib gcc-6 gcc-6-multilib" $(MAKE) apt-install
271
272 gpp6install: apt-add-repo
273         APT_PACKAGES="libc6-dev-i386 g++-multilib gcc-6 g++-6 g++-6-multilib" $(MAKE) apt-install
274
275 clang38install:
276         APT_PACKAGES="clang-3.8" $(MAKE) apt-install
277
278 endif
279
280
281 ifneq (,$(filter MSYS%,$(shell uname)))
282 HOST_OS = MSYS
283 CMAKE_PARAMS = -G"MSYS Makefiles" -DZSTD_MULTITHREAD_SUPPORT:BOOL=OFF -DZSTD_BUILD_STATIC:BOOL=ON -DZSTD_BUILD_TESTS:BOOL=ON
284 endif
285
286
287 #------------------------------------------------------------------------
288 #make tests validated only for MSYS, Linux, OSX, kFreeBSD and Hurd targets
289 #------------------------------------------------------------------------
290 ifneq (,$(filter $(HOST_OS),MSYS POSIX))
291 cmakebuild:
292         cmake --version
293         $(RM) -r $(BUILDIR)/cmake/build
294         mkdir $(BUILDIR)/cmake/build
295         cd $(BUILDIR)/cmake/build ; cmake -DCMAKE_INSTALL_PREFIX:PATH=~/install_test_dir $(CMAKE_PARAMS) .. ; $(MAKE) install ; $(MAKE) uninstall
296
297 c90build: clean
298         gcc -v
299         CFLAGS="-std=c90" $(MAKE) allmost  # will fail, due to missing support for `long long`
300
301 gnu90build: clean
302         gcc -v
303         CFLAGS="-std=gnu90" $(MAKE) allmost
304
305 c99build: clean
306         gcc -v
307         CFLAGS="-std=c99" $(MAKE) allmost
308
309 gnu99build: clean
310         gcc -v
311         CFLAGS="-std=gnu99" $(MAKE) allmost
312
313 c11build: clean
314         gcc -v
315         CFLAGS="-std=c11" $(MAKE) allmost
316
317 bmix64build: clean
318         gcc -v
319         CFLAGS="-O3 -mbmi -Werror" $(MAKE) -C $(TESTDIR) test
320
321 bmix32build: clean
322         gcc -v
323         CFLAGS="-O3 -mbmi -mx32 -Werror" $(MAKE) -C $(TESTDIR) test
324
325 bmi32build: clean
326         gcc -v
327         CFLAGS="-O3 -mbmi -m32 -Werror" $(MAKE) -C $(TESTDIR) test
328
329 staticAnalyze: clean
330         gcc -v
331         CPPFLAGS=-g scan-build --status-bugs -v $(MAKE) all
332 endif