unicorn/samples/Makefile

154 lines
2.8 KiB
Makefile
Raw Normal View History

2015-08-21 07:04:50 +00:00
# Unicorn Engine
# By Nguyen Anh Quynh <aquynh@gmail.com>, 2015
include ../config.mk
UNAME_S := $(shell uname -s)
2015-08-21 07:04:50 +00:00
# Find GLIB
ifndef GLIB
2015-09-04 11:56:35 +00:00
GLIB = $(shell pkg-config --libs glib-2.0)
2015-08-21 07:04:50 +00:00
endif
2016-11-19 15:40:38 +00:00
LIBDIR = ..
BIN_EXT =
2016-11-19 15:40:38 +00:00
AR_EXT = a
2015-08-21 07:04:50 +00:00
# Verbose output?
V ?= 0
CFLAGS += -Wall -Werror -I../include
2016-11-19 15:40:38 +00:00
LDFLAGS += -L$(LIBDIR) -lunicorn -lpthread -lm $(GLIB)
LDLIBS += -lpthread -lunicorn -lm $(GLIB)
2015-08-21 07:04:50 +00:00
ifneq ($(CROSS),)
2015-08-21 07:04:50 +00:00
CC = $(CROSS)gcc
endif
ifeq ($(UNICORN_ASAN),yes)
CC = clang
CXX = clang++
AR = llvm-ar
CFLAGS += -fsanitize=address -fno-omit-frame-pointer
2016-11-19 15:40:38 +00:00
LDFLAGS := -fsanitize=address ${LDFLAGS}
endif
2015-08-21 07:04:50 +00:00
# Cygwin?
ifneq ($(filter CYGWIN%,$(UNAME_S)),)
2015-08-21 07:04:50 +00:00
CFLAGS := $(CFLAGS:-fPIC=)
LDLIBS += -lssp
BIN_EXT = .exe
2016-11-19 15:40:38 +00:00
AR_EXT = a
2015-08-21 07:04:50 +00:00
# mingw?
else ifneq ($(filter MINGW%,$(UNAME_S)),)
2015-08-21 07:04:50 +00:00
CFLAGS := $(CFLAGS:-fPIC=)
BIN_EXT = .exe
2016-11-19 15:40:38 +00:00
AR_EXT = lib
endif
ifeq ($(UNICORN_STATIC),yes)
ifneq ($(filter MINGW%,$(UNAME_S)),)
ARCHIVE = $(LIBDIR)/unicorn.$(AR_EXT)
else ifneq ($(filter CYGWIN%,$(UNAME_S)),)
ARCHIVE = $(LIBDIR)/libunicorn.$(AR_EXT)
else
ARCHIVE = $(LIBDIR)/libunicorn.$(AR_EXT)
endif
2015-08-21 07:04:50 +00:00
endif
.PHONY: all clean
2015-08-21 07:04:50 +00:00
UNICORN_ARCHS := $(shell if [ -e ../config.log ]; then cat ../config.log;\
2015-08-21 07:04:50 +00:00
else printf "$(UNICORN_ARCHS)"; fi)
SOURCES =
ifneq (,$(findstring arm,$(UNICORN_ARCHS)))
SOURCES += sample_arm.c
endif
ifneq (,$(findstring aarch64,$(UNICORN_ARCHS)))
SOURCES += sample_arm64.c
endif
ifneq (,$(findstring mips,$(UNICORN_ARCHS)))
SOURCES += sample_mips.c
endif
#ifneq (,$(findstring ppc,$(UNICORN_ARCHS)))
2015-08-21 07:04:50 +00:00
#SOURCES += sample_ppc.c
#endif
2015-08-21 07:04:50 +00:00
ifneq (,$(findstring sparc,$(UNICORN_ARCHS)))
SOURCES += sample_sparc.c
endif
ifneq (,$(findstring x86,$(UNICORN_ARCHS)))
SOURCES += sample_x86.c
SOURCES += shellcode.c
SOURCES += mem_apis.c
2016-03-24 15:56:13 +00:00
SOURCES += sample_x86_32_gdt_and_seg_regs.c
2016-04-05 03:52:26 +00:00
SOURCES += sample_batch_reg.c
2015-08-21 07:04:50 +00:00
endif
ifneq (,$(findstring m68k,$(UNICORN_ARCHS)))
SOURCES += sample_m68k.c
endif
BINS = $(SOURCES:.c=$(BIN_EXT))
OBJS = $(SOURCES:.c=.o)
2015-08-21 07:04:50 +00:00
all: $(BINS)
2015-08-21 07:04:50 +00:00
$(BINS): $(OBJS)
clean:
rm -rf *.o $(BINS)
%$(BIN_EXT): %.o
@mkdir -p $(@D)
ifeq ($(V),0)
ifeq ($(UNICORN_SHARED),yes)
$(call log,LINK,$(notdir $@))
@$(link-dynamic)
endif
ifeq ($(UNICORN_STATIC),yes)
ifneq ($(filter MINGW%,$(UNAME_S)),)
$(call log,LINK,$(notdir $(call staticname,$@)))
@$(link-static)
endif
endif
else
ifeq ($(UNICORN_SHARED),yes)
$(link-dynamic)
endif
ifeq ($(UNICORN_STATIC),yes)
ifneq ($(filter MINGW%,$(UNAME_S)),)
$(link-static)
endif
endif
endif
%.o: %.c
@mkdir -p $(@D)
ifeq ($(V),0)
$(call log,CC,$(@:%=%))
@$(compile)
else
$(compile)
endif
define link-dynamic
$(CC) $< $(LDFLAGS) -o $@
endef
define link-static
2016-11-19 15:40:38 +00:00
$(CC) $< $(ARCHIVE) $(LDFLAGS) -o $(call staticname,$@)
endef
staticname = $(subst $(BIN_EXT),,$(1)).static$(BIN_EXT)
2016-11-19 09:29:51 +00:00
define log
@printf " %-7s %s\n" "$(1)" "$(2)"
endef
define compile
${CC} ${CFLAGS} -c $< -o $@
endef