blob: 230290432396906f9b875a1a129182816eaad019 [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
Nguyen Anh Quynhfc3b1382015-06-22 12:51:21 +080012# build Android lib for only one supported architecture
radare71fd42d2015-07-28 16:49:00 +020013build_android() {
Nguyen Anh Quynhfc3b1382015-06-22 12:51:21 +080014 if [ -z "$NDK" ]; then
15 echo "ERROR! Please set \$NDK to point at your Android NDK directory."
16 exit 1
17 fi
18 HOSTOS=$(uname -s | tr 'LD' 'ld')
19 HOSTARCH=$(uname -m)
20
21 TARGARCH="$1"
22 shift
23
24 case "$TARGARCH" in
25 arm)
26 [ -n "$APILEVEL" ] || APILEVEL="android-14" # default to ICS
27 [ -n "$GCCVER" ] || GCCVER="4.8"
28 CROSS=arm-linux-androideabi-
29 ;;
30 arm64)
31 [ -n "$APILEVEL" ] || APILEVEL="android-21" # first with arm64
32 [ -n "$GCCVER" ] || GCCVER="4.9"
33 CROSS=aarch64-linux-android-
34 ;;
35
36 *)
37 echo "ERROR! Building for Android on $1 is not currently supported."
38 exit 1
39 ;;
40 esac
41
42 TOOLCHAIN="$NDK/toolchains/$CROSS$GCCVER/prebuilt/$HOSTOS-$HOSTARCH"
43 PLATFORM="$NDK/platforms/$APILEVEL/arch-$TARGARCH"
44
Nguyen Anh Quynhfc3b1382015-06-22 12:51:21 +080045 CROSS="$TOOLCHAIN/bin/$CROSS" CFLAGS="--sysroot=$PLATFORM" LDFLAGS="--sysroot=$PLATFORM" ${MAKE} $*
46}
47
Nguyen Anh Quynh50ebb682014-03-31 21:15:29 +080048# build iOS lib for all iDevices, or only specific device
pancake63414a42015-02-27 17:57:53 +010049build_iOS() {
pancake63414a42015-02-27 17:57:53 +010050 IOS_SDK=`xcrun --sdk iphoneos --show-sdk-path`
51 IOS_CC=`xcrun --sdk iphoneos -f clang`
52 IOS_CFLAGS="-Os -Wimplicit -isysroot $IOS_SDK"
53 IOS_LDFLAGS="-isysroot $IOS_SDK"
54 if [ -z "$1" ]; then
55 # build for all iDevices
56 IOS_ARCHS="armv7 armv7s arm64"
57 else
58 IOS_ARCHS="$1"
59 fi
60 CC="$IOS_CC" \
61 CFLAGS="$IOS_CFLAGS" \
62 LDFLAGS="$IOS_LDFLAGS" \
63 LIBARCHS="$IOS_ARCHS" \
64 ${MAKE}
Nguyen Anh Quynh50ebb682014-03-31 21:15:29 +080065}
66
pancake63414a42015-02-27 17:57:53 +010067build() {
68 [ "$UNAME" = Darwin ] && LIBARCHS="i386 x86_64"
Nguyen Anh Quynhfc3b1382015-06-22 12:51:21 +080069 ${MAKE} $*
Nguyen Anh Quynh64d40832014-01-17 20:55:21 +080070}
71
pancake63414a42015-02-27 17:57:53 +010072install() {
73 # Mac OSX needs to find the right directory for pkgconfig
74 if [ "$UNAME" = Darwin ]; then
75 # we are going to install into /usr/local, so remove old installs under /usr
76 rm -rf /usr/lib/libcapstone.*
77 rm -rf /usr/include/capstone
78 # install into /usr/local
79 PREFIX=/usr/local
pancaked1af4dd2015-03-02 10:55:55 +010080 if [ "${HOMEBREW_CAPSTONE}" != 1 ]; then
81 # find the directory automatically, so we can support both Macport & Brew
82 PKGCFGDIR="$(pkg-config --variable pc_path pkg-config | cut -d ':' -f 1)"
83 fi
pancake63414a42015-02-27 17:57:53 +010084 ${MAKE} install
85 else # not OSX
86 test -d /usr/lib64 && ${MAKE} LIBDIRARCH=lib64
87 ${MAKE} install
88 fi
Nguyen Anh Quynhaf0e9372014-04-12 23:10:46 +080089}
90
pancake63414a42015-02-27 17:57:53 +010091uninstall() {
92 # Mac OSX needs to find the right directory for pkgconfig
93 if [ "$UNAME" = "Darwin" ]; then
94 # find the directory automatically, so we can support both Macport & Brew
95 PKGCFGDIR="$(pkg-config --variable pc_path pkg-config | cut -d ':' -f 1)"
96 PREFIX=/usr/local
97 ${MAKE} uninstall
98 else # not OSX
99 test -d /usr/lib64 && LIBDIRARCH=lib64
100 ${MAKE} uninstall
101 fi
Nguyen Anh Quynh64d40832014-01-17 20:55:21 +0800102}
103
pancake63414a42015-02-27 17:57:53 +0100104if [ "$UNAME" = SunOS ]; then
105 [ -z "${MAKE}" ] && MAKE=gmake
106 INSTALL_BIN=ginstall
107 CC=gcc
Nguyen Anh Quynhd3b30712014-01-17 21:25:18 +0800108fi
109
pancake63414a42015-02-27 17:57:53 +0100110if [ -n "`echo "$UNAME" | grep BSD`" ]; then
111 MAKE=gmake
112 PREFIX=/usr/local
Nguyen Anh Quynhf63db272014-01-17 22:12:35 +0800113fi
114
pancake63414a42015-02-27 17:57:53 +0100115[ -z "${UNAME}" ] && UNAME=$(uname)
116[ -z "${MAKE}" ] && MAKE=make
117[ -n "${MAKE_JOBS}" ] && MAKE="$MAKE -j${MAKE_JOBS}"
radare796f1d42015-03-07 11:40:19 +0100118export CC INSTALL_BIN PREFIX PKGCFGDIR LIBDIRARCH LIBARCHS CFLAGS LDFLAGS
pancake63414a42015-02-27 17:57:53 +0100119
Nguyen Anh Quynhfc3b1382015-06-22 12:51:21 +0800120TARGET="$1"
radare71fd42d2015-07-28 16:49:00 +0200121[ -n "$TARGET" ] && shift
Nguyen Anh Quynhfc3b1382015-06-22 12:51:21 +0800122
123case "$TARGET" in
124 "" ) build $*;;
125 "default" ) build $*;;
126 "debug" ) CAPSTONE_USE_SYS_DYN_MEM=yes CAPSTONE_STATIC=yes CFLAGS='-O0 -g -fsanitize=address' LDFLAGS='-fsanitize=address' build $*;;
Nguyen Anh Quynh64d40832014-01-17 20:55:21 +0800127 "install" ) install;;
Nguyen Anh Quynhaf0e9372014-04-12 23:10:46 +0800128 "uninstall" ) uninstall;;
Nguyen Anh Quynhfc3b1382015-06-22 12:51:21 +0800129 "nix32" ) CFLAGS=-m32 LDFLAGS=-m32 build $*;;
130 "cross-win32" ) CROSS=i686-w64-mingw32- build $*;;
131 "cross-win64" ) CROSS=x86_64-w64-mingw32- build $*;;
132 "cygwin-mingw32" ) CROSS=i686-pc-mingw32- build $*;;
133 "cygwin-mingw64" ) CROSS=x86_64-w64-mingw32- build $*;;
134 "cross-android" ) build_android $*;;
135 "cross-android64" ) CROSS=aarch64-linux-gnu- build $*;; # Linux cross build
136 "clang" ) CC=clang build $*;;
137 "gcc" ) CC=gcc build $*;;
138 "ios" ) build_iOS $*;;
139 "ios_armv7" ) build_iOS armv7 $*;;
140 "ios_armv7s" ) build_iOS armv7s $*;;
141 "ios_arm64" ) build_iOS arm64 $*;;
Pb2769c772015-11-06 14:44:55 +0100142 "osx-kernel" ) CAPSTONE_USE_SYS_DYN_MEM=yes CAPSTONE_HAS_OSXKERNEL=yes CAPSTONE_ARCHS=x86 CAPSTONE_SHARED=no CAPSTONE_BUILD_CORE_ONLY=yes build $*;;
pancake63414a42015-02-27 17:57:53 +0100143 * )
144 echo "Usage: $0 ["`grep '^ "' $0 | cut -d '"' -f 2 | tr "\\n" "|"`"]"
145 exit 1;;
Nguyen Anh Quynh64d40832014-01-17 20:55:21 +0800146esac