blob: ed99525707948fe4e8d7198998aa934045cc8c41 [file] [log] [blame]
# 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