X-Git-Url: https://git.distorted.org.uk/~mdw/termux-packages/blobdiff_plain/1f8481e3637cc2d7459f0fe55e29f7a6fc6f3d59..d1f566f799e909c77879e7840922a8de49a0919c:/build-package.sh diff --git a/build-package.sh b/build-package.sh index 2dd20085..e502b178 100755 --- a/build-package.sh +++ b/build-package.sh @@ -90,8 +90,8 @@ termux_setup_golang() { # Utility function for cmake-built packages to setup a current cmake. termux_setup_cmake() { - local TERMUX_CMAKE_MAJORVESION=3.8 - local TERMUX_CMAKE_MINORVERSION=2 + local TERMUX_CMAKE_MAJORVESION=3.9 + 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" \ - 33e4851d3219b720f4b64fcf617151168f1bffdf5afad25eb4b7f5f58cee3a08 + 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" \ @@ -292,6 +292,11 @@ termux_step_start_build() { # shellcheck source=/dev/null source "$TERMUX_PKG_BUILDER_SCRIPT" + 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+="-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" exit 0 @@ -443,11 +448,6 @@ termux_step_host_build() { # Setup a standalone Android NDK toolchain. Not to be overridden by packages. termux_step_setup_toolchain() { - 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+="-v8" - # We put this after system PATH to avoid picking up toolchain stripped python export PATH=$PATH:$TERMUX_STANDALONE_TOOLCHAIN/bin @@ -486,7 +486,7 @@ termux_step_setup_toolchain() { # "We recommend using the -mthumb compiler flag to force the generation of 16-bit Thumb-2 instructions". # With r13 of the ndk ruby 2.4.0 segfaults when built on arm with clang without -mthumb. CFLAGS+=" -march=armv7-a -mfpu=neon -mfloat-abi=softfp -mthumb" - LDFLAGS+=" -march=armv7-a -Wl,--fix-cortex-a8" + LDFLAGS+=" -march=armv7-a" elif [ "$TERMUX_ARCH" = "i686" ]; then # From $NDK/docs/CPU-ARCH-ABIS.html: CFLAGS+=" -march=i686 -msse3 -mstackrealign -mfpmath=sse" @@ -534,8 +534,12 @@ termux_step_setup_toolchain() { "$NDK/build/tools/make_standalone_toolchain.py" \ --api "$TERMUX_PKG_API_LEVEL" \ --arch $_NDK_ARCHNAME \ + --stl=libc++ \ --install-dir $_TERMUX_TOOLCHAIN_TMPDIR + # Remove android-support header wrapping not needed on android-21: + rm -Rf $_TERMUX_TOOLCHAIN_TMPDIR/sysroot/usr/local + local wrapped plusplus CLANG_TARGET=$TERMUX_HOST_PLATFORM if [ $TERMUX_ARCH = arm ]; then CLANG_TARGET=${CLANG_TARGET/arm-/armv7a-}; fi for wrapped in ${TERMUX_HOST_PLATFORM}-clang clang; do @@ -550,11 +554,7 @@ termux_step_setup_toolchain() { done done - if [ "$TERMUX_ARCH" = "arm" ]; then - # Fix to allow e.g. to be included: - cp $_TERMUX_TOOLCHAIN_TMPDIR/include/c++/4.9.x/arm-linux-androideabi/armv7-a/bits/* \ - $_TERMUX_TOOLCHAIN_TMPDIR/include/c++/4.9.x/bits - elif [ "$TERMUX_ARCH" = "aarch64" ]; then + if [ "$TERMUX_ARCH" = "aarch64" ]; then # Use gold by default to work around https://github.com/android-ndk/ndk/issues/148 cp $_TERMUX_TOOLCHAIN_TMPDIR/bin/aarch64-linux-android-ld.gold \ $_TERMUX_TOOLCHAIN_TMPDIR/bin/aarch64-linux-android-ld @@ -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 @@ -592,12 +608,14 @@ termux_step_setup_toolchain() { https://raw.githubusercontent.com/madler/zlib/v1.2.8/$file done unset file - + cd $_TERMUX_TOOLCHAIN_TMPDIR/include/c++/4.9.x + sed "s%\@TERMUX_HOST_PLATFORM\@%${TERMUX_HOST_PLATFORM}%g" $TERMUX_SCRIPTDIR/ndk-patches/*.cpppatch | patch -p1 mv $_TERMUX_TOOLCHAIN_TMPDIR $TERMUX_STANDALONE_TOOLCHAIN fi + local _STL_LIBFILE_NAME=libc++_shared.so if [ ! -f $TERMUX_PREFIX/lib/libstdc++.so ]; then - # Setup libgnustl_shared.so in $PREFIX/lib and libstdc++.so as a symlink to it, + # 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 @@ -607,16 +625,25 @@ termux_step_setup_toolchain() { # which is part of the base Termux installation. mkdir -p "$TERMUX_PREFIX/lib" cd "$TERMUX_PREFIX/lib" - _STL_LIBFILE=$TERMUX_STANDALONE_TOOLCHAIN/${TERMUX_HOST_PLATFORM}/lib/libgnustl_shared.so + + local _STL_LIBFILE= if [ "$TERMUX_ARCH" = arm ]; then - _STL_LIBFILE=$TERMUX_STANDALONE_TOOLCHAIN/${TERMUX_HOST_PLATFORM}/lib/armv7-a/libgnustl_shared.so + local _STL_LIBFILE=$TERMUX_STANDALONE_TOOLCHAIN/${TERMUX_HOST_PLATFORM}/lib/armv7-a/$_STL_LIBFILE_NAME elif [ "$TERMUX_ARCH" = x86_64 ]; then - _STL_LIBFILE=$TERMUX_STANDALONE_TOOLCHAIN/${TERMUX_HOST_PLATFORM}/lib64/libgnustl_shared.so + local _STL_LIBFILE=$TERMUX_STANDALONE_TOOLCHAIN/${TERMUX_HOST_PLATFORM}/lib64/$_STL_LIBFILE_NAME + else + local _STL_LIBFILE=$TERMUX_STANDALONE_TOOLCHAIN/${TERMUX_HOST_PLATFORM}/lib/$_STL_LIBFILE_NAME fi + cp "$_STL_LIBFILE" . - $STRIP --strip-unneeded libgnustl_shared.so - $TERMUX_ELF_CLEANER libgnustl_shared.so - ln -f -s libgnustl_shared.so libstdc++.so + $STRIP --strip-unneeded $_STL_LIBFILE_NAME + $TERMUX_ELF_CLEANER $_STL_LIBFILE_NAME + 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" @@ -771,6 +798,7 @@ termux_step_configure_cmake () { # pick up cross compiled binutils tool in $PREFIX/bin: cmake -G 'Unix Makefiles' "$TERMUX_PKG_SRCDIR" \ -DCMAKE_AR="$(which $AR)" \ + -DCMAKE_UNAME="$(which uname)" \ -DCMAKE_RANLIB="$(which $RANLIB)" \ -DCMAKE_BUILD_TYPE=$BUILD_TYPE \ -DCMAKE_CROSSCOMPILING=True \ @@ -835,7 +863,9 @@ termux_step_extract_into_massagedir() { # Build diff tar with what has changed during the build: cd $TERMUX_PREFIX - tar -N "$TERMUX_BUILD_TS_FILE" -czf "$TARBALL_ORIG" . + tar -N "$TERMUX_BUILD_TS_FILE" \ + --exclude='lib/libc++_shared.so' --exclude='lib/libstdc++.so' \ + -czf "$TARBALL_ORIG" . # Extract tar in order to massage it mkdir -p "$TERMUX_PKG_MASSAGEDIR/$TERMUX_PREFIX"