From 7509026dbc627faf2136ef5bbfb394becde6c33e Mon Sep 17 00:00:00 2001 From: Mike Hommey Date: Mon, 11 Jun 2012 08:10:28 +0200 Subject: [PATCH] Bug 759115 - Move Android SDK/NDK checks in build/autoconf/android.m4, and bump minimum Android SDK API level we require to 14 for mobile/android. r=ted --- aclocal.m4 | 1 + build/autoconf/android.m4 | 241 ++++++++++++++++++++++++++++ configure.in | 264 ++++--------------------------- js/src/aclocal.m4 | 1 + js/src/build/autoconf/android.m4 | 241 ++++++++++++++++++++++++++++ js/src/configure.in | 239 +--------------------------- 6 files changed, 517 insertions(+), 470 deletions(-) create mode 100644 build/autoconf/android.m4 create mode 100644 js/src/build/autoconf/android.m4 diff --git a/aclocal.m4 b/aclocal.m4 index bd88d70a5bb..ea4ddb6545e 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -18,6 +18,7 @@ builtin(include, build/autoconf/frameptr.m4)dnl builtin(include, build/autoconf/compiler-opts.m4)dnl builtin(include, build/autoconf/expandlibs.m4)dnl builtin(include, build/autoconf/arch.m4)dnl +builtin(include, build/autoconf/android.m4)dnl MOZ_PROG_CHECKMSYS() diff --git a/build/autoconf/android.m4 b/build/autoconf/android.m4 new file mode 100644 index 00000000000..34d2a6d08e8 --- /dev/null +++ b/build/autoconf/android.m4 @@ -0,0 +1,241 @@ +dnl This Source Code Form is subject to the terms of the Mozilla Public +dnl License, v. 2.0. If a copy of the MPL was not distributed with this +dnl file, You can obtain one at http://mozilla.org/MPL/2.0/. + +AC_DEFUN([MOZ_ANDROID_NDK], +[ + +MOZ_ARG_WITH_STRING(android-ndk, +[ --with-android-ndk=DIR + location where the Android NDK can be found], + android_ndk=$withval) + +MOZ_ARG_WITH_STRING(android-toolchain, +[ --with-android-toolchain=DIR + location of the android toolchain], + android_toolchain=$withval) + + +MOZ_ARG_WITH_STRING(android-version, +[ --with-android-version=VER + android platform version, default 5], + android_version=$withval, + android_version=5) + +MOZ_ARG_WITH_STRING(android-platform, +[ --with-android-platform=DIR + location of platform dir], + android_platform=$withval) + +case "$target" in +arm-linux*-android*|*-linuxandroid*) + android_tool_prefix="arm-linux-androideabi" + ;; +i?86-*android*) + android_tool_prefix="i686-android-linux" + ;; +mipsel-*android*) + android_tool_prefix="mipsel-linux-android" + ;; +*) + android_tool_prefix="$target_os" + ;; +esac + +case "$target" in +*-android*|*-linuxandroid*) + if test -z "$android_ndk" ; then + AC_MSG_ERROR([You must specify --with-android-ndk=/path/to/ndk when targeting Android.]) + fi + + if test -z "$android_toolchain" ; then + AC_MSG_CHECKING([for android toolchain directory]) + + kernel_name=`uname -s | tr "[[:upper:]]" "[[:lower:]]"` + + case "$target_cpu" in + arm) + target_name=arm-linux-androideabi-4.4.3 + ;; + i?86) + target_name=x86-4.4.3 + ;; + mipsel) + target_name=mipsel-linux-android-4.4.3 + ;; + esac + android_toolchain="$android_ndk"/toolchains/$target_name/prebuilt/$kernel_name-x86 + + if test -d "$android_toolchain" ; then + AC_MSG_RESULT([$android_toolchain]) + else + AC_MSG_ERROR([not found. You have to specify --with-android-toolchain=/path/to/ndk/toolchain.]) + fi + fi + + if test -z "$android_platform" ; then + AC_MSG_CHECKING([for android platform directory]) + + case "$target_cpu" in + arm) + target_name=arm + ;; + i?86) + target_name=x86 + ;; + mipsel) + target_name=mips + ;; + esac + + android_platform="$android_ndk"/platforms/android-"$android_version"/arch-"$target_name" + + if test -d "$android_platform" ; then + AC_MSG_RESULT([$android_platform]) + else + AC_MSG_ERROR([not found. You have to specify --with-android-platform=/path/to/ndk/platform.]) + fi + fi + + dnl set up compilers + AS="$android_toolchain"/bin/"$android_tool_prefix"-as + CC="$android_toolchain"/bin/"$android_tool_prefix"-gcc + CXX="$android_toolchain"/bin/"$android_tool_prefix"-g++ + CPP="$android_toolchain"/bin/"$android_tool_prefix"-cpp + LD="$android_toolchain"/bin/"$android_tool_prefix"-ld + AR="$android_toolchain"/bin/"$android_tool_prefix"-ar + RANLIB="$android_toolchain"/bin/"$android_tool_prefix"-ranlib + STRIP="$android_toolchain"/bin/"$android_tool_prefix"-strip + OBJCOPY="$android_toolchain"/bin/"$android_tool_prefix"-objcopy + + CPPFLAGS="-isystem $android_platform/usr/include $CPPFLAGS" + CFLAGS="-mandroid -fno-short-enums -fno-exceptions $CFLAGS" + CXXFLAGS="-mandroid -fno-short-enums -fno-exceptions -Wno-psabi $CXXFLAGS" + ASFLAGS="-isystem $android_platform/usr/include -DANDROID $ASFLAGS" + + dnl Add -llog by default, since we use it all over the place. + dnl Add --allow-shlib-undefined, because libGLESv2 links to an + dnl undefined symbol (present on the hardware, just not in the + dnl NDK.) + LDFLAGS="-mandroid -L$android_platform/usr/lib -Wl,-rpath-link=$android_platform/usr/lib --sysroot=$android_platform -llog -Wl,--allow-shlib-undefined $LDFLAGS" + dnl prevent cross compile section from using these flags as host flags + if test -z "$HOST_CPPFLAGS" ; then + HOST_CPPFLAGS=" " + fi + if test -z "$HOST_CFLAGS" ; then + HOST_CFLAGS=" " + fi + if test -z "$HOST_CXXFLAGS" ; then + HOST_CXXFLAGS=" " + fi + if test -z "$HOST_LDFLAGS" ; then + HOST_LDFLAGS=" " + fi + + ANDROID_NDK="${android_ndk}" + ANDROID_TOOLCHAIN="${android_toolchain}" + ANDROID_PLATFORM="${android_platform}" + ANDROID_VERSION="${android_version}" + + AC_DEFINE(ANDROID) + AC_DEFINE_UNQUOTED(ANDROID_VERSION, $android_version) + AC_SUBST(ANDROID_VERSION) + CROSS_COMPILE=1 + AC_SUBST(ANDROID_NDK) + AC_SUBST(ANDROID_TOOLCHAIN) + AC_SUBST(ANDROID_PLATFORM) + + ;; +esac + +]) + +AC_DEFUN([MOZ_ANDROID_STLPORT], +[ + +if test "$OS_TARGET" = "Android" -a -z "$gonkdir"; then + case "${CPU_ARCH}-${MOZ_ARCH}" in + arm-armv7*) + ANDROID_CPU_ARCH=armeabi-v7a + ;; + arm-*) + ANDROID_CPU_ARCH=armeabi + ;; + x86-*) + ANDROID_CPU_ARCH=x86 + ;; + mips-*) # When target_cpu is mipsel, CPU_ARCH is mips + ANDROID_CPU_ARCH=mips + ;; + esac + + if test -z "$STLPORT_CPPFLAGS$STLPORT_LDFLAGS$STLPORT_LIBS"; then + if test -e "$android_ndk/sources/cxx-stl/stlport/src/iostream.cpp" ; then + if test -e "$android_ndk/sources/cxx-stl/stlport/libs/$ANDROID_CPU_ARCH/libstlport_static.a"; then + STLPORT_LDFLAGS="-L$_objdir/build/stlport -L$android_ndk/sources/cxx-stl/stlport/libs/$ANDROID_CPU_ARCH/" + elif test -e "$android_ndk/tmp/ndk-digit/build/install/sources/cxx-stl/stlport/libs/$ANDROID_CPU_ARCH/libstlport_static.a"; then + STLPORT_LDFLAGS="-L$_objdir/build/stlport -L$android_ndk/tmp/ndk-digit/build/install/sources/cxx-stl/stlport/libs/$ANDROID_CPU_ARCH/" + else + AC_MSG_ERROR([Couldn't find path to stlport in the android ndk]) + fi + STLPORT_SOURCES="$android_ndk/sources/cxx-stl/stlport" + STLPORT_CPPFLAGS="-I$_objdir/build/stlport -I$android_ndk/sources/cxx-stl/stlport/stlport" + STLPORT_LIBS="-lstlport_static" + elif test "$target" != "arm-android-eabi"; then + dnl fail if we're not building with NDKr4 + AC_MSG_ERROR([Couldn't find path to stlport in the android ndk]) + fi + fi + CXXFLAGS="$CXXFLAGS $STLPORT_CPPFLAGS" + LDFLAGS="$LDFLAGS $STLPORT_LDFLAGS" + LIBS="$LIBS $STLPORT_LIBS" +fi +AC_SUBST([STLPORT_SOURCES]) + +]) + +AC_DEFUN([MOZ_ANDROID_SDK], +[ + +MOZ_ARG_WITH_STRING(android-sdk, +[ --with-android-sdk=DIR + location where the Android SDK can be found (base directory, e.g. .../android/platforms/android-6)], + android_sdk=$withval) + +case "$target" in +*-android*|*-linuxandroid*) + if test -z "$android_sdk" ; then + AC_MSG_ERROR([You must specify --with-android-sdk=/path/to/sdk when targeting Android.]) + else + if ! test -e "$android_sdk"/source.properties ; then + AC_MSG_ERROR([The path in --with-android-sdk isn't valid (source.properties hasn't been found).]) + fi + + # Get the api level from "$android_sdk"/source.properties. + android_api_level=`$AWK -F = changequote(<<, >>)'<<$>>1 == "AndroidVersion.ApiLevel" {print <<$>>2}'changequote([, ]) "$android_sdk"/source.properties` + + if test -z "$android_api_level" ; then + AC_MSG_ERROR([Unexpected error: no AndroidVersion.ApiLevel field has been found in source.properties.]) + fi + + if ! test "$android_api_level" -eq "$android_api_level" ; then + AC_MSG_ERROR([Unexpected error: the found android api value isn't a number! (found $android_api_level)]) + fi + + if test $android_api_level -lt $1 ; then + AC_MSG_ERROR([The given Android SDK provides API level $android_api_level ($1 or higher required).]) + fi + fi + + android_platform_tools="$android_sdk"/../../platform-tools + if test ! -d "$android_platform_tools" ; then + android_platform_tools="$android_sdk"/tools # SDK Tools < r8 + fi + ANDROID_SDK="${android_sdk}" + ANDROID_PLATFORM_TOOLS="${android_platform_tools}" + AC_SUBST(ANDROID_SDK) + AC_SUBST(ANDROID_PLATFORM_TOOLS) + ;; +esac + +]) diff --git a/configure.in b/configure.in index 57615403fce..5b910a704fd 100644 --- a/configure.in +++ b/configure.in @@ -154,53 +154,6 @@ if test -z "$PERL" -o "$PERL" = ":"; then AC_MSG_ERROR([perl not found in \$PATH]) fi -dnl ======================================================== -dnl = Android uses a very custom (hacky) toolchain; we need to do this -dnl = here, so that the compiler checks can succeed -dnl ======================================================== - -MOZ_ARG_WITH_STRING(android-ndk, -[ --with-android-ndk=DIR - location where the Android NDK can be found], - android_ndk=$withval) - -MOZ_ARG_WITH_STRING(android-toolchain, -[ --with-android-toolchain=DIR - location of the android toolchain], - android_toolchain=$withval) - - -MOZ_ARG_WITH_STRING(android-version, -[ --with-android-version=VER - android platform version, default 5], - android_version=$withval, - android_version=5) - -MOZ_ARG_WITH_STRING(android-sdk, -[ --with-android-sdk=DIR - location where the Android SDK can be found (base directory, e.g. .../android/platforms/android-6)], - android_sdk=$withval) - -MOZ_ARG_WITH_STRING(android-platform, -[ --with-android-platform=DIR - location of platform dir], - android_platform=$withval) - -case "$target" in -arm-linux*-android*|*-linuxandroid*) - android_tool_prefix="arm-linux-androideabi" - ;; -i?86-*android*) - android_tool_prefix="i686-android-linux" - ;; -mipsel-*android*) - android_tool_prefix="mipsel-linux-android" - ;; -*) - android_tool_prefix="$target_os" - ;; -esac - MOZ_ARG_WITH_STRING(gonk, [ --with-gonk=DIR location of gonk dir], @@ -269,158 +222,23 @@ if test -n "$gonkdir" ; then ZLIB_DIR=yes direct_nspr_config=1 else -case "$target" in -*-android*|*-linuxandroid*) - if test -z "$android_ndk" ; then - AC_MSG_ERROR([You must specify --with-android-ndk=/path/to/ndk when targeting Android.]) - fi + MOZ_ANDROID_NDK - if test -z "$android_sdk" ; then - AC_MSG_ERROR([You must specify --with-android-sdk=/path/to/sdk when targeting Android.]) - else - if ! test -e "$android_sdk"/source.properties ; then - AC_MSG_ERROR([The path in --with-android-sdk isn't valid (source.properties hasn't been found).]) + case "$target" in + *-android*|*-linuxandroid*) + if test -z "$ANDROID_PACKAGE_NAME" ; then + ANDROID_PACKAGE_NAME='org.mozilla.$(MOZ_APP_NAME)' fi - - # Minimum Android SDK API Level we require. - android_min_api_level=13 - - # Get the api level from "$android_sdk"/source.properties. - android_api_level=`$AWK -F = '$1 == "AndroidVersion.ApiLevel" {print $2}' "$android_sdk"/source.properties` - - if test -z "$android_api_level" ; then - AC_MSG_ERROR([Unexpected error: no AndroidVersion.ApiLevel field has been found in source.properties.]) - fi - - if ! test "$android_api_level" -eq "$android_api_level" ; then - AC_MSG_ERROR([Unexpected error: the found android api value isn't a number! (found $android_api_level)]) - fi - - if test $android_api_level -lt $android_min_api_level ; then - AC_MSG_ERROR([The given Android SDK provides API level $android_api_level ($android_min_api_level or higher required).]) - fi - fi - - android_platform_tools="$android_sdk"/../../platform-tools - if test ! -d "$android_platform_tools" ; then - android_platform_tools="$android_sdk"/tools # SDK Tools < r8 - fi - - if test -z "$android_toolchain" ; then - AC_MSG_CHECKING([for android toolchain directory]) - - kernel_name=`uname -s | tr "[[:upper:]]" "[[:lower:]]"` - - case "$target_cpu" in - arm) - target_name=arm-linux-androideabi-4.4.3 - ;; - i?86) - target_name=x86-4.4.3 - ;; - mipsel) - target_name=mipsel-linux-android-4.4.3 - ;; - esac - android_toolchain="$android_ndk"/toolchains/$target_name/prebuilt/$kernel_name-x86 - - if test -d "$android_toolchain" ; then - AC_MSG_RESULT([$android_toolchain]) - else - AC_MSG_ERROR([not found. You have to specify --with-android-toolchain=/path/to/ndk/toolchain.]) - fi - fi - - if test -z "$android_platform" ; then - AC_MSG_CHECKING([for android platform directory]) - - case "$target_cpu" in - arm) - target_name=arm - ;; - i?86) - target_name=x86 - ;; - mipsel) - target_name=mips - ;; - esac - - android_platform="$android_ndk"/platforms/android-"$android_version"/arch-"$target_name" - - if test -d "$android_platform" ; then - AC_MSG_RESULT([$android_platform]) - else - AC_MSG_ERROR([not found. You have to specify --with-android-platform=/path/to/ndk/platform.]) - fi - fi - - dnl set up compilers - AS="$android_toolchain"/bin/"$android_tool_prefix"-as - CC="$android_toolchain"/bin/"$android_tool_prefix"-gcc - CXX="$android_toolchain"/bin/"$android_tool_prefix"-g++ - CPP="$android_toolchain"/bin/"$android_tool_prefix"-cpp - LD="$android_toolchain"/bin/"$android_tool_prefix"-ld - AR="$android_toolchain"/bin/"$android_tool_prefix"-ar - RANLIB="$android_toolchain"/bin/"$android_tool_prefix"-ranlib - STRIP="$android_toolchain"/bin/"$android_tool_prefix"-strip - OBJCOPY="$android_toolchain"/bin/"$android_tool_prefix"-objcopy - - CPPFLAGS="-isystem $android_platform/usr/include $CPPFLAGS" - CFLAGS="-mandroid -fno-short-enums -fno-exceptions $CFLAGS" - CXXFLAGS="-mandroid -fno-short-enums -fno-exceptions -Wno-psabi $CXXFLAGS" - ASFLAGS="-isystem $android_platform/usr/include -DANDROID $ASFLAGS" - - dnl Add -llog by default, since we use it all over the place. - dnl Add --allow-shlib-undefined, because libGLESv2 links to an - dnl undefined symbol (present on the hardware, just not in the - dnl NDK.) - LDFLAGS="-mandroid -L$android_platform/usr/lib -Wl,-rpath-link=$android_platform/usr/lib --sysroot=$android_platform -llog -Wl,--allow-shlib-undefined $LDFLAGS" - - dnl prevent cross compile section from using these flags as host flags - if test -z "$HOST_CPPFLAGS" ; then - HOST_CPPFLAGS=" " - fi - if test -z "$HOST_CFLAGS" ; then - HOST_CFLAGS=" " - fi - if test -z "$HOST_CXXFLAGS" ; then - HOST_CXXFLAGS=" " - fi - if test -z "$HOST_LDFLAGS" ; then - HOST_LDFLAGS=" " - fi - - ANDROID_NDK="${android_ndk}" - ANDROID_TOOLCHAIN="${android_toolchain}" - ANDROID_PLATFORM="${android_platform}" - ANDROID_SDK="${android_sdk}" - ANDROID_PLATFORM_TOOLS="${android_platform_tools}" - ANDROID_VERSION="${android_version}" - if test -z "$ANDROID_PACKAGE_NAME" ; then - ANDROID_PACKAGE_NAME='org.mozilla.$(MOZ_APP_NAME)' - fi - - AC_DEFINE(ANDROID) - AC_DEFINE_UNQUOTED(ANDROID_VERSION, $android_version) - AC_SUBST(ANDROID_VERSION) - CROSS_COMPILE=1 - MOZ_CHROME_FILE_FORMAT=omni - ZLIB_DIR=yes - ;; -*-linux*) - AC_PATH_PROG(OBJCOPY,objcopy) - ;; -esac - + MOZ_CHROME_FILE_FORMAT=omni + ZLIB_DIR=yes + ;; + *-linux*) + AC_PATH_PROG(OBJCOPY,objcopy) + ;; + esac fi -AC_SUBST(ANDROID_NDK) -AC_SUBST(ANDROID_TOOLCHAIN) AC_SUBST(ANDROID_SOURCE) -AC_SUBST(ANDROID_PLATFORM) -AC_SUBST(ANDROID_SDK) -AC_SUBST(ANDROID_PLATFORM_TOOLS) AC_SUBST(ANDROID_PACKAGE_NAME) AC_SUBST(OBJCOPY) @@ -1591,45 +1409,7 @@ dnl Android libstdc++, placed here so it can use MOZ_ARCH dnl computed above. dnl ======================================================== -if test "$OS_TARGET" = "Android"; then - case "${CPU_ARCH}-${MOZ_ARCH}" in - arm-armv7*) - ANDROID_CPU_ARCH=armeabi-v7a - ;; - arm-*) - ANDROID_CPU_ARCH=armeabi - ;; - x86-*) - ANDROID_CPU_ARCH=x86 - ;; - mips-*) # When target_cpu is mipsel, CPU_ARCH is mips - ANDROID_CPU_ARCH=mips - ;; - esac -fi - -if test "$OS_TARGET" = "Android" -a -z "$gonkdir"; then - if test -e "$android_ndk/sources/cxx-stl/stlport/src/iostream.cpp" ; then - if test -e "$android_ndk/sources/cxx-stl/stlport/libs/$ANDROID_CPU_ARCH/libstlport_static.a"; then - STLPORT_LDFLAGS="-L$_objdir/build/stlport -L$android_ndk/sources/cxx-stl/stlport/libs/$ANDROID_CPU_ARCH/" - elif test -e "$android_ndk/tmp/ndk-digit/build/install/sources/cxx-stl/stlport/libs/$ANDROID_CPU_ARCH/libstlport_static.a"; then - STLPORT_LDFLAGS="-L$_objdir/build/stlport -L$android_ndk/tmp/ndk-digit/build/install/sources/cxx-stl/stlport/libs/$ANDROID_CPU_ARCH/" - else - AC_MSG_ERROR([Couldn't find path to stlport in the android ndk]) - fi - STLPORT_SOURCES="$android_ndk/sources/cxx-stl/stlport" - STLPORT_CPPFLAGS="-I$_objdir/build/stlport -I$android_ndk/sources/cxx-stl/stlport/stlport" - STLPORT_LIBS="-lstlport_static" - elif test "$target" != "arm-android-eabi"; then - dnl fail if we're not building with NDKr4 - AC_MSG_ERROR([Couldn't find path to stlport in the android ndk]) - fi - CXXFLAGS="$CXXFLAGS $STLPORT_CPPFLAGS" - LDFLAGS="$LDFLAGS $STLPORT_LDFLAGS" - LIBS="$LIBS $STLPORT_LIBS" -fi - -AC_SUBST([STLPORT_SOURCES]) +MOZ_ANDROID_STLPORT dnl ======================================================== dnl Suppress Clang Argument Warnings @@ -4699,6 +4479,24 @@ AC_SUBST(MOZ_XULRUNNER) AC_DEFINE_UNQUOTED(MOZ_BUILD_APP,$MOZ_BUILD_APP) +dnl ======================================================== +dnl Check android sdk version depending on mobile target +dnl ======================================================== + +if test -z "$gonkdir" ; then + # Minimum Android SDK API Level we require. + case "$MOZ_BUILD_APP" in + mobile/xul) + android_min_api_level=13 + ;; + mobile/android) + android_min_api_level=14 + ;; + esac + + MOZ_ANDROID_SDK($android_min_api_level) +fi + dnl ======================================================== dnl = dnl = Toolkit Options diff --git a/js/src/aclocal.m4 b/js/src/aclocal.m4 index f56efb60ed8..0abf1bb5276 100644 --- a/js/src/aclocal.m4 +++ b/js/src/aclocal.m4 @@ -17,5 +17,6 @@ builtin(include, build/autoconf/frameptr.m4)dnl builtin(include, build/autoconf/compiler-opts.m4)dnl builtin(include, build/autoconf/expandlibs.m4)dnl builtin(include, build/autoconf/arch.m4)dnl +builtin(include, build/autoconf/android.m4)dn MOZ_PROG_CHECKMSYS() diff --git a/js/src/build/autoconf/android.m4 b/js/src/build/autoconf/android.m4 new file mode 100644 index 00000000000..34d2a6d08e8 --- /dev/null +++ b/js/src/build/autoconf/android.m4 @@ -0,0 +1,241 @@ +dnl This Source Code Form is subject to the terms of the Mozilla Public +dnl License, v. 2.0. If a copy of the MPL was not distributed with this +dnl file, You can obtain one at http://mozilla.org/MPL/2.0/. + +AC_DEFUN([MOZ_ANDROID_NDK], +[ + +MOZ_ARG_WITH_STRING(android-ndk, +[ --with-android-ndk=DIR + location where the Android NDK can be found], + android_ndk=$withval) + +MOZ_ARG_WITH_STRING(android-toolchain, +[ --with-android-toolchain=DIR + location of the android toolchain], + android_toolchain=$withval) + + +MOZ_ARG_WITH_STRING(android-version, +[ --with-android-version=VER + android platform version, default 5], + android_version=$withval, + android_version=5) + +MOZ_ARG_WITH_STRING(android-platform, +[ --with-android-platform=DIR + location of platform dir], + android_platform=$withval) + +case "$target" in +arm-linux*-android*|*-linuxandroid*) + android_tool_prefix="arm-linux-androideabi" + ;; +i?86-*android*) + android_tool_prefix="i686-android-linux" + ;; +mipsel-*android*) + android_tool_prefix="mipsel-linux-android" + ;; +*) + android_tool_prefix="$target_os" + ;; +esac + +case "$target" in +*-android*|*-linuxandroid*) + if test -z "$android_ndk" ; then + AC_MSG_ERROR([You must specify --with-android-ndk=/path/to/ndk when targeting Android.]) + fi + + if test -z "$android_toolchain" ; then + AC_MSG_CHECKING([for android toolchain directory]) + + kernel_name=`uname -s | tr "[[:upper:]]" "[[:lower:]]"` + + case "$target_cpu" in + arm) + target_name=arm-linux-androideabi-4.4.3 + ;; + i?86) + target_name=x86-4.4.3 + ;; + mipsel) + target_name=mipsel-linux-android-4.4.3 + ;; + esac + android_toolchain="$android_ndk"/toolchains/$target_name/prebuilt/$kernel_name-x86 + + if test -d "$android_toolchain" ; then + AC_MSG_RESULT([$android_toolchain]) + else + AC_MSG_ERROR([not found. You have to specify --with-android-toolchain=/path/to/ndk/toolchain.]) + fi + fi + + if test -z "$android_platform" ; then + AC_MSG_CHECKING([for android platform directory]) + + case "$target_cpu" in + arm) + target_name=arm + ;; + i?86) + target_name=x86 + ;; + mipsel) + target_name=mips + ;; + esac + + android_platform="$android_ndk"/platforms/android-"$android_version"/arch-"$target_name" + + if test -d "$android_platform" ; then + AC_MSG_RESULT([$android_platform]) + else + AC_MSG_ERROR([not found. You have to specify --with-android-platform=/path/to/ndk/platform.]) + fi + fi + + dnl set up compilers + AS="$android_toolchain"/bin/"$android_tool_prefix"-as + CC="$android_toolchain"/bin/"$android_tool_prefix"-gcc + CXX="$android_toolchain"/bin/"$android_tool_prefix"-g++ + CPP="$android_toolchain"/bin/"$android_tool_prefix"-cpp + LD="$android_toolchain"/bin/"$android_tool_prefix"-ld + AR="$android_toolchain"/bin/"$android_tool_prefix"-ar + RANLIB="$android_toolchain"/bin/"$android_tool_prefix"-ranlib + STRIP="$android_toolchain"/bin/"$android_tool_prefix"-strip + OBJCOPY="$android_toolchain"/bin/"$android_tool_prefix"-objcopy + + CPPFLAGS="-isystem $android_platform/usr/include $CPPFLAGS" + CFLAGS="-mandroid -fno-short-enums -fno-exceptions $CFLAGS" + CXXFLAGS="-mandroid -fno-short-enums -fno-exceptions -Wno-psabi $CXXFLAGS" + ASFLAGS="-isystem $android_platform/usr/include -DANDROID $ASFLAGS" + + dnl Add -llog by default, since we use it all over the place. + dnl Add --allow-shlib-undefined, because libGLESv2 links to an + dnl undefined symbol (present on the hardware, just not in the + dnl NDK.) + LDFLAGS="-mandroid -L$android_platform/usr/lib -Wl,-rpath-link=$android_platform/usr/lib --sysroot=$android_platform -llog -Wl,--allow-shlib-undefined $LDFLAGS" + dnl prevent cross compile section from using these flags as host flags + if test -z "$HOST_CPPFLAGS" ; then + HOST_CPPFLAGS=" " + fi + if test -z "$HOST_CFLAGS" ; then + HOST_CFLAGS=" " + fi + if test -z "$HOST_CXXFLAGS" ; then + HOST_CXXFLAGS=" " + fi + if test -z "$HOST_LDFLAGS" ; then + HOST_LDFLAGS=" " + fi + + ANDROID_NDK="${android_ndk}" + ANDROID_TOOLCHAIN="${android_toolchain}" + ANDROID_PLATFORM="${android_platform}" + ANDROID_VERSION="${android_version}" + + AC_DEFINE(ANDROID) + AC_DEFINE_UNQUOTED(ANDROID_VERSION, $android_version) + AC_SUBST(ANDROID_VERSION) + CROSS_COMPILE=1 + AC_SUBST(ANDROID_NDK) + AC_SUBST(ANDROID_TOOLCHAIN) + AC_SUBST(ANDROID_PLATFORM) + + ;; +esac + +]) + +AC_DEFUN([MOZ_ANDROID_STLPORT], +[ + +if test "$OS_TARGET" = "Android" -a -z "$gonkdir"; then + case "${CPU_ARCH}-${MOZ_ARCH}" in + arm-armv7*) + ANDROID_CPU_ARCH=armeabi-v7a + ;; + arm-*) + ANDROID_CPU_ARCH=armeabi + ;; + x86-*) + ANDROID_CPU_ARCH=x86 + ;; + mips-*) # When target_cpu is mipsel, CPU_ARCH is mips + ANDROID_CPU_ARCH=mips + ;; + esac + + if test -z "$STLPORT_CPPFLAGS$STLPORT_LDFLAGS$STLPORT_LIBS"; then + if test -e "$android_ndk/sources/cxx-stl/stlport/src/iostream.cpp" ; then + if test -e "$android_ndk/sources/cxx-stl/stlport/libs/$ANDROID_CPU_ARCH/libstlport_static.a"; then + STLPORT_LDFLAGS="-L$_objdir/build/stlport -L$android_ndk/sources/cxx-stl/stlport/libs/$ANDROID_CPU_ARCH/" + elif test -e "$android_ndk/tmp/ndk-digit/build/install/sources/cxx-stl/stlport/libs/$ANDROID_CPU_ARCH/libstlport_static.a"; then + STLPORT_LDFLAGS="-L$_objdir/build/stlport -L$android_ndk/tmp/ndk-digit/build/install/sources/cxx-stl/stlport/libs/$ANDROID_CPU_ARCH/" + else + AC_MSG_ERROR([Couldn't find path to stlport in the android ndk]) + fi + STLPORT_SOURCES="$android_ndk/sources/cxx-stl/stlport" + STLPORT_CPPFLAGS="-I$_objdir/build/stlport -I$android_ndk/sources/cxx-stl/stlport/stlport" + STLPORT_LIBS="-lstlport_static" + elif test "$target" != "arm-android-eabi"; then + dnl fail if we're not building with NDKr4 + AC_MSG_ERROR([Couldn't find path to stlport in the android ndk]) + fi + fi + CXXFLAGS="$CXXFLAGS $STLPORT_CPPFLAGS" + LDFLAGS="$LDFLAGS $STLPORT_LDFLAGS" + LIBS="$LIBS $STLPORT_LIBS" +fi +AC_SUBST([STLPORT_SOURCES]) + +]) + +AC_DEFUN([MOZ_ANDROID_SDK], +[ + +MOZ_ARG_WITH_STRING(android-sdk, +[ --with-android-sdk=DIR + location where the Android SDK can be found (base directory, e.g. .../android/platforms/android-6)], + android_sdk=$withval) + +case "$target" in +*-android*|*-linuxandroid*) + if test -z "$android_sdk" ; then + AC_MSG_ERROR([You must specify --with-android-sdk=/path/to/sdk when targeting Android.]) + else + if ! test -e "$android_sdk"/source.properties ; then + AC_MSG_ERROR([The path in --with-android-sdk isn't valid (source.properties hasn't been found).]) + fi + + # Get the api level from "$android_sdk"/source.properties. + android_api_level=`$AWK -F = changequote(<<, >>)'<<$>>1 == "AndroidVersion.ApiLevel" {print <<$>>2}'changequote([, ]) "$android_sdk"/source.properties` + + if test -z "$android_api_level" ; then + AC_MSG_ERROR([Unexpected error: no AndroidVersion.ApiLevel field has been found in source.properties.]) + fi + + if ! test "$android_api_level" -eq "$android_api_level" ; then + AC_MSG_ERROR([Unexpected error: the found android api value isn't a number! (found $android_api_level)]) + fi + + if test $android_api_level -lt $1 ; then + AC_MSG_ERROR([The given Android SDK provides API level $android_api_level ($1 or higher required).]) + fi + fi + + android_platform_tools="$android_sdk"/../../platform-tools + if test ! -d "$android_platform_tools" ; then + android_platform_tools="$android_sdk"/tools # SDK Tools < r8 + fi + ANDROID_SDK="${android_sdk}" + ANDROID_PLATFORM_TOOLS="${android_platform_tools}" + AC_SUBST(ANDROID_SDK) + AC_SUBST(ANDROID_PLATFORM_TOOLS) + ;; +esac + +]) diff --git a/js/src/configure.in b/js/src/configure.in index acd6fe10512..f4b7cbda871 100644 --- a/js/src/configure.in +++ b/js/src/configure.in @@ -146,53 +146,6 @@ else fi AC_SUBST(JS_SHARED_LIBRARY) -dnl ======================================================== -dnl = Android uses a very custom (hacky) toolchain; we need to do this -dnl = here, so that the compiler checks can succeed -dnl ======================================================== - -MOZ_ARG_WITH_STRING(android-ndk, -[ --with-android-ndk=DIR - location where the Android NDK can be found], - android_ndk=$withval) - -MOZ_ARG_WITH_STRING(android-toolchain, -[ --with-android-toolchain=DIR - location of the android toolchain], - android_toolchain=$withval) - - -MOZ_ARG_WITH_STRING(android-version, -[ --with-android-version=VER - android platform version, default 5], - android_version=$withval, - android_version=5) - -MOZ_ARG_WITH_STRING(android-sdk, -[ --with-android-sdk=DIR - location where the Android SDK can be found (base directory, e.g. .../android/platforms/android-6)], - android_sdk=$withval) - -MOZ_ARG_WITH_STRING(android-platform, -[ --with-android-platform=DIR - location of platform dir], - android_platform=$withval) - -case "$target" in -arm-linux*-android*|*-linuxandroid*) - android_tool_prefix="arm-linux-androideabi" - ;; -i?86-*android*) - android_tool_prefix="i686-android-linux" - ;; -mipsel-*android*) - android_tool_prefix="mipsel-linux-android" - ;; -*) - android_tool_prefix="$target_os" - ;; -esac - MOZ_ARG_WITH_STRING(gonk, [ --with-gonk=DIR location of gonk dir], @@ -250,160 +203,13 @@ if test -n "$gonkdir" ; then HOST_LDFLAGS=" " fi - # save these for libffi's subconfigure, - # which doesn't know how to figure this stuff out on its own - ANDROID_CFLAGS="$CFLAGS" - ANDROID_CPPFLAGS="$CPPFLAGS" - ANDROID_LDFLAGS="$LDFLAGS" - AC_DEFINE(ANDROID) AC_DEFINE(GONK) CROSS_COMPILE=1 else -case "$target" in -*-android*|*-linuxandroid*) - if test -z "$android_ndk" ; then - AC_MSG_ERROR([You must specify --with-android-ndk=/path/to/ndk when targeting Android.]) - fi - - if test -z "$android_sdk" ; then - AC_MSG_ERROR([You must specify --with-android-sdk=/path/to/sdk when targeting Android.]) - fi - - android_platform_tools="$android_sdk"/../../platform-tools - if test ! -d "$android_platform_tools" ; then - android_platform_tools="$android_sdk"/tools # SDK Tools < r8 - else - if ! test -e "$android_sdk"/source.properties ; then - AC_MSG_ERROR([The path in --with-android-sdk isn't valid (source.properties hasn't been found).]) - fi - - # Minimum Android SDK API Level we require. - android_min_api_level=13 - - # Get the api level from "$android_sdk"/source.properties. - android_api_level=`$AWK -F = '$1 == "AndroidVersion.ApiLevel" {print $2}' "$android_sdk"/source.properties` - - if test -z "$android_api_level" ; then - AC_MSG_ERROR([Unexpected error: no AndroidVersion.ApiLevel field has been found in source.properties.]) - fi - - if ! test "$android_api_level" -eq "$android_api_level" ; then - AC_MSG_ERROR([Unexpected error: the found android api value isn't a number! (found $android_api_level)]) - fi - - if test $android_api_level -lt $android_min_api_level ; then - AC_MSG_ERROR([The given Android SDK provides API level $android_api_level ($android_min_api_level or higher required).]) - fi - fi - - if test -z "$android_toolchain" ; then - AC_MSG_CHECKING([for android toolchain directory]) - - kernel_name=`uname -s | tr "[[:upper:]]" "[[:lower:]]"` - - case "$target_cpu" in - arm) - target_name=arm-linux-androideabi-4.4.3 - ;; - i?86) - target_name=x86-4.4.3 - ;; - mipsel) - target_name=mipsel-linux-android-4.4.3 - ;; - esac - android_toolchain="$android_ndk"/toolchains/$target_name/prebuilt/$kernel_name-x86 - - if test -d "$android_toolchain" ; then - AC_MSG_RESULT([$android_toolchain]) - else - AC_MSG_ERROR([not found. You have to specify --with-android-toolchain=/path/to/ndk/toolchain.]) - fi - fi - - if test -z "$android_platform" ; then - AC_MSG_CHECKING([for android platform directory]) - - case "$target_cpu" in - arm) - target_name=arm - ;; - i?86) - target_name=x86 - ;; - mipsel) - target_name=mips - ;; - esac - - android_platform="$android_ndk"/platforms/android-"$android_version"/arch-"$target_name" - - if test -d "$android_platform" ; then - AC_MSG_RESULT([$android_platform]) - else - AC_MSG_ERROR([not found. You have to specify --with-android-platform=/path/to/ndk/platform.]) - fi - fi - - dnl set up compilers - AS="$android_toolchain"/bin/"$android_tool_prefix"-as - CC="$android_toolchain"/bin/"$android_tool_prefix"-gcc - CXX="$android_toolchain"/bin/"$android_tool_prefix"-g++ - CPP="$android_toolchain"/bin/"$android_tool_prefix"-cpp - LD="$android_toolchain"/bin/"$android_tool_prefix"-ld - AR="$android_toolchain"/bin/"$android_tool_prefix"-ar - RANLIB="$android_toolchain"/bin/"$android_tool_prefix"-ranlib - STRIP="$android_toolchain"/bin/"$android_tool_prefix"-strip - - CPPFLAGS="-isystem $android_platform/usr/include $CPPFLAGS" - CFLAGS="-mandroid -fno-short-enums -fno-exceptions $CFLAGS" - CXXFLAGS="-mandroid -fno-short-enums -fno-exceptions -Wno-psabi $CXXFLAGS" - ASFLAGS="-isystem $android_platform/usr/include -DANDROID $ASFLAGS" - - dnl Add -llog by default, since we use it all over the place. - dnl Add --allow-shlib-undefined, because libGLESv2 links to an - dnl undefined symbol (present on the hardware, just not in the - dnl NDK.) - LDFLAGS="-mandroid -L$android_platform/usr/lib -Wl,-rpath-link=$android_platform/usr/lib --sysroot=$android_platform -llog -Wl,--allow-shlib-undefined $LDFLAGS" - - dnl prevent cross compile section from using these flags as host flags - if test -z "$HOST_CPPFLAGS" ; then - HOST_CPPFLAGS=" " - fi - if test -z "$HOST_CFLAGS" ; then - HOST_CFLAGS=" " - fi - if test -z "$HOST_CXXFLAGS" ; then - HOST_CXXFLAGS=" " - fi - if test -z "$HOST_LDFLAGS" ; then - HOST_LDFLAGS=" " - fi - - ANDROID_NDK="${android_ndk}" - ANDROID_TOOLCHAIN="${android_toolchain}" - ANDROID_PLATFORM="${android_platform}" - ANDROID_SDK="${android_sdk}" - ANDROID_PLATFORM_TOOLS="${android_platform_tools}" - ANDROID_VERSION="${android_version}" - - AC_DEFINE(ANDROID) - AC_DEFINE_UNQUOTED(ANDROID_VERSION, $android_version) - AC_SUBST(ANDROID_VERSION) - CROSS_COMPILE=1 - MOZ_CHROME_FILE_FORMAT=omni - ;; -esac - + MOZ_ANDROID_NDK fi -AC_SUBST(ANDROID_NDK) -AC_SUBST(ANDROID_TOOLCHAIN) -AC_SUBST(ANDROID_PLATFORM) -AC_SUBST(ANDROID_SDK) -AC_SUBST(ANDROID_PLATFORM_TOOLS) - dnl ======================================================== dnl Checks for compilers. dnl ======================================================== @@ -1469,48 +1275,7 @@ dnl Android libstdc++, placed here so it can use MOZ_ARCH dnl computed above. dnl ======================================================== -if test "$OS_TARGET" = "Android"; then - case "${CPU_ARCH}-${MOZ_ARCH}" in - arm-armv7*) - ANDROID_CPU_ARCH=armeabi-v7a - ;; - arm-*) - ANDROID_CPU_ARCH=armeabi - ;; - x86-*) - ANDROID_CPU_ARCH=x86 - ;; - mips-*) # When target_cpu is mipsel, CPU_ARCH is mips - ANDROID_CPU_ARCH=mips - ;; - esac -fi - -if test "$OS_TARGET" = "Android" -a -z "$gonkdir"; then - if test -z "$STLPORT_CPPFLAGS$STLPORT_LDFLAGS$STLPORT_LIBS"; then - if test -e "$android_ndk/sources/cxx-stl/stlport/libs/$ANDROID_CPU_ARCH/libstlport_static.a" ; then - STLPORT_CPPFLAGS="-I$android_ndk/sources/cxx-stl/stlport/stlport" - STLPORT_LDFLAGS="-L$android_ndk/sources/cxx-stl/stlport/libs/$ANDROID_CPU_ARCH/" - STLPORT_LIBS="-lstlport_static" - elif test -e "$android_ndk/tmp/ndk-digit/build/install/sources/cxx-stl/stlport/libs/$ANDROID_CPU_ARCH/libstlport_static.a" ; then - STLPORT_CPPFLAGS="-I$android_ndk/sources/cxx-stl/stlport/stlport" - STLPORT_LDFLAGS="-L$android_ndk/tmp/ndk-digit/build/install/sources/cxx-stl/stlport/libs/$ANDROID_CPU_ARCH" - STLPORT_LIBS="-lstlport_static" - elif test "$target" != "arm-android-eabi"; then - dnl fail if we're not building with NDKr4 - AC_MSG_ERROR([Couldn't find path to stlport in the android ndk]) - fi - fi - CXXFLAGS="$CXXFLAGS $STLPORT_CPPFLAGS" - LDFLAGS="$LDFLAGS $STLPORT_LDFLAGS" - LIBS="$LIBS $STLPORT_LIBS" - - # save these for libffi's subconfigure, - # which doesn't know how to figure this stuff out on its own - ANDROID_CFLAGS="$CFLAGS" - ANDROID_CPPFLAGS="$CPPFLAGS" - ANDROID_LDFLAGS="$LDFLAGS" -fi +MOZ_ANDROID_STLPORT dnl ======================================================== dnl Suppress Clang Argument Warnings