summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXavier de Gaye <xdegaye@users.sourceforge.net>2017-01-04 21:51:16 +0100
committerXavier de Gaye <xdegaye@users.sourceforge.net>2017-01-04 21:51:16 +0100
commit6135547397e555d0369aee9fb0452761f15cffde (patch)
tree5c4b530da3fb56ea6945acd32def8eef925e25cd
parentadfe22f79b7d47f6a3497318d4acb5a029446248 (diff)
downloadcpython-6135547397e555d0369aee9fb0452761f15cffde.tar.gz
Issue #26851: Set Android compilation and link flags.
-rw-r--r--Misc/NEWS2
-rwxr-xr-xconfigure20
-rw-r--r--configure.ac18
3 files changed, 36 insertions, 4 deletions
diff --git a/Misc/NEWS b/Misc/NEWS
index c8eacf1ce3..0a32e264b6 100644
--- 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
diff --git a/configure b/configure
index e10510df28..1500cea4a8 100755
--- 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/*)
diff --git a/configure.ac b/configure.ac
index 9ffdfdfd5a..64f12f2879 100644
--- a/configure.ac
+++ b/configure.ac
@@ -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/*)