Work against 64-bit builds
authorFredrik Fornwall <fredrik@fornwall.net>
Thu, 25 Jun 2015 10:36:03 +0000 (06:36 -0400)
committerFredrik Fornwall <fredrik@fornwall.net>
Thu, 25 Jun 2015 10:36:03 +0000 (06:36 -0400)
build-package.sh
ndk_patches/sys-wait.h.patch
packages/libandroid-support/build.sh
packages/libandroid-support/setlocale.c.patch32 [moved from packages/libandroid-support/setlocale.c.patch with 100% similarity]

index 0c8bd42..8b251c1 100755 (executable)
@@ -34,6 +34,10 @@ if [ ! -d "$NDK" ]; then echo 'ERROR: $NDK not defined as pointing at a director
 : ${TERMUX_MAKE_PROCESSES:='4'}
 : ${TERMUX_TOPDIR:="$HOME/termux"}
 : ${TERMUX_ARCH:="arm"} # (arm|aarch64|i686|x86_64) - the 64 bit variants do not work yet
+TERMUX_ARCH_BITS="32"
+if [ "x86_64" = $TERMUX_ARCH -o "aarch64" = $TERMUX_ARCH ]; then
+       TERMUX_ARCH_BITS="64"
+fi
 : ${TERMUX_HOST_PLATFORM:="${TERMUX_ARCH}-linux-android"}
 if [ $TERMUX_ARCH = "arm" ]; then TERMUX_HOST_PLATFORM="${TERMUX_HOST_PLATFORM}eabi"; fi
 : ${TERMUX_PREFIX:='/data/data/com.termux/files/usr'}
@@ -287,7 +291,8 @@ termux_step_host_build () {
 # This should not be overridden
 termux_step_patch_package () {
        cd $TERMUX_PKG_SRCDIR
-       for patch in $TERMUX_PKG_BUILDER_DIR/*.patch; do
+       # Suffix patch with ".patch32" or ".patch64" to only apply for these bitnesses:
+       for patch in $TERMUX_PKG_BUILDER_DIR/*.patch{$TERMUX_ARCH_BITS,}; do
                test -f $patch && sed "s%\@TERMUX_PREFIX\@%${TERMUX_PREFIX}%g" $patch | patch -p1
        done
 
index 43c2f28..7d53fcd 100644 (file)
@@ -1,11 +1,17 @@
-diff -u -r /home/fornwall/lib/android-ndk/platforms/android-21/arch-arm/usr/include/sys/wait.h ./usr/include/sys/wait.h
---- /home/fornwall/lib/android-ndk/platforms/android-21/arch-arm/usr/include/sys/wait.h        2014-10-14 22:53:49.000000000 -0400
-+++ ./usr/include/sys/wait.h   2015-05-15 18:28:58.428331748 -0400
-@@ -44,6 +44,7 @@
+diff -u -r /home/fornwall/lib/android-ndk/platforms/android-21/arch-arm64/usr/include/sys/wait.h ./usr/include/sys/wait.h
+--- /home/fornwall/lib/android-ndk/platforms/android-21/arch-arm64/usr/include/sys/wait.h      2014-10-14 22:53:49.000000000 -0400
++++ ./usr/include/sys/wait.h   2015-06-25 06:32:11.975176739 -0400
+@@ -44,10 +44,13 @@
  #define WIFEXITED(s)    (WTERMSIG(s) == 0)
  #define WIFSTOPPED(s)   (WTERMSIG(s) == 0x7f)
  #define WIFSIGNALED(s)  (WTERMSIG((s)+1) >= 2)
 +#define WIFCONTINUED(x) (WIFSTOPPED(x) && WSTOPSIG(x) == 0x13)
-
  extern pid_t  wait(int *);
  extern pid_t  waitpid(pid_t, int *, int);
+ extern pid_t  wait4(pid_t, int *, int, struct rusage *);
++/* Termux addition: Add wait3() declaration used by busybox. Available in libc for 32-bit only. */
++static pid_t wait3(int* status, int options, struct rusage* rusage) { wait4(-1, status, options, rusage); }
+ /* Posix states that idtype_t should be an enumeration type, but
+  * the kernel headers define P_ALL, P_PID and P_PGID as constant macros
index 007a2c0..7971237 100755 (executable)
@@ -7,23 +7,36 @@ TERMUX_PKG_ESSENTIAL=yes
 
 termux_step_post_extract_package () {
         cd $TERMUX_PKG_SRCDIR
-        cp -Rf $NDK/sources/android/support/* .
+       if [ "$TERMUX_ARCH_BITS" = "64" ]; then
+               # https://android.googlesource.com/platform/ndk.git/+/7c811775212f8ae0ecdcf60d05fefb1582207038
+               # For 64-bit bionic has almost everything except the following:
+               mkdir -p src/musl-locale/ include/
+               cp $NDK/sources/android/support/src/musl-locale/{catclose.c,catgets.c,catopen.c} src/musl-locale/
+               cp $NDK/sources/android/support/include/* include/
+       else
+               cp -Rf $NDK/sources/android/support/* .
+               # See Android.mk for files not to build:
+               rm      src/musl-stdio/vwscanf.c \
+                       src/musl-stdio/wscanf.c \
+                       src/musl-locale/newlocale.c \
+                       src/musl-locale/nl_langinfo_l.c \
+                       src/musl-locale/strcoll_l.c \
+                       src/musl-locale/strxfrm_l.c \
+                       src/musl-locale/wcscoll_l.c \
+                       src/musl-locale/wcsxfrm_l.c
+       fi
 }
 
 termux_step_make_install () {
-        rm      src/musl-stdio/vwscanf.c \
-                src/musl-stdio/wscanf.c \
-                src/musl-locale/newlocale.c \
-                src/musl-locale/nl_langinfo_l.c \
-                src/musl-locale/strcoll_l.c \
-                src/musl-locale/strxfrm_l.c \
-                src/musl-locale/wcscoll_l.c \
-                src/musl-locale/wcsxfrm_l.c
-
+       if [ "$TERMUX_ARCH_BITS" = "64" ]; then
+               _C_FILES="src/musl-*/*.c"
+       else
+               _C_FILES="src/locale/*.c src/musl-*/*.c src/stdio/*.c src/*.c"
+       fi
        # Link against libm to avoid linkers having to do it
         $CC $CFLAGS -std=c99 -DNULL=0 $CPPFLAGS $LDFLAGS -lm \
                 -Iinclude -Isrc/locale \
-                src/locale/*.c src/musl-*/*.c src/stdio/*.c src/*.c \
+               $_C_FILES \
                 -shared -fpic \
                 -o libandroid-support.so