diff options
author | Andy Polyakov <appro@openssl.org> | 2018-03-17 10:59:57 +0100 |
---|---|---|
committer | Andy Polyakov <appro@openssl.org> | 2018-03-19 14:31:30 +0100 |
commit | df3a15512bd0f5ddd9f0dd74f0a058ee55b33904 (patch) | |
tree | ee025ba3683d313cbb4e58d2d09dc1787725a0cb /Configurations/15-android.conf | |
parent | f39276fdff6ccc1c71bdb30a8050fa1c0bf6e20a (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)
Diffstat (limited to 'Configurations/15-android.conf')
-rw-r--r-- | Configurations/15-android.conf | 35 |
1 files changed, 26 insertions, 9 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"), |