|
| 1 | +#!/bin/bash |
| 2 | + |
| 3 | +TOOLS_ROOT=`pwd` |
| 4 | + |
| 5 | +# |
| 6 | +# Warning !!! Android Build !!! |
| 7 | +# |
| 8 | +# Default to API 21 for it is the minimum requirement for 64 bit archs. |
| 9 | +# IF you need to build for min api level 16, you need to modify it to 14 and will not build for 64 bit archs. |
| 10 | +# api level 16 build is better because api level 21 and higher may have problem like |
| 11 | +# |
| 12 | +# https://github.com/openssl/openssl/issues/988 |
| 13 | +# http://stackoverflow.com/questions/37122126/whats-the-exact-significance-of-android-ndk-platform-version-compared-to-api-le |
| 14 | +# |
| 15 | +# So if you not need 64 bit arch api level 16 is better |
| 16 | +# |
| 17 | +# But but but cURL could not build by android-20 and earlier :-( |
| 18 | +# So you can build openssl with android-16 then build cURL with android-21 |
| 19 | +# |
| 20 | +#if [ "${1}" == "cURL" ]; then |
| 21 | + #ANDROID_API=${ANDROID_API:-21} |
| 22 | +#else |
| 23 | + #ANDROID_API=${ANDROID_API:-16} |
| 24 | +#fi |
| 25 | +#ARCHS=("android" "android-armeabi" "android-x86" "android-mips") |
| 26 | +#ABIS=("armeabi" "armeabi-v7a" "x86" "mips") |
| 27 | + ANDROID_API=${ANDROID_API:-21} |
| 28 | + ARCHS=("android" "android-armeabi" "android64-aarch64" "android-x86" "android64" "android-mips" "android-mips64") |
| 29 | + ABIS=("armeabi" "armeabi-v7a" "arm64-v8a" "x86" "x86_64" "mips" "mips64") |
| 30 | +NDK=${ANDROID_NDK} |
| 31 | + |
| 32 | +configure() { |
| 33 | + ARCH=$1; OUT=$2; CLANG=${3:-""}; |
| 34 | + |
| 35 | + TOOLCHAIN_ROOT=${TOOLS_ROOT}/${OUT}-android-toolchain |
| 36 | + |
| 37 | + if [ "$ARCH" == "android" ]; then |
| 38 | + export ARCH_FLAGS="-mthumb" |
| 39 | + export ARCH_LINK="" |
| 40 | + export TOOL="arm-linux-androideabi" |
| 41 | + NDK_FLAGS="--arch=arm" |
| 42 | + elif [ "$ARCH" == "android-armeabi" ]; then |
| 43 | + export ARCH_FLAGS="-march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -mthumb -mfpu=neon" |
| 44 | + export ARCH_LINK="-march=armv7-a -Wl,--fix-cortex-a8" |
| 45 | + export TOOL="arm-linux-androideabi" |
| 46 | + NDK_FLAGS="--arch=arm" |
| 47 | + elif [ "$ARCH" == "android64-aarch64" ]; then |
| 48 | + export ARCH_FLAGS="" |
| 49 | + export ARCH_LINK="" |
| 50 | + export TOOL="aarch64-linux-android" |
| 51 | + NDK_FLAGS="--arch=arm64" |
| 52 | + elif [ "$ARCH" == "android-x86" ]; then |
| 53 | + export ARCH_FLAGS="-march=i686 -mtune=intel -msse3 -mfpmath=sse -m32" |
| 54 | + export ARCH_LINK="" |
| 55 | + export TOOL="i686-linux-android" |
| 56 | + NDK_FLAGS="--arch=x86" |
| 57 | + elif [ "$ARCH" == "android64" ]; then |
| 58 | + export ARCH_FLAGS="-march=x86-64 -msse4.2 -mpopcnt -m64 -mtune=intel" |
| 59 | + export ARCH_LINK="" |
| 60 | + export TOOL="x86_64-linux-android" |
| 61 | + NDK_FLAGS="--arch=x86_64" |
| 62 | + elif [ "$ARCH" == "android-mips" ]; then |
| 63 | + export ARCH_FLAGS="" |
| 64 | + export ARCH_LINK="" |
| 65 | + export TOOL="mipsel-linux-android" |
| 66 | + NDK_FLAGS="--arch=mips" |
| 67 | + elif [ "$ARCH" == "android-mips64" ]; then |
| 68 | + export ARCH="linux64-mips64" |
| 69 | + export ARCH_FLAGS="" |
| 70 | + export ARCH_LINK="" |
| 71 | + export TOOL="mips64el-linux-android" |
| 72 | + NDK_FLAGS="--arch=mips64" |
| 73 | + fi; |
| 74 | + |
| 75 | + [ -d ${TOOLCHAIN_ROOT} ] || python $NDK/build/tools/make_standalone_toolchain.py \ |
| 76 | + --api ${ANDROID_API} \ |
| 77 | + --stl libc++ \ |
| 78 | + --install-dir=${TOOLCHAIN_ROOT} \ |
| 79 | + $NDK_FLAGS |
| 80 | + |
| 81 | + export TOOLCHAIN_PATH=${TOOLCHAIN_ROOT}/bin |
| 82 | + export NDK_TOOLCHAIN_BASENAME=${TOOLCHAIN_PATH}/${TOOL} |
| 83 | + export SYSROOT=${TOOLCHAIN_ROOT}/sysroot |
| 84 | + export CROSS_SYSROOT=$SYSROOT |
| 85 | + if [ -z "${CLANG}" ]; then |
| 86 | + export CC=${NDK_TOOLCHAIN_BASENAME}-gcc |
| 87 | + export CXX=${NDK_TOOLCHAIN_BASENAME}-g++ |
| 88 | + else |
| 89 | + export CC=${NDK_TOOLCHAIN_BASENAME}-clang |
| 90 | + export CXX=${NDK_TOOLCHAIN_BASENAME}-clang++ |
| 91 | + fi; |
| 92 | + export LINK=${CXX} |
| 93 | + export LD=${NDK_TOOLCHAIN_BASENAME}-ld |
| 94 | + export AR=${NDK_TOOLCHAIN_BASENAME}-ar |
| 95 | + export RANLIB=${NDK_TOOLCHAIN_BASENAME}-ranlib |
| 96 | + export STRIP=${NDK_TOOLCHAIN_BASENAME}-strip |
| 97 | + export CPPFLAGS=${CPPFLAGS:-""} |
| 98 | + export LIBS=${LIBS:-""} |
| 99 | + export CFLAGS="${ARCH_FLAGS} -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64" |
| 100 | + export CXXFLAGS="${CFLAGS} -std=c++11 -frtti -fexceptions" |
| 101 | + export LDFLAGS="${ARCH_LINK}" |
| 102 | + echo "**********************************************" |
| 103 | + echo "use ANDROID_API=${ANDROID_API}" |
| 104 | + echo "use NDK=${NDK}" |
| 105 | + echo "export ARCH=${ARCH}" |
| 106 | + echo "export NDK_TOOLCHAIN_BASENAME=${NDK_TOOLCHAIN_BASENAME}" |
| 107 | + echo "export SYSROOT=${SYSROOT}" |
| 108 | + echo "export CC=${CC}" |
| 109 | + echo "export CXX=${CXX}" |
| 110 | + echo "export LINK=${LINK}" |
| 111 | + echo "export LD=${LD}" |
| 112 | + echo "export AR=${AR}" |
| 113 | + echo "export RANLIB=${RANLIB}" |
| 114 | + echo "export STRIP=${STRIP}" |
| 115 | + echo "export CPPFLAGS=${CPPFLAGS}" |
| 116 | + echo "export CFLAGS=${CFLAGS}" |
| 117 | + echo "export CXXFLAGS=${CXXFLAGS}" |
| 118 | + echo "export LDFLAGS=${LDFLAGS}" |
| 119 | + echo "export LIBS=${LIBS}" |
| 120 | + echo "**********************************************" |
| 121 | +} |
0 commit comments