Attach arm issues with C++ exception unwinding
[termux-packages] / build-package.sh
index 54c0b95..e502b17 100755 (executable)
@@ -91,7 +91,7 @@ termux_setup_golang() {
 # Utility function for cmake-built packages to setup a current cmake.
 termux_setup_cmake() {
        local TERMUX_CMAKE_MAJORVESION=3.9
-       local TERMUX_CMAKE_MINORVERSION="0-rc6"
+       local TERMUX_CMAKE_MINORVERSION="0"
        local TERMUX_CMAKE_VERSION=$TERMUX_CMAKE_MAJORVESION.$TERMUX_CMAKE_MINORVERSION
        local TERMUX_CMAKE_TARNAME=cmake-${TERMUX_CMAKE_VERSION}-Linux-x86_64.tar.gz
        local TERMUX_CMAKE_TARFILE=$TERMUX_PKG_TMPDIR/$TERMUX_CMAKE_TARNAME
@@ -99,7 +99,7 @@ termux_setup_cmake() {
        if [ ! -d "$TERMUX_CMAKE_FOLDER" ]; then
                termux_download https://cmake.org/files/v$TERMUX_CMAKE_MAJORVESION/$TERMUX_CMAKE_TARNAME \
                                "$TERMUX_CMAKE_TARFILE" \
-                               68456efed8207381c7724411558e7a3ed6503932f8f3127a3ba640e624026b1a
+                               e714ddd55ab9be7ec5e4d30ca1ceee5e23406d7d3bf14457a67180cf54d9834a
                rm -Rf "$TERMUX_PKG_TMPDIR/cmake-${TERMUX_CMAKE_VERSION}-Linux-x86_64"
                tar xf "$TERMUX_CMAKE_TARFILE" -C "$TERMUX_PKG_TMPDIR"
                mv "$TERMUX_PKG_TMPDIR/cmake-${TERMUX_CMAKE_VERSION}-Linux-x86_64" \
@@ -295,7 +295,7 @@ termux_step_start_build() {
        TERMUX_STANDALONE_TOOLCHAIN="$TERMUX_TOPDIR/_lib/${TERMUX_NDK_VERSION}-${TERMUX_ARCH}-${TERMUX_PKG_API_LEVEL}"
        # Bump the below version if a change is made in toolchain setup to ensure
        # that everyone gets an updated toolchain:
-       TERMUX_STANDALONE_TOOLCHAIN+="-v10"
+       TERMUX_STANDALONE_TOOLCHAIN+="-v11"
 
        if [ -n "${TERMUX_PKG_BLACKLISTED_ARCHES:=""}" ] && [ "$TERMUX_PKG_BLACKLISTED_ARCHES" != "${TERMUX_PKG_BLACKLISTED_ARCHES/$TERMUX_ARCH/}" ]; then
                echo "Skipping building $TERMUX_PKG_NAME for arch $TERMUX_ARCH"
@@ -562,6 +562,22 @@ termux_step_setup_toolchain() {
                           $_TERMUX_TOOLCHAIN_TMPDIR/aarch64-linux-android/bin/ld
                fi
 
+               if [ "$TERMUX_ARCH" = "arm" ]; then
+                       # Linker wrapper script to add '--exclude-libs libgcc.a', see
+                       # https://github.com/android-ndk/ndk/issues/379
+                       # https://android-review.googlesource.com/#/c/389852/
+                       local linker
+                       for linker in ld ld.bfd ld.gold; do
+                               local wrap_linker=$_TERMUX_TOOLCHAIN_TMPDIR/$TERMUX_HOST_PLATFORM/bin/$linker
+                               local real_linker=$_TERMUX_TOOLCHAIN_TMPDIR/$TERMUX_HOST_PLATFORM/bin/$linker.real
+                               cp $wrap_linker $real_linker
+                               echo '#!/bin/bash' > $wrap_linker
+                               echo -n '`dirname $0`/' >> $wrap_linker
+                               echo -n $linker.real >> $wrap_linker
+                               echo ' --exclude-libs libgcc.a "$@"' >> $wrap_linker
+                       done
+               fi
+
                cd $_TERMUX_TOOLCHAIN_TMPDIR/sysroot
 
                for f in $TERMUX_SCRIPTDIR/ndk-patches/*.patch; do
@@ -598,8 +614,8 @@ termux_step_setup_toolchain() {
        fi
 
        local _STL_LIBFILE_NAME=libc++_shared.so
-       if [ ! -f $TERMUX_PREFIX/lib/libstdc++.so ] || [ `readlink $TERMUX_PREFIX/lib/libstdc++.so` != $_STL_LIBFILE_NAME ]; then
-               # Setup libgnustl_shared.so in $PREFIX/lib and libstdc++.so as a symlink to it,
+       if [ ! -f $TERMUX_PREFIX/lib/libstdc++.so ]; then
+               # Setup libgnustl_shared.so in $PREFIX/lib and libstdc++.so as a link to it,
                # so that other C++ using packages links to it instead of the default android
                # C++ library which does not support exceptions or STL:
                # https://developer.android.com/ndk/guides/cpp-support.html
@@ -622,7 +638,12 @@ termux_step_setup_toolchain() {
                cp "$_STL_LIBFILE" .
                $STRIP --strip-unneeded $_STL_LIBFILE_NAME
                $TERMUX_ELF_CLEANER $_STL_LIBFILE_NAME
-               ln -f -s $_STL_LIBFILE_NAME libstdc++.so
+               if [ $TERMUX_ARCH = "arm" ]; then
+                       # Use a linker script to get libunwind.a.
+                       echo 'INPUT(-lunwind -lc++_shared)' > libstdc++.so
+               else
+                       ln -f $_STL_LIBFILE_NAME libstdc++.so
+               fi
        fi
 
        export PKG_CONFIG_LIBDIR="$TERMUX_PKG_CONFIG_LIBDIR"