blob: 8bf4cc45020b1e6e13669a145cc040b4fdf01aae [file] [log] [blame]
pancake63414a42015-02-27 17:57:53 +01001#!/bin/sh
Nguyen Anh Quynh64d40832014-01-17 20:55:21 +08002
Nguyen Anh Quynh6023ef72014-04-29 11:21:04 +08003# Capstone Disassembly Engine
pancake63414a42015-02-27 17:57:53 +01004# By Nguyen Anh Quynh <aquynh@gmail.com>, 2013-2015
Nguyen Anh Quynh64d40832014-01-17 20:55:21 +08005
6# Note: to cross-compile "nix32" on Linux, package gcc-multilib is required.
7
pancake63414a42015-02-27 17:57:53 +01008MAKE_JOBS=$((${MAKE_JOBS}+0))
9[ ${MAKE_JOBS} -lt 1 ] && \
10 MAKE_JOBS=4
Nguyen Anh Quynh50ebb682014-03-31 21:15:29 +080011
12# build iOS lib for all iDevices, or only specific device
pancake63414a42015-02-27 17:57:53 +010013build_iOS() {
14 ${MAKE} clean
15 IOS_SDK=`xcrun --sdk iphoneos --show-sdk-path`
16 IOS_CC=`xcrun --sdk iphoneos -f clang`
17 IOS_CFLAGS="-Os -Wimplicit -isysroot $IOS_SDK"
18 IOS_LDFLAGS="-isysroot $IOS_SDK"
19 if [ -z "$1" ]; then
20 # build for all iDevices
21 IOS_ARCHS="armv7 armv7s arm64"
22 else
23 IOS_ARCHS="$1"
24 fi
25 CC="$IOS_CC" \
26 CFLAGS="$IOS_CFLAGS" \
27 LDFLAGS="$IOS_LDFLAGS" \
28 LIBARCHS="$IOS_ARCHS" \
29 ${MAKE}
Nguyen Anh Quynh50ebb682014-03-31 21:15:29 +080030}
31
pancake63414a42015-02-27 17:57:53 +010032build() {
33 [ "$UNAME" = Darwin ] && LIBARCHS="i386 x86_64"
34 ${MAKE} clean
35 ${MAKE}
Nguyen Anh Quynh64d40832014-01-17 20:55:21 +080036}
37
pancake63414a42015-02-27 17:57:53 +010038install() {
39 # Mac OSX needs to find the right directory for pkgconfig
40 if [ "$UNAME" = Darwin ]; then
41 # we are going to install into /usr/local, so remove old installs under /usr
42 rm -rf /usr/lib/libcapstone.*
43 rm -rf /usr/include/capstone
44 # install into /usr/local
45 PREFIX=/usr/local
pancaked1af4dd2015-03-02 10:55:55 +010046 if [ "${HOMEBREW_CAPSTONE}" != 1 ]; then
47 # find the directory automatically, so we can support both Macport & Brew
48 PKGCFGDIR="$(pkg-config --variable pc_path pkg-config | cut -d ':' -f 1)"
49 fi
pancake63414a42015-02-27 17:57:53 +010050 ${MAKE} install
51 else # not OSX
52 test -d /usr/lib64 && ${MAKE} LIBDIRARCH=lib64
53 ${MAKE} install
54 fi
Nguyen Anh Quynhaf0e9372014-04-12 23:10:46 +080055}
56
pancake63414a42015-02-27 17:57:53 +010057uninstall() {
58 # Mac OSX needs to find the right directory for pkgconfig
59 if [ "$UNAME" = "Darwin" ]; then
60 # find the directory automatically, so we can support both Macport & Brew
61 PKGCFGDIR="$(pkg-config --variable pc_path pkg-config | cut -d ':' -f 1)"
62 PREFIX=/usr/local
63 ${MAKE} uninstall
64 else # not OSX
65 test -d /usr/lib64 && LIBDIRARCH=lib64
66 ${MAKE} uninstall
67 fi
Nguyen Anh Quynh64d40832014-01-17 20:55:21 +080068}
69
pancake63414a42015-02-27 17:57:53 +010070if [ "$UNAME" = SunOS ]; then
71 [ -z "${MAKE}" ] && MAKE=gmake
72 INSTALL_BIN=ginstall
73 CC=gcc
Nguyen Anh Quynhd3b30712014-01-17 21:25:18 +080074fi
75
pancake63414a42015-02-27 17:57:53 +010076if [ -n "`echo "$UNAME" | grep BSD`" ]; then
77 MAKE=gmake
78 PREFIX=/usr/local
Nguyen Anh Quynhf63db272014-01-17 22:12:35 +080079fi
80
pancake63414a42015-02-27 17:57:53 +010081[ -z "${UNAME}" ] && UNAME=$(uname)
82[ -z "${MAKE}" ] && MAKE=make
83[ -n "${MAKE_JOBS}" ] && MAKE="$MAKE -j${MAKE_JOBS}"
radare796f1d42015-03-07 11:40:19 +010084export CC INSTALL_BIN PREFIX PKGCFGDIR LIBDIRARCH LIBARCHS CFLAGS LDFLAGS
pancake63414a42015-02-27 17:57:53 +010085
Nguyen Anh Quynh64d40832014-01-17 20:55:21 +080086case "$1" in
87 "" ) build;;
88 "default" ) build;;
89 "install" ) install;;
Nguyen Anh Quynhaf0e9372014-04-12 23:10:46 +080090 "uninstall" ) uninstall;;
Nguyen Anh Quynh64d40832014-01-17 20:55:21 +080091 "nix32" ) CFLAGS=-m32 LDFLAGS=-m32 build;;
Nguyen Anh Quynh64d40832014-01-17 20:55:21 +080092 "cross-win32" ) CROSS=i686-w64-mingw32- build;;
93 "cross-win64" ) CROSS=x86_64-w64-mingw32- build;;
94 "cygwin-mingw32" ) CROSS=i686-pc-mingw32- build;;
95 "cygwin-mingw64" ) CROSS=x86_64-w64-mingw32- build;;
Nguyen Anh Quynhf08ed972014-04-07 22:13:56 +080096 "cross-android" ) CROSS=arm-linux-androideabi- build;;
Nguyen Anh Quynh64d40832014-01-17 20:55:21 +080097 "clang" ) CC=clang build;;
98 "gcc" ) CC=gcc build;;
Nguyen Anh Quynh50ebb682014-03-31 21:15:29 +080099 "ios" ) build_iOS;;
100 "ios_armv7" ) build_iOS armv7;;
101 "ios_armv7s" ) build_iOS armv7s;;
102 "ios_arm64" ) build_iOS arm64;;
pancake63414a42015-02-27 17:57:53 +0100103 * )
104 echo "Usage: $0 ["`grep '^ "' $0 | cut -d '"' -f 2 | tr "\\n" "|"`"]"
105 exit 1;;
Nguyen Anh Quynh64d40832014-01-17 20:55:21 +0800106esac