Merge pull request #536 from PaulGrandperrin/master
Makefile: allow using BUILD_DIR for outputs
diff --git a/Makefile b/Makefile
index cc8f202..beccb8f 100644
--- a/Makefile
+++ b/Makefile
@@ -20,15 +20,38 @@
# NOTE: xcrun is within xcode...xcode is required on OSX.
#
+# --- Out-of-tree build support ---
+# Set BUILD_DIR to build in a separate directory. When unset, builds in-tree
+# as before. Example: make -f /path/to/honggfuzz/Makefile BUILD_DIR=/tmp/build
+#
+# SRCDIR: absolute path to the source tree (where this Makefile lives)
+SRCDIR := $(patsubst %/,%,$(dir $(abspath $(lastword $(MAKEFILE_LIST)))))
+
+# BUILD_DIR: where build artifacts go. Defaults to SRCDIR (in-tree build).
+BUILD_DIR ?=
+
+# When BUILD_DIR is set, use it; otherwise everything is relative to SRCDIR
+# (preserving original behaviour).
+ifdef BUILD_DIR
+ # Resolve to absolute path and strip trailing slash
+ override BUILD_DIR := $(patsubst %/,%,$(abspath $(BUILD_DIR)))
+ _OBJDIR = $(BUILD_DIR)
+else
+ _OBJDIR = $(SRCDIR)
+endif
+
+# Let make find sources in the source tree
+VPATH := $(SRCDIR)
+
# Common for all architectures
CC ?= gcc
LD = $(CC)
-BIN := honggfuzz
-HFUZZ_CC_BIN := hfuzz_cc/hfuzz-cc
+BIN := $(_OBJDIR)/honggfuzz
+HFUZZ_CC_BIN := $(_OBJDIR)/hfuzz_cc/hfuzz-cc
HFUZZ_CC_SRCS := hfuzz_cc/hfuzz-cc.c
-COMMON_CFLAGS := -std=c11 -I/usr/local/include -D_GNU_SOURCE -Wall -Wextra -Werror -Wno-format-truncation -Wno-override-init -I.
+COMMON_CFLAGS := -std=c11 -I/usr/local/include -D_GNU_SOURCE -Wall -Wextra -Werror -Wno-format-truncation -Wno-override-init -I$(SRCDIR)
COMMON_LDFLAGS := -pthread -L/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib -lm
-COMMON_SRCS := $(sort $(wildcard *.c))
+COMMON_SRCS := $(sort $(notdir $(wildcard $(SRCDIR)/*.c)))
CFLAGS ?= -O3 -mtune=native -funroll-loops
LDFLAGS ?=
LIBS_CFLAGS ?= -fPIC -fno-stack-protector -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0 # fortify-source intercepts some functions, so we disable it for libraries
@@ -45,7 +68,7 @@
ARCH := LINUX
ARCH_CFLAGS := -D_FILE_OFFSET_BITS=64
- ARCH_SRCS := $(sort $(wildcard linux/*.c))
+ ARCH_SRCS := $(sort $(patsubst $(SRCDIR)/%,%,$(wildcard $(SRCDIR)/linux/*.c)))
ARCH_LDFLAGS := -L/usr/local/include
ifeq ($(BUILD_OSSFUZZ_STATIC),true)
ARCH_LDFLAGS += -Wl,-Bstatic \
@@ -75,7 +98,7 @@
else ifeq ($(OS),Darwin)
ARCH := DARWIN
- ARCH_SRCS := $(sort $(wildcard mac/*.c) mac/mach_excServer.c mac/mach_excUser.c)
+ ARCH_SRCS := $(sort $(patsubst $(SRCDIR)/%,%,$(wildcard $(SRCDIR)/mac/*.c)) mac/mach_excServer.c mac/mach_excUser.c)
# MacOS-X grep seem to use colors unconditionally
GREP_COLOR = --color=never
@@ -145,7 +168,7 @@
else ifeq ($(OS),NetBSD)
ARCH := NETBSD
- ARCH_SRCS := $(sort $(wildcard netbsd/*.c))
+ ARCH_SRCS := $(sort $(patsubst $(SRCDIR)/%,%,$(wildcard $(SRCDIR)/netbsd/*.c)))
ARCH_CFLAGS := -I/usr/pkg/include \
-D_KERNTYPES
ARCH_LDFLAGS := -L/usr/local/lib -L/usr/pkg/lib \
@@ -156,7 +179,7 @@
else
ARCH := POSIX
- ARCH_SRCS := $(sort $(wildcard posix/*.c))
+ ARCH_SRCS := $(sort $(patsubst $(SRCDIR)/%,%,$(wildcard $(SRCDIR)/posix/*.c)))
ARCH_CFLAGS := -Wno-initializer-overrides \
-Wno-unknown-warning-option -Wno-unknown-pragmas
ARCH_LDFLAGS := -L/usr/local/lib -lm
@@ -195,21 +218,21 @@
endif
SRCS := $(COMMON_SRCS) $(ARCH_SRCS)
-OBJS := $(SRCS:.c=.o)
+OBJS := $(addprefix $(_OBJDIR)/,$(SRCS:.c=.o))
-LHFUZZ_SRCS := $(sort $(wildcard libhfuzz/*.c))
-LHFUZZ_OBJS := $(LHFUZZ_SRCS:.c=.o)
-LHFUZZ_ARCH := libhfuzz/libhfuzz.a
-LHFUZZ_SHARED := libhfuzz/libhfuzz.so
-HFUZZ_INC ?= $(shell pwd)
+LHFUZZ_SRCS := $(sort $(patsubst $(SRCDIR)/%,%,$(wildcard $(SRCDIR)/libhfuzz/*.c)))
+LHFUZZ_OBJS := $(addprefix $(_OBJDIR)/,$(LHFUZZ_SRCS:.c=.o))
+LHFUZZ_ARCH := $(_OBJDIR)/libhfuzz/libhfuzz.a
+LHFUZZ_SHARED := $(_OBJDIR)/libhfuzz/libhfuzz.so
+HFUZZ_INC ?= $(SRCDIR)
-LCOMMON_SRCS := $(sort $(wildcard libhfcommon/*.c))
-LCOMMON_OBJS := $(LCOMMON_SRCS:.c=.o)
-LCOMMON_ARCH := libhfcommon/libhfcommon.a
+LCOMMON_SRCS := $(sort $(patsubst $(SRCDIR)/%,%,$(wildcard $(SRCDIR)/libhfcommon/*.c)))
+LCOMMON_OBJS := $(addprefix $(_OBJDIR)/,$(LCOMMON_SRCS:.c=.o))
+LCOMMON_ARCH := $(_OBJDIR)/libhfcommon/libhfcommon.a
-LNETDRIVER_SRCS := $(sort $(wildcard libhfnetdriver/*.c))
-LNETDRIVER_OBJS := $(LNETDRIVER_SRCS:.c=.o)
-LNETDRIVER_ARCH := libhfnetdriver/libhfnetdriver.a
+LNETDRIVER_SRCS := $(sort $(patsubst $(SRCDIR)/%,%,$(wildcard $(SRCDIR)/libhfnetdriver/*.c)))
+LNETDRIVER_OBJS := $(addprefix $(_OBJDIR)/,$(LNETDRIVER_SRCS:.c=.o))
+LNETDRIVER_ARCH := $(_OBJDIR)/libhfnetdriver/libhfnetdriver.a
# Respect external user defines
REALOS_UPPER = $(shell echo $(REALOS) | tr '[:lower:]' '[:upper:]')
@@ -264,7 +287,7 @@
SUBDIR_ROOTS := linux mac netbsd posix libhfuzz libhfcommon libhfnetdriver
-DIRS := . $(shell find $(SUBDIR_ROOTS) -type d)
+DIRS := . $(shell find $(SUBDIR_ROOTS) -type d 2>/dev/null)
CLEAN_PATTERNS := *.o *~ core *.a *.dSYM *.la *.so *.dylib
SUBDIR_GARBAGE := $(foreach DIR,$(DIRS),$(addprefix $(DIR)/,$(CLEAN_PATTERNS)))
MAC_GARGBAGE := $(wildcard mac/mach_exc*)
@@ -277,49 +300,67 @@
$(LNETDRIVER_ARCH) $(LNETDRIVER_OBJS) \
$(MAC_GARGBAGE) $(ANDROID_GARBAGE) $(SUBDIR_GARBAGE)
+# Collect all output directories that need to exist in BUILD_DIR
+_BUILD_SUBDIRS := $(sort $(dir $(OBJS) $(LHFUZZ_OBJS) $(LCOMMON_OBJS) $(LNETDRIVER_OBJS) $(BIN) $(HFUZZ_CC_BIN)))
+
all: $(BIN) $(HFUZZ_CC_BIN) $(LHFUZZ_ARCH) $(LHFUZZ_SHARED) $(LCOMMON_ARCH) $(LNETDRIVER_ARCH)
-%.o: %.c
+# Enable second expansion for order-only prerequisite directory creation
+.SECONDEXPANSION:
+
+# Create build output directories on demand
+$(_BUILD_SUBDIRS):
+ mkdir -p $@
+
+# Generic rule: compile .c -> .o in _OBJDIR
+$(_OBJDIR)/%.o: %.c | $$(dir $$@)
$(CC) -c $(CFLAGS) $(CFLAGS_BLOCKS) -o $@ $<
mac/mach_exc.h mac/mach_excServer.c mac/mach_excServer.h mac/mach_excUser.c &:
mig -header mac/mach_exc.h -user mac/mach_excUser.c -sheader mac/mach_excServer.h \
-server mac/mach_excServer.c $(SDK)/usr/include/mach/mach_exc.defs
-mac/arch.o: mac/arch.c mac/mach_exc.h mac/mach_excServer.h
+$(_OBJDIR)/mac/arch.o: mac/arch.c mac/mach_exc.h mac/mach_excServer.h | $$(dir $$@)
$(CC) -c $(CFLAGS) $(CFLAGS_BLOCKS) -o $@ $<
-%.so: %.c
+$(_OBJDIR)/%.so: %.c | $$(dir $$@)
$(CC) -fPIC -shared $(CFLAGS) -o $@ $<
-%.dylib: %.c
+$(_OBJDIR)/%.dylib: %.c | $$(dir $$@)
$(CC) -fPIC -shared $(CFLAGS) -o $@ $<
-$(BIN): $(OBJS) $(LCOMMON_ARCH)
+$(BIN): $(OBJS) $(LCOMMON_ARCH) | $$(dir $$@)
$(LD) -o $(BIN) $(OBJS) $(LCOMMON_ARCH) $(LDFLAGS)
-$(HFUZZ_CC_BIN): $(LCOMMON_ARCH) $(LHFUZZ_ARCH) $(LNETDRIVER_ARCH) $(HFUZZ_CC_SRCS)
- $(LD) -o $@ $(HFUZZ_CC_SRCS) $(LCOMMON_ARCH) $(LDFLAGS) $(CFLAGS) $(CFLAGS_BLOCKS) -D_HFUZZ_INC_PATH=$(HFUZZ_INC)
+$(HFUZZ_CC_BIN): $(LCOMMON_ARCH) $(LHFUZZ_ARCH) $(LNETDRIVER_ARCH) $(HFUZZ_CC_SRCS) | $$(dir $$@)
+ $(LD) -o $@ $(SRCDIR)/$(HFUZZ_CC_SRCS) $(LCOMMON_ARCH) $(LDFLAGS) $(CFLAGS) $(CFLAGS_BLOCKS) -D_HFUZZ_INC_PATH=$(HFUZZ_INC)
$(LCOMMON_OBJS): $(LCOMMON_SRCS)
- $(CC) -c $(CFLAGS) $(LIBS_CFLAGS) -o $@ $(@:.o=.c)
-$(LCOMMON_ARCH): $(LCOMMON_OBJS)
+$(LCOMMON_ARCH): $(LCOMMON_OBJS) | $$(dir $$@)
$(AR) rcs $(LCOMMON_ARCH) $(LCOMMON_OBJS)
$(LHFUZZ_OBJS): $(LHFUZZ_SRCS)
- $(CC) -c $(CFLAGS) $(LIBS_CFLAGS) -o $@ $(@:.o=.c)
-$(LHFUZZ_ARCH): $(LHFUZZ_OBJS)
+# Specific pattern rules for library objects (need LIBS_CFLAGS)
+$(_OBJDIR)/libhfcommon/%.o: libhfcommon/%.c | $$(dir $$@)
+ $(CC) -c $(CFLAGS) $(LIBS_CFLAGS) -o $@ $<
+
+$(_OBJDIR)/libhfuzz/%.o: libhfuzz/%.c | $$(dir $$@)
+ $(CC) -c $(CFLAGS) $(LIBS_CFLAGS) -o $@ $<
+
+$(_OBJDIR)/libhfnetdriver/%.o: libhfnetdriver/%.c | $$(dir $$@)
+ $(CC) -c $(CFLAGS) $(LIBS_CFLAGS) -o $@ $<
+
+$(LHFUZZ_ARCH): $(LHFUZZ_OBJS) | $$(dir $$@)
$(AR) rcs $(LHFUZZ_ARCH) $(LHFUZZ_OBJS)
-$(LHFUZZ_SHARED): $(LHFUZZ_OBJS) $(LCOMMON_OBJS)
+$(LHFUZZ_SHARED): $(LHFUZZ_OBJS) $(LCOMMON_OBJS) | $$(dir $$@)
$(LD) -shared $(LHFUZZ_OBJS) $(LCOMMON_OBJS) $(LDFLAGS) -o $@
$(LNETDRIVER_OBJS): $(LNETDRIVER_SRCS)
- $(CC) -c $(CFLAGS) $(LIBS_CFLAGS) -o $@ $(@:.o=.c)
-$(LNETDRIVER_ARCH): $(LNETDRIVER_OBJS)
+$(LNETDRIVER_ARCH): $(LNETDRIVER_OBJS) | $$(dir $$@)
$(AR) rcs $(LNETDRIVER_ARCH) $(LNETDRIVER_OBJS)
.PHONY: clean
@@ -328,27 +369,27 @@
.PHONY: indent
indent:
- clang-format -i -sort-includes *.c *.h */*.c */*.h
+ cd $(SRCDIR) && clang-format -i -sort-includes *.c *.h */*.c */*.h
.PHONY: depend
depend: all
- makedepend -Y. -Y* -- *.c */*.c
+ cd $(SRCDIR) && makedepend -Y. -Y* -- *.c */*.c
.PHONY: android
android:
$(info ***************************************************************)
$(info * Use Android NDK 22 or newer *)
$(info ***************************************************************)
- @ANDROID_API=$(ANDROID_API) ANDROID_NDK_COMPILER_PREFIX=$(ANDROID_NDK_COMPILER_PREFIX) third_party/android/scripts/compile-libunwind.sh \
- third_party/android/libunwind $(ANDROID_ARCH_CPU)
+ @ANDROID_API=$(ANDROID_API) ANDROID_NDK_COMPILER_PREFIX=$(ANDROID_NDK_COMPILER_PREFIX) $(SRCDIR)/third_party/android/scripts/compile-libunwind.sh \
+ $(SRCDIR)/third_party/android/libunwind $(ANDROID_ARCH_CPU)
- @ANDROID_API=$(ANDROID_API) ANDROID_NDK_COMPILER_PREFIX=$(ANDROID_NDK_COMPILER_PREFIX) third_party/android/scripts/compile-capstone.sh \
- third_party/android/capstone $(ANDROID_ARCH_CPU)
+ @ANDROID_API=$(ANDROID_API) ANDROID_NDK_COMPILER_PREFIX=$(ANDROID_NDK_COMPILER_PREFIX) $(SRCDIR)/third_party/android/scripts/compile-capstone.sh \
+ $(SRCDIR)/third_party/android/capstone $(ANDROID_ARCH_CPU)
- @ANDROID_API=$(ANDROID_API) ANDROID_NDK_COMPILER_PREFIX=$(ANDROID_NDK_COMPILER_PREFIX) third_party/android/scripts/compile-libBlocksRuntime.sh \
- third_party/android/libBlocksRuntime $(ANDROID_ARCH_CPU)
+ @ANDROID_API=$(ANDROID_API) ANDROID_NDK_COMPILER_PREFIX=$(ANDROID_NDK_COMPILER_PREFIX) $(SRCDIR)/third_party/android/scripts/compile-libBlocksRuntime.sh \
+ $(SRCDIR)/third_party/android/libBlocksRuntime $(ANDROID_ARCH_CPU)
- ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=./android/Android.mk \
+ ndk-build NDK_PROJECT_PATH=$(SRCDIR) APP_BUILD_SCRIPT=$(SRCDIR)/android/Android.mk \
APP_PLATFORM=$(ANDROID_API) APP_ABI=$(ANDROID_APP_ABI) \
NDK_TOOLCHAIN=$(ANDROID_NDK_TOOLCHAIN) NDK_TOOLCHAIN_VERSION=$(ANDROID_NDK_TOOLCHAIN_VER) \
$(NDK_BUILD_ARGS) APP_MODULES='honggfuzz hfuzz hfnetdriver'
@@ -371,13 +412,13 @@
.PHONY: android-clean-deps
android-clean-deps:
@for cpu in arm arm64 x86 x86_64; do \
- make -C "third_party/android/capstone" clean; \
- rm -rf "third_party/android/capstone/$$cpu"; \
- make -C "third_party/android/libunwind" clean; \
- rm -rf "third_party/android/libunwind/$$cpu"; \
- ndk-build -C "third_party/android/libBlocksRuntime" \
+ make -C "$(SRCDIR)/third_party/android/capstone" clean; \
+ rm -rf "$(SRCDIR)/third_party/android/capstone/$$cpu"; \
+ make -C "$(SRCDIR)/third_party/android/libunwind" clean; \
+ rm -rf "$(SRCDIR)/third_party/android/libunwind/$$cpu"; \
+ ndk-build -C "$(SRCDIR)/third_party/android/libBlocksRuntime" \
NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=Android.mk clean; \
- rm -rf "third_party/android/libBlocksRuntime/$$cpu"; \
+ rm -rf "$(SRCDIR)/third_party/android/libBlocksRuntime/$$cpu"; \
done
PREFIX ?= /usr/local
@@ -386,111 +427,111 @@
install: all
mkdir -p -m 755 $${DESTDIR}$(BIN_PATH)
- install -m 755 honggfuzz $${DESTDIR}$(BIN_PATH)
- install -m 755 hfuzz_cc/hfuzz-cc $${DESTDIR}$(BIN_PATH)
- install -m 755 hfuzz_cc/hfuzz-clang $${DESTDIR}$(BIN_PATH)
- install -m 755 hfuzz_cc/hfuzz-clang++ $${DESTDIR}$(BIN_PATH)
- install -m 755 hfuzz_cc/hfuzz-gcc $${DESTDIR}$(BIN_PATH)
- install -m 755 hfuzz_cc/hfuzz-g++ $${DESTDIR}$(BIN_PATH)
+ install -m 755 $(BIN) $${DESTDIR}$(BIN_PATH)
+ install -m 755 $(HFUZZ_CC_BIN) $${DESTDIR}$(BIN_PATH)
+ install -m 755 $(SRCDIR)/hfuzz_cc/hfuzz-clang $${DESTDIR}$(BIN_PATH)
+ install -m 755 $(SRCDIR)/hfuzz_cc/hfuzz-clang++ $${DESTDIR}$(BIN_PATH)
+ install -m 755 $(SRCDIR)/hfuzz_cc/hfuzz-gcc $${DESTDIR}$(BIN_PATH)
+ install -m 755 $(SRCDIR)/hfuzz_cc/hfuzz-g++ $${DESTDIR}$(BIN_PATH)
install -d $${DESTDIR}$(INC_PATH)/libhfcommon
install -d $${DESTDIR}$(INC_PATH)/libhfuzz
install -d $${DESTDIR}$(INC_PATH)/libhnetdriver
- install -m 755 includes/libhfcommon/*.h $${DESTDIR}$(INC_PATH)/libhfcommon
- install -m 755 includes/libhfuzz/*.h $${DESTDIR}$(INC_PATH)/libhfuzz
- install -m 755 includes/libhfnetdriver/*.h $${DESTDIR}$(INC_PATH)/libhnetdriver
+ install -m 755 $(SRCDIR)/includes/libhfcommon/*.h $${DESTDIR}$(INC_PATH)/libhfcommon
+ install -m 755 $(SRCDIR)/includes/libhfuzz/*.h $${DESTDIR}$(INC_PATH)/libhfuzz
+ install -m 755 $(SRCDIR)/includes/libhfnetdriver/*.h $${DESTDIR}$(INC_PATH)/libhnetdriver
# DO NOT DELETE
-cmdline.o: cmdline.h honggfuzz.h libhfcommon/util.h display.h
-cmdline.o: libhfcommon/common.h libhfcommon/files.h libhfcommon/common.h
-cmdline.o: libhfcommon/log.h
-dict.o: dict.h honggfuzz.h libhfcommon/util.h libhfcommon/common.h
-dict.o: libhfcommon/log.h
-display.o: display.h honggfuzz.h libhfcommon/util.h libhfcommon/common.h
-display.o: libhfcommon/log.h
-fuzz.o: fuzz.h arch.h honggfuzz.h libhfcommon/util.h input.h
-fuzz.o: libhfcommon/common.h libhfcommon/files.h libhfcommon/common.h
-fuzz.o: libhfcommon/log.h report.h sanitizers.h socketfuzzer.h subproc.h
-honggfuzz.o: cmdline.h honggfuzz.h libhfcommon/util.h dict.h display.h fuzz.h
-honggfuzz.o: input.h libhfcommon/common.h libhfcommon/files.h
-honggfuzz.o: libhfcommon/common.h libhfcommon/log.h socketfuzzer.h subproc.h
-input.o: input.h honggfuzz.h libhfcommon/util.h dict.h fuzz.h
-input.o: libhfcommon/common.h libhfcommon/files.h libhfcommon/common.h
-input.o: libhfcommon/log.h mangle.h power.h subproc.h
-mangle.o: mangle.h honggfuzz.h libhfcommon/util.h input.h
-mangle.o: libhfcommon/common.h libhfcommon/log.h
-power.o: power.h honggfuzz.h libhfcommon/util.h libhfcommon/common.h
-report.o: report.h honggfuzz.h libhfcommon/util.h sanitizers.h
-report.o: libhfcommon/common.h libhfcommon/log.h
-sanitizers.o: sanitizers.h honggfuzz.h libhfcommon/util.h cmdline.h
-sanitizers.o: libhfcommon/common.h libhfcommon/log.h
-socketfuzzer.o: socketfuzzer.h honggfuzz.h libhfcommon/util.h
-socketfuzzer.o: libhfcommon/common.h libhfcommon/files.h libhfcommon/common.h
-socketfuzzer.o: libhfcommon/log.h libhfcommon/ns.h
-subproc.o: subproc.h honggfuzz.h libhfcommon/util.h arch.h fuzz.h
-subproc.o: libhfcommon/common.h libhfcommon/files.h libhfcommon/common.h
-subproc.o: libhfcommon/log.h
-hfuzz_cc/hfuzz-cc.o: honggfuzz.h libhfcommon/util.h libhfcommon/common.h
-hfuzz_cc/hfuzz-cc.o: libhfcommon/files.h libhfcommon/common.h
-hfuzz_cc/hfuzz-cc.o: libhfcommon/log.h
-libhfcommon/files.o: libhfcommon/files.h libhfcommon/common.h
-libhfcommon/files.o: libhfcommon/log.h libhfcommon/util.h
-libhfcommon/log.o: libhfcommon/log.h libhfcommon/common.h libhfcommon/util.h
-libhfcommon/ns.o: libhfcommon/ns.h libhfcommon/common.h libhfcommon/files.h
-libhfcommon/ns.o: libhfcommon/log.h libhfcommon/util.h
-libhfcommon/util.o: libhfcommon/util.h libhfcommon/common.h
-libhfcommon/util.o: libhfcommon/files.h libhfcommon/log.h
-libhfnetdriver/netdriver.o: libhfnetdriver/netdriver.h honggfuzz.h
-libhfnetdriver/netdriver.o: libhfcommon/util.h libhfcommon/common.h
-libhfnetdriver/netdriver.o: libhfcommon/files.h libhfcommon/common.h
-libhfnetdriver/netdriver.o: libhfcommon/log.h libhfcommon/ns.h
-libhfuzz/fetch.o: libhfuzz/fetch.h honggfuzz.h libhfcommon/util.h
-libhfuzz/fetch.o: libhfcommon/files.h libhfcommon/common.h libhfcommon/log.h
-libhfuzz/instrument.o: libhfuzz/instrument.h honggfuzz.h libhfcommon/util.h
-libhfuzz/instrument.o: libhfcommon/common.h libhfcommon/files.h
-libhfuzz/instrument.o: libhfcommon/common.h libhfcommon/log.h
-libhfuzz/linux.o: libhfcommon/common.h libhfcommon/files.h
-libhfuzz/linux.o: libhfcommon/common.h libhfcommon/log.h libhfcommon/ns.h
-libhfuzz/linux.o: libhfuzz/libhfuzz.h
-libhfuzz/memorycmp.o: libhfcommon/common.h libhfcommon/util.h
-libhfuzz/memorycmp.o: libhfuzz/instrument.h
-libhfuzz/performance.o: libhfuzz/performance.h honggfuzz.h libhfcommon/util.h
-libhfuzz/performance.o: libhfcommon/log.h libhfuzz/instrument.h
-libhfuzz/persistent.o: honggfuzz.h libhfcommon/util.h libhfcommon/common.h
-libhfuzz/persistent.o: libhfcommon/files.h libhfcommon/common.h
-libhfuzz/persistent.o: libhfcommon/log.h libhfuzz/fetch.h
-libhfuzz/persistent.o: libhfuzz/instrument.h libhfuzz/libhfuzz.h
-libhfuzz/persistent.o: libhfuzz/performance.h
-linux/arch.o: arch.h honggfuzz.h libhfcommon/util.h fuzz.h
-linux/arch.o: libhfcommon/common.h libhfcommon/files.h libhfcommon/common.h
-linux/arch.o: libhfcommon/log.h libhfcommon/ns.h linux/perf.h linux/trace.h
-linux/arch.o: sanitizers.h subproc.h
-linux/bfd.o: linux/bfd.h linux/unwind.h sanitizers.h honggfuzz.h
-linux/bfd.o: libhfcommon/util.h dict.h libhfcommon/common.h
-linux/bfd.o: libhfcommon/files.h libhfcommon/common.h libhfcommon/log.h
-linux/perf.o: linux/perf.h honggfuzz.h libhfcommon/util.h
-linux/perf.o: libhfcommon/common.h libhfcommon/files.h libhfcommon/common.h
-linux/perf.o: libhfcommon/log.h linux/pt.h
-linux/pt.o: linux/pt.h honggfuzz.h libhfcommon/util.h libhfcommon/common.h
-linux/pt.o: libhfcommon/log.h
-linux/trace.o: linux/trace.h honggfuzz.h libhfcommon/util.h
-linux/trace.o: libhfcommon/common.h libhfcommon/files.h libhfcommon/common.h
-linux/trace.o: libhfcommon/log.h linux/bfd.h linux/unwind.h sanitizers.h
-linux/trace.o: report.h socketfuzzer.h subproc.h
-linux/unwind.o: linux/unwind.h sanitizers.h honggfuzz.h libhfcommon/util.h
-linux/unwind.o: libhfcommon/common.h libhfcommon/log.h
-mac/arch.o: arch.h honggfuzz.h libhfcommon/util.h fuzz.h libhfcommon/common.h
-mac/arch.o: libhfcommon/files.h libhfcommon/common.h libhfcommon/log.h
-mac/arch.o: subproc.h
-netbsd/arch.o: arch.h honggfuzz.h libhfcommon/util.h fuzz.h
-netbsd/arch.o: libhfcommon/common.h libhfcommon/files.h libhfcommon/common.h
-netbsd/arch.o: libhfcommon/log.h libhfcommon/ns.h netbsd/trace.h subproc.h
-netbsd/trace.o: netbsd/trace.h honggfuzz.h libhfcommon/util.h
-netbsd/trace.o: libhfcommon/common.h libhfcommon/files.h libhfcommon/common.h
-netbsd/trace.o: libhfcommon/log.h netbsd/unwind.h sanitizers.h report.h
-netbsd/trace.o: subproc.h
-netbsd/unwind.o: netbsd/unwind.h sanitizers.h honggfuzz.h libhfcommon/util.h
-netbsd/unwind.o: libhfcommon/common.h libhfcommon/log.h
-posix/arch.o: arch.h honggfuzz.h libhfcommon/util.h fuzz.h
-posix/arch.o: libhfcommon/common.h libhfcommon/files.h libhfcommon/common.h
-posix/arch.o: libhfcommon/log.h report.h sanitizers.h subproc.h
+$(_OBJDIR)/cmdline.o: cmdline.h honggfuzz.h libhfcommon/util.h display.h
+$(_OBJDIR)/cmdline.o: libhfcommon/common.h libhfcommon/files.h libhfcommon/common.h
+$(_OBJDIR)/cmdline.o: libhfcommon/log.h
+$(_OBJDIR)/dict.o: dict.h honggfuzz.h libhfcommon/util.h libhfcommon/common.h
+$(_OBJDIR)/dict.o: libhfcommon/log.h
+$(_OBJDIR)/display.o: display.h honggfuzz.h libhfcommon/util.h libhfcommon/common.h
+$(_OBJDIR)/display.o: libhfcommon/log.h
+$(_OBJDIR)/fuzz.o: fuzz.h arch.h honggfuzz.h libhfcommon/util.h input.h
+$(_OBJDIR)/fuzz.o: libhfcommon/common.h libhfcommon/files.h libhfcommon/common.h
+$(_OBJDIR)/fuzz.o: libhfcommon/log.h report.h sanitizers.h socketfuzzer.h subproc.h
+$(_OBJDIR)/honggfuzz.o: cmdline.h honggfuzz.h libhfcommon/util.h dict.h display.h fuzz.h
+$(_OBJDIR)/honggfuzz.o: input.h libhfcommon/common.h libhfcommon/files.h
+$(_OBJDIR)/honggfuzz.o: libhfcommon/common.h libhfcommon/log.h socketfuzzer.h subproc.h
+$(_OBJDIR)/input.o: input.h honggfuzz.h libhfcommon/util.h dict.h fuzz.h
+$(_OBJDIR)/input.o: libhfcommon/common.h libhfcommon/files.h libhfcommon/common.h
+$(_OBJDIR)/input.o: libhfcommon/log.h mangle.h power.h subproc.h
+$(_OBJDIR)/mangle.o: mangle.h honggfuzz.h libhfcommon/util.h input.h
+$(_OBJDIR)/mangle.o: libhfcommon/common.h libhfcommon/log.h
+$(_OBJDIR)/power.o: power.h honggfuzz.h libhfcommon/util.h libhfcommon/common.h
+$(_OBJDIR)/report.o: report.h honggfuzz.h libhfcommon/util.h sanitizers.h
+$(_OBJDIR)/report.o: libhfcommon/common.h libhfcommon/log.h
+$(_OBJDIR)/sanitizers.o: sanitizers.h honggfuzz.h libhfcommon/util.h cmdline.h
+$(_OBJDIR)/sanitizers.o: libhfcommon/common.h libhfcommon/log.h
+$(_OBJDIR)/socketfuzzer.o: socketfuzzer.h honggfuzz.h libhfcommon/util.h
+$(_OBJDIR)/socketfuzzer.o: libhfcommon/common.h libhfcommon/files.h libhfcommon/common.h
+$(_OBJDIR)/socketfuzzer.o: libhfcommon/log.h libhfcommon/ns.h
+$(_OBJDIR)/subproc.o: subproc.h honggfuzz.h libhfcommon/util.h arch.h fuzz.h
+$(_OBJDIR)/subproc.o: libhfcommon/common.h libhfcommon/files.h libhfcommon/common.h
+$(_OBJDIR)/subproc.o: libhfcommon/log.h
+$(_OBJDIR)/hfuzz_cc/hfuzz-cc.o: honggfuzz.h libhfcommon/util.h libhfcommon/common.h
+$(_OBJDIR)/hfuzz_cc/hfuzz-cc.o: libhfcommon/files.h libhfcommon/common.h
+$(_OBJDIR)/hfuzz_cc/hfuzz-cc.o: libhfcommon/log.h
+$(_OBJDIR)/libhfcommon/files.o: libhfcommon/files.h libhfcommon/common.h
+$(_OBJDIR)/libhfcommon/files.o: libhfcommon/log.h libhfcommon/util.h
+$(_OBJDIR)/libhfcommon/log.o: libhfcommon/log.h libhfcommon/common.h libhfcommon/util.h
+$(_OBJDIR)/libhfcommon/ns.o: libhfcommon/ns.h libhfcommon/common.h libhfcommon/files.h
+$(_OBJDIR)/libhfcommon/ns.o: libhfcommon/log.h libhfcommon/util.h
+$(_OBJDIR)/libhfcommon/util.o: libhfcommon/util.h libhfcommon/common.h
+$(_OBJDIR)/libhfcommon/util.o: libhfcommon/files.h libhfcommon/log.h
+$(_OBJDIR)/libhfnetdriver/netdriver.o: libhfnetdriver/netdriver.h honggfuzz.h
+$(_OBJDIR)/libhfnetdriver/netdriver.o: libhfcommon/util.h libhfcommon/common.h
+$(_OBJDIR)/libhfnetdriver/netdriver.o: libhfcommon/files.h libhfcommon/common.h
+$(_OBJDIR)/libhfnetdriver/netdriver.o: libhfcommon/log.h libhfcommon/ns.h
+$(_OBJDIR)/libhfuzz/fetch.o: libhfuzz/fetch.h honggfuzz.h libhfcommon/util.h
+$(_OBJDIR)/libhfuzz/fetch.o: libhfcommon/files.h libhfcommon/common.h libhfcommon/log.h
+$(_OBJDIR)/libhfuzz/instrument.o: libhfuzz/instrument.h honggfuzz.h libhfcommon/util.h
+$(_OBJDIR)/libhfuzz/instrument.o: libhfcommon/common.h libhfcommon/files.h
+$(_OBJDIR)/libhfuzz/instrument.o: libhfcommon/common.h libhfcommon/log.h
+$(_OBJDIR)/libhfuzz/linux.o: libhfcommon/common.h libhfcommon/files.h
+$(_OBJDIR)/libhfuzz/linux.o: libhfcommon/common.h libhfcommon/log.h libhfcommon/ns.h
+$(_OBJDIR)/libhfuzz/linux.o: libhfuzz/libhfuzz.h
+$(_OBJDIR)/libhfuzz/memorycmp.o: libhfcommon/common.h libhfcommon/util.h
+$(_OBJDIR)/libhfuzz/memorycmp.o: libhfuzz/instrument.h
+$(_OBJDIR)/libhfuzz/performance.o: libhfuzz/performance.h honggfuzz.h libhfcommon/util.h
+$(_OBJDIR)/libhfuzz/performance.o: libhfcommon/log.h libhfuzz/instrument.h
+$(_OBJDIR)/libhfuzz/persistent.o: honggfuzz.h libhfcommon/util.h libhfcommon/common.h
+$(_OBJDIR)/libhfuzz/persistent.o: libhfcommon/files.h libhfcommon/common.h
+$(_OBJDIR)/libhfuzz/persistent.o: libhfcommon/log.h libhfuzz/fetch.h
+$(_OBJDIR)/libhfuzz/persistent.o: libhfuzz/instrument.h libhfuzz/libhfuzz.h
+$(_OBJDIR)/libhfuzz/persistent.o: libhfuzz/performance.h
+$(_OBJDIR)/linux/arch.o: arch.h honggfuzz.h libhfcommon/util.h fuzz.h
+$(_OBJDIR)/linux/arch.o: libhfcommon/common.h libhfcommon/files.h libhfcommon/common.h
+$(_OBJDIR)/linux/arch.o: libhfcommon/log.h libhfcommon/ns.h linux/perf.h linux/trace.h
+$(_OBJDIR)/linux/arch.o: sanitizers.h subproc.h
+$(_OBJDIR)/linux/bfd.o: linux/bfd.h linux/unwind.h sanitizers.h honggfuzz.h
+$(_OBJDIR)/linux/bfd.o: libhfcommon/util.h dict.h libhfcommon/common.h
+$(_OBJDIR)/linux/bfd.o: libhfcommon/files.h libhfcommon/common.h libhfcommon/log.h
+$(_OBJDIR)/linux/perf.o: linux/perf.h honggfuzz.h libhfcommon/util.h
+$(_OBJDIR)/linux/perf.o: libhfcommon/common.h libhfcommon/files.h libhfcommon/common.h
+$(_OBJDIR)/linux/perf.o: libhfcommon/log.h linux/pt.h
+$(_OBJDIR)/linux/pt.o: linux/pt.h honggfuzz.h libhfcommon/util.h libhfcommon/common.h
+$(_OBJDIR)/linux/pt.o: libhfcommon/log.h
+$(_OBJDIR)/linux/trace.o: linux/trace.h honggfuzz.h libhfcommon/util.h
+$(_OBJDIR)/linux/trace.o: libhfcommon/common.h libhfcommon/files.h libhfcommon/common.h
+$(_OBJDIR)/linux/trace.o: libhfcommon/log.h linux/bfd.h linux/unwind.h sanitizers.h
+$(_OBJDIR)/linux/trace.o: report.h socketfuzzer.h subproc.h
+$(_OBJDIR)/linux/unwind.o: linux/unwind.h sanitizers.h honggfuzz.h libhfcommon/util.h
+$(_OBJDIR)/linux/unwind.o: libhfcommon/common.h libhfcommon/log.h
+$(_OBJDIR)/mac/arch.o: arch.h honggfuzz.h libhfcommon/util.h fuzz.h libhfcommon/common.h
+$(_OBJDIR)/mac/arch.o: libhfcommon/files.h libhfcommon/common.h libhfcommon/log.h
+$(_OBJDIR)/mac/arch.o: subproc.h
+$(_OBJDIR)/netbsd/arch.o: arch.h honggfuzz.h libhfcommon/util.h fuzz.h
+$(_OBJDIR)/netbsd/arch.o: libhfcommon/common.h libhfcommon/files.h libhfcommon/common.h
+$(_OBJDIR)/netbsd/arch.o: libhfcommon/log.h libhfcommon/ns.h netbsd/trace.h subproc.h
+$(_OBJDIR)/netbsd/trace.o: netbsd/trace.h honggfuzz.h libhfcommon/util.h
+$(_OBJDIR)/netbsd/trace.o: libhfcommon/common.h libhfcommon/files.h libhfcommon/common.h
+$(_OBJDIR)/netbsd/trace.o: libhfcommon/log.h netbsd/unwind.h sanitizers.h report.h
+$(_OBJDIR)/netbsd/trace.o: subproc.h
+$(_OBJDIR)/netbsd/unwind.o: netbsd/unwind.h sanitizers.h honggfuzz.h libhfcommon/util.h
+$(_OBJDIR)/netbsd/unwind.o: libhfcommon/common.h libhfcommon/log.h
+$(_OBJDIR)/posix/arch.o: arch.h honggfuzz.h libhfcommon/util.h fuzz.h
+$(_OBJDIR)/posix/arch.o: libhfcommon/common.h libhfcommon/files.h libhfcommon/common.h
+$(_OBJDIR)/posix/arch.o: libhfcommon/log.h report.h sanitizers.h subproc.h