diff options
author | Angelos Mouzakitis <a.mouzakitis@virtualopensystems.com> | 2023-10-10 14:33:42 +0000 |
---|---|---|
committer | Angelos Mouzakitis <a.mouzakitis@virtualopensystems.com> | 2023-10-10 14:33:42 +0000 |
commit | af1a266670d040d2f4083ff309d732d648afba2a (patch) | |
tree | 2fc46203448ddcc6f81546d379abfaeb323575e9 /capstone/make.sh | |
parent | e02cda008591317b1625707ff8e115a4841aa889 (diff) |
Change-Id: Iaf8d18082d3991dec7c0ebbea540f092188eb4ec
Diffstat (limited to 'capstone/make.sh')
-rwxr-xr-x | capstone/make.sh | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/capstone/make.sh b/capstone/make.sh new file mode 100755 index 000000000..140741946 --- /dev/null +++ b/capstone/make.sh @@ -0,0 +1,154 @@ +#!/bin/sh + +# Capstone Disassembly Engine +# By Nguyen Anh Quynh <aquynh@gmail.com>, 2013-2019 + +# Note: to cross-compile "nix32" on Linux, package gcc-multilib is required. + +MAKE_JOBS=${MAKE_JOBS:-4} + +# build Android lib for only one supported architecture +build_android() { + if [ -z "$NDK" ]; then + echo "ERROR! Please set \$NDK to point at your Android NDK directory." + exit 1 + fi + + HOSTOS=$(uname -s | tr 'LD' 'ld') + HOSTARCH=$(uname -m) + + TARGARCH="$1" + shift + + case "$TARGARCH" in + arm) + [ -n "$APILEVEL" ] || APILEVEL="android-14" # default to ICS + CROSS=arm-linux-androideabi + ;; + arm64) + [ -n "$APILEVEL" ] || APILEVEL="android-21" # first with arm64 + CROSS=aarch64-linux-android + ;; + + *) + echo "ERROR! Building for Android on $1 is not currently supported." + exit 1 + ;; + esac + + STANDALONE=`realpath android-ndk-${TARGARCH}-${APILEVEL}` + + [ -d $STANDALONE ] || { + python ${NDK}/build/tools/make_standalone_toolchain.py \ + --arch ${TARGARCH} \ + --api ${APILEVEL##*-} \ + --install-dir ${STANDALONE} + } + + ANDROID=1 CROSS="${STANDALONE}/${CROSS}/bin" CFLAGS="--sysroot=${STANDALONE}/sysroot" ${MAKE} $* +} + +# build iOS lib for all iDevices, or only specific device +build_iOS() { + IOS_SDK=`xcrun --sdk iphoneos --show-sdk-path` + IOS_CC=`xcrun --sdk iphoneos -f clang` + IOS_CFLAGS="-Os -Wimplicit -isysroot $IOS_SDK" + IOS_LDFLAGS="-isysroot $IOS_SDK" + if [ -z "$1" ]; then + # build for all iDevices + IOS_ARCHS="armv7 armv7s arm64" + else + IOS_ARCHS="$1" + fi + export CC="$IOS_CC" + export LIBARCHS="$IOS_ARCHS" + CFLAGS="$IOS_CFLAGS" LDFLAGS="$IOS_LDFLAGS" MACOS_UNIVERSAL=yes ${MAKE} +} + +install() { + # Mac OSX needs to find the right directory for pkgconfig + if [ "$UNAME" = Darwin ]; then + # we are going to install into /usr/local, so remove old installs under /usr + rm -rf /usr/lib/libcapstone.* + rm -rf /usr/include/capstone + if [ "${HOMEBREW_CAPSTONE}" != 1 ]; then + # find the directory automatically, so we can support both Macport & Brew + export PKGCFGDIR="$(pkg-config --variable pc_path pkg-config | cut -d ':' -f 1)" + fi + ${MAKE} install + else # not OSX + test -d /usr/lib64 && ${MAKE} LIBDIRARCH=lib64 + ${MAKE} install + fi +} + +uninstall() { + # Mac OSX needs to find the right directory for pkgconfig + if [ "$UNAME" = "Darwin" ]; then + # find the directory automatically, so we can support both Macport & Brew + export PKGCFGDIR="$(pkg-config --variable pc_path pkg-config | cut -d ':' -f 1)" + ${MAKE} uninstall + else # not OSX + test -d /usr/lib64 && LIBDIRARCH=lib64 + ${MAKE} uninstall + fi +} + +UNAME="${UNAME:-$(uname)}" + +if [ "$UNAME" = SunOS ]; then + MAKE="${MAKE:-gmake}" + export INSTALL_BIN=ginstall + export CC=gcc +fi + +MAKE="${MAKE:-make}" + +if echo "$UNAME" | grep -q BSD; then + MAKE=gmake + export PREFIX=/usr/local +fi + +MAKE="$MAKE -j${MAKE_JOBS}" + +TARGET="$1" +[ $# -gt 0 ] && shift + +case "$TARGET" in + "" | "default" ) ${MAKE} "$@";; + "debug" ) \ + CAPSTONE_USE_SYS_DYN_MEM=yes \ + CAPSTONE_STATIC=yes \ + CFLAGS='-DCAPSTONE_DEBUG -O0 -g -fsanitize=address' \ + LDFLAGS='-fsanitize=address' \ + ${MAKE} "$@";; + "install" ) install;; + "uninstall" ) uninstall;; + "nix32" ) CFLAGS=-m32 LDFLAGS=-m32 ${MAKE} "$@";; + "cross-win32" ) CROSS=i686-w64-mingw32- ${MAKE} "$@";; + "cross-win64" ) CROSS=x86_64-w64-mingw32- ${MAKE} "$@";; + "cygwin-mingw32" ) CROSS=i686-pc-mingw32- ${MAKE} "$@";; + "cygwin-mingw64" ) CROSS=x86_64-w64-mingw32- ${MAKE} "$@";; + "cross-android" ) build_android "$@";; + "cross-android64" ) CROSS=aarch64-linux-gnu- ${MAKE} "$@";; # Linux cross build + "clang" ) CC=clang ${MAKE} "$@";; + "gcc" ) CC=gcc ${MAKE} "$@";; + "ios" ) build_iOS "$@";; + "ios_armv7" ) build_iOS armv7 "$@";; + "ios_armv7s" ) build_iOS armv7s "$@";; + "ios_arm64" ) build_iOS arm64 "$@";; + "osx-kernel" ) CAPSTONE_USE_SYS_DYN_MEM=yes \ + CAPSTONE_HAS_OSXKERNEL=yes \ + CAPSTONE_ARCHS=x86 \ + CAPSTONE_SHARED=no \ + CAPSTONE_BUILD_CORE_ONLY=yes \ + ${MAKE} "$@";; + "mac-universal" ) MACOS_UNIVERSAL=yes ${MAKE} "$@";; + "mac-universal-no" ) MACOS_UNIVERSAL=no ${MAKE} "$@";; + "xlc31" ) CC=xlc CFLAGS=-q31 LDFLAGS=-q31 ${MAKE} "$@";; + "xlc32" ) CC=xlc CFLAGS=-q32 LDFLAGS=-q32 ${MAKE} "$@";; + "xlc64" ) CC=xlc CFLAGS=-q64 LDFLAGS=-q64 ${MAKE} "$@";; + * ) + echo "Usage: $0 ["$(grep '^ "' $0 | cut -d '"' -f 2 | tr "\\n" "|")"]" + exit 1;; +esac |