X-Git-Url: https://git.distorted.org.uk/~mdw/termux-packages/blobdiff_plain/3229d546ad941fa43f95728c8286fd8a06496f95..d1f566f799e909c77879e7840922a8de49a0919c:/build-package.sh diff --git a/build-package.sh b/build-package.sh index 3d05b489..e502b178 100755 --- a/build-package.sh +++ b/build-package.sh @@ -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+="-v9" + 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" @@ -308,21 +308,6 @@ termux_step_start_build() { for p in $TERMUX_ALL_DEPS; do if [ "$p" != "$TERMUX_PKG_NAME" ]; then echo "Building dependency $p if necessary..." - # TODO use apt and dpkg to install instead of building - # Add apt repository and key, update - # TODO move this install to Dockerfile - sudo apt-get update && sudo apt-get install -y software-properties-common - sudo add-apt-repository "deb [arch=all,$TERMUX_ARCH] http://termux.net stable main" - cat $TERMUX_SCRIPTDIR/packages/apt/trusted.gpg | sudo apt-key add - - sudo apt-get update && sudo dpkg --add-architecture $TERMUX_ARCH - sudo apt-get -d install ${p}:${TERMUX_ARCH} - # TODO delete debug info - echo "DEBUG" - ls -lah /var/cache/apt/archives - echo "DEBUG" - # TODO figure out what the root is? - #sudo dpkg --root $TERMUX_PREFIX --configure -a - #sudo dpkg --root $TERMUX_PREFIX -i /var/cache/apt/archives/${p}_*_${TERMUX_ARCH}.deb ./build-package.sh -a $TERMUX_ARCH -s "$p" fi done @@ -501,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" @@ -577,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 @@ -607,13 +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 ] || [ `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 @@ -636,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" @@ -856,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"