You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
bddisasm/bdshemu_fuzz/Makefile

74 lines
2.2 KiB

# Look for afl-fuzz. If it is in path we assume that afl-gcc/afl-clang/afl-clang-fast is present as well.
ifeq (, $(shell which afl-fuzz))
$(error "It looks like AFL is not in your path. AFL is available on GitHub: https://github.com/google/AFL")
endif
# Try to figure out which compiler we should use, afl-clang-fast being the preferred choice.
ifeq (, $(AFL_COMPILER))
# If AFL_COMPILER is not set, check if afl-clang-fast is available.
ifeq (, $(shell which afl-clang-fast))
# If it is not, try to figure out if we should use afl-gcc or afl-clang.
ifeq "$(findstring clang, $(shell $(CC) --version 2>/dev/null))" ""
AFL_COMPILER = afl-gcc
else
AFL_COMPILER = afl-clang
endif
else
# If it is available, use it.
AFL_COMPILER = afl-clang-fast
endif
endif
ROOT_DIR := $(realpath ..)
DISASM_SRC := $(ROOT_DIR)/bddisasm
DISASM_INC := $(DISASM_SRC)/include
SHEMU_SRC := $(ROOT_DIR)/bdshemu
PUBLIC_INC := $(ROOT_DIR)/inc
SHEMU_INC := $(PUBLIC_INC)/bdshemu
FUZZER_SRC := $(ROOT_DIR)/bdshemu_fuzz
ALL_SRC := $(shell find $(DISASM_SRC)/*.c -type f)
ALL_SRC += $(shell find $(SHEMU_SRC)/*.c -type f)
ALL_SRC += $(shell find $(FUZZER_SRC)/*.c -type f)
ALL_INC := $(shell find $(DISASM_INC)/*.h -type f)
ALL_INC += $(shell find $(PUBLIC_INC)/*.h -type f)
ALL_INC += $(shell find $(SHEMU_INC)/*.h -type f)
# Enable qui ck and dirty mode, if needed.
ifeq ($(DIRTY),y)
AFL_ARGS := -d
endif
ifdef AFL_MEMORY
AFL_ARGS := -m $(AFL_MEMORY)
endif
CFLAGS := -std=c11 -fpic -fno-strict-aliasing \
-D_REENTRANT -fstack-protector -ffunction-sections -fdata-sections \
-DNDEBUG -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 -Ofast -g3
ifeq ($(LOG),y)
PREDEFS := -DENABLE_LOGGING
endif
# Build shfuzz with AFL instrumentation.
shfuzz: $(ALL_SRC) $(ALL_INC)
@echo "Using $(AFL_COMPILER) as a compiler"
@$(AFL_COMPILER) $(PREDEFS) $(CFLAGS) -I$(DISASM_INC) -I$(PUBLIC_INC) -I$(SHEMU_INC) $(ALL_SRC) -o shfuzz
@echo "Done!"
# Run the tests in 32-bit mode.
.PHONY: fuzz32
fuzz32: shfuzz
@afl-fuzz -i ./in-32 -o ./out-32 $(AFL_ARGS) ./shfuzz @@ 32
# Run the tests in 64-bit mode.
.PHONY: fuzz64
fuzz64: shfuzz
@afl-fuzz -i ./in-64 -o ./out-64 $(AFL_ARGS) ./shfuzz @@ 64
.PHONY: clean
clean:
@rm -f ./shfuzz