]> git.proxmox.com Git - ceph.git/blame - ceph/src/zstd/tests/fuzz/Makefile
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / zstd / tests / fuzz / Makefile
CommitLineData
11fdf7f2 1# ################################################################
f67539c2 2# Copyright (c) 2016-2020, Facebook, Inc.
11fdf7f2
TL
3# All rights reserved.
4#
5# 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).
f67539c2 8# You may select, at your option, one of the above-listed licenses.
11fdf7f2
TL
9# ################################################################
10
11# Optionally user defined flags
12CFLAGS ?= -O3
13CXXFLAGS ?= -O3
14CPPFLAGS ?=
15LDFLAGS ?=
16ARFLAGS ?=
17LIB_FUZZING_ENGINE ?= libregression.a
18PYTHON ?= python
19ifeq ($(shell uname), Darwin)
20 DOWNLOAD?=curl -L -o
21else
22 DOWNLOAD?=wget -O
23endif
24CORPORA_URL_PREFIX:=https://github.com/facebook/zstd/releases/download/fuzz-corpora/
25
26ZSTDDIR = ../../lib
27PRGDIR = ../../programs
28
29FUZZ_CPPFLAGS := -I$(ZSTDDIR) -I$(ZSTDDIR)/common -I$(ZSTDDIR)/compress \
f67539c2
TL
30 -I$(ZSTDDIR)/dictBuilder -I$(ZSTDDIR)/deprecated -I$(ZSTDDIR)/legacy \
31 -I$(PRGDIR) -DZSTD_MULTITHREAD -DZSTD_LEGACY_SUPPORT=1 $(CPPFLAGS)
11fdf7f2
TL
32FUZZ_EXTRA_FLAGS := -Wall -Wextra -Wcast-qual -Wcast-align -Wshadow \
33 -Wstrict-aliasing=1 -Wswitch-enum -Wdeclaration-after-statement \
9f95a23c 34 -Wstrict-prototypes -Wundef \
11fdf7f2
TL
35 -Wvla -Wformat=2 -Winit-self -Wfloat-equal -Wwrite-strings \
36 -Wredundant-decls \
37 -g -fno-omit-frame-pointer
38FUZZ_CFLAGS := $(FUZZ_EXTRA_FLAGS) $(CFLAGS)
39FUZZ_CXXFLAGS := $(FUZZ_EXTRA_FLAGS) -std=c++11 $(CXXFLAGS)
9f95a23c 40FUZZ_LDFLAGS := -pthread $(LDFLAGS)
11fdf7f2
TL
41FUZZ_ARFLAGS := $(ARFLAGS)
42FUZZ_TARGET_FLAGS = $(FUZZ_CPPFLAGS) $(FUZZ_CXXFLAGS) $(FUZZ_LDFLAGS)
43
f67539c2
TL
44FUZZ_ROUND_TRIP_FLAGS := -DFUZZING_ASSERT_VALID_SEQUENCE
45
46FUZZ_HEADERS := fuzz_helpers.h fuzz.h zstd_helpers.h fuzz_data_producer.h
47FUZZ_SRC := $(PRGDIR)/util.c ./fuzz_helpers.c ./zstd_helpers.c ./fuzz_data_producer.c
11fdf7f2
TL
48
49ZSTDCOMMON_SRC := $(ZSTDDIR)/common/*.c
50ZSTDCOMP_SRC := $(ZSTDDIR)/compress/*.c
51ZSTDDECOMP_SRC := $(ZSTDDIR)/decompress/*.c
9f95a23c 52ZSTDDICT_SRC := $(ZSTDDIR)/dictBuilder/*.c
f67539c2 53ZSTDLEGACY_SRC := $(ZSTDDIR)/legacy/*.c
11fdf7f2
TL
54FUZZ_SRC := \
55 $(FUZZ_SRC) \
56 $(ZSTDDECOMP_SRC) \
57 $(ZSTDCOMMON_SRC) \
9f95a23c 58 $(ZSTDCOMP_SRC) \
f67539c2
TL
59 $(ZSTDDICT_SRC) \
60 $(ZSTDLEGACY_SRC)
61FUZZ_SRC := $(wildcard $(FUZZ_SRC))
62
63FUZZ_D_OBJ1 := $(subst $(ZSTDDIR)/common/,d_lib_common_,$(FUZZ_SRC))
64FUZZ_D_OBJ2 := $(subst $(ZSTDDIR)/compress/,d_lib_compress_,$(FUZZ_D_OBJ1))
65FUZZ_D_OBJ3 := $(subst $(ZSTDDIR)/decompress/,d_lib_decompress_,$(FUZZ_D_OBJ2))
66FUZZ_D_OBJ4 := $(subst $(ZSTDDIR)/dictBuilder/,d_lib_dictBuilder_,$(FUZZ_D_OBJ3))
67FUZZ_D_OBJ5 := $(subst $(ZSTDDIR)/legacy/,d_lib_legacy_,$(FUZZ_D_OBJ4))
68FUZZ_D_OBJ6 := $(subst $(PRGDIR)/,d_prg_,$(FUZZ_D_OBJ5))
69FUZZ_D_OBJ7 := $(subst $\./,d_fuzz_,$(FUZZ_D_OBJ6))
70FUZZ_DECOMPRESS_OBJ := $(FUZZ_D_OBJ7:.c=.o)
71
72FUZZ_RT_OBJ1 := $(subst $(ZSTDDIR)/common/,rt_lib_common_,$(FUZZ_SRC))
73FUZZ_RT_OBJ2 := $(subst $(ZSTDDIR)/compress/,rt_lib_compress_,$(FUZZ_RT_OBJ1))
74FUZZ_RT_OBJ3 := $(subst $(ZSTDDIR)/decompress/,rt_lib_decompress_,$(FUZZ_RT_OBJ2))
75FUZZ_RT_OBJ4 := $(subst $(ZSTDDIR)/dictBuilder/,rt_lib_dictBuilder_,$(FUZZ_RT_OBJ3))
76FUZZ_RT_OBJ5 := $(subst $(ZSTDDIR)/legacy/,rt_lib_legacy_,$(FUZZ_RT_OBJ4))
77FUZZ_RT_OBJ6 := $(subst $(PRGDIR)/,rt_prg_,$(FUZZ_RT_OBJ5))
78FUZZ_RT_OBJ7 := $(subst $\./,rt_fuzz_,$(FUZZ_RT_OBJ6))
79FUZZ_ROUND_TRIP_OBJ := $(FUZZ_RT_OBJ7:.c=.o)
11fdf7f2
TL
80
81.PHONY: default all clean cleanall
82
83default: all
84
85FUZZ_TARGETS := \
86 simple_round_trip \
87 stream_round_trip \
88 block_round_trip \
89 simple_decompress \
90 stream_decompress \
9f95a23c
TL
91 block_decompress \
92 dictionary_round_trip \
f67539c2
TL
93 dictionary_decompress \
94 zstd_frame_info \
95 simple_compress \
96 dictionary_loader \
97 raw_dictionary_round_trip \
98 dictionary_stream_round_trip
11fdf7f2
TL
99
100all: $(FUZZ_TARGETS)
101
f67539c2
TL
102rt_lib_common_%.o: $(ZSTDDIR)/common/%.c
103 $(CC) $(FUZZ_CPPFLAGS) $(FUZZ_CFLAGS) $(FUZZ_ROUND_TRIP_FLAGS) $< -c -o $@
104
105rt_lib_compress_%.o: $(ZSTDDIR)/compress/%.c
106 $(CC) $(FUZZ_CPPFLAGS) $(FUZZ_CFLAGS) $(FUZZ_ROUND_TRIP_FLAGS) $< -c -o $@
107
108rt_lib_decompress_%.o: $(ZSTDDIR)/decompress/%.c
109 $(CC) $(FUZZ_CPPFLAGS) $(FUZZ_CFLAGS) $(FUZZ_ROUND_TRIP_FLAGS) $< -c -o $@
110
111rt_lib_dictBuilder_%.o: $(ZSTDDIR)/dictBuilder/%.c
112 $(CC) $(FUZZ_CPPFLAGS) $(FUZZ_CFLAGS) $(FUZZ_ROUND_TRIP_FLAGS) $< -c -o $@
113
114rt_lib_legacy_%.o: $(ZSTDDIR)/legacy/%.c
115 $(CC) $(FUZZ_CPPFLAGS) $(FUZZ_CFLAGS) $(FUZZ_ROUND_TRIP_FLAGS) $< -c -o $@
116
117rt_prg_%.o: $(PRGDIR)/%.c
118 $(CC) $(FUZZ_CPPFLAGS) $(FUZZ_CFLAGS) $(FUZZ_ROUND_TRIP_FLAGS) $< -c -o $@
119
120rt_fuzz_%.o: %.c
121 $(CC) $(FUZZ_CPPFLAGS) $(FUZZ_CFLAGS) $(FUZZ_ROUND_TRIP_FLAGS) $< -c -o $@
122
123d_lib_common_%.o: $(ZSTDDIR)/common/%.c
124 $(CC) $(FUZZ_CPPFLAGS) $(FUZZ_CFLAGS) $< -c -o $@
125
126d_lib_compress_%.o: $(ZSTDDIR)/compress/%.c
127 $(CC) $(FUZZ_CPPFLAGS) $(FUZZ_CFLAGS) $< -c -o $@
11fdf7f2 128
f67539c2
TL
129d_lib_decompress_%.o: $(ZSTDDIR)/decompress/%.c
130 $(CC) $(FUZZ_CPPFLAGS) $(FUZZ_CFLAGS) $< -c -o $@
11fdf7f2 131
f67539c2
TL
132d_lib_dictBuilder_%.o: $(ZSTDDIR)/dictBuilder/%.c
133 $(CC) $(FUZZ_CPPFLAGS) $(FUZZ_CFLAGS) $< -c -o $@
11fdf7f2 134
f67539c2
TL
135d_lib_legacy_%.o: $(ZSTDDIR)/legacy/%.c
136 $(CC) $(FUZZ_CPPFLAGS) $(FUZZ_CFLAGS) $< -c -o $@
11fdf7f2 137
f67539c2
TL
138d_prg_%.o: $(PRGDIR)/%.c
139 $(CC) $(FUZZ_CPPFLAGS) $(FUZZ_CFLAGS) $< -c -o $@
11fdf7f2 140
f67539c2
TL
141d_fuzz_%.o: %.c
142 $(CC) $(FUZZ_CPPFLAGS) $(FUZZ_CFLAGS) $< -c -o $@
11fdf7f2 143
f67539c2
TL
144simple_round_trip: $(FUZZ_HEADERS) $(FUZZ_ROUND_TRIP_OBJ) rt_fuzz_simple_round_trip.o
145 $(CXX) $(FUZZ_TARGET_FLAGS) $(FUZZ_ROUND_TRIP_OBJ) rt_fuzz_simple_round_trip.o $(LIB_FUZZING_ENGINE) -o $@
11fdf7f2 146
f67539c2
TL
147stream_round_trip: $(FUZZ_HEADERS) $(FUZZ_ROUND_TRIP_OBJ) rt_fuzz_stream_round_trip.o
148 $(CXX) $(FUZZ_TARGET_FLAGS) $(FUZZ_ROUND_TRIP_OBJ) rt_fuzz_stream_round_trip.o $(LIB_FUZZING_ENGINE) -o $@
9f95a23c 149
f67539c2
TL
150block_round_trip: $(FUZZ_HEADERS) $(FUZZ_ROUND_TRIP_OBJ) rt_fuzz_block_round_trip.o
151 $(CXX) $(FUZZ_TARGET_FLAGS) $(FUZZ_ROUND_TRIP_OBJ) rt_fuzz_block_round_trip.o $(LIB_FUZZING_ENGINE) -o $@
9f95a23c 152
f67539c2
TL
153simple_decompress: $(FUZZ_HEADERS) $(FUZZ_DECOMPRESS_OBJ) d_fuzz_simple_decompress.o
154 $(CXX) $(FUZZ_TARGET_FLAGS) $(FUZZ_DECOMPRESS_OBJ) d_fuzz_simple_decompress.o $(LIB_FUZZING_ENGINE) -o $@
11fdf7f2 155
f67539c2
TL
156stream_decompress: $(FUZZ_HEADERS) $(FUZZ_DECOMPRESS_OBJ) d_fuzz_stream_decompress.o
157 $(CXX) $(FUZZ_TARGET_FLAGS) $(FUZZ_DECOMPRESS_OBJ) d_fuzz_stream_decompress.o $(LIB_FUZZING_ENGINE) -o $@
158
159block_decompress: $(FUZZ_HEADERS) $(FUZZ_DECOMPRESS_OBJ) d_fuzz_block_decompress.o
160 $(CXX) $(FUZZ_TARGET_FLAGS) $(FUZZ_DECOMPRESS_OBJ) d_fuzz_block_decompress.o $(LIB_FUZZING_ENGINE) -o $@
161
162dictionary_round_trip: $(FUZZ_HEADERS) $(FUZZ_ROUND_TRIP_OBJ) rt_fuzz_dictionary_round_trip.o
163 $(CXX) $(FUZZ_TARGET_FLAGS) $(FUZZ_ROUND_TRIP_OBJ) rt_fuzz_dictionary_round_trip.o $(LIB_FUZZING_ENGINE) -o $@
164
165raw_dictionary_round_trip: $(FUZZ_HEADERS) $(FUZZ_ROUND_TRIP_OBJ) rt_fuzz_raw_dictionary_round_trip.o
166 $(CXX) $(FUZZ_TARGET_FLAGS) $(FUZZ_ROUND_TRIP_OBJ) rt_fuzz_raw_dictionary_round_trip.o $(LIB_FUZZING_ENGINE) -o $@
167
168dictionary_stream_round_trip: $(FUZZ_HEADERS) $(FUZZ_ROUND_TRIP_OBJ) rt_fuzz_dictionary_stream_round_trip.o
169 $(CXX) $(FUZZ_TARGET_FLAGS) $(FUZZ_ROUND_TRIP_OBJ) rt_fuzz_dictionary_stream_round_trip.o $(LIB_FUZZING_ENGINE) -o $@
170
171dictionary_decompress: $(FUZZ_HEADERS) $(FUZZ_DECOMPRESS_OBJ) d_fuzz_dictionary_decompress.o
172 $(CXX) $(FUZZ_TARGET_FLAGS) $(FUZZ_DECOMPRESS_OBJ) d_fuzz_dictionary_decompress.o $(LIB_FUZZING_ENGINE) -o $@
173
174simple_compress: $(FUZZ_HEADERS) $(FUZZ_ROUND_TRIP_OBJ) rt_fuzz_simple_compress.o
175 $(CXX) $(FUZZ_TARGET_FLAGS) $(FUZZ_ROUND_TRIP_OBJ) rt_fuzz_simple_compress.o $(LIB_FUZZING_ENGINE) -o $@
176
177zstd_frame_info: $(FUZZ_HEADERS) $(FUZZ_DECOMPRESS_OBJ) d_fuzz_zstd_frame_info.o
178 $(CXX) $(FUZZ_TARGET_FLAGS) $(FUZZ_DECOMPRESS_OBJ) d_fuzz_zstd_frame_info.o $(LIB_FUZZING_ENGINE) -o $@
179
180dictionary_loader: $(FUZZ_HEADERS) $(FUZZ_ROUND_TRIP_OBJ) rt_fuzz_dictionary_loader.o
181 $(CXX) $(FUZZ_TARGET_FLAGS) $(FUZZ_ROUND_TRIP_OBJ) rt_fuzz_dictionary_loader.o $(LIB_FUZZING_ENGINE) -o $@
182
183libregression.a: $(FUZZ_HEADERS) $(PRGDIR)/util.h $(PRGDIR)/util.c d_fuzz_regression_driver.o
184 $(AR) $(FUZZ_ARFLAGS) $@ d_fuzz_regression_driver.o
11fdf7f2
TL
185
186corpora/%_seed_corpus.zip:
187 @mkdir -p corpora
188 $(DOWNLOAD) $@ $(CORPORA_URL_PREFIX)$*_seed_corpus.zip
189
190corpora/%: corpora/%_seed_corpus.zip
191 unzip -q $^ -d $@
192
193.PHONY: corpora
194corpora: $(patsubst %,corpora/%,$(FUZZ_TARGETS))
195
f67539c2
TL
196.PHONY: seedcorpora
197seedcorpora: $(patsubst %,corpora/%_seed_corpus.zip,$(FUZZ_TARGETS))
198
11fdf7f2
TL
199regressiontest: corpora
200 CC="$(CC)" CXX="$(CXX)" CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" LDFLAGS="$(LDFLAGS)" $(PYTHON) ./fuzz.py build all
201 $(PYTHON) ./fuzz.py regression all
202
203clean:
11fdf7f2
TL
204 @$(RM) *.a *.o
205 @$(RM) simple_round_trip stream_round_trip simple_decompress \
f67539c2
TL
206 stream_decompress block_decompress block_round_trip \
207 simple_compress dictionary_round_trip dictionary_decompress \
208 zstd_frame_info
11fdf7f2
TL
209
210cleanall:
211 @$(RM) -r Fuzzer
212 @$(RM) -r corpora