diff --git a/COMPILE b/COMPILE index c97fc28cfd..e5824b88ec 100644 --- a/COMPILE +++ b/COMPILE @@ -45,20 +45,29 @@ only following files: if you want 64-bit binaries) are required. - To cross-compile Windows 32-bit binary, simply run - $ ./compile.sh win32 + $ ./compile.sh cross-win32 - To cross-compile Windows 64-bit binary, simply run - $ ./compile.sh win64 + $ ./compile.sh cross-win64 Resulted files "capstone.dll" and "tests/test*.exe" can then be used on Windows machine. -(4) By default, gcc is used as compiler. If you want to use "clang" instead, compile +(4) To compile under Cygwin gcc-mingw-w64-i686 or x86_64-w64-mingw32 run: + + - To compile Windows 32-bit binary under Cygwin, simply run + $ ./compile.sh cygwin-mingw32 + + - To compile Windows 64-bit binary under Cygwin, simply run + $ ./compile.sh cygwin-mingw64 + + +(5) By default, gcc is used as compiler. If you want to use "clang" instead, compile the code with: $ ./compile clang -(5) So far, Python, Ruby, Ocaml, Java, C# and Go are supported by bindings. Look for the bindings +(6) So far, Python, Ruby, Ocaml, Java, C# and Go are supported by bindings. Look for the bindings under directory bindings/, and refer to README file of corresponding languages. diff --git a/Makefile b/Makefile index a2186d57aa..e9b20a14d2 100644 --- a/Makefile +++ b/Makefile @@ -20,19 +20,40 @@ LIBOBJ += MCInst.o # by default, lib extension is .so EXT = so +PERMS = 0644 -# OSX is the exception +# OSX? UNAME_S := $(shell uname -s) ifeq ($(UNAME_S),Darwin) EXT = dylib +else +# Cygwin? +UNAME_S := $(shell uname -s | sed 's|.*\(CYGWIN\).*|CYGWIN|') +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 +else +# mingw? +IS_MINGW := $(shell $(CC) --version | grep -i mingw | wc -l) +ifeq ($(IS_MINGW),1) +EXT = dll +# mingw doesn't like -fPIC either +CFLAGS := $(CFLAGS:-fPIC=) +# On Windows we need the shared library to be executable +PERMS = 0755 +endif +endif endif -.PHONY: all clean lib windows win_lib install uninstall +.PHONY: all clean lib install uninstall 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) @@ -40,7 +61,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) @@ -52,18 +73,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/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, diff --git a/compile.sh b/compile.sh index 08ffb84679..c6da2f6867 100755 --- a/compile.sh +++ b/compile.sh @@ -3,11 +3,23 @@ # Capstone Disassembler Engine # By Nguyen Anh Quynh , 2013> +function build { + make clean + + if [ ${CC}x != x ]; then + make CC=$CC + else + make + fi +} + case "$1" in - "" ) make clean; make;; - "nix32" ) make clean; CFLAGS=-m32 LDFLAGS=-m32 make;; - "clang" ) make clean; make CC=clang;; - "win32" ) make clean; make CROSS=i686-w64-mingw32- windows;; - "win64" ) make clean; make CROSS=x86_64-w64-mingw32- windows;; - * ) echo "Usage: compile.sh [nix32|clang|win32|win64]"; exit 1;; + "" ) build;; + "nix32" ) CFLAGS=-m32 LDFLAGS=-m32 build;; + "clang" ) CC=clang build;; + "cross-win32" ) CROSS=i686-w64-mingw32- build;; + "cross-win64" ) CROSS=x86_64-w64-mingw32- build;; + "cygwin-mingw32" ) CROSS=i686-pc-mingw32- build;; + "cygwin-mingw64" ) CROSS=x86_64-w64-mingw32- build;; + * ) echo "Usage: compile.sh [nix32|clang|cross-win32|cross-win64|cygwin-mingw32|cygwin-mingw64]"; exit 1;; esac diff --git a/tests/Makefile b/tests/Makefile index 56cb43f942..f102dca613 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -10,7 +10,19 @@ 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=) +else +# mingw? +IS_MINGW := $(shell $(CC) --version | grep -i mingw | wc -l) +ifeq ($(IS_MINGW),1) +CFLAGS := $(CFLAGS:-fPIC=) +endif +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 +32,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 +39,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 $@