( cd "$TERMUX_COMMON_CACHEDIR"; tar xf "$TERMUX_BUILDGO_TAR"; mv go "$TERMUX_BUILDGO_FOLDER"; rm "$TERMUX_BUILDGO_TAR" )
}
+# Utility function for cmake-built packages to setup a current ninja.
+termux_setup_ninja() {
+ local NINJA_VERSION=1.7.2
+ local NINJA_FOLDER=$TERMUX_COMMON_CACHEDIR/ninja-$NINJA_VERSION
+ if [ ! -x $NINJA_FOLDER/ninja ]; then
+ mkdir -p $NINJA_FOLDER
+ local NINJA_ZIP_FILE=$TERMUX_PKG_TMPDIR/ninja-$NINJA_VERSION.zip
+ termux_download https://github.com/ninja-build/ninja/releases/download/v$NINJA_VERSION/ninja-linux.zip \
+ $NINJA_ZIP_FILE \
+ 38fa8cfb9c1632a5cdf7a32fe1a7c5aa89e96c1d492c28624f4cc018e68458b9
+ unzip $NINJA_ZIP_FILE -d $NINJA_FOLDER
+ fi
+ export PATH=$NINJA_FOLDER:$PATH
+}
+
+# Utility function for cmake-built packages to setup a current meson.
+termux_setup_meson() {
+ termux_setup_ninja
+ local MESON_VERSION=0.41.2
+ local MESON_FOLDER=$TERMUX_COMMON_CACHEDIR/meson-$MESON_VERSION
+ if [ ! -d "$MESON_FOLDER" ]; then
+ local MESON_TAR_NAME=meson-$MESON_VERSION.tar.gz
+ local MESON_TAR_FILE=$TERMUX_PKG_TMPDIR/$MESON_TAR_NAME
+ termux_download \
+ https://github.com/mesonbuild/meson/releases/download/$MESON_VERSION/meson-$MESON_VERSION.tar.gz \
+ $MESON_TAR_FILE \
+ 074dd24fd068be0893e2e45bcc35c919d8e12777e9d6a7efdf72d4dc300867ca
+ tar xf "$MESON_TAR_FILE" -C "$TERMUX_COMMON_CACHEDIR"
+ (cd $MESON_FOLDER && patch -p1 < $TERMUX_SCRIPTDIR/scripts/meson-android.patch)
+ fi
+ TERMUX_MESON="$MESON_FOLDER/meson.py"
+ TERMUX_MESON_CROSSFILE=$TERMUX_COMMON_CACHEDIR/meson-crossfile-$TERMUX_ARCH-v1.txt
+ if [ ! -f $TERMUX_MESON_CROSSFILE ]; then
+ local MESON_CPU MESON_CPU_FAMILY
+ if [ $TERMUX_ARCH = "arm" ]; then
+ MESON_CPU_FAMILY="arm"
+ MESON_CPU="armv7"
+ elif [ $TERMUX_ARCH = "i686" ]; then
+ MESON_CPU_FAMILY="x86"
+ MESON_CPU="i686"
+ elif [ $TERMUX_ARCH = "x86_64" ]; then
+ MESON_CPU_FAMILY="x86_64"
+ MESON_CPU="x86_64"
+ elif [ $TERMUX_ARCH = "aarch64" ]; then
+ MESON_CPU_FAMILY="arm"
+ MESON_CPU="aarch64"
+ else
+ termux_error_exit "Unsupported arch: $TERMUX_ARCH"
+ fi
+
+ cat > $TERMUX_MESON_CROSSFILE <<-HERE
+ [binaries]
+ ar = '$AR'
+ c = '$CC'
+ cpp = '$CXX'
+ ld = '$LD'
+ pkg-config = '$PKG_CONFIG'
+ strip = '$STRIP'
+ [properties]
+ needs_exe_wrapper = true
+ [host_machine]
+ cpu_family = '$MESON_CPU_FAMILY'
+ cpu = '$MESON_CPU'
+ endian = 'little'
+ system = 'android'
+ HERE
+ fi
+}
+
# Utility function for cmake-built packages to setup a current cmake.
termux_setup_cmake() {
local TERMUX_CMAKE_MAJORVESION=3.9
: "${TERMUX_DEBUG:=""}"
: "${TERMUX_PKG_API_LEVEL:="21"}"
: "${TERMUX_ANDROID_BUILD_TOOLS_VERSION:="25.0.3"}"
- : "${TERMUX_NDK_VERSION:="15.1"}"
+ : "${TERMUX_NDK_VERSION:="15.2"}"
if [ "x86_64" = "$TERMUX_ARCH" ] || [ "aarch64" = "$TERMUX_ARCH" ]; then
TERMUX_ARCH_BITS=64
TERMUX_PKG_EXTRA_MAKE_ARGS=""
TERMUX_PKG_BUILD_IN_SRC=""
TERMUX_PKG_RM_AFTER_INSTALL=""
+ TERMUX_PKG_BREAKS="" # https://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps
TERMUX_PKG_DEPENDS=""
+ TERMUX_PKG_BUILD_DEPENDS=""
TERMUX_PKG_HOMEPAGE=""
TERMUX_PKG_DESCRIPTION="FIXME:Add description"
TERMUX_PKG_FOLDERNAME=""
TERMUX_PKG_KEEP_STATIC_LIBRARIES="false"
TERMUX_PKG_ESSENTIAL=""
TERMUX_PKG_CONFLICTS="" # https://www.debian.org/doc/debian-policy/ch-relationships.html#s-conflicts
+ TERMUX_PKG_RECOMMENDS="" # https://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps
TERMUX_PKG_REPLACES=""
TERMUX_PKG_CONFFILES=""
TERMUX_PKG_INCLUDE_IN_DEVPACKAGE=""
$_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
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
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"
$TERMUX_PKG_EXTRA_CONFIGURE_ARGS $TOOLCHAIN_ARGS
}
+termux_step_configure_meson () {
+ termux_setup_meson
+ CC=gcc CXX=g++ $TERMUX_MESON \
+ $TERMUX_PKG_SRCDIR \
+ $TERMUX_PKG_BUILDDIR \
+ --cross-file $TERMUX_MESON_CROSSFILE \
+ --prefix $TERMUX_PREFIX \
+ --libdir lib \
+ --buildtype minsize \
+ --strip \
+ $TERMUX_PKG_EXTRA_CONFIGURE_ARGS
+}
+
termux_step_configure () {
if [ "$TERMUX_PKG_FORCE_CMAKE" == 'no' ] && [ -f "$TERMUX_PKG_SRCDIR/configure" ]; then
termux_step_configure_autotools
elif [ -f "$TERMUX_PKG_SRCDIR/CMakeLists.txt" ]; then
termux_step_configure_cmake
+ elif [ -f "$TERMUX_PKG_SRCDIR/meson.build" ]; then
+ termux_step_configure_meson
fi
}
else
make -j 1 ${TERMUX_PKG_EXTRA_MAKE_ARGS} ${TERMUX_PKG_MAKE_INSTALL_TARGET}
fi
+ elif test -f build.ninja; then
+ ninja install
fi
}
local SUB_PKG_DIR=$TERMUX_TOPDIR/$TERMUX_PKG_NAME/subpackages/$SUB_PKG_NAME
local TERMUX_SUBPKG_DEPENDS=""
local TERMUX_SUBPKG_CONFLICTS=""
+ local TERMUX_SUBPKG_REPLACES=""
local TERMUX_SUBPKG_CONFFILES=""
local SUB_PKG_MASSAGE_DIR=$SUB_PKG_DIR/massage/$TERMUX_PREFIX
local SUB_PKG_PACKAGE_DIR=$SUB_PKG_DIR/package
HERE
test ! -z "$TERMUX_SUBPKG_DEPENDS" && echo "Depends: $TERMUX_SUBPKG_DEPENDS" >> control
test ! -z "$TERMUX_SUBPKG_CONFLICTS" && echo "Conflicts: $TERMUX_SUBPKG_CONFLICTS" >> control
+ test ! -z "$TERMUX_SUBPKG_REPLACES" && echo "Replaces: $TERMUX_SUBPKG_REPLACES" >> control
tar -cJf "$SUB_PKG_PACKAGE_DIR/control.tar.xz" .
for f in $TERMUX_SUBPKG_CONFFILES; do echo "$TERMUX_PREFIX/$f" >> conffiles; done
Description: $TERMUX_PKG_DESCRIPTION
Homepage: $TERMUX_PKG_HOMEPAGE
HERE
+ test ! -z "$TERMUX_PKG_BREAKS" && echo "Breaks: $TERMUX_PKG_BREAKS" >> DEBIAN/control
test ! -z "$TERMUX_PKG_DEPENDS" && echo "Depends: $TERMUX_PKG_DEPENDS" >> DEBIAN/control
test ! -z "$TERMUX_PKG_ESSENTIAL" && echo "Essential: yes" >> DEBIAN/control
test ! -z "$TERMUX_PKG_CONFLICTS" && echo "Conflicts: $TERMUX_PKG_CONFLICTS" >> DEBIAN/control
+ test ! -z "$TERMUX_PKG_RECOMMENDS" && echo "Recommends: $TERMUX_PKG_RECOMMENDS" >> DEBIAN/control
test ! -z "$TERMUX_PKG_REPLACES" && echo "Replaces: $TERMUX_PKG_REPLACES" >> DEBIAN/control
# Create DEBIAN/conffiles (see https://www.debian.org/doc/debian-policy/ap-pkg-conffiles.html):