Makefile 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. # Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
  2. # This source code is licensed under both the GPLv2 (found in the
  3. # COPYING file in the root directory) and Apache 2.0 License
  4. # (found in the LICENSE.Apache file in the root directory).
  5. ROOT_DIR = $(abspath $(shell pwd)/../)
  6. include $(ROOT_DIR)/make_config.mk
  7. PROTOBUF_CFLAGS = `pkg-config --cflags protobuf`
  8. PROTOBUF_LDFLAGS = `pkg-config --libs protobuf`
  9. PROTOBUF_MUTATOR_CFLAGS = `pkg-config --cflags libprotobuf-mutator`
  10. PROTOBUF_MUTATOR_LDFLAGS = `pkg-config --libs libprotobuf-mutator`
  11. ROCKSDB_INCLUDE_DIR = $(ROOT_DIR)/include
  12. ROCKSDB_LIB_DIR = $(ROOT_DIR)
  13. PROTO_IN = $(ROOT_DIR)/fuzz/proto
  14. PROTO_OUT = $(ROOT_DIR)/fuzz/proto/gen
  15. ifneq ($(FUZZ_ENV), ossfuzz)
  16. CC = $(CXX)
  17. CCFLAGS += -Wall -fsanitize=address,fuzzer
  18. CFLAGS += $(PLATFORM_CXXFLAGS) $(PROTOBUF_CFLAGS) $(PROTOBUF_MUTATOR_CFLAGS) -I$(PROTO_OUT) -I$(ROCKSDB_INCLUDE_DIR) -I$(ROCKSDB_LIB_DIR)
  19. LDFLAGS += $(PLATFORM_LDFLAGS) $(PROTOBUF_MUTATOR_LDFLAGS) $(PROTOBUF_LDFLAGS) -L$(ROCKSDB_LIB_DIR) -lrocksdb
  20. else
  21. # OSS-Fuzz sets various environment flags that are used for compilation.
  22. # These environment flags depend on which type of sanitizer build is being
  23. # used, however, an ASan build would set the environment flags as follows:
  24. # CFLAGS="-O1 -fno-omit-frame-pointer -gline-tables-only \
  25. -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION -fsanitize=address \
  26. -fsanitize-address-use-after-scope -fsanitize=fuzzer-no-link"
  27. # CXXFLAGS="-O1 -fno-omit-frame-pointer -gline-tables-only \
  28. -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION -fsanitize=address \
  29. -fsanitize-address-use-after-scope -fsanitize=fuzzer-no-link \
  30. -stdlib=libc++"
  31. # LIB_FUZZING_ENGINE="-fsanitize=fuzzer"
  32. CC = $(CXX)
  33. CCFLAGS = $(CXXFLAGS)
  34. CFLAGS += $(PROTOBUF_CFLAGS) $(PROTOBUF_MUTATOR_CFLAGS) -I$(PROTO_OUT) -I$(ROCKSDB_INCLUDE_DIR) -I$(ROCKSDB_LIB_DIR)
  35. LDFLAGS += $(PLATFORM_LDFLAGS) $(LIB_FUZZING_ENGINE) $(PROTOBUF_MUTATOR_LDFLAGS) $(PROTOBUF_LDFLAGS) -L$(ROCKSDB_LIB_DIR) -lrocksdb
  36. endif
  37. .PHONY: gen_proto clean
  38. # Set PROTOC_BIN when invoking `make` if a custom protoc is required.
  39. PROTOC_BIN ?= protoc
  40. gen_proto:
  41. mkdir -p $(PROTO_OUT)
  42. $(PROTOC_BIN) \
  43. --proto_path=$(PROTO_IN) \
  44. --cpp_out=$(PROTO_OUT) \
  45. $(PROTO_IN)/*.proto
  46. clean:
  47. rm -rf db_fuzzer db_map_fuzzer sst_file_writer_fuzzer $(PROTO_OUT)
  48. db_fuzzer: db_fuzzer.cc
  49. $(CC) $(CCFLAGS) -o db_fuzzer db_fuzzer.cc $(CFLAGS) $(LDFLAGS)
  50. db_map_fuzzer: gen_proto db_map_fuzzer.cc proto/gen/db_operation.pb.cc
  51. $(CC) $(CCFLAGS) -o db_map_fuzzer db_map_fuzzer.cc proto/gen/db_operation.pb.cc $(CFLAGS) $(LDFLAGS)
  52. sst_file_writer_fuzzer: gen_proto sst_file_writer_fuzzer.cc proto/gen/db_operation.pb.cc
  53. $(CC) $(CCFLAGS) -o sst_file_writer_fuzzer sst_file_writer_fuzzer.cc proto/gen/db_operation.pb.cc $(CFLAGS) $(LDFLAGS)