| #!/bin/sh |
| # |
| |
| F="configure-android" |
| |
| if test "$*" = "--help" -o "$*" = "-h"; then |
| echo "$F [--use-ndk-cflags] [OPTIONS]" |
| echo "" |
| echo "where:" |
| echo " --use-ndk-cflags Optional parameter to use the same compilation flags" |
| echo " as the one used by ndk-build" |
| echo " OPTIONS Other options that will be passed directly to" |
| echo " ./aconfigure script. Run ./aconfigure --help" |
| echo " for more info." |
| echo "" |
| echo "Environment variables:" |
| echo " ANDROID_NDK_ROOT Specify the directory of Android NDK to use." |
| echo " APP_PLATFORM Optionally specify the platform level used, e.g." |
| echo " android-9. By default, configure will use the" |
| echo " maximum platform level detected." |
| echo " TARGET_ABI Optionally specify a single target architecture," |
| echo " e.g. armeabi-v7a, mips, x86. By default, the target" |
| echo " architecture is armeabi. Only used when" |
| echo " --use-ndk-cflags is specified." |
| echo " IGNORE_CFLAGS Optionally specify compilation flags to be ignored." |
| echo " Each grepped flag that satisfies the criteria will" |
| echo " be ignored. Default:" |
| echo " IGNORE_CFLAGS=\"\-M\|\-f*stack\|\-f*alias\"" |
| echo " Only used when --use-ndk-cflags is specified." |
| echo "" |
| exit 0 |
| fi |
| |
| if test "x${ANDROID_NDK_ROOT}" = "x"; then |
| echo "$F error: ANDROID_NDK_ROOT must be specified" |
| exit 0 |
| fi |
| |
| #if test "$1" = "--simulator"; then |
| if test "1" = "0"; then |
| shift |
| TARGET_HOST="i686-android-linux" |
| TC_DIR="x86" |
| else |
| TARGET_HOST="arm-linux-androideabi" |
| TC_DIR=${TARGET_HOST} |
| fi |
| |
| if test "x$APP_PLATFORM" = "x"; then |
| APP_PLATFORM=`ls ${ANDROID_NDK_ROOT}/platforms/ | sed 's/android-//' | sort -gr | head -1` |
| APP_PLATFORM="android-${APP_PLATFORM}" |
| echo "$F: APP_PLATFORM not specified, using ${APP_PLATFORM}" |
| fi |
| |
| if test "x$TARGET_ABI" = "x"; then |
| TARGET_ABI="armeabi" |
| echo "$F: TARGET_ABI not specified, using ${TARGET_ABI}" |
| fi |
| |
| if test "$1" = "--use-ndk-cflags"; then |
| shift |
| ADD_CFLAGS="1" |
| if test "x${IGNORE_CFLAGS}" = "x"; then |
| IGNORE_CFLAGS="\-M\|\-f*stack\|\-f*alias" |
| fi |
| for i in `${ANDROID_NDK_ROOT}/ndk-build -n -C ${ANDROID_NDK_ROOT}/samples/hello-jni NDK_LOG=1 APP_PLATFORM=${APP_PLATFORM} APP_ABI=${TARGET_ABI}`; do |
| if test "x${NDK_CXX}" != "x" -a "$i" = "-o"; then break; fi |
| |
| # Parse NDK CXXFLAGS |
| if test "x${NDK_CXX}" != "x" -a "x`echo $i|grep 'hello-jni'`" = "x"; then |
| if test "x`echo $i|grep '\-\-sysroot='`" != "x"; then |
| ANDROID_SYSROOT=`echo $i|sed 's/--sysroot=//'`; |
| fi |
| NDK_CXXFLAGS="${NDK_CXXFLAGS} $i" |
| fi |
| |
| # Parse NDK CFLAGS |
| if test "x${NDK_CC}" != "x" -a "x`echo $i|grep 'hello-jni'`" = "x" -a "${ADD_CFLAGS}" = "1"; then |
| if test "$i" = "-c"; then ADD_CFLAGS="0"; else |
| if test "x`echo $i|grep ${IGNORE_CFLAGS}`" = "x"; then |
| NDK_CFLAGS="${NDK_CFLAGS} $i" |
| fi |
| fi |
| fi |
| |
| # Find gcc toolchain |
| if test "x${NDK_CC}" = "x" -a "x`echo $i | grep 'gcc'`" != "x"; then |
| NDK_CC=$i |
| fi |
| # Find g++ toolchain |
| if test "x`echo $i | grep 'g++'`" != "x"; then |
| NDK_CXX=$i |
| fi |
| done |
| |
| export CC="${NDK_CC}" |
| export CXX="${NDK_CXX}" |
| export AR=`echo ${NDK_CXX}|sed 's/-g++/-ar/'`; |
| export RANLIB=`echo ${NDK_CXX}|sed 's/-g++/-ranlib/'`; |
| |
| export LDFLAGS="${LDFLAGS} -nostdlib -L${ANDROID_SYSROOT}/usr/lib/" |
| export LIBS="${LIBS} -lc -lgcc" |
| export CFLAGS="${NDK_CFLAGS} ${CFLAGS}" |
| export CPPFLAGS="${CFLAGS} -fexceptions -frtti" |
| export CXXFLAGS="${NDK_CXXFLAGS} -fexceptions -frtti" |
| |
| else |
| |
| ANDROID_TC_VER=`ls -d ${ANDROID_NDK_ROOT}/toolchains/${TC_DIR}-* | sed 's/clang/0/' | sort -gr | head -1` |
| ANDROID_TC=`ls -d ${ANDROID_TC_VER}/prebuilt/* | grep -v gdbserver | head -1` |
| if test ! -d ${ANDROID_TC}; then |
| echo "$F error: unable to find directory ${ANDROID_TC} in Android NDK" |
| exit 1 |
| fi |
| |
| export ANDROID_SYSROOT="${ANDROID_NDK_ROOT}/platforms/${APP_PLATFORM}/arch-arm" |
| if test ! -d ${ANDROID_SYSROOT}; then |
| echo "$F error: unable to find sysroot dir ${ANDROID_SYSROOT} in Android NDK" |
| exit 1 |
| fi |
| |
| export CC="${ANDROID_TC}/bin/${TARGET_HOST}-gcc" |
| export CXX="${ANDROID_TC}/bin/${TARGET_HOST}-g++" |
| export AR="${ANDROID_TC}/bin/${TARGET_HOST}-ar" |
| export RANLIB="${ANDROID_TC}/bin/${TARGET_HOST}-ranlib" |
| |
| export LDFLAGS="${LDFLAGS} -nostdlib -L${ANDROID_SYSROOT}/usr/lib/" |
| export LIBS="${LIBS} -lc -lgcc" |
| export CFLAGS="${CFLAGS} -I${ANDROID_SYSROOT}/usr/include" |
| export CPPFLAGS="${CFLAGS} -fexceptions -frtti" |
| export CXXFLAGS="${CXXFLAGS} -shared --sysroot=${ANDROID_SYSROOT} -fexceptions -frtti" |
| |
| fi |
| |
| # C++ STL |
| # Note: STL for pjsua2 sample app is specified in pjsip-apps/src/swig/java/android/jni/Application.mk |
| |
| # gnustl |
| STDCPP_TC_VER=`ls -d ${ANDROID_NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/[0-9]* | sort -gr | head -1` |
| STDCPP_CFLAGS="-I${STDCPP_TC_VER}/include -I${STDCPP_TC_VER}/libs/armeabi/include" |
| STDCPP_LIBS="${ANDROID_SYSROOT}/usr/lib/crtbegin_so.o -lgnustl_static" |
| STDCPP_LDFLAGS="-L${STDCPP_TC_VER}/libs/armeabi" |
| |
| # stlport |
| #STDCPP_CFLAGS="-I${ANDROID_NDK_ROOT}/sources/cxx-stl/stlport/stlport" |
| #STDCPP_LIBS="${ANDROID_SYSROOT}/usr/lib/crtbegin_so.o -lstlport_static -ldl" |
| #STDCPP_LDFLAGS="-L${ANDROID_NDK_ROOT}/sources/cxx-stl/stlport/libs/armeabi" |
| |
| export CFLAGS="${CFLAGS} ${STDCPP_CFLAGS}" |
| export LIBS="${STDCPP_LIBS} ${LIBS}" |
| export LDFLAGS="${LDFLAGS} ${STDCPP_LDFLAGS}" |
| |
| # Print settings |
| if test "1" = "1"; then |
| echo "$F: calling ./configure with env vars:" |
| echo " CC = ${CC}" |
| echo " CXX = ${CXX}" |
| echo " CFLAGS = ${CFLAGS}" |
| echo " CXXFLAGS = ${CXXFLAGS}" |
| echo " LDFLAGS = ${LDFLAGS}" |
| echo " LIBS = ${LIBS}" |
| echo " AR = ${AR}" |
| echo " RANLIB = ${RANLIB}" |
| fi |
| |
| ./configure --host=${TARGET_HOST} --disable-video $* |