nkeynes@1239: # LX_ANDROID_BUILD nkeynes@1239: # Defines --with-android, --with-android-ndk, and --with-android-version nkeynes@1239: # If specified, checks for a working install, and sets build parameters nkeynes@1239: # appropriately for an Android host. nkeynes@1239: AC_DEFUN([LX_ANDROID_BUILD], [ nkeynes@1239: AC_REQUIRE([AC_CANONICAL_HOST]) nkeynes@1239: AC_ARG_WITH( android, AS_HELP_STRING( [--with-android=SDK], [Specify the location of the Android SDK] ) ) nkeynes@1239: AC_ARG_WITH( android-ndk, AS_HELP_STRING( [--with-android-ndk=NDK], [Specify the location of the Android NDK] ) ) nkeynes@1245: AC_ARG_WITH( android-version, AS_HELP_STRING( [--with-android-version], [Specify target Android SDK version]), [], [with_android_version="android-11"] ) nkeynes@1245: AC_ARG_WITH( android-ndk-version, AS_HELP_STRING( [--with-android-version], [Specify target Android NDK version]), [], [with_ndk_version="android-9"] ) nkeynes@1255: AC_ARG_WITH( android-abi, AS_HELP_STRING( [--with-android-abi], [Specify target Android ABI]), [], [ANDROID_ABI="armeabi-v7a"] ) nkeynes@1239: nkeynes@1239: if test "x$with_android" != "x"; then nkeynes@1239: if test "$with_android" = "yes"; then nkeynes@1239: AC_MSG_ERROR( [--with-android option must be given with the path to the Android SDK] ) nkeynes@1239: fi nkeynes@1239: if test "x$with_android_ndk" = "x" -o "x$with_android_ndk" = "xyes"; then nkeynes@1239: AC_MSG_ERROR( [--with-android-ndk=/path/to/ndk option must be used with --with-android] ) nkeynes@1239: fi nkeynes@1239: nkeynes@1239: ANDROID_SDK_HOME="$with_android" nkeynes@1239: ANDROID_NDK_HOME="$with_android_ndk" nkeynes@1239: ANDROID_SDK_VERSION="$with_android_version" nkeynes@1245: ANDROID_NDK_VERSION="$with_ndk_version" nkeynes@1239: nkeynes@1239: AC_CHECK_FILE( [$ANDROID_SDK_HOME/tools/ant/pre_setup.xml], [], [ AC_MSG_ERROR([Android SDK not found in $ANDROID_SDK_HOME]) ]) nkeynes@1239: AC_CHECK_FILE( [$ANDROID_SDK_HOME/platforms/$ANDROID_SDK_VERSION/sdk.properties], [], [ AC_MSG_ERROR([Android platform version $ANDROID_SDK_VERSION not found in $ANDROID_SDK_HOME]) ]) nkeynes@1239: AC_CHECK_FILE( [$ANDROID_NDK_HOME/toolchains], [], [ AC_MSG_ERROR([Android NDK not found in $ANDROID_NDK_HOME]) ]) nkeynes@1239: nkeynes@1255: dnl common flags nkeynes@1255: TARGETFLAGS="-ffunction-sections -funwind-tables -fomit-frame-pointer -DANDROID -Wa,--noexecstack" nkeynes@1255: nkeynes@1255: case $ANDROID_ABI in nkeynes@1255: armeabi | armeabi-v7a) nkeynes@1239: host_alias="arm-linux-androideabi" nkeynes@1239: host_cpu="arm" nkeynes@1239: host_vendor="unknown"; nkeynes@1239: host_os="linux-androideabi" nkeynes@1239: ANDROID_NDK_BIN=`echo $ANDROID_NDK_HOME/toolchains/arm-*/prebuilt/*/bin` nkeynes@1239: ANDROID_GDBSERVER=`echo $ANDROID_NDK_HOME/toolchains/arm-*/prebuilt/gdbserver` nkeynes@1245: ANDROID_SYSROOT="$ANDROID_NDK_HOME/platforms/$ANDROID_NDK_VERSION/arch-arm" nkeynes@1255: dnl Common ARM flags nkeynes@1255: TARGETFLAGS="$TARGETFLAGS -fstack-protector -finline-limit=64 -fno-strict-aliasing -Wno-psabi -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__" nkeynes@1255: if test "x$with_abi" = "armeabi"; then nkeynes@1255: TARGETFLAGS="$TARGETFLAGS -march=armv5te -mtune=xscale -msoft-float" nkeynes@1255: else nkeynes@1255: TARGETFLAGS="$TARGETFLAGS -march=armv7-a -mtune=cortex-a8 -mfloat-abi=softfp -mfpu=vfp" nkeynes@1255: fi nkeynes@1239: ;; nkeynes@1255: x86) nkeynes@1239: host_alias="i686-android-linux" nkeynes@1239: host_cpu="i686" nkeynes@1239: host_vendor="android" nkeynes@1239: host_os="linux" nkeynes@1239: ANDROID_NDK_BIN=`echo $ANDROID_NDK_HOME/toolchains/x86-*/prebuilt/*/bin` nkeynes@1239: ANDROID_GDBSERVER=`echo $ANDROID_NDK_HOME/toolchains/x86-*/prebuilt/gdbserver` nkeynes@1245: ANDROID_SYSROOT="$ANDROID_NDK_HOME/platforms/$ANDROID_NDK_VERSION/arch-x86" nkeynes@1255: TARGETFLAGS="$TARGETFLAGS -finline-limit=300 -fno-rtti -funswitch-loops -fstrict-aliasing" nkeynes@1239: ;; nkeynes@1239: *) nkeynes@1255: AC_MSG_ERROR([Unsupported android ABI $ANDROID_ABI]) nkeynes@1239: ;; nkeynes@1239: esac nkeynes@1239: nkeynes@1239: AC_PATH_PROG( ANT, [ant] ) nkeynes@1239: nkeynes@1239: CC="$ANDROID_NDK_BIN/${host_alias}-gcc" nkeynes@1239: CXX="$ANDROID_NDK_BIN/${host_alias}-g++" nkeynes@1239: CPP="$ANDROID_NDK_BIN/${host_alias}-cpp" nkeynes@1239: LD="$ANDROID_NDK_BIN/${host_alias}-ld" nkeynes@1239: AR="$ANDROID_NDK_BIN/${host_alias}-ar" nkeynes@1239: RANLIB="$ANDROID_NDK_BIN/${host_alias}-ranlib" nkeynes@1239: STRIP="$ANDROID_NDK_BIN/${host_alias}-strip" nkeynes@1239: OBJDUMP="$ANDROID_NDK_BIN/${host_alias}-objdump" nkeynes@1239: CPPFLAGS="-fPIC --sysroot=$ANDROID_SYSROOT -I$ANDROID_SYSROOT/usr/include $TARGETFLAGS $CPPFLAGS" nkeynes@1239: LDFLAGS="-nostdlib -Wl,--no-undefined -L${ANDROID_SYSROOT}/usr/lib -Wl,-rpath-link,${ANDROID_SYSROOT}/usr/lib -Wl,-allow-shlib-undefined -Wl,-z,noexecstack $LDFLAGS" nkeynes@1245: LIBS="$LIBS -liconv -landroid -llog -lgcc -lc -lm" nkeynes@1239: nkeynes@1255: AC_SUBST(ANDROID_ABI) nkeynes@1239: AC_SUBST(ANDROID_SDK_HOME) nkeynes@1239: AC_SUBST(ANDROID_NDK_HOME) nkeynes@1239: AC_SUBST(ANDROID_SDK_VERSION) nkeynes@1245: AC_SUBST(ANDROID_NDK_VERSION) nkeynes@1239: AC_SUBST(ANDROID_GDBSERVER) nkeynes@1239: nkeynes@1239: ANDROID_BUILD=yes nkeynes@1239: cross_compiling=yes nkeynes@1239: fi nkeynes@1239: nkeynes@1239: AM_CONDITIONAL(GUI_ANDROID, [test "$ANDROID_BUILD" = "yes"]) nkeynes@1239: nkeynes@1239: ])