]> granicus.if.org Git - python/commitdiff
Issue #26851: Set Android compilation and link flags.
authorXavier de Gaye <xdegaye@users.sourceforge.net>
Wed, 4 Jan 2017 20:51:16 +0000 (21:51 +0100)
committerXavier de Gaye <xdegaye@users.sourceforge.net>
Wed, 4 Jan 2017 20:51:16 +0000 (21:51 +0100)
Misc/NEWS
configure
configure.ac

index c8eacf1ce3fa44ba3de614a95b55dbb99f057d38..0a32e264b6caaf18cc623d8d40d0e775ae8c4236 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -121,6 +121,8 @@ Tests
 Build
 -----
 
+- Issue #26851: Set Android compilation and link flags.
+
 - Issue #28768: Fix implicit declaration of function _setmode. Patch by
   Masayuki Yamamoto
 
index e10510df28cf48be89a05ad31829d2e75f226c44..1500cea4a8292b621488dafad2907bd0099e8679 100755 (executable)
--- a/configure
+++ b/configure
@@ -3247,6 +3247,9 @@ then
        # a lot of different things including 'define_xopen_source'
        # in the case statement below.
        case "$host" in
+       *-*-linux-android*)
+               ac_sys_system=Linux-android
+               ;;
        *-*-linux*)
                ac_sys_system=Linux
                ;;
@@ -5640,14 +5643,16 @@ $as_echo_n "checking for the Android API level... " >&6; }
 cat >> conftest.c <<EOF
 #ifdef __ANDROID__
 #include <android/api-level.h>
-__ANDROID_API__
+android_api = __ANDROID_API__
+arm_arch = __ARM_ARCH
 #else
 #error not Android
 #endif
 EOF
 
 if $CPP $CPPFLAGS conftest.c >conftest.out 2>/dev/null; then
-  ANDROID_API_LEVEL=`grep -v '^#' conftest.out | grep -v '^ *$'`
+  ANDROID_API_LEVEL=`sed -n -e '/__ANDROID_API__/d' -e 's/^android_api = //p' conftest.out`
+  _arm_arch=`sed -n -e '/__ARM_ARCH/d' -e 's/^arm_arch = //p' conftest.out`
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ANDROID_API_LEVEL" >&5
 $as_echo "$ANDROID_API_LEVEL" >&6; }
 
@@ -5655,6 +5660,15 @@ cat >>confdefs.h <<_ACEOF
 #define ANDROID_API_LEVEL $ANDROID_API_LEVEL
 _ACEOF
 
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the Android arm ABI" >&5
+$as_echo_n "checking for the Android arm ABI... " >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_arm_arch" >&5
+$as_echo "$_arm_arch" >&6; }
+  if test "$_arm_arch" = 7; then
+    BASECFLAGS="${BASECFLAGS} -mfloat-abi=softfp -mfpu=vfpv3-d16"
+    LDFLAGS="${LDFLAGS} -march=armv7-a -Wl,--fix-cortex-a8"
+  fi
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: not Android" >&5
 $as_echo "not Android" >&6; }
@@ -9281,6 +9295,7 @@ then
                 then CCSHARED="-fPIC";
                 else CCSHARED="+z";
                 fi;;
+       Linux-android*) ;;
        Linux*|GNU*) CCSHARED="-fPIC";;
        BSD/OS*/4*) CCSHARED="-fpic";;
        FreeBSD*|NetBSD*|OpenBSD*|DragonFly*) CCSHARED="-fPIC";;
@@ -9314,6 +9329,7 @@ then
            LINKFORSHARED="-Wl,-E -Wl,+s";;
 #          LINKFORSHARED="-Wl,-E -Wl,+s -Wl,+b\$(BINLIBDEST)/lib-dynload";;
        BSD/OS/4*) LINKFORSHARED="-Xlinker -export-dynamic";;
+       Linux-android*) LINKFORSHARED="-pie -Xlinker -export-dynamic";;
        Linux*|GNU*) LINKFORSHARED="-Xlinker -export-dynamic";;
        # -u libsys_s pulls in all symbols in libsys
        Darwin/*)
index 9ffdfdfd5a71753624c1080385a9316870eec903..64f12f28790a7d90c7267adbbf143abeb87beed2 100644 (file)
@@ -379,6 +379,9 @@ then
        # a lot of different things including 'define_xopen_source'
        # in the case statement below.
        case "$host" in
+       *-*-linux-android*)
+               ac_sys_system=Linux-android
+               ;;
        *-*-linux*)
                ac_sys_system=Linux
                ;;
@@ -913,16 +916,25 @@ AC_MSG_CHECKING([for the Android API level])
 cat >> conftest.c <<EOF
 #ifdef __ANDROID__
 #include <android/api-level.h>
-__ANDROID_API__
+android_api = __ANDROID_API__
+arm_arch = __ARM_ARCH
 #else
 #error not Android
 #endif
 EOF
 
 if $CPP $CPPFLAGS conftest.c >conftest.out 2>/dev/null; then
-  ANDROID_API_LEVEL=`grep -v '^#' conftest.out | grep -v '^ *$'`
+  ANDROID_API_LEVEL=`sed -n -e '/__ANDROID_API__/d' -e 's/^android_api = //p' conftest.out`
+  _arm_arch=`sed -n -e '/__ARM_ARCH/d' -e 's/^arm_arch = //p' conftest.out`
   AC_MSG_RESULT([$ANDROID_API_LEVEL])
   AC_DEFINE_UNQUOTED(ANDROID_API_LEVEL, $ANDROID_API_LEVEL, [The Android API level.])
+
+  AC_MSG_CHECKING([for the Android arm ABI])
+  AC_MSG_RESULT([$_arm_arch])
+  if test "$_arm_arch" = 7; then
+    BASECFLAGS="${BASECFLAGS} -mfloat-abi=softfp -mfpu=vfpv3-d16"
+    LDFLAGS="${LDFLAGS} -march=armv7-a -Wl,--fix-cortex-a8"
+  fi
 else
   AC_MSG_RESULT([not Android])
 fi
@@ -2535,6 +2547,7 @@ then
                 then CCSHARED="-fPIC";
                 else CCSHARED="+z";
                 fi;;
+       Linux-android*) ;;
        Linux*|GNU*) CCSHARED="-fPIC";;
        BSD/OS*/4*) CCSHARED="-fpic";;
        FreeBSD*|NetBSD*|OpenBSD*|DragonFly*) CCSHARED="-fPIC";;
@@ -2566,6 +2579,7 @@ then
            LINKFORSHARED="-Wl,-E -Wl,+s";;
 #          LINKFORSHARED="-Wl,-E -Wl,+s -Wl,+b\$(BINLIBDEST)/lib-dynload";;
        BSD/OS/4*) LINKFORSHARED="-Xlinker -export-dynamic";;
+       Linux-android*) LINKFORSHARED="-pie -Xlinker -export-dynamic";;
        Linux*|GNU*) LINKFORSHARED="-Xlinker -export-dynamic";;
        # -u libsys_s pulls in all symbols in libsys
        Darwin/*)