summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndy Polyakov <appro@openssl.org>2018-03-17 10:59:57 +0100
committerAndy Polyakov <appro@openssl.org>2018-03-19 14:31:30 +0100
commitdf3a15512bd0f5ddd9f0dd74f0a058ee55b33904 (patch)
treeee025ba3683d313cbb4e58d2d09dc1787725a0cb
parentf39276fdff6ccc1c71bdb30a8050fa1c0bf6e20a (diff)
Configurations/15-android.conf: detect clang by PATH, not by CC.
Since they intend to omit gcc, it's more appropriate to simply detect if there is NDK's clang on PATH, as opposite to requiring to specify it with CC=clang (and looking for it on PATH). Also detect NDK version and default to armv7-a for NDK>16. Address failure to recognize -D__ADNDROID_API__=N in CPPFLAGS. Reviewed-by: Rich Salz <rsalz@openssl.org> (Merged from https://github.com/openssl/openssl/pull/5613)
-rw-r--r--Configurations/15-android.conf35
-rw-r--r--NOTES.ANDROID9
2 files changed, 31 insertions, 13 deletions
diff --git a/Configurations/15-android.conf b/Configurations/15-android.conf
index 0a2a9e7bba..551f71b92f 100644
--- a/Configurations/15-android.conf
+++ b/Configurations/15-android.conf
@@ -1,6 +1,6 @@
#### Android...
#
-# See NOTES.ANDROID for details. But don't miss platform-specific
+# See NOTES.ANDROID for details, and don't miss platform-specific
# comments below...
{
@@ -20,13 +20,26 @@
die "\$ANDROID_NDK is not defined" if (!$ndk);
die "\$ANDROID_NDK=$ndk is invalid" if (!-d "$ndk/platforms");
+ my $ndkver = undef;
+
+ if (open my $fh, "<$ndk/source.properties") {
+ local $_;
+ while(<$fh>) {
+ if (m|Pkg\.Revision\s*=\s*([0-9]+)|) {
+ $ndkver = $1;
+ last;
+ }
+ }
+ close $fh;
+ }
+
my $sysroot;
if (!($sysroot = $ENV{CROSS_SYSROOT})) {
my $api = "*";
# see if user passed -D__ANDROID_API__=N
- foreach (@{$useradd{CPPDEFINES}}) {
+ foreach (@{$useradd{CPPDEFINES}}, @{$user{CPPFLAGS}}) {
if (m|__ANDROID_API__=([0-9]+)|) {
$api = $1;
last;
@@ -51,20 +64,24 @@
my $cflags = "-Wa,--noexecstack";
my $cppflags;
- # see if user passed CC=clang
- if ($user{CC} eq "clang") {
- if (which("clang") !~ m|^$ndk/.*/prebuilt/([^/]+)/|) {
- die "no NDK clang on \$PATH";
- }
+ # see if there is NDK clang on $PATH
+ if (which("clang") =~ m|^$ndk/.*/prebuilt/([^/]+)/|) {
my $host=$1;
# harmonize with gcc default
- (my $tridefault = $triarch) =~ s/^arm-/armv5te-/;
+ my $arm = $ndkver > 16 ? "armv7a" : "armv5te";
+ (my $tridefault = $triarch) =~ s/^arm-/$arm-/;
(my $tritools = $triarch) =~ s/(?:x|i6)86(_64)?-.*/x86$1/;
$cflags .= " -target $tridefault "
. "-gcc-toolchain \$(ANDROID_NDK)/toolchains"
. "/$tritools-4.9/prebuilt/$host";
+ $user{CC} = "clang" if ($user{CC} !~ m|clang|);
$user{CROSS_COMPILE} = undef;
+ } elsif ($user{CC} eq "clang") {
+ die "no NDK clang on \$PATH";
} else {
+ if (which("$triarch-gcc") !~ m|^$ndk/.*/prebuilt/([^/]+)/|) {
+ die "no NDK $triarch-gcc on \$PATH";
+ }
$cflags .= " -mandroid";
$user{CROSS_COMPILE} = "$triarch-";
}
@@ -138,7 +155,7 @@ my %targets = (
# compiler defaults, which is not necessarily what you had
# in mind, in which case you would have to pass additional
# -march and/or -mfloat-abi flags. NDK defaults to armv5te.
- # Some NDK versions reportedly require additional -latomic.
+ # Newer NDK versions reportedly require additional -latomic.
#
inherit_from => [ "android", asm("armv4_asm") ],
bn_ops => add("RC4_CHAR"),
diff --git a/NOTES.ANDROID b/NOTES.ANDROID
index f6c28d28ad..dcddc4cf77 100644
--- a/NOTES.ANDROID
+++ b/NOTES.ANDROID
@@ -43,10 +43,11 @@
conflict, and mixing the two is therefore not supported. Migration to
CROSS_SYSROOT-less setup is recommended.
- One can engage clang by passing CC=clang to Configure. In such case
- PATH needs even more adjustments to cover NDK's clang itself, as well
- as unprefixed, yet target-specific, ar and ranlib (or not, if you use
- binutils-multiarch on your Linux).
+ One can engage clang by adjusting PATH to cover NDK's clang. Just keep
+ in mind that if you miss it, Configure will try to use gcc... Also,
+ PATH would need even further adjustment to cover unprefixed, yet
+ target-specific, ar and ranlib (or not, if you use binutils-multiarch
+ on your Linux).
Running tests (on Linux)
------------------------