#   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.


CC ?= gcc
CFLAGS += -std=c11 -I. -I/usr/local/include -I/usr/include \
	-D_GNU_SOURCE \
	-Wall -Wextra -Wno-initializer-overrides -Wno-override-init -Wno-unknown-warning-option -Werror \
	-funroll-loops -O2

LD = $(CC)
LDFLAGS += -lm -lpthread -L/usr/local/include -L/usr/include

SRCS = honggfuzz.c display.c log.c files.c fuzz.c report.c mangle.c util.c

OBJS = $(SRCS:.c=.o)
BIN = honggfuzz

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

ARCH_SRCS := $(wildcard posix/*.c)
ARCH = POSIX
SDK =

ifeq ($(OS),Linux)
	ARCH = LINUX
	CFLAGS +=  -D_FILE_OFFSET_BITS=64
	LDFLAGS += -lunwind-ptrace -lunwind-generic -lbfd -lopcodes -lrt
	ARCH_SRCS := $(wildcard linux/*.c)

	ifeq ("$(wildcard /usr/include/bfd.h)","")
		WARN_LIBRARY += "binutils-devel "
	endif
	ifeq ("$(wildcard /usr/include/libunwind-ptrace.h)","")
		WARN_LIBRARY += "libunwind-devel/libunwind8-devel "
	endif

	ifeq ($(MARCH),x86_64)
		# Support for popcnt (used in linux/perf.c)
		CFLAGS += -msse4.2
	endif	# MARCH
	ifeq ($(MARCH),i386)
		# Support for popcnt (used in linux/perf.c)
		CFLAGS += -msse4.2
	endif	# MARCH
endif	# OS Linux

ifeq ($(OS),Darwin)
	OS_VERSION = $(shell sw_vers -productVersion)
ifneq (,$(findstring 10.10,$(OS_VERSION)))
	SDK_NAME = "macosx10.10"
	CRASH_REPORT = third_party/CrashReport_Yosemite.o
else ifneq (,$(findstring 10.9,$(OS_VERSION)))
	SDK_NAME = "macosx10.9"
	CRASH_REPORT = third_party/CrashReport_Mavericks.o
else ifneq (,$(findstring 10.8,$(OS_VERSION)))
	SDK_NAME = "macosx10.8"
	CRASH_REPORT = third_party/CrashReport_Mountain_Lion.o
else
	SDK_NAME = "macosx"
	CRASH_REPORT =
endif
	CC = $(shell xcrun --sdk $(SDK_NAME) --find cc)
	SDK = $(shell xcrun --sdk $(SDK_NAME) --show-sdk-path)
	CFLAGS = -arch x86_64 -O3 -g -ggdb -std=c99 -isysroot $(SDK) -I. \
	    -x objective-c \
		-D_GNU_SOURCE \
		-pedantic \
		-Wall -Werror -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
	LD = $(shell xcrun --sdk $(SDK_NAME) --find cc)
	LDFLAGS = -F/System/Library/PrivateFrameworks -framework CoreSymbolication -framework IOKit \
		-F$(SDK)/System/Library/Frameworks -F$(SDK)/System/Library/PrivateFrameworks \
		-framework Foundation -framework ApplicationServices -framework Symbolication \
		-framework CoreServices -framework CrashReporterSupport -framework CoreFoundation \
		-framework CommerceKit -lm
	ARCH_SRCS = $(wildcard mac/*.c)
	MIG_OUTPUT = mach_exc.h mach_excUser.c mach_excServer.h mach_excServer.c
	MIG_OBJECTS = mach_excUser.o mach_excServer.o
	ARCH = DARWIN
endif	# OS Darwin

SRCS += $(ARCH_SRCS)
CFLAGS += -D_HF_ARCH_${ARCH}
INTERCEPTOR_SRCS = $(wildcard interceptor/*.c)
INTERCEPTOR_LIBS = $(INTERCEPTOR_SRCS:.c=.so)

# Control Android builds
ANDROID_DEBUG_ENABLED ?= false
ANDROID_APP_ABI       ?= armeabi-v7a
ANDROID_API           ?= android-21
NDK_BUILD_ARGS :=
ifeq ($(ANDROID_DEBUG_ENABLED),true)
	NDK_BUILD_ARGS += V=1 NDK_DEBUG=1 APP_OPTIM=debug
endif

all: warn_libs $(BIN) $(INTERCEPTOR_LIBS)

%.o: %.c
	$(CC) -c $(CFLAGS) -o $@ $<

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

warn_libs:
ifdef WARN_LIBRARY
	@/bin/echo -e "*********************************************************"
	@/bin/echo -e "Development libraries which are most likely missing on your OS:"
	@/bin/echo    "$(WARN_LIBRARY)"
	@/bin/echo -e "*********************************************************"
else
endif

$(BIN): $(MIG_OBJECTS) $(OBJS)
	$(LD) -o $(BIN) $(OBJS) $(MIG_OBJECTS) $(CRASH_REPORT) $(LDFLAGS)

$(MIG_OUTPUT): $(SDK)/usr/include/mach/mach_exc.defs
	mig -header mach_exc.h -user mach_excUser.c -sheader mach_excServer.h -server mach_excServer.c $(SDK)/usr/include/mach/mach_exc.defs

$(MIG_OBJECTS): $(MIG_OUTPUT)
	$(CC) -c $(CFLAGS) mach_excUser.c
	$(CC) -c $(CFLAGS) mach_excServer.c

clean:
	$(RM) -r core $(OBJS) $(BIN) $(MIG_OUTPUT) $(MIG_OBJECTS) $(INTERCEPTOR_LIBS) obj libs

indent:
	indent -linux -l100 -lc100 -nut -i4 *.c *.h */*.c */*.h; rm -f *~ */*~

depend:
	makedepend -Y. -Y* -- $(SRCS)
	
.PHONY:android
android:
		ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=./android/Android.mk \
			APP_PLATFORM=$(ANDROID_API) APP_ABI=$(ANDROID_APP_ABI) $(NDK_BUILD_ARGS)


# DO NOT DELETE

honggfuzz.o: common.h log.h files.h fuzz.h util.h
display.o: common.h display.h log.h util.h
log.o: common.h log.h util.h
files.o: common.h files.h log.h
fuzz.o: common.h fuzz.h arch.h display.h files.h log.h mangle.h report.h
fuzz.o: util.h
report.o: common.h report.h log.h util.h
mangle.o: common.h mangle.h log.h util.h
util.o: common.h files.h log.h
linux/ptrace_utils.o: common.h linux/ptrace_utils.h files.h linux/bfd.h
linux/ptrace_utils.o: linux/unwind.h log.h util.h
linux/perf.o: common.h linux/perf.h log.h util.h
linux/bfd.o: common.h linux/bfd.h files.h log.h util.h
linux/unwind.o: common.h linux/unwind.h log.h
linux/arch.o: common.h arch.h linux/perf.h linux/ptrace_utils.h log.h util.h
