2020-11-17 21:55:27 +01:00
|
|
|
# Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
|
|
|
|
# This source code is licensed under both the GPLv2 (found in the
|
|
|
|
# COPYING file in the root directory) and Apache 2.0 License
|
|
|
|
# (found in the LICENSE.Apache file in the root directory).
|
|
|
|
|
2020-12-12 01:07:48 +01:00
|
|
|
ROOT_DIR = $(abspath $(shell pwd)/../)
|
|
|
|
|
|
|
|
include $(ROOT_DIR)/make_config.mk
|
2020-11-17 21:55:27 +01:00
|
|
|
|
|
|
|
PROTOBUF_CFLAGS = `pkg-config --cflags protobuf`
|
|
|
|
PROTOBUF_LDFLAGS = `pkg-config --libs protobuf`
|
|
|
|
|
|
|
|
PROTOBUF_MUTATOR_CFLAGS = `pkg-config --cflags libprotobuf-mutator`
|
|
|
|
PROTOBUF_MUTATOR_LDFLAGS = `pkg-config --libs libprotobuf-mutator`
|
|
|
|
|
2020-12-12 01:07:48 +01:00
|
|
|
ROCKSDB_INCLUDE_DIR = $(ROOT_DIR)/include
|
|
|
|
ROCKSDB_LIB_DIR = $(ROOT_DIR)
|
2020-11-17 21:55:27 +01:00
|
|
|
|
2020-12-12 01:07:48 +01:00
|
|
|
PROTO_IN = $(ROOT_DIR)/fuzz/proto
|
|
|
|
PROTO_OUT = $(ROOT_DIR)/fuzz/proto/gen
|
2020-11-17 21:55:27 +01:00
|
|
|
|
2020-12-07 23:01:05 +01:00
|
|
|
ifneq ($(FUZZ_ENV), ossfuzz)
|
2022-02-01 19:29:56 +01:00
|
|
|
CC = $(CXX)
|
2020-12-12 01:07:48 +01:00
|
|
|
CCFLAGS += -Wall -fsanitize=address,fuzzer
|
|
|
|
CFLAGS += $(PLATFORM_CXXFLAGS) $(PROTOBUF_CFLAGS) $(PROTOBUF_MUTATOR_CFLAGS) -I$(PROTO_OUT) -I$(ROCKSDB_INCLUDE_DIR) -I$(ROCKSDB_LIB_DIR)
|
2022-02-01 19:29:56 +01:00
|
|
|
LDFLAGS += $(PLATFORM_LDFLAGS) $(PROTOBUF_MUTATOR_LDFLAGS) $(PROTOBUF_LDFLAGS) -L$(ROCKSDB_LIB_DIR) -lrocksdb
|
2020-12-07 23:01:05 +01:00
|
|
|
else
|
|
|
|
# OSS-Fuzz sets various environment flags that are used for compilation.
|
|
|
|
# These environment flags depend on which type of sanitizer build is being
|
|
|
|
# used, however, an ASan build would set the environment flags as follows:
|
|
|
|
# CFLAGS="-O1 -fno-omit-frame-pointer -gline-tables-only \
|
|
|
|
-DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION -fsanitize=address \
|
|
|
|
-fsanitize-address-use-after-scope -fsanitize=fuzzer-no-link"
|
|
|
|
# CXXFLAGS="-O1 -fno-omit-frame-pointer -gline-tables-only \
|
|
|
|
-DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION -fsanitize=address \
|
|
|
|
-fsanitize-address-use-after-scope -fsanitize=fuzzer-no-link \
|
|
|
|
-stdlib=libc++"
|
|
|
|
# LIB_FUZZING_ENGINE="-fsanitize=fuzzer"
|
|
|
|
CC = $(CXX)
|
|
|
|
CCFLAGS = $(CXXFLAGS)
|
2020-12-12 01:07:48 +01:00
|
|
|
CFLAGS += $(PROTOBUF_CFLAGS) $(PROTOBUF_MUTATOR_CFLAGS) -I$(PROTO_OUT) -I$(ROCKSDB_INCLUDE_DIR) -I$(ROCKSDB_LIB_DIR)
|
|
|
|
LDFLAGS += $(PLATFORM_LDFLAGS) $(LIB_FUZZING_ENGINE) $(PROTOBUF_MUTATOR_LDFLAGS) $(PROTOBUF_LDFLAGS) -L$(ROCKSDB_LIB_DIR) -lrocksdb
|
2020-12-07 23:01:05 +01:00
|
|
|
endif
|
2020-11-17 21:55:27 +01:00
|
|
|
|
2022-02-01 19:29:56 +01:00
|
|
|
.PHONY: gen_proto clean
|
|
|
|
|
|
|
|
# Set PROTOC_BIN when invoking `make` if a custom protoc is required.
|
|
|
|
PROTOC_BIN ?= protoc
|
2020-11-17 21:55:27 +01:00
|
|
|
|
|
|
|
gen_proto:
|
|
|
|
mkdir -p $(PROTO_OUT)
|
2022-02-01 19:29:56 +01:00
|
|
|
$(PROTOC_BIN) \
|
2020-11-17 21:55:27 +01:00
|
|
|
--proto_path=$(PROTO_IN) \
|
|
|
|
--cpp_out=$(PROTO_OUT) \
|
|
|
|
$(PROTO_IN)/*.proto
|
|
|
|
|
2022-02-01 19:29:56 +01:00
|
|
|
clean:
|
|
|
|
rm -rf db_fuzzer db_map_fuzzer sst_file_writer_fuzzer $(PROTO_OUT)
|
|
|
|
|
2020-12-12 01:07:48 +01:00
|
|
|
db_fuzzer: db_fuzzer.cc
|
2020-12-07 23:01:05 +01:00
|
|
|
$(CC) $(CCFLAGS) -o db_fuzzer db_fuzzer.cc $(CFLAGS) $(LDFLAGS)
|
|
|
|
|
2020-12-12 01:07:48 +01:00
|
|
|
db_map_fuzzer: gen_proto db_map_fuzzer.cc proto/gen/db_operation.pb.cc
|
2020-12-10 01:23:52 +01:00
|
|
|
$(CC) $(CCFLAGS) -o db_map_fuzzer db_map_fuzzer.cc proto/gen/db_operation.pb.cc $(CFLAGS) $(LDFLAGS)
|
|
|
|
|
2020-12-12 01:07:48 +01:00
|
|
|
sst_file_writer_fuzzer: gen_proto sst_file_writer_fuzzer.cc proto/gen/db_operation.pb.cc
|
2020-12-07 23:01:05 +01:00
|
|
|
$(CC) $(CCFLAGS) -o sst_file_writer_fuzzer sst_file_writer_fuzzer.cc proto/gen/db_operation.pb.cc $(CFLAGS) $(LDFLAGS)
|