blob: 907177b22e5bd08ab2f4d37b35a06e4b0c6d0ab0 [file] [log] [blame]
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +08001# Capstone Disassembler Engine
Nguyen Anh Quynh05e27132014-03-10 11:58:57 +08002# By Nguyen Anh Quynh <aquynh@gmail.com>, 2013-2014
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +08003
Nguyen Anh Quynh8abb3452014-03-01 20:44:58 +08004include ../config.mk
Nguyen Anh Quynh58a00472014-05-01 22:53:52 +08005include ../functions.mk
Nguyen Anh Quynh8abb3452014-03-01 20:44:58 +08006
Ole André Vadla Ravnåsf536d402014-05-01 15:22:25 +02007# Verbose output?
8V ?= 0
9
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +080010INCDIR = ../include
Ole André Vadla Ravnås35f937d2014-04-29 09:00:34 +020011ifndef BUILDDIR
Nguyen Anh Quynh5519a682014-04-29 16:24:30 +080012TESTDIR = .
Ole André Vadla Ravnås35f937d2014-04-29 09:00:34 +020013OBJDIR = .
Nguyen Anh Quynh5519a682014-04-29 16:24:30 +080014LIBDIR = ..
Ole André Vadla Ravnås35f937d2014-04-29 09:00:34 +020015else
Ole André Vadla Ravnåsc920daf2014-04-29 23:02:36 +020016TESTDIR = $(BUILDDIR)/tests
Ole André Vadla Ravnås7a734392014-04-30 00:06:41 +020017OBJDIR = $(BUILDDIR)/obj/tests
Ole André Vadla Ravnåsc920daf2014-04-29 23:02:36 +020018LIBDIR = $(BUILDDIR)
Ole André Vadla Ravnås35f937d2014-04-29 09:00:34 +020019endif
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +080020
Nguyen Anh Quynhd80cede2014-01-16 21:07:59 +080021ifeq ($(CROSS),)
22CC ?= cc
23else
24CC = $(CROSS)gcc
25endif
26
opn73b60682014-01-16 12:08:49 +010027
Nguyen Anh Quynh910a4df2014-10-02 15:49:53 +080028CFLAGS += -Wall -I$(INCDIR)
Nguyen Anh Quynh595386c2014-05-10 15:50:38 +080029LDFLAGS += -L$(LIBDIR)
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +080030
Ole André Vadla Ravnåsb202b912014-07-04 23:38:20 +020031CFLAGS += $(foreach arch,$(LIBARCHS),-arch $(arch))
32LDFLAGS += $(foreach arch,$(LIBARCHS),-arch $(arch))
33
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +080034LIBNAME = capstone
35
Daniel Godas-Lopez0f7c4322013-11-28 18:22:50 +000036BIN_EXT =
Nguyen Anh Quynhd159a032014-01-09 15:49:44 +080037AR_EXT = a
Daniel Godas-Lopez0f7c4322013-11-28 18:22:50 +000038
39# Cygwin?
40IS_CYGWIN := $(shell $(CC) -dumpmachine | grep -i cygwin | wc -l)
41ifeq ($(IS_CYGWIN),1)
42CFLAGS := $(CFLAGS:-fPIC=)
43BIN_EXT = .exe
Nguyen Anh Quynh76087d22014-05-14 14:53:51 +080044AR_EXT = lib
Daniel Godas-Lopez0f7c4322013-11-28 18:22:50 +000045else
46# mingw?
47IS_MINGW := $(shell $(CC) --version | grep -i mingw | wc -l)
48ifeq ($(IS_MINGW),1)
49CFLAGS := $(CFLAGS:-fPIC=)
50BIN_EXT = .exe
Nguyen Anh Quynh76087d22014-05-14 14:53:51 +080051AR_EXT = lib
Daniel Godas-Lopez0f7c4322013-11-28 18:22:50 +000052endif
53endif
54
Nguyen Anh Quynh0936b562014-06-04 00:26:33 +080055ifeq ($(CAPSTONE_STATIC),yes)
56ifeq ($(IS_MINGW),1)
57ARCHIVE = $(LIBDIR)/$(LIBNAME).$(AR_EXT)
58else ifeq ($(IS_CYGWIN),1)
59ARCHIVE = $(LIBDIR)/$(LIBNAME).$(AR_EXT)
60else
61ARCHIVE = $(LIBDIR)/lib$(LIBNAME).$(AR_EXT)
62endif
63endif
64
Daniel Godas-Lopez0f7c4322013-11-28 18:22:50 +000065.PHONY: all clean
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +080066
Nguyen Anh Quynhc8258192014-04-10 17:49:50 +080067SOURCES = test.c test_detail.c test_skipdata.c
Nguyen Anh Quynh8abb3452014-03-01 20:44:58 +080068ifneq (,$(findstring arm,$(CAPSTONE_ARCHS)))
69SOURCES += test_arm.c
70endif
71ifneq (,$(findstring aarch64,$(CAPSTONE_ARCHS)))
72SOURCES += test_arm64.c
73endif
74ifneq (,$(findstring mips,$(CAPSTONE_ARCHS)))
75SOURCES += test_mips.c
76endif
77ifneq (,$(findstring powerpc,$(CAPSTONE_ARCHS)))
78SOURCES += test_ppc.c
79endif
Nguyen Anh Quynh05e27132014-03-10 11:58:57 +080080ifneq (,$(findstring sparc,$(CAPSTONE_ARCHS)))
81SOURCES += test_sparc.c
82endif
Nguyen Anh Quynh48a14ca2014-03-23 08:35:45 +080083ifneq (,$(findstring systemz,$(CAPSTONE_ARCHS)))
84SOURCES += test_systemz.c
85endif
Nguyen Anh Quynh8abb3452014-03-01 20:44:58 +080086ifneq (,$(findstring x86,$(CAPSTONE_ARCHS)))
87SOURCES += test_x86.c
88endif
Nguyen Anh Quynhc80d8402014-05-26 23:02:48 +080089ifneq (,$(findstring xcore,$(CAPSTONE_ARCHS)))
90SOURCES += test_xcore.c
91endif
Nguyen Anh Quynh8abb3452014-03-01 20:44:58 +080092
Ole André Vadla Ravnås35f937d2014-04-29 09:00:34 +020093OBJS = $(addprefix $(OBJDIR)/,$(SOURCES:.c=.o))
Nguyen Anh Quynh5519a682014-04-29 16:24:30 +080094BINARY = $(addprefix $(TESTDIR)/,$(SOURCES:.c=$(BIN_EXT)))
pancakead3cbaf2013-11-28 04:57:51 +010095
Daniel Godas-Lopez0f7c4322013-11-28 18:22:50 +000096all: $(BINARY)
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +080097
98clean:
Nguyen Anh Quynh0936b562014-06-04 00:26:33 +080099 rm -rf $(OBJS) $(BINARY) $(TESTDIR)/*.exe $(TESTDIR)/*.static $(OBJDIR)/lib$(LIBNAME).* $(OBJDIR)/$(LIBNAME).*
danghvua0f93bd2013-11-28 02:46:15 -0600100
Daniel Godas-Lopez0f7c4322013-11-28 18:22:50 +0000101$(BINARY): $(OBJS)
danghvua0f93bd2013-11-28 02:46:15 -0600102
Ole André Vadla Ravnås544ba8b2014-04-30 00:06:12 +0200103$(TESTDIR)/%$(BIN_EXT): $(OBJDIR)/%.o
Ole André Vadla Ravnås35f937d2014-04-29 09:00:34 +0200104 @mkdir -p $(@D)
Ole André Vadla Ravnåsf536d402014-05-01 15:22:25 +0200105ifeq ($(V),0)
Ole André Vadla Ravnås927fcbc2014-05-01 16:00:52 +0200106ifeq ($(CAPSTONE_SHARED),yes)
Nguyen Anh Quynh8c0ab862014-06-03 23:43:53 +0700107 $(call log,LINK,$(notdir $@))
Ole André Vadla Ravnåsf536d402014-05-01 15:22:25 +0200108 @$(link-dynamic)
Ole André Vadla Ravnås927fcbc2014-05-01 16:00:52 +0200109endif
110ifeq ($(CAPSTONE_STATIC),yes)
Nguyen Anh Quynh8c0ab862014-06-03 23:43:53 +0700111 $(call log,LINK,$(notdir $(call staticname,$@)))
Ole André Vadla Ravnåsf536d402014-05-01 15:22:25 +0200112 @$(link-static)
Ole André Vadla Ravnås927fcbc2014-05-01 16:00:52 +0200113endif
Ole André Vadla Ravnåsf536d402014-05-01 15:22:25 +0200114else
Ole André Vadla Ravnås927fcbc2014-05-01 16:00:52 +0200115ifeq ($(CAPSTONE_SHARED),yes)
Ole André Vadla Ravnåsf536d402014-05-01 15:22:25 +0200116 $(link-dynamic)
Ole André Vadla Ravnås927fcbc2014-05-01 16:00:52 +0200117endif
118ifeq ($(CAPSTONE_STATIC),yes)
Ole André Vadla Ravnåsf536d402014-05-01 15:22:25 +0200119 $(link-static)
120endif
Ole André Vadla Ravnås927fcbc2014-05-01 16:00:52 +0200121endif
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +0800122
Ole André Vadla Ravnås35f937d2014-04-29 09:00:34 +0200123$(OBJDIR)/%.o: %.c
124 @mkdir -p $(@D)
Ole André Vadla Ravnåsf536d402014-05-01 15:22:25 +0200125ifeq ($(V),0)
126 $(call log,CC,$(@:$(OBJDIR)/%=%))
127 @$(compile)
128else
129 $(compile)
130endif
131
Ole André Vadla Ravnåsf536d402014-05-01 15:22:25 +0200132
133define link-dynamic
Ole André Vadla Ravnås6583f062014-07-04 23:09:19 +0200134 $(CC) $(LDFLAGS) $< -l$(LIBNAME) -o $@
Ole André Vadla Ravnåsf536d402014-05-01 15:22:25 +0200135endef
136
Nguyen Anh Quynh58a00472014-05-01 22:53:52 +0800137
Ole André Vadla Ravnåsf536d402014-05-01 15:22:25 +0200138define link-static
Ole André Vadla Ravnåsffc8aaa2014-07-04 23:39:59 +0200139 $(CC) $(LDFLAGS) $< $(ARCHIVE) -o $(call staticname,$@)
Ole André Vadla Ravnåsf536d402014-05-01 15:22:25 +0200140endef
141
Ole André Vadla Ravnåsf536d402014-05-01 15:22:25 +0200142
143staticname = $(subst $(BIN_EXT),,$(1)).static$(BIN_EXT)