summarylogtreecommitdiffstats
path: root/15-android_conf.patch
diff options
context:
space:
mode:
Diffstat (limited to '15-android_conf.patch')
-rw-r--r--15-android_conf.patch217
1 files changed, 217 insertions, 0 deletions
diff --git a/15-android_conf.patch b/15-android_conf.patch
new file mode 100644
index 00000000000..c8eef3f821e
--- /dev/null
+++ b/15-android_conf.patch
@@ -0,0 +1,217 @@
+diff --git a/Configurations/15-android.conf b/Configurations/15-android.conf
+index 4616394f8c..f3075e4b79 100644
+--- a/Configurations/15-android.conf
++++ b/Configurations/15-android.conf
+@@ -1,6 +1,6 @@
+ #### Android...
+ #
+-# See NOTES.ANDROID for details, and don't miss platform-specific
++# See NOTES-Android.md for details, and don't miss platform-specific
+ # comments below...
+
+ {
+@@ -24,23 +24,23 @@
+
+ my $ndk_var;
+ my $ndk;
+- foreach (qw(ANDROID_NDK_HOME ANDROID_NDK)) {
++ foreach (qw(ANDROID_NDK_ROOT ANDROID_NDK)) {
+ $ndk_var = $_;
+ $ndk = $ENV{$ndk_var};
+ last if defined $ndk;
+ }
+- die "\$ANDROID_NDK_HOME is not defined" if (!$ndk);
+- if (!-d "$ndk/platforms" && !-f "$ndk/AndroidVersion.txt") {
+- # $ndk/platforms is traditional "all-inclusive" NDK, while
+- # $ndk/AndroidVersion.txt is so-called standalone toolchain
+- # tailored for specific target down to API level.
+- die "\$ANDROID_NDK_HOME=$ndk is invalid";
++ die "\$ANDROID_NDK_ROOT is not defined" if (!$ndk);
++ my $is_standalone_toolchain = -f "$ndk/AndroidVersion.txt";
++ my $ndk_src_props = "$ndk/source.properties";
++ my $is_ndk = -f $ndk_src_props;
++ if ($is_ndk == $is_standalone_toolchain) {
++ die "\$ANDROID_NDK_ROOT=$ndk is invalid";
+ }
+ $ndk = canonpath($ndk);
+
+ my $ndkver = undef;
+
+- if (open my $fh, "<$ndk/source.properties") {
++ if (open my $fh, "<$ndk_src_props") {
+ local $_;
+ while(<$fh>) {
+ if (m|Pkg\.Revision\s*=\s*([0-9]+)|) {
+@@ -59,7 +59,7 @@
+ if ($sysroot = $ENV{CROSS_SYSROOT}) {
+ $sysroot =~ m|/android-([0-9]+)/arch-(\w+)/?$|;
+ ($api, $arch) = ($1, $2);
+- } elsif (-f "$ndk/AndroidVersion.txt") {
++ } elsif ($is_standalone_toolchain) {
+ $sysroot = "$ndk/sysroot";
+ } else {
+ $api = "*";
+@@ -72,17 +72,31 @@
+ }
+ }
+
+- # list available platforms (numerically)
+- my @platforms = sort { $a =~ m/-([0-9]+)$/; my $aa = $1;
+- $b =~ m/-([0-9]+)$/; $aa <=> $1;
+- } glob("$ndk/platforms/android-$api");
+- die "no $ndk/platforms/android-$api" if ($#platforms < 0);
++ if (-d "$ndk/platforms") {
++ # list available platforms (numerically)
++ my @platforms = sort { $a =~ m/-([0-9]+)$/; my $aa = $1;
++ $b =~ m/-([0-9]+)$/; $aa <=> $1;
++ } glob("$ndk/platforms/android-$api");
++ die "no $ndk/platforms/android-$api" if ($#platforms < 0);
+
+- $sysroot = "@platforms[$#platforms]/arch-$arch";
+- $sysroot =~ m|/android-([0-9]+)/arch-$arch|;
+- $api = $1;
++ $sysroot = "@platforms[$#platforms]/arch-$arch";
++ $sysroot =~ m|/android-([0-9]+)/arch-$arch|;
++ $api = $1;
++ } elsif ($api eq "*") {
++ # r22 Removed platforms dir, use this JSON file
++ my $path = "$ndk/meta/platforms.json";
++ open my $fh, $path or die "Could not open '$path' $!";
++ while (<$fh>) {
++ if (/"max": (\d+),/) {
++ $api = $1;
++ last;
++ }
++ }
++ close $fh;
++ }
++ die "Could not get default API Level" if ($api eq "*");
+ }
+- die "no sysroot=$sysroot" if (!-d $sysroot);
++ die "no sysroot=$sysroot" if (length $sysroot && !-d $sysroot);
+
+ my $triarch = $triplet{$arch};
+ my $cflags;
+@@ -95,17 +109,21 @@
+ 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 \$($ndk_var)/toolchains"
+- . "/$tritools-4.9/prebuilt/$host";
+- $user{CC} = "clang" if ($user{CC} !~ m|clang|);
++ if (length $sysroot) {
++ $cflags .= " -target $tridefault "
++ . "-gcc-toolchain \$($ndk_var)/toolchains"
++ . "/$tritools-4.9/prebuilt/$host";
++ $user{CC} = "clang" if ($user{CC} !~ m|clang|);
++ } else {
++ $user{CC} = "$tridefault$api-clang";
++ }
+ $user{CROSS_COMPILE} = undef;
+ if (which("llvm-ar") =~ m|^$ndk/.*/prebuilt/([^/]+)/|) {
+ $user{AR} = "llvm-ar";
+ $user{ARFLAGS} = [ "rs" ];
+ $user{RANLIB} = ":";
+ }
+- } elsif (-f "$ndk/AndroidVersion.txt") { #"standalone toolchain"
++ } elsif ($is_standalone_toolchain) {
+ my $cc = $user{CC} // "clang";
+ # One can probably argue that both clang and gcc should be
+ # probed, but support for "standalone toolchain" was added
+@@ -127,19 +145,21 @@
+ $user{CROSS_COMPILE} = "$triarch-";
+ }
+
+- if (!-d "$sysroot/usr/include") {
+- my $incroot = "$ndk/sysroot/usr/include";
+- die "no $incroot" if (!-d $incroot);
+- die "no $incroot/$triarch" if (!-d "$incroot/$triarch");
+- $incroot =~ s|^$ndk/||;
+- $cppflags = "-D__ANDROID_API__=$api";
+- $cppflags .= " -isystem \$($ndk_var)/$incroot/$triarch";
+- $cppflags .= " -isystem \$($ndk_var)/$incroot";
++ if (length $sysroot) {
++ if (!-d "$sysroot/usr/include") {
++ my $incroot = "$ndk/sysroot/usr/include";
++ die "no $incroot" if (!-d $incroot);
++ die "no $incroot/$triarch" if (!-d "$incroot/$triarch");
++ $incroot =~ s|^$ndk/||;
++ $cppflags = "-D__ANDROID_API__=$api";
++ $cppflags .= " -isystem \$($ndk_var)/$incroot/$triarch";
++ $cppflags .= " -isystem \$($ndk_var)/$incroot";
++ }
++ $sysroot =~ s|^$ndk/||;
++ $sysroot = " --sysroot=\$($ndk_var)/$sysroot";
+ }
+-
+- $sysroot =~ s|^$ndk/||;
+ $android_ndk = {
+- cflags => "$cflags --sysroot=\$($ndk_var)/$sysroot",
++ cflags => $cflags . $sysroot,
+ cppflags => $cppflags,
+ bn_ops => $arch =~ m/64$/ ? "SIXTY_FOUR_BIT_LONG"
+ : "BN_LLONG",
+@@ -168,7 +188,8 @@ my %targets = (
+ cppflags => add(sub { android_ndk()->{cppflags} }),
+ cxxflags => add(sub { android_ndk()->{cflags} }),
+ bn_ops => sub { android_ndk()->{bn_ops} },
+- bin_cflags => "-pie",
++ bin_cflags => "-fPIE",
++ bin_lflags => "-pie",
+ enable => [ ],
+ },
+ "android-arm" => {
+@@ -199,18 +220,22 @@ my %targets = (
+ # -march and/or -mfloat-abi flags. NDK defaults to armv5te.
+ # Newer NDK versions reportedly require additional -latomic.
+ #
+- inherit_from => [ "android", asm("armv4_asm") ],
++ inherit_from => [ "android" ],
+ bn_ops => add("RC4_CHAR"),
++ asm_arch => 'armv4',
++ perlasm_scheme => "void",
+ },
+ "android-arm64" => {
+- inherit_from => [ "android", asm("aarch64_asm") ],
++ inherit_from => [ "android" ],
+ bn_ops => add("RC4_CHAR"),
++ asm_arch => 'aarch64',
+ perlasm_scheme => "linux64",
+ },
+
+ "android-mips" => {
+- inherit_from => [ "android", asm("mips32_asm") ],
++ inherit_from => [ "android" ],
+ bn_ops => add("RC4_CHAR"),
++ asm_arch => 'mips32',
+ perlasm_scheme => "o32",
+ },
+ "android-mips64" => {
+@@ -223,20 +248,23 @@ my %targets = (
+ # with previous MIPS ISA versions, in sense that unlike
+ # prior versions original MIPS binary code will fail.
+ #
+- inherit_from => [ "android", asm("mips64_asm") ],
++ inherit_from => [ "android" ],
+ bn_ops => add("RC4_CHAR"),
++ asm_arch => 'mips64',
+ perlasm_scheme => "64",
+ },
+
+ "android-x86" => {
+- inherit_from => [ "android", asm("x86_asm") ],
++ inherit_from => [ "android" ],
+ CFLAGS => add(picker(release => "-fomit-frame-pointer")),
+ bn_ops => add("RC4_INT"),
++ asm_arch => 'x86',
+ perlasm_scheme => "android",
+ },
+ "android-x86_64" => {
+- inherit_from => [ "android", asm("x86_64_asm") ],
++ inherit_from => [ "android" ],
+ bn_ops => add("RC4_INT"),
++ asm_arch => 'x86_64',
+ perlasm_scheme => "elf",
+ },
+