#   honggfuzz - Makefile
#   -----------------------------------------
#
#   Author: Robert Swiecki <swiecki@google.com>
#
#   Copyright 2010-2015 by Google Inc. All Rights Reserved.
#
#   Licensed under the Apache License, Version 2.0 (the "License");
#   you may not use this file except in compliance with the License.
#   You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
#   Unless required by applicable law or agreed to in writing, software
#   distributed under the License is distributed on an "AS IS" BASIS,
#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#   See the License for the specific language governing permissions and
#   limitations under the License.
#
#   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 := $(_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$(SRCDIR)
COMMON_LDFLAGS := -pthread -L/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib -lm
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
GREP_COLOR ?=
BUILD_OSSFUZZ_STATIC ?= false # for https://github.com/google/oss-fuzz
BUILD_LINUX_NO_BFD ?= false # for users who don't want to use libbfd/binutils

REALOS = $(shell uname -s)
OS ?= $(shell uname -s)
MARCH ?= $(shell uname -m)
KERNEL ?= $(shell uname -r)

ifeq ($(OS)$(findstring Microsoft,$(KERNEL)),Linux) # matches Linux but excludes WSL (Windows Subsystem for Linux)
    ARCH := LINUX

    ARCH_CFLAGS := -D_FILE_OFFSET_BITS=64
    ARCH_SRCS := $(sort $(patsubst $(SRCDIR)/%,%,$(wildcard $(SRCDIR)/linux/*.c)))
    ARCH_LDFLAGS := -L/usr/local/include
    ifeq ($(BUILD_OSSFUZZ_STATIC),true)
            ARCH_LDFLAGS += -Wl,-Bstatic \
                            `pkg-config --libs --static libunwind-ptrace libunwind-generic` \
                            -lopcodes -lbfd -liberty -lz \
                            -Wl,-Bdynamic
    else
            ARCH_LDFLAGS += -lunwind-ptrace -lunwind-generic -lunwind  -llzma \
                            -lopcodes -lbfd
    endif
    ifeq ($(BUILD_LINUX_NO_BFD),true)
            ARCH_CFLAGS += -D_HF_LINUX_NO_BFD
    endif
    ARCH_LDFLAGS += -lrt -ldl -lm -latomic

    ifeq ("$(wildcard /usr/local/include/intel-pt.h)","/usr/local/include/intel-pt.h")
        ARCH_CFLAGS += -D_HF_LINUX_INTEL_PT_LIB
        ARCH_CFLAGS += -I/usr/local/include
        ARCH_LDFLAGS += -L/usr/local/lib -lipt -Wl,--rpath=/usr/local/lib
    endif
    ifeq ("$(wildcard /usr/include/intel-pt.h)","/usr/include/intel-pt.h")
        ARCH_CFLAGS += -D_HF_LINUX_INTEL_PT_LIB
        ARCH_LDFLAGS += -lipt
    endif

# OS Linux
else ifeq ($(OS),Darwin)
    ARCH := DARWIN

    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

    # Figure out which crash reporter to use.
    CRASHWRANGLER := third_party/mac
    OS_VERSION := $(shell sw_vers -productVersion)
    OS_MAJOR_VERSION := $(shell echo $(OS_VERSION) | cut -f1 -d.)
    OS_MINOR_VERSION := $(shell echo $(OS_VERSION) | cut -f2 -d.)

    ifeq ($(OS_MAJOR_VERSION), 13)
        CRASH_REPORT := $(CRASHWRANGLER)/CrashReport_Sierra.o
    else ifeq ($(OS_MAJOR_VERSION), 12)
        CRASH_REPORT := $(CRASHWRANGLER)/CrashReport_Sierra.o
    else ifeq ($(OS_MAJOR_VERSION), 11)
        CRASH_REPORT := $(CRASHWRANGLER)/CrashReport_Sierra.o
    else ifeq ($(OS_MAJOR_VERSION), 10)
        ifeq ($(OS_MINOR_VERSION), 15)
            CRASH_REPORT := $(CRASHWRANGLER)/CrashReport_Sierra.o
        else ifeq ($(OS_MINOR_VERSION), 14)
            CRASH_REPORT := $(CRASHWRANGLER)/CrashReport_Sierra.o
        else ifeq ($(OS_MINOR_VERSION), 13)
            CRASH_REPORT := $(CRASHWRANGLER)/CrashReport_Sierra.o
        else ifeq ($(OS_MINOR_VERSION), 12)
            CRASH_REPORT := $(CRASHWRANGLER)/CrashReport_Sierra.o
        else ifeq ($(OS_MINOR_VERSION), 11)
            # El Capitan didn't break compatibility
            CRASH_REPORT := $(CRASHWRANGLER)/CrashReport_Yosemite.o
        else ifeq ($(OS_MINOR_VERSION), 10)
            CRASH_REPORT := $(CRASHWRANGLER)/CrashReport_Yosemite.o
        else ifeq ($(OS_MINOR_VERSION), 9)
            CRASH_REPORT := $(CRASHWRANGLER)/CrashReport_Mavericks.o
        else ifeq ($(OS_MINOR_VERSION), 8)
            CRASH_REPORT := $(CRASHWRANGLER)/CrashReport_Mountain_Lion.o
        endif
    endif

    ifeq ($(CRASH_REPORT), )
        $(error Unsupported MAC OS X version)
    endif

    # Figure out which XCode SDK to use.
    OSX_SDK_VERSION := $(shell xcrun --show-sdk-version)
    SDK_NAME_V := macosx$(OSX_SDK_VERSION)
    SDK_V := $(shell xcrun --sdk $(SDK_NAME) --show-sdk-path 2>/dev/null)
    SDK_NAME := macosx
    SDK := $(shell xcrun --sdk $(SDK_NAME) --show-sdk-path 2>/dev/null)

    CC := $(shell xcrun --sdk $(SDK_NAME) --find cc)
    LD := $(shell xcrun --sdk $(SDK_NAME) --find cc)
    ARCH_CFLAGS := -isysroot $(SDK) \
                   -x objective-c -pedantic -fblocks \
                   -Wno-unused-parameter \
                   -Wimplicit -Wunused -Wcomment -Wchar-subscripts -Wuninitialized \
                   -Wreturn-type -Wpointer-arith -Wno-gnu-case-range -Wno-gnu-designator \
                   -Wno-deprecated-declarations -Wno-unknown-pragmas -Wno-attributes \
                   -Wno-embedded-directive
    ARCH_LDFLAGS := -F/System/Library/PrivateFrameworks -framework CoreSymbolication -framework IOKit \
                    -F$(SDK_V)/System/Library/Frameworks -F$(SDK_V)/System/Library/PrivateFrameworks \
                    -F$(SDK)/System/Library/Frameworks -F$(SDK)/System/Library/PrivateFrameworks \
                    -framework Foundation -framework ApplicationServices -framework Symbolication \
                    -framework CoreServices -framework CrashReporterSupport -framework CoreFoundation \
                    -framework CommerceKit $(CRASH_REPORT)

    XCODE_VER := $(shell xcodebuild -version | grep $(GREP_COLOR) "^Xcode" | cut -d " " -f2)
# OS Darwin
else ifeq ($(OS),NetBSD)
    ARCH := NETBSD

    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 \
                    -lcapstone -lrt -lm \
                    -Wl,--rpath=/usr/pkg/lib

# OS NetBSD
else
    ARCH := POSIX

    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
    ifeq ($(OS),SunOS)
        ARCH_CFLAGS += -m64 -D_POSIX_C_SOURCE=200809L -D__EXTENSIONS__=1
	ARCH_LDFLAGS += -m64 -lkstat -lsocket -lnsl -lkvm
    endif
    ifneq ($(OS),Linux)
        ARCH_LDFLAGS += -latomic
    endif
    ifneq ($(REALOS),OpenBSD)
    ifneq ($(REALOS),Darwin)
        ARCH_LDFLAGS += -lrt
    endif
    endif
# OS Posix
endif

CFLAGS_BLOCKS :=
COMPILER = $(shell $(CC) -v 2>&1 | \
  grep $(GREP_COLOR) -oE '((gcc|clang) version|LLVM version.*clang)' | \
  grep $(GREP_COLOR) -oE '(clang|gcc)' | head -n1)
ifeq ($(COMPILER),clang)
  ARCH_CFLAGS += -Wno-initializer-overrides -Wno-unknown-warning-option
  ARCH_CFLAGS += -Wno-gnu-empty-initializer -Wno-format-pedantic
  ARCH_CFLAGS += -Wno-gnu-statement-expression
  ARCH_CFLAGS += -mllvm -inline-threshold=2000
  CFLAGS_BLOCKS = -fblocks

  ifneq ($(REALOS),Darwin)
    ARCH_LDFLAGS += -Wl,-Bstatic -lBlocksRuntime -Wl,-Bdynamic
  endif
endif
ifeq ($(COMPILER),gcc)
  ARCH_CFLAGS += -finline-limit=4000
endif

SRCS := $(COMMON_SRCS) $(ARCH_SRCS)
OBJS := $(addprefix $(_OBJDIR)/,$(SRCS:.c=.o))

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 $(patsubst $(SRCDIR)/%,%,$(wildcard $(SRCDIR)/libhfcommon/*.c)))
LCOMMON_OBJS := $(addprefix $(_OBJDIR)/,$(LCOMMON_SRCS:.c=.o))
LCOMMON_ARCH := $(_OBJDIR)/libhfcommon/libhfcommon.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:]')
CFLAGS += $(COMMON_CFLAGS) $(ARCH_CFLAGS) -D_HF_ARCH_${ARCH} -D_HF_ARCH_${REALOS_UPPER}
LDFLAGS += $(COMMON_LDFLAGS) $(ARCH_LDFLAGS)

ifdef DEBUG
    CFLAGS += -g -ggdb -g3
    LDFLAGS += -g -ggdb -g3
endif

# Control Android builds
ANDROID_API           ?= android-30 # Minimal working version is android-30 (ndk 22)
ANDROID_DEBUG_ENABLED ?= false
ANDROID_APP_ABI       ?= arm64-v8a
ANDROID_SKIP_CLEAN    ?= false
NDK_BUILD_ARGS :=

ifeq ($(ANDROID_DEBUG_ENABLED),true)
  NDK_BUILD_ARGS += V=1 NDK_DEBUG=1 APP_OPTIM=debug
endif

# By default ndk-build cleans all project files to ensure that no semi-completed
# builds reach the app package. The following flag disables this check. It's mainly
# purposed to be used with android-all rule where we want recursive invocations
# to keep previous targets' binaries.
ifeq ($(ANDROID_SKIP_CLEAN),true)
  NDK_BUILD_ARGS += NDK_APP.local.cleaned_binaries=true
endif

ANDROID_NDK_TOOLCHAIN_VER := clang
# clang works only against APIs >= 23
ifeq ($(ANDROID_APP_ABI),$(filter $(ANDROID_APP_ABI),armeabi-v7a))
  ANDROID_NDK_TOOLCHAIN ?= arm-linux-androideabi-clang
  ANDROID_NDK_COMPILER_PREFIX := armv7a-linux-androideabi
  ANDROID_ARCH_CPU := arm
else ifeq ($(ANDROID_APP_ABI),$(filter $(ANDROID_APP_ABI),x86))
  ANDROID_NDK_TOOLCHAIN ?= x86-clang
  ANDROID_NDK_COMPILER_PREFIX := i686-linux-android
  ANDROID_ARCH_CPU := x86
else ifeq ($(ANDROID_APP_ABI),$(filter $(ANDROID_APP_ABI),arm64-v8a))
  ANDROID_NDK_TOOLCHAIN ?= aarch64-linux-android-clang
  ANDROID_NDK_COMPILER_PREFIX := aarch64-linux-android
  ANDROID_ARCH_CPU := arm64
else ifeq ($(ANDROID_APP_ABI),$(filter $(ANDROID_APP_ABI),x86_64))
  ANDROID_NDK_TOOLCHAIN ?= x86_64-clang
  ANDROID_NDK_COMPILER_PREFIX := x86_64-linux-android
  ANDROID_ARCH_CPU := x86_64
else
   $(error Unsuported / Unknown APP_API '$(ANDROID_APP_ABI)')
endif


SUBDIR_ROOTS := linux mac netbsd posix libhfuzz libhfcommon libhfnetdriver
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*)
ANDROID_GARBAGE := obj libs

CLEAN_TARGETS := core Makefile.bak \
  $(OBJS) $(BIN) $(HFUZZ_CC_BIN) \
  $(LHFUZZ_ARCH) $(LHFUZZ_SHARED) $(LHFUZZ_OBJS) \
  $(LCOMMON_ARCH) $(LCOMMON_OBJS) \
  $(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)

# 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

$(_OBJDIR)/mac/arch.o: mac/arch.c mac/mach_exc.h mac/mach_excServer.h | $$(dir $$@)
	$(CC) -c $(CFLAGS) $(CFLAGS_BLOCKS) -o $@ $<

$(_OBJDIR)/%.so: %.c | $$(dir $$@)
	$(CC) -fPIC -shared $(CFLAGS) -o $@ $<

$(_OBJDIR)/%.dylib: %.c | $$(dir $$@)
	$(CC) -fPIC -shared $(CFLAGS) -o $@ $<

$(BIN): $(OBJS) $(LCOMMON_ARCH) | $$(dir $$@)
	$(LD) -o $(BIN) $(OBJS) $(LCOMMON_ARCH) $(LDFLAGS)

$(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) -Wa,-I$(_OBJDIR) -D_HFUZZ_INC_PATH=$(HFUZZ_INC)

$(LCOMMON_OBJS): $(LCOMMON_SRCS)

$(LCOMMON_ARCH): $(LCOMMON_OBJS) | $$(dir $$@)
	$(AR) rcs $(LCOMMON_ARCH) $(LCOMMON_OBJS)

$(LHFUZZ_OBJS): $(LHFUZZ_SRCS)

# 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) | $$(dir $$@)
	$(LD) -shared $(LHFUZZ_OBJS) $(LCOMMON_OBJS) $(LDFLAGS) -o $@

$(LNETDRIVER_OBJS): $(LNETDRIVER_SRCS)

$(LNETDRIVER_ARCH): $(LNETDRIVER_OBJS) | $$(dir $$@)
	$(AR) rcs $(LNETDRIVER_ARCH) $(LNETDRIVER_OBJS)

.PHONY: clean
clean:
	$(RM) -r $(CLEAN_TARGETS)

.PHONY: indent
indent:
	cd $(SRCDIR) && clang-format -i -sort-includes  *.c *.h */*.c */*.h

.PHONY: depend
depend: all
	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) $(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) $(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) $(SRCDIR)/third_party/android/scripts/compile-libBlocksRuntime.sh \
	$(SRCDIR)/third_party/android/libBlocksRuntime $(ANDROID_ARCH_CPU)

	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'

# Loop all ABIs and pass-through flags since visibility is lost due to sub-process
.PHONY: android-all
android-all:
	@echo "Cleaning workspace:"
	$(MAKE) clean
	@echo ""

	for abi in armeabi-v7a arm64-v8a x86 x86_64; do \
	  ANDROID_APP_ABI=$$abi ANDROID_SKIP_CLEAN=true \
	  ANDROID_API=$(ANDROID_API) ANDROID_DEBUG_ENABLED=$(ANDROID_DEBUG_ENABLED) \
	  $(MAKE) android || { \
	    echo "Recursive make failed"; exit 1; }; \
	  echo ""; \
	done

.PHONY: android-clean-deps
android-clean-deps:
	@for cpu in arm arm64 x86 x86_64; do \
	  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 "$(SRCDIR)/third_party/android/libBlocksRuntime/$$cpu"; \
	done

PREFIX		?= /usr/local
BIN_PATH	= $(PREFIX)/bin
INC_PATH	= $(PREFIX)/include

install: all
	mkdir -p -m 755 $${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 $(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

$(_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
