Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 44 additions & 28 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,21 @@
# NOTE: at the moment this Makefile is for *nix only.

CC = $(CROSS)gcc
AR ?= ar
RANLIB ?= ranlib
STRIP ?= strip

CFLAGS += -fPIC -O3 -Wall -Iinclude
LDFLAGS += -shared

PREFIX ?= /usr
DESTDIR ?=
INCDIR = $(DESTDIR)$(PREFIX)/include
LIBDIR = $(DESTDIR)$(PREFIX)/lib

INSTALL_DATA ?= install -m0644
INSTALL_LIBRARY ?= install -m0755

LIBNAME = capstone
LIBOBJ =
LIBOBJ += cs.o asprintf.o utils.o SStream.o MCInstrDesc.o MCRegisterInfo.o
Expand All @@ -17,60 +28,65 @@ LIBOBJ += arch/ARM/ARMDisassembler.o arch/ARM/ARMInstPrinter.o arch/ARM/mapping.
LIBOBJ += arch/AArch64/AArch64BaseInfo.o arch/AArch64/AArch64Disassembler.o arch/AArch64/AArch64InstPrinter.o arch/AArch64/mapping.o
LIBOBJ += MCInst.o


# by default, lib extension is .so
EXT = so

# OSX is the exception
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Darwin)
EXT = dylib
else
# by default, lib extension is .so
EXT = so
endif


.PHONY: all clean lib windows win_lib install uninstall
.PHONY: all clean lib archive windows win_lib install uninstall

all: lib
make -C tests
install -m0644 lib$(LIBNAME).$(EXT) tests
all: lib archive
$(MAKE) -C tests
$(INSTALL_DATA) lib$(LIBNAME).$(EXT) tests

lib: $(LIBOBJ)
$(CC) $(LDFLAGS) $(LIBOBJ) -o lib$(LIBNAME).$(EXT)
# MacOS doesn't like strip
#strip lib$(LIBNAME).$(EXT)

install: lib
install -m0644 lib$(LIBNAME).$(EXT) /usr/lib
mkdir -p /usr/include/$(LIBNAME)
install -m0644 include/capstone.h /usr/include/$(LIBNAME)
install -m0644 include/x86.h /usr/include/$(LIBNAME)
install -m0644 include/arm.h /usr/include/$(LIBNAME)
install -m0644 include/arm64.h /usr/include/$(LIBNAME)
install -m0644 include/mips.h /usr/include/$(LIBNAME)
archive: $(LIBOBJ)
$(AR) q lib$(LIBNAME).a $(LIBOBJ)
$(RANLIB) lib$(LIBNAME).a

install: archive lib
mkdir -p $(LIBDIR)
$(INSTALL_LIBRARY) lib$(LIBNAME).$(EXT) $(LIBDIR)
$(INSTALL_DATA) lib$(LIBNAME).a $(LIBDIR)
mkdir -p $(INCDIR)/$(LIBNAME)
$(INSTALL_DATA) include/capstone.h $(INCDIR)/$(LIBNAME)
$(INSTALL_DATA) include/x86.h $(INCDIR)/$(LIBNAME)
$(INSTALL_DATA) include/arm.h $(INCDIR)/$(LIBNAME)
$(INSTALL_DATA) include/arm64.h $(INCDIR)/$(LIBNAME)
$(INSTALL_DATA) include/mips.h $(INCDIR)/$(LIBNAME)

uninstall:
rm -rf /usr/include/$(LIBNAME)
rm -rf /usr/lib/lib$(LIBNAME).$(EXT)
rm -rf $(INCDIR)/$(LIBNAME)
rm -f $(LIBDIR)/lib$(LIBNAME).$(EXT)
rm -f $(LIBDIR)/lib$(LIBNAME).a

# Mingw32
windows: win_lib
install -m0644 $(LIBNAME).dll tests
make -C tests windows
$(INSTALL_DATA) $(LIBNAME).dll tests
$(MAKE) -C tests windows

# Mingw32
win_lib: $(LIBOBJ)
$(CC) $(LDFLAGS) $(LIBOBJ) -o $(LIBNAME).dll
strip $(LIBNAME).dll
$(STRIP) $(LIBNAME).dll

clean:
rm -f $(LIBOBJ) lib$(LIBNAME).* $(LIBNAME).dll
#cd bindings/ruby; make clean; rm -rf Makefile
cd bindings/python; make clean
cd bindings/csharp; make clean
cd bindings/java; make clean
cd bindings/ocaml; make clean
make -C tests clean
#cd bindings/ruby; $(MAKE) clean; rm -rf Makefile
$(MAKE) -C bindings/python clean
$(MAKE) -C bindings/csharp clean
$(MAKE) -C bindings/java clean
$(MAKE) -C bindings/ocaml clean
$(MAKE) -C tests clean

.c.o:
${CC} ${CFLAGS} -c $< -o $@