From f1cbce26deb219205803a4c7bb2ca7d5b7f51be1 Mon Sep 17 00:00:00 2001 From: pancake Date: Wed, 27 Nov 2013 15:31:26 +0100 Subject: [PATCH 1/2] Add 'archive' target to build static library --- Makefile | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index a2186d57aa..1ea21bb15f 100644 --- a/Makefile +++ b/Makefile @@ -4,6 +4,8 @@ # NOTE: at the moment this Makefile is for *nix only. CC = $(CROSS)gcc +AR?=ar +RANLIB?=ranlib CFLAGS += -fPIC -O3 -Wall -Iinclude LDFLAGS += -shared @@ -39,8 +41,13 @@ lib: $(LIBOBJ) # MacOS doesn't like strip #strip lib$(LIBNAME).$(EXT) -install: lib +archive: $(LIBOBJ) + $(AR) q lib$(LIBNAME).a $(LIBOBJ) + $(RANLIB) lib$(LIBNAME).a + +install: archive lib install -m0644 lib$(LIBNAME).$(EXT) /usr/lib + install -m0644 lib$(LIBNAME).a /usr/lib mkdir -p /usr/include/$(LIBNAME) install -m0644 include/capstone.h /usr/include/$(LIBNAME) install -m0644 include/x86.h /usr/include/$(LIBNAME) From 02cad6ec9f0bdcc150c1527659eb4ff52f9b3277 Mon Sep 17 00:00:00 2001 From: pancake Date: Wed, 27 Nov 2013 15:38:44 +0100 Subject: [PATCH 2/2] Use standard DESTDIR/PREFIX and some Makefile cleanup --- Makefile | 69 ++++++++++++++++++++++++++++++++------------------------ 1 file changed, 39 insertions(+), 30 deletions(-) diff --git a/Makefile b/Makefile index 1ea21bb15f..1378b0f061 100644 --- a/Makefile +++ b/Makefile @@ -4,12 +4,21 @@ # NOTE: at the moment this Makefile is for *nix only. CC = $(CROSS)gcc -AR?=ar -RANLIB?=ranlib +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 @@ -19,22 +28,21 @@ 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) @@ -46,38 +54,39 @@ archive: $(LIBOBJ) $(RANLIB) lib$(LIBNAME).a install: archive lib - install -m0644 lib$(LIBNAME).$(EXT) /usr/lib - install -m0644 lib$(LIBNAME).a /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) + 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 $@ -