blob: 6f7c6c1f304178f86dfbd7f243f43f8c752a6b84 [file] [log] [blame]
Nguyen Anh Quynh26ee41a2013-11-27 12:11:31 +08001# Capstone Disassembler Engine
2# By Nguyen Anh Quynh <aquynh@gmail.com>, 2013>
3
4# NOTE: at the moment this Makefile is for *nix only.
5
6CC ?= $(CROSS)gcc
7
8CFLAGS += -fPIC -O3 -Wall -Iinclude
9LDFLAGS += -shared
10
11LIBNAME = capstone
12LIBOBJ =
13LIBOBJ += cs.o asprintf.o utils.o SStream.o MCInstrDesc.o MCRegisterInfo.o
14LIBOBJ += arch/Mips/MipsDisassembler.o arch/Mips/MipsInstPrinter.o arch/Mips/mapping.o
15LIBOBJ += arch/X86/X86DisassemblerDecoder.o arch/X86/X86Disassembler.o arch/X86/X86IntelInstPrinter.o arch/X86/X86ATTInstPrinter.o arch/X86/mapping.o
16LIBOBJ += arch/ARM/ARMDisassembler.o arch/ARM/ARMInstPrinter.o arch/ARM/mapping.o
17LIBOBJ += arch/AArch64/AArch64BaseInfo.o arch/AArch64/AArch64Disassembler.o arch/AArch64/AArch64InstPrinter.o arch/AArch64/mapping.o
18LIBOBJ += MCInst.o
19
20
21# by default, lib extension is .so
22EXT = so
23
24# OSX is the exception
25UNAME_S := $(shell uname -s)
26ifeq ($(UNAME_S),Darwin)
27EXT = dylib
28endif
29
30
31.PHONY: all clean lib windows win_lib install uninstall
32
33all: lib
34 make -C tests
35 install -m0644 lib$(LIBNAME).$(EXT) tests
36
37lib: $(LIBOBJ)
38 $(CC) $(LDFLAGS) $(LIBOBJ) -o lib$(LIBNAME).$(EXT)
39 # MacOS doesn't like strip
40 #strip lib$(LIBNAME).$(EXT)
41
42install: lib
43 install -m0644 lib$(LIBNAME).$(EXT) /usr/lib
44 mkdir -p /usr/include/$(LIBNAME)
45 install -m0644 include/capstone.h /usr/include/$(LIBNAME)
46 install -m0644 include/x86.h /usr/include/$(LIBNAME)
47 install -m0644 include/arm.h /usr/include/$(LIBNAME)
48 install -m0644 include/arm64.h /usr/include/$(LIBNAME)
49 install -m0644 include/mips.h /usr/include/$(LIBNAME)
50
51uninstall:
52 rm -rf /usr/include/$(LIBNAME)
53 rm -rf /usr/lib/lib$(LIBNAME).$(EXT)
54
55# Mingw32
56windows: win_lib
57 install -m0644 $(LIBNAME).dll tests
58 make -C tests windows
59
60# Mingw32
61win_lib: $(LIBOBJ)
62 $(CC) $(LDFLAGS) $(LIBOBJ) -o $(LIBNAME).dll
63 strip $(LIBNAME).dll
64
65clean:
66 rm -f $(LIBOBJ) lib$(LIBNAME).* $(LIBNAME).dll
67 #cd bindings/ruby; make clean; rm -rf Makefile
68 cd bindings/python; make clean
69 cd bindings/csharp; make clean
70 cd bindings/java; make clean
71 cd bindings/ocaml; make clean
72 make -C tests clean
73
74.c.o:
75 ${CC} ${CFLAGS} -c $< -o $@
76