From 5d3f94ab91d6cf106b6d73b877c91327662c1c96 Mon Sep 17 00:00:00 2001 From: Daniel Godas-Lopez Date: Wed, 27 Nov 2013 10:08:11 +0000 Subject: [PATCH 1/3] Compile correctly under Cygwin using the following toolchains: x86_64-pc-cygwin- x86_64-w64-mingw32- i686-pc-mingw32- --- Makefile | 24 +++++++++++------------- tests/Makefile | 20 ++++++++------------ 2 files changed, 19 insertions(+), 25 deletions(-) diff --git a/Makefile b/Makefile index a2186d57aa..b63dc2f0d9 100644 --- a/Makefile +++ b/Makefile @@ -21,14 +21,22 @@ LIBOBJ += MCInst.o # by default, lib extension is .so EXT = so -# OSX is the exception +# OSX UNAME_S := $(shell uname -s) ifeq ($(UNAME_S),Darwin) EXT = dylib endif +# Cygwin +UNAME_S := $(shell uname -s | sed 's|.*\(CYGWIN\).*|CYGWIN|') +ifeq ($(UNAME_S),CYGWIN) +EXT = dll +# Cygwin doesn't like -fPIC +CFLAGS := $(CFLAGS:-fPIC=) +endif + -.PHONY: all clean lib windows win_lib install uninstall +.PHONY: all clean lib install uninstall all: lib make -C tests @@ -52,18 +60,8 @@ uninstall: rm -rf /usr/include/$(LIBNAME) rm -rf /usr/lib/lib$(LIBNAME).$(EXT) -# Mingw32 -windows: win_lib - install -m0644 $(LIBNAME).dll tests - make -C tests windows - -# Mingw32 -win_lib: $(LIBOBJ) - $(CC) $(LDFLAGS) $(LIBOBJ) -o $(LIBNAME).dll - strip $(LIBNAME).dll - clean: - rm -f $(LIBOBJ) lib$(LIBNAME).* $(LIBNAME).dll + rm -f $(LIBOBJ) lib$(LIBNAME).* #cd bindings/ruby; make clean; rm -rf Makefile cd bindings/python; make clean cd bindings/csharp; make clean diff --git a/tests/Makefile b/tests/Makefile index 56cb43f942..6797e74785 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -10,7 +10,13 @@ CFLAGS += -fPIC -O3 -Wall -I$(INCDIR) -L$(LIBDIR) LIBNAME = capstone -.PHONY: all clean win_test +# Cygwin +UNAME_S := $(shell uname -s | sed 's|.*\(CYGWIN\).*|CYGWIN|') +ifeq ($(UNAME_S),CYGWIN) +CFLAGS := $(CFLAGS:-fPIC=) +endif + +.PHONY: all clean all: test.o test_detail.o test_x86.o test_arm64.o test_arm.o test_mips.o ${CC} $(CFLAGS) test.o -O3 -Wall -l$(LIBNAME) -o test @@ -20,15 +26,6 @@ all: test.o test_detail.o test_x86.o test_arm64.o test_arm.o test_mips.o ${CC} $(CFLAGS) test_arm.o -O3 -Wall -l$(LIBNAME) -o test_arm ${CC} $(CFLAGS) test_mips.o -O3 -Wall -l$(LIBNAME) -o test_mips -# Mingw32 -windows: test.o test_detail.o test_x86.o test_arm64.o test_arm.o test_mips.o - ${CC} test.o -O3 -Wall $(LIBNAME).dll -o test.exe - ${CC} test_detail.o -O3 -Wall $(LIBNAME).dll -o test_detail.exe - ${CC} test_x86.o -O3 -Wall $(LIBNAME).dll -o test_x86.exe - ${CC} test_arm64.o -O3 -Wall $(LIBNAME).dll -o test_arm64.exe - ${CC} test_arm.o -O3 -Wall $(LIBNAME).dll -o test_arm.exe - ${CC} test_mips.o -O3 -Wall $(LIBNAME).dll -o test_mips.exe - clean: rm -rf test_x86 test_x86.exe test_x86.o rm -rf test_arm64 test_arm64.exe test_arm64.o @@ -36,8 +33,7 @@ clean: rm -rf test_mips test_mips.exe test_mips.o rm -rf test test.exe test.o rm -rf test_detail test_detail.exe test_detail.o - rm -rf *.dll - rm -rf *.so + rm -f libcapstone.* .c.o: ${CC} ${CFLAGS} -c $< -o $@ From 28775cb20c8417848cd4349a8d210d586b469033 Mon Sep 17 00:00:00 2001 From: Daniel Godas-Lopez Date: Wed, 27 Nov 2013 10:19:59 +0000 Subject: [PATCH 2/3] Removed a couple of inoffensive compiler warnings --- arch/AArch64/AArch64BaseInfo.c | 2 +- arch/X86/mapping.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/AArch64/AArch64BaseInfo.c b/arch/AArch64/AArch64BaseInfo.c index b63094d5ee..bbed5a8ee9 100644 --- a/arch/AArch64/AArch64BaseInfo.c +++ b/arch/AArch64/AArch64BaseInfo.c @@ -41,7 +41,7 @@ static bool compare_lower_str(char *s1, char *s2) { char *lower = strdup(s2), *c; for (c = lower; *c; c++) - *c = tolower(*c); + *c = tolower((int) *c); bool res = (strcmp(s1, lower) == 0); free(lower); diff --git a/arch/X86/mapping.c b/arch/X86/mapping.c index 0f42b31995..5120e06c60 100644 --- a/arch/X86/mapping.c +++ b/arch/X86/mapping.c @@ -26,7 +26,7 @@ static enum { X86_REG_BP_DI = 503, X86_REG_sib = 504, X86_REG_sib64 = 505 -} _dummy; +} __attribute__((unused)) _dummy; static x86_reg sib_index_map[] = { X86_REG_INVALID, From a1b56226db61f1e5594d88bd2614ea6f76ee9b35 Mon Sep 17 00:00:00 2001 From: Daniel Godas-Lopez Date: Wed, 27 Nov 2013 21:35:58 +0000 Subject: [PATCH 3/3] make shared library executable if we are using Cygwin --- Makefile | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index b63dc2f0d9..b011b12dc3 100644 --- a/Makefile +++ b/Makefile @@ -20,6 +20,7 @@ LIBOBJ += MCInst.o # by default, lib extension is .so EXT = so +PERMS = 0644 # OSX UNAME_S := $(shell uname -s) @@ -33,6 +34,8 @@ ifeq ($(UNAME_S),CYGWIN) EXT = dll # Cygwin doesn't like -fPIC CFLAGS := $(CFLAGS:-fPIC=) +# On Windows we need the shared library to be executable +PERMS = 0755 endif @@ -40,7 +43,7 @@ endif all: lib make -C tests - install -m0644 lib$(LIBNAME).$(EXT) tests + install -m$(PERMS) lib$(LIBNAME).$(EXT) tests lib: $(LIBOBJ) $(CC) $(LDFLAGS) $(LIBOBJ) -o lib$(LIBNAME).$(EXT) @@ -48,7 +51,7 @@ lib: $(LIBOBJ) #strip lib$(LIBNAME).$(EXT) install: lib - install -m0644 lib$(LIBNAME).$(EXT) /usr/lib + install -m$(PERMS) 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)