Nguyen Anh Quynh | 26ee41a | 2013-11-27 12:11:31 +0800 | [diff] [blame] | 1 | # Capstone Disassembler Engine |
Nguyen Anh Quynh | 05e2713 | 2014-03-10 11:58:57 +0800 | [diff] [blame] | 2 | # By Nguyen Anh Quynh <aquynh@gmail.com>, 2013-2014 |
Nguyen Anh Quynh | 26ee41a | 2013-11-27 12:11:31 +0800 | [diff] [blame] | 3 | |
Nguyen Anh Quynh | 8abb345 | 2014-03-01 20:44:58 +0800 | [diff] [blame] | 4 | include ../config.mk |
Nguyen Anh Quynh | 58a0047 | 2014-05-01 22:53:52 +0800 | [diff] [blame] | 5 | include ../functions.mk |
Nguyen Anh Quynh | 8abb345 | 2014-03-01 20:44:58 +0800 | [diff] [blame] | 6 | |
Ole André Vadla Ravnås | f536d40 | 2014-05-01 15:22:25 +0200 | [diff] [blame] | 7 | # Verbose output? |
| 8 | V ?= 0 |
| 9 | |
Nguyen Anh Quynh | 26ee41a | 2013-11-27 12:11:31 +0800 | [diff] [blame] | 10 | INCDIR = ../include |
Ole André Vadla Ravnås | 35f937d | 2014-04-29 09:00:34 +0200 | [diff] [blame] | 11 | ifndef BUILDDIR |
Nguyen Anh Quynh | 5519a68 | 2014-04-29 16:24:30 +0800 | [diff] [blame] | 12 | TESTDIR = . |
Ole André Vadla Ravnås | 35f937d | 2014-04-29 09:00:34 +0200 | [diff] [blame] | 13 | OBJDIR = . |
Nguyen Anh Quynh | 5519a68 | 2014-04-29 16:24:30 +0800 | [diff] [blame] | 14 | LIBDIR = .. |
Ole André Vadla Ravnås | 35f937d | 2014-04-29 09:00:34 +0200 | [diff] [blame] | 15 | else |
Ole André Vadla Ravnås | c920daf | 2014-04-29 23:02:36 +0200 | [diff] [blame] | 16 | TESTDIR = $(BUILDDIR)/tests |
Ole André Vadla Ravnås | 7a73439 | 2014-04-30 00:06:41 +0200 | [diff] [blame] | 17 | OBJDIR = $(BUILDDIR)/obj/tests |
Ole André Vadla Ravnås | c920daf | 2014-04-29 23:02:36 +0200 | [diff] [blame] | 18 | LIBDIR = $(BUILDDIR) |
Ole André Vadla Ravnås | 35f937d | 2014-04-29 09:00:34 +0200 | [diff] [blame] | 19 | endif |
Nguyen Anh Quynh | 26ee41a | 2013-11-27 12:11:31 +0800 | [diff] [blame] | 20 | |
Nguyen Anh Quynh | d80cede | 2014-01-16 21:07:59 +0800 | [diff] [blame] | 21 | ifeq ($(CROSS),) |
| 22 | CC ?= cc |
| 23 | else |
| 24 | CC = $(CROSS)gcc |
| 25 | endif |
| 26 | |
opn | 73b6068 | 2014-01-16 12:08:49 +0100 | [diff] [blame] | 27 | |
Nguyen Anh Quynh | 910a4df | 2014-10-02 15:49:53 +0800 | [diff] [blame] | 28 | CFLAGS += -Wall -I$(INCDIR) |
Nguyen Anh Quynh | 595386c | 2014-05-10 15:50:38 +0800 | [diff] [blame] | 29 | LDFLAGS += -L$(LIBDIR) |
Nguyen Anh Quynh | 26ee41a | 2013-11-27 12:11:31 +0800 | [diff] [blame] | 30 | |
Ole André Vadla Ravnås | b202b91 | 2014-07-04 23:38:20 +0200 | [diff] [blame] | 31 | CFLAGS += $(foreach arch,$(LIBARCHS),-arch $(arch)) |
| 32 | LDFLAGS += $(foreach arch,$(LIBARCHS),-arch $(arch)) |
| 33 | |
Nguyen Anh Quynh | 26ee41a | 2013-11-27 12:11:31 +0800 | [diff] [blame] | 34 | LIBNAME = capstone |
| 35 | |
Daniel Godas-Lopez | 0f7c432 | 2013-11-28 18:22:50 +0000 | [diff] [blame] | 36 | BIN_EXT = |
Nguyen Anh Quynh | d159a03 | 2014-01-09 15:49:44 +0800 | [diff] [blame] | 37 | AR_EXT = a |
Daniel Godas-Lopez | 0f7c432 | 2013-11-28 18:22:50 +0000 | [diff] [blame] | 38 | |
| 39 | # Cygwin? |
| 40 | IS_CYGWIN := $(shell $(CC) -dumpmachine | grep -i cygwin | wc -l) |
| 41 | ifeq ($(IS_CYGWIN),1) |
| 42 | CFLAGS := $(CFLAGS:-fPIC=) |
| 43 | BIN_EXT = .exe |
Nguyen Anh Quynh | 76087d2 | 2014-05-14 14:53:51 +0800 | [diff] [blame] | 44 | AR_EXT = lib |
Daniel Godas-Lopez | 0f7c432 | 2013-11-28 18:22:50 +0000 | [diff] [blame] | 45 | else |
| 46 | # mingw? |
| 47 | IS_MINGW := $(shell $(CC) --version | grep -i mingw | wc -l) |
| 48 | ifeq ($(IS_MINGW),1) |
| 49 | CFLAGS := $(CFLAGS:-fPIC=) |
| 50 | BIN_EXT = .exe |
Nguyen Anh Quynh | 76087d2 | 2014-05-14 14:53:51 +0800 | [diff] [blame] | 51 | AR_EXT = lib |
Daniel Godas-Lopez | 0f7c432 | 2013-11-28 18:22:50 +0000 | [diff] [blame] | 52 | endif |
| 53 | endif |
| 54 | |
Nguyen Anh Quynh | 0936b56 | 2014-06-04 00:26:33 +0800 | [diff] [blame] | 55 | ifeq ($(CAPSTONE_STATIC),yes) |
| 56 | ifeq ($(IS_MINGW),1) |
| 57 | ARCHIVE = $(LIBDIR)/$(LIBNAME).$(AR_EXT) |
| 58 | else ifeq ($(IS_CYGWIN),1) |
| 59 | ARCHIVE = $(LIBDIR)/$(LIBNAME).$(AR_EXT) |
| 60 | else |
| 61 | ARCHIVE = $(LIBDIR)/lib$(LIBNAME).$(AR_EXT) |
| 62 | endif |
| 63 | endif |
| 64 | |
Daniel Godas-Lopez | 0f7c432 | 2013-11-28 18:22:50 +0000 | [diff] [blame] | 65 | .PHONY: all clean |
Nguyen Anh Quynh | 26ee41a | 2013-11-27 12:11:31 +0800 | [diff] [blame] | 66 | |
Nguyen Anh Quynh | c825819 | 2014-04-10 17:49:50 +0800 | [diff] [blame] | 67 | SOURCES = test.c test_detail.c test_skipdata.c |
Nguyen Anh Quynh | 8abb345 | 2014-03-01 20:44:58 +0800 | [diff] [blame] | 68 | ifneq (,$(findstring arm,$(CAPSTONE_ARCHS))) |
| 69 | SOURCES += test_arm.c |
| 70 | endif |
| 71 | ifneq (,$(findstring aarch64,$(CAPSTONE_ARCHS))) |
| 72 | SOURCES += test_arm64.c |
| 73 | endif |
| 74 | ifneq (,$(findstring mips,$(CAPSTONE_ARCHS))) |
| 75 | SOURCES += test_mips.c |
| 76 | endif |
| 77 | ifneq (,$(findstring powerpc,$(CAPSTONE_ARCHS))) |
| 78 | SOURCES += test_ppc.c |
| 79 | endif |
Nguyen Anh Quynh | 05e2713 | 2014-03-10 11:58:57 +0800 | [diff] [blame] | 80 | ifneq (,$(findstring sparc,$(CAPSTONE_ARCHS))) |
| 81 | SOURCES += test_sparc.c |
| 82 | endif |
Nguyen Anh Quynh | 48a14ca | 2014-03-23 08:35:45 +0800 | [diff] [blame] | 83 | ifneq (,$(findstring systemz,$(CAPSTONE_ARCHS))) |
| 84 | SOURCES += test_systemz.c |
| 85 | endif |
Nguyen Anh Quynh | 8abb345 | 2014-03-01 20:44:58 +0800 | [diff] [blame] | 86 | ifneq (,$(findstring x86,$(CAPSTONE_ARCHS))) |
| 87 | SOURCES += test_x86.c |
| 88 | endif |
Nguyen Anh Quynh | c80d840 | 2014-05-26 23:02:48 +0800 | [diff] [blame] | 89 | ifneq (,$(findstring xcore,$(CAPSTONE_ARCHS))) |
| 90 | SOURCES += test_xcore.c |
| 91 | endif |
Nguyen Anh Quynh | 8abb345 | 2014-03-01 20:44:58 +0800 | [diff] [blame] | 92 | |
Ole André Vadla Ravnås | 35f937d | 2014-04-29 09:00:34 +0200 | [diff] [blame] | 93 | OBJS = $(addprefix $(OBJDIR)/,$(SOURCES:.c=.o)) |
Nguyen Anh Quynh | 5519a68 | 2014-04-29 16:24:30 +0800 | [diff] [blame] | 94 | BINARY = $(addprefix $(TESTDIR)/,$(SOURCES:.c=$(BIN_EXT))) |
pancake | ad3cbaf | 2013-11-28 04:57:51 +0100 | [diff] [blame] | 95 | |
Daniel Godas-Lopez | 0f7c432 | 2013-11-28 18:22:50 +0000 | [diff] [blame] | 96 | all: $(BINARY) |
Nguyen Anh Quynh | 26ee41a | 2013-11-27 12:11:31 +0800 | [diff] [blame] | 97 | |
| 98 | clean: |
Nguyen Anh Quynh | 0936b56 | 2014-06-04 00:26:33 +0800 | [diff] [blame] | 99 | rm -rf $(OBJS) $(BINARY) $(TESTDIR)/*.exe $(TESTDIR)/*.static $(OBJDIR)/lib$(LIBNAME).* $(OBJDIR)/$(LIBNAME).* |
danghvu | a0f93bd | 2013-11-28 02:46:15 -0600 | [diff] [blame] | 100 | |
Daniel Godas-Lopez | 0f7c432 | 2013-11-28 18:22:50 +0000 | [diff] [blame] | 101 | $(BINARY): $(OBJS) |
danghvu | a0f93bd | 2013-11-28 02:46:15 -0600 | [diff] [blame] | 102 | |
Ole André Vadla Ravnås | 544ba8b | 2014-04-30 00:06:12 +0200 | [diff] [blame] | 103 | $(TESTDIR)/%$(BIN_EXT): $(OBJDIR)/%.o |
Ole André Vadla Ravnås | 35f937d | 2014-04-29 09:00:34 +0200 | [diff] [blame] | 104 | @mkdir -p $(@D) |
Ole André Vadla Ravnås | f536d40 | 2014-05-01 15:22:25 +0200 | [diff] [blame] | 105 | ifeq ($(V),0) |
Ole André Vadla Ravnås | 927fcbc | 2014-05-01 16:00:52 +0200 | [diff] [blame] | 106 | ifeq ($(CAPSTONE_SHARED),yes) |
Nguyen Anh Quynh | 8c0ab86 | 2014-06-03 23:43:53 +0700 | [diff] [blame] | 107 | $(call log,LINK,$(notdir $@)) |
Ole André Vadla Ravnås | f536d40 | 2014-05-01 15:22:25 +0200 | [diff] [blame] | 108 | @$(link-dynamic) |
Ole André Vadla Ravnås | 927fcbc | 2014-05-01 16:00:52 +0200 | [diff] [blame] | 109 | endif |
| 110 | ifeq ($(CAPSTONE_STATIC),yes) |
Nguyen Anh Quynh | 8c0ab86 | 2014-06-03 23:43:53 +0700 | [diff] [blame] | 111 | $(call log,LINK,$(notdir $(call staticname,$@))) |
Ole André Vadla Ravnås | f536d40 | 2014-05-01 15:22:25 +0200 | [diff] [blame] | 112 | @$(link-static) |
Ole André Vadla Ravnås | 927fcbc | 2014-05-01 16:00:52 +0200 | [diff] [blame] | 113 | endif |
Ole André Vadla Ravnås | f536d40 | 2014-05-01 15:22:25 +0200 | [diff] [blame] | 114 | else |
Ole André Vadla Ravnås | 927fcbc | 2014-05-01 16:00:52 +0200 | [diff] [blame] | 115 | ifeq ($(CAPSTONE_SHARED),yes) |
Ole André Vadla Ravnås | f536d40 | 2014-05-01 15:22:25 +0200 | [diff] [blame] | 116 | $(link-dynamic) |
Ole André Vadla Ravnås | 927fcbc | 2014-05-01 16:00:52 +0200 | [diff] [blame] | 117 | endif |
| 118 | ifeq ($(CAPSTONE_STATIC),yes) |
Ole André Vadla Ravnås | f536d40 | 2014-05-01 15:22:25 +0200 | [diff] [blame] | 119 | $(link-static) |
| 120 | endif |
Ole André Vadla Ravnås | 927fcbc | 2014-05-01 16:00:52 +0200 | [diff] [blame] | 121 | endif |
Nguyen Anh Quynh | 26ee41a | 2013-11-27 12:11:31 +0800 | [diff] [blame] | 122 | |
Ole André Vadla Ravnås | 35f937d | 2014-04-29 09:00:34 +0200 | [diff] [blame] | 123 | $(OBJDIR)/%.o: %.c |
| 124 | @mkdir -p $(@D) |
Ole André Vadla Ravnås | f536d40 | 2014-05-01 15:22:25 +0200 | [diff] [blame] | 125 | ifeq ($(V),0) |
| 126 | $(call log,CC,$(@:$(OBJDIR)/%=%)) |
| 127 | @$(compile) |
| 128 | else |
| 129 | $(compile) |
| 130 | endif |
| 131 | |
Ole André Vadla Ravnås | f536d40 | 2014-05-01 15:22:25 +0200 | [diff] [blame] | 132 | |
| 133 | define link-dynamic |
Ole André Vadla Ravnås | 6583f06 | 2014-07-04 23:09:19 +0200 | [diff] [blame] | 134 | $(CC) $(LDFLAGS) $< -l$(LIBNAME) -o $@ |
Ole André Vadla Ravnås | f536d40 | 2014-05-01 15:22:25 +0200 | [diff] [blame] | 135 | endef |
| 136 | |
Nguyen Anh Quynh | 58a0047 | 2014-05-01 22:53:52 +0800 | [diff] [blame] | 137 | |
Ole André Vadla Ravnås | f536d40 | 2014-05-01 15:22:25 +0200 | [diff] [blame] | 138 | define link-static |
Ole André Vadla Ravnås | ffc8aaa | 2014-07-04 23:39:59 +0200 | [diff] [blame] | 139 | $(CC) $(LDFLAGS) $< $(ARCHIVE) -o $(call staticname,$@) |
Ole André Vadla Ravnås | f536d40 | 2014-05-01 15:22:25 +0200 | [diff] [blame] | 140 | endef |
| 141 | |
Ole André Vadla Ravnås | f536d40 | 2014-05-01 15:22:25 +0200 | [diff] [blame] | 142 | |
| 143 | staticname = $(subst $(BIN_EXT),,$(1)).static$(BIN_EXT) |