From bc0696b0a8fd6a7d5aa6194d55ca91beca31febf Mon Sep 17 00:00:00 2001 From: termux-pacman-bot Date: Sat, 13 Aug 2022 10:39:47 +0000 Subject: [PATCH] Update repo --- build-package.sh | 10 +- .../{ => 23c}/bits-struct_file.h.patch | 0 ndk-patches/{ => 23c}/dirent.h.patch | 0 ndk-patches/{ => 23c}/grp.h.patch | 0 ndk-patches/{ => 23c}/langinfo.h.patch | 0 ndk-patches/{ => 23c}/linux-fcntl.h.patch | 0 ndk-patches/{ => 23c}/paths.h.patch | 0 ndk-patches/{ => 23c}/pwd.h.patch | 0 .../{ => 23c}/redefine-TCSAFLUSH.patch | 0 ndk-patches/{ => 23c}/semaphore.h.patch | 0 ndk-patches/{ => 23c}/stdio.h.patch | 0 ndk-patches/{ => 23c}/stdlib.h.patch | 0 ndk-patches/{ => 23c}/sys-cdefs.h.patch | 0 ndk-patches/{ => 23c}/syslog.patch | 0 ndk-patches/{ => 23c}/unistd.h.patch | 0 ndk-patches/{ => 23c}/utmp.h.patch | 0 ndk-patches/25 | 1 + scripts/build/setup/termux_setup_swift.sh | 2 +- scripts/build/termux_step_setup_toolchain.sh | 226 +----------------- scripts/build/termux_step_start_build.sh | 5 - .../termux_step_setup_toolchain_23c.sh | 217 +++++++++++++++++ .../termux_step_setup_toolchain_25.sh | 210 ++++++++++++++++ scripts/properties.sh | 4 +- scripts/setup-android-sdk.sh | 13 +- 24 files changed, 462 insertions(+), 226 deletions(-) rename ndk-patches/{ => 23c}/bits-struct_file.h.patch (100%) rename ndk-patches/{ => 23c}/dirent.h.patch (100%) rename ndk-patches/{ => 23c}/grp.h.patch (100%) rename ndk-patches/{ => 23c}/langinfo.h.patch (100%) rename ndk-patches/{ => 23c}/linux-fcntl.h.patch (100%) rename ndk-patches/{ => 23c}/paths.h.patch (100%) rename ndk-patches/{ => 23c}/pwd.h.patch (100%) rename ndk-patches/{ => 23c}/redefine-TCSAFLUSH.patch (100%) rename ndk-patches/{ => 23c}/semaphore.h.patch (100%) rename ndk-patches/{ => 23c}/stdio.h.patch (100%) rename ndk-patches/{ => 23c}/stdlib.h.patch (100%) rename ndk-patches/{ => 23c}/sys-cdefs.h.patch (100%) rename ndk-patches/{ => 23c}/syslog.patch (100%) rename ndk-patches/{ => 23c}/unistd.h.patch (100%) rename ndk-patches/{ => 23c}/utmp.h.patch (100%) create mode 120000 ndk-patches/25 create mode 100644 scripts/build/toolchain/termux_step_setup_toolchain_23c.sh create mode 100644 scripts/build/toolchain/termux_step_setup_toolchain_25.sh diff --git a/build-package.sh b/build-package.sh index ba0dab7a79..839cf339ec 100755 --- a/build-package.sh +++ b/build-package.sh @@ -189,7 +189,15 @@ source "$TERMUX_SCRIPTDIR/scripts/build/termux_step_handle_hostbuild.sh" # shellcheck source=scripts/build/termux_step_host_build.sh source "$TERMUX_SCRIPTDIR/scripts/build/termux_step_host_build.sh" -# Setup a standalone Android NDK toolchain. Not to be overridden by packages. +# Setup a standalone Android NDK 25 toolchain. Called from termux_step_setup_toolchain. +# shellcheck source=scripts/build/toolchain/termux_step_setup_toolchain_25.sh +source "$TERMUX_SCRIPTDIR/scripts/build/toolchain/termux_step_setup_toolchain_25.sh" + +# Setup a standalone Android NDK 23c toolchain. Called from termux_step_setup_toolchain. +# shellcheck source=scripts/build/toolchain/termux_step_setup_toolchain_23c.sh +source "$TERMUX_SCRIPTDIR/scripts/build/toolchain/termux_step_setup_toolchain_23c.sh" + +# Runs termux_step_setup_toolchain_${TERMUX_NDK_VERSION}. Not to be overridden by packages. # shellcheck source=scripts/build/termux_step_setup_toolchain.sh source "$TERMUX_SCRIPTDIR/scripts/build/termux_step_setup_toolchain.sh" diff --git a/ndk-patches/bits-struct_file.h.patch b/ndk-patches/23c/bits-struct_file.h.patch similarity index 100% rename from ndk-patches/bits-struct_file.h.patch rename to ndk-patches/23c/bits-struct_file.h.patch diff --git a/ndk-patches/dirent.h.patch b/ndk-patches/23c/dirent.h.patch similarity index 100% rename from ndk-patches/dirent.h.patch rename to ndk-patches/23c/dirent.h.patch diff --git a/ndk-patches/grp.h.patch b/ndk-patches/23c/grp.h.patch similarity index 100% rename from ndk-patches/grp.h.patch rename to ndk-patches/23c/grp.h.patch diff --git a/ndk-patches/langinfo.h.patch b/ndk-patches/23c/langinfo.h.patch similarity index 100% rename from ndk-patches/langinfo.h.patch rename to ndk-patches/23c/langinfo.h.patch diff --git a/ndk-patches/linux-fcntl.h.patch b/ndk-patches/23c/linux-fcntl.h.patch similarity index 100% rename from ndk-patches/linux-fcntl.h.patch rename to ndk-patches/23c/linux-fcntl.h.patch diff --git a/ndk-patches/paths.h.patch b/ndk-patches/23c/paths.h.patch similarity index 100% rename from ndk-patches/paths.h.patch rename to ndk-patches/23c/paths.h.patch diff --git a/ndk-patches/pwd.h.patch b/ndk-patches/23c/pwd.h.patch similarity index 100% rename from ndk-patches/pwd.h.patch rename to ndk-patches/23c/pwd.h.patch diff --git a/ndk-patches/redefine-TCSAFLUSH.patch b/ndk-patches/23c/redefine-TCSAFLUSH.patch similarity index 100% rename from ndk-patches/redefine-TCSAFLUSH.patch rename to ndk-patches/23c/redefine-TCSAFLUSH.patch diff --git a/ndk-patches/semaphore.h.patch b/ndk-patches/23c/semaphore.h.patch similarity index 100% rename from ndk-patches/semaphore.h.patch rename to ndk-patches/23c/semaphore.h.patch diff --git a/ndk-patches/stdio.h.patch b/ndk-patches/23c/stdio.h.patch similarity index 100% rename from ndk-patches/stdio.h.patch rename to ndk-patches/23c/stdio.h.patch diff --git a/ndk-patches/stdlib.h.patch b/ndk-patches/23c/stdlib.h.patch similarity index 100% rename from ndk-patches/stdlib.h.patch rename to ndk-patches/23c/stdlib.h.patch diff --git a/ndk-patches/sys-cdefs.h.patch b/ndk-patches/23c/sys-cdefs.h.patch similarity index 100% rename from ndk-patches/sys-cdefs.h.patch rename to ndk-patches/23c/sys-cdefs.h.patch diff --git a/ndk-patches/syslog.patch b/ndk-patches/23c/syslog.patch similarity index 100% rename from ndk-patches/syslog.patch rename to ndk-patches/23c/syslog.patch diff --git a/ndk-patches/unistd.h.patch b/ndk-patches/23c/unistd.h.patch similarity index 100% rename from ndk-patches/unistd.h.patch rename to ndk-patches/23c/unistd.h.patch diff --git a/ndk-patches/utmp.h.patch b/ndk-patches/23c/utmp.h.patch similarity index 100% rename from ndk-patches/utmp.h.patch rename to ndk-patches/23c/utmp.h.patch diff --git a/ndk-patches/25 b/ndk-patches/25 new file mode 120000 index 0000000000..4e60d61a01 --- /dev/null +++ b/ndk-patches/25 @@ -0,0 +1 @@ +23c \ No newline at end of file diff --git a/scripts/build/setup/termux_setup_swift.sh b/scripts/build/setup/termux_setup_swift.sh index 9d78f75ee7..cae25b2643 100644 --- a/scripts/build/setup/termux_setup_swift.sh +++ b/scripts/build/setup/termux_setup_swift.sh @@ -25,7 +25,7 @@ termux_setup_swift() { fi export SWIFT_BINDIR="$SWIFT_FOLDER/usr/bin" export SWIFT_CROSSCOMPILE_CONFIG="$SWIFT_FOLDER/usr/android-$TERMUX_ARCH.json" - if [ -d $TERMUX_STANDALONE_TOOLCHAIN ]; then + if [ ! -z ${TERMUX_STANDALONE_TOOLCHAIN+x} ]; then cat <<- EOF > $SWIFT_CROSSCOMPILE_CONFIG { "version": 1, "target": "${SWIFT_TARGET_TRIPLE}", diff --git a/scripts/build/termux_step_setup_toolchain.sh b/scripts/build/termux_step_setup_toolchain.sh index c6e1608889..d2569911e4 100644 --- a/scripts/build/termux_step_setup_toolchain.sh +++ b/scripts/build/termux_step_setup_toolchain.sh @@ -1,221 +1,17 @@ termux_step_setup_toolchain() { + TERMUX_STANDALONE_TOOLCHAIN="$TERMUX_COMMON_CACHEDIR/android-r${TERMUX_NDK_VERSION}-api-${TERMUX_PKG_API_LEVEL}" [ "$TERMUX_PKG_METAPACKAGE" = "true" ] && return - export CFLAGS="" - export CPPFLAGS="" - export LDFLAGS="-L${TERMUX_PREFIX}/lib" - - export AS=$TERMUX_HOST_PLATFORM-clang - export CC=$TERMUX_HOST_PLATFORM-clang - export CXX=$TERMUX_HOST_PLATFORM-clang++ - export CPP=$TERMUX_HOST_PLATFORM-cpp - export LD=ld.lld - export AR=llvm-ar - export OBJCOPY=llvm-objcopy - export OBJDUMP=llvm-objdump - export RANLIB=llvm-ranlib - export READELF=llvm-readelf - export STRIP=llvm-strip - export NM=llvm-nm - - export TERMUX_HASKELL_LLVM_BACKEND="-fllvm --ghc-option=-fllvm" - if [ "${TERMUX_ARCH}" = "i686" ]; then - TERMUX_HASKELL_LLVM_BACKEND="" - fi - - export TERMUX_HASKELL_OPTIMISATION="-O" - if [ "${TERMUX_DEBUG_BUILD}" = true ]; then - TERMUX_HASKELL_OPTIMISATION="-O0" - fi - - if [ "$TERMUX_ON_DEVICE_BUILD" = "false" ]; then - export PATH=$TERMUX_STANDALONE_TOOLCHAIN/bin:$PATH - export CC_FOR_BUILD=gcc - export PKG_CONFIG=$TERMUX_STANDALONE_TOOLCHAIN/bin/pkg-config - export PKGCONFIG=$PKG_CONFIG - export CCTERMUX_HOST_PLATFORM=$TERMUX_HOST_PLATFORM$TERMUX_PKG_API_LEVEL - if [ $TERMUX_ARCH = arm ]; then - CCTERMUX_HOST_PLATFORM=armv7a-linux-androideabi$TERMUX_PKG_API_LEVEL - fi - LDFLAGS+=" -Wl,-rpath=$TERMUX_PREFIX/lib" + # Bump TERMUX_STANDALONE_TOOLCHAIN if a change is made in + # toolchain setup to ensure that everyone gets an updated + # toolchain + if [ "${TERMUX_NDK_VERSION}" = 25 ]; then + TERMUX_STANDALONE_TOOLCHAIN+="-v0" + termux_step_setup_toolchain_25 + elif [ "${TERMUX_NDK_VERSION}" = 23c ]; then + TERMUX_STANDALONE_TOOLCHAIN+="-v1" + termux_step_setup_toolchain_23c else - export CC_FOR_BUILD=$CC - # Some build scripts use environment variable 'PKG_CONFIG', so - # using this for on-device builds too. - export PKG_CONFIG=pkg-config - fi - export PKG_CONFIG_LIBDIR="$TERMUX_PKG_CONFIG_LIBDIR" - - if [ "$TERMUX_ARCH" = "arm" ]; then - # https://developer.android.com/ndk/guides/standalone_toolchain.html#abi_compatibility: - # "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" - export GOARCH=arm - export GOARM=7 - elif [ "$TERMUX_ARCH" = "i686" ]; then - # From $NDK/docs/CPU-ARCH-ABIS.html: - CFLAGS+=" -march=i686 -msse3 -mstackrealign -mfpmath=sse" - # i686 seem to explicitly require -fPIC, see - # https://github.com/termux/termux-packages/issues/7215#issuecomment-906154438 - CFLAGS+=" -fPIC" - export GOARCH=386 - export GO386=sse2 - elif [ "$TERMUX_ARCH" = "aarch64" ]; then - export GOARCH=arm64 - elif [ "$TERMUX_ARCH" = "x86_64" ]; then - export GOARCH=amd64 - else - termux_error_exit "Invalid arch '$TERMUX_ARCH' - support arches are 'arm', 'i686', 'aarch64', 'x86_64'" - fi - - # -static-openmp requires -fopenmp in LDFLAGS to work; hopefully this won't be problematic - # even when we don't have -fopenmp in CFLAGS / when we don't want to enable OpenMP - # We might also want to consider shipping libomp.so instead; since r21 - LDFLAGS+=" -fopenmp -static-openmp" - - # Android 7 started to support DT_RUNPATH (but not DT_RPATH). - LDFLAGS+=" -Wl,--enable-new-dtags" - - # Avoid linking extra (unneeded) libraries. - LDFLAGS+=" -Wl,--as-needed" - - # Basic hardening. - CFLAGS+=" -fstack-protector-strong" - LDFLAGS+=" -Wl,-z,relro,-z,now" - - if [ "$TERMUX_DEBUG_BUILD" = "true" ]; then - CFLAGS+=" -g3 -O1" - CPPFLAGS+=" -D_FORTIFY_SOURCE=2 -D__USE_FORTIFY_LEVEL=2" - else - CFLAGS+=" -Oz" - fi - - export CXXFLAGS="$CFLAGS" - export CPPFLAGS+=" -I${TERMUX_PREFIX}/include" - - # If libandroid-support is declared as a dependency, link to it explicitly: - if [ "$TERMUX_PKG_DEPENDS" != "${TERMUX_PKG_DEPENDS/libandroid-support/}" ]; then - LDFLAGS+=" -Wl,--no-as-needed,-landroid-support,--as-needed" - fi - - export GOOS=android - export CGO_ENABLED=1 - export GO_LDFLAGS="-extldflags=-pie" - export CGO_LDFLAGS="${LDFLAGS/-Wl,-z,relro,-z,now/}" - CGO_LDFLAGS="${LDFLAGS/-static-openmp/}" - export CGO_CFLAGS="-I$TERMUX_PREFIX/include" - export RUSTFLAGS="-C link-arg=-Wl,-rpath=$TERMUX_PREFIX/lib -C link-arg=-Wl,--enable-new-dtags" - - export ac_cv_func_getpwent=no - export ac_cv_func_endpwent=yes - export ac_cv_func_getpwnam=no - export ac_cv_func_getpwuid=no - export ac_cv_func_sigsetmask=no - export ac_cv_c_bigendian=no - - termux_setup_standalone_toolchain - - # On Android 7, libutil functionality is provided by libc. - # But many programs still may search for libutil. - if [ ! -f $TERMUX_PREFIX/lib/libutil.so ]; then - mkdir -p "$TERMUX_PREFIX/lib" - echo 'INPUT(-lc)' > $TERMUX_PREFIX/lib/libutil.so + termux_error_exit "We do not have a setup_toolchain function for NDK version $TERMUX_NDK_VERSION" fi } - -termux_setup_standalone_toolchain() { - if [ "$TERMUX_ON_DEVICE_BUILD" = "true" ] || [ -d $TERMUX_STANDALONE_TOOLCHAIN ]; then - return - fi - - # Do not put toolchain in place until we are done with setup, to avoid having a half setup - # toolchain left in place if something goes wrong (or process is just aborted): - local _TERMUX_TOOLCHAIN_TMPDIR=${TERMUX_STANDALONE_TOOLCHAIN}-tmp - rm -Rf $_TERMUX_TOOLCHAIN_TMPDIR - - local _NDK_ARCHNAME=$TERMUX_ARCH - if [ "$TERMUX_ARCH" = "aarch64" ]; then - _NDK_ARCHNAME=arm64 - elif [ "$TERMUX_ARCH" = "i686" ]; then - _NDK_ARCHNAME=x86 - fi - cp $NDK/toolchains/llvm/prebuilt/linux-x86_64 $_TERMUX_TOOLCHAIN_TMPDIR -r - - # Remove android-support header wrapping not needed on android-21: - rm -Rf $_TERMUX_TOOLCHAIN_TMPDIR/sysroot/usr/local - - for HOST_PLAT in aarch64-linux-android armv7a-linux-androideabi i686-linux-android x86_64-linux-android; do - cp $_TERMUX_TOOLCHAIN_TMPDIR/bin/$HOST_PLAT$TERMUX_PKG_API_LEVEL-clang \ - $_TERMUX_TOOLCHAIN_TMPDIR/bin/$HOST_PLAT-clang - cp $_TERMUX_TOOLCHAIN_TMPDIR/bin/$HOST_PLAT$TERMUX_PKG_API_LEVEL-clang++ \ - $_TERMUX_TOOLCHAIN_TMPDIR/bin/$HOST_PLAT-clang++ - - cp $_TERMUX_TOOLCHAIN_TMPDIR/bin/$HOST_PLAT$TERMUX_PKG_API_LEVEL-clang \ - $_TERMUX_TOOLCHAIN_TMPDIR/bin/$HOST_PLAT-cpp - sed -i 's/clang/clang -E/' \ - $_TERMUX_TOOLCHAIN_TMPDIR/bin/$HOST_PLAT-cpp - - cp $_TERMUX_TOOLCHAIN_TMPDIR/bin/$HOST_PLAT-clang \ - $_TERMUX_TOOLCHAIN_TMPDIR/bin/$HOST_PLAT-gcc - cp $_TERMUX_TOOLCHAIN_TMPDIR/bin/$HOST_PLAT-clang++ \ - $_TERMUX_TOOLCHAIN_TMPDIR/bin/$HOST_PLAT-g++ - done - - cp $_TERMUX_TOOLCHAIN_TMPDIR/bin/armv7a-linux-androideabi$TERMUX_PKG_API_LEVEL-clang \ - $_TERMUX_TOOLCHAIN_TMPDIR/bin/arm-linux-androideabi-clang - cp $_TERMUX_TOOLCHAIN_TMPDIR/bin/armv7a-linux-androideabi$TERMUX_PKG_API_LEVEL-clang++ \ - $_TERMUX_TOOLCHAIN_TMPDIR/bin/arm-linux-androideabi-clang++ - cp $_TERMUX_TOOLCHAIN_TMPDIR/bin/armv7a-linux-androideabi-cpp \ - $_TERMUX_TOOLCHAIN_TMPDIR/bin/arm-linux-androideabi-cpp - - # Create a pkg-config wrapper. We use path to host pkg-config to - # avoid picking up a cross-compiled pkg-config later on. - local _HOST_PKGCONFIG - _HOST_PKGCONFIG=$(command -v pkg-config) - mkdir -p "$PKG_CONFIG_LIBDIR" - cat > $_TERMUX_TOOLCHAIN_TMPDIR/bin/pkg-config <<-HERE - #!/bin/sh - export PKG_CONFIG_DIR= - export PKG_CONFIG_LIBDIR=$PKG_CONFIG_LIBDIR - exec $_HOST_PKGCONFIG "\$@" - HERE - chmod +x $_TERMUX_TOOLCHAIN_TMPDIR/bin/pkg-config - - cd $_TERMUX_TOOLCHAIN_TMPDIR/sysroot - for f in $TERMUX_SCRIPTDIR/ndk-patches/*.patch; do - echo "Applying ndk-patch: $(basename $f)" - sed "s%\@TERMUX_PREFIX\@%${TERMUX_PREFIX}%g" "$f" | \ - sed "s%\@TERMUX_HOME\@%${TERMUX_ANDROID_HOME}%g" | \ - patch --silent -p1; - done - # libintl.h: Inline implementation gettext functions. - # langinfo.h: Inline implementation of nl_langinfo(). - cp "$TERMUX_SCRIPTDIR"/ndk-patches/{libintl.h,langinfo.h} usr/include - - # Remove because it is provided by libcap. - # Remove from the NDK in favour of that from the libandroid-shmem. - # Remove as it doesn't work for non-root. - # Remove as we currently provide it from libandroid-glob. - # Remove as it's provided by libiconv. - # Remove as it's only for future (later than android-27). - # Remove and as we build our own zlib. - # Remove unicode headers provided by libicu. - # Remove KRH/khrplatform.h provided by mesa. - rm usr/include/{sys/{capability,shm,sem},{glob,iconv,spawn,zlib,zconf},KHR/khrplatform}.h - rm usr/include/unicode/{char16ptr,platform,ptypes,putil,stringoptions,ubidi,ubrk,uchar,uconfig,ucpmap,udisplaycontext,uenum,uldnames,ulocdata,uloc,umachine,unorm2,urename,uscript,ustring,utext,utf16,utf8,utf,utf_old,utypes,uvernum,uversion}.h - - sed -i "s/define __ANDROID_API__ __ANDROID_API_FUTURE__/define __ANDROID_API__ $TERMUX_PKG_API_LEVEL/" \ - usr/include/android/api-level.h - - $TERMUX_ELF_CLEANER usr/lib/*/*/*.so - for dir in usr/lib/*; do - # This seem to be needed when building rust - # packages - echo 'INPUT(-lunwind)' > $dir/libgcc.a - done - - grep -lrw $_TERMUX_TOOLCHAIN_TMPDIR/sysroot/usr/include/c++/v1 -e '' | xargs -n 1 sed -i 's//\"version\"/g' - mv $_TERMUX_TOOLCHAIN_TMPDIR $TERMUX_STANDALONE_TOOLCHAIN -} diff --git a/scripts/build/termux_step_start_build.sh b/scripts/build/termux_step_start_build.sh index 69be8f3eaf..91d8efeb83 100644 --- a/scripts/build/termux_step_start_build.sh +++ b/scripts/build/termux_step_start_build.sh @@ -1,9 +1,4 @@ termux_step_start_build() { - TERMUX_STANDALONE_TOOLCHAIN="$TERMUX_COMMON_CACHEDIR/android-r${TERMUX_NDK_VERSION}-api-${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+="-v0" - # shellcheck source=/dev/null source "$TERMUX_PKG_BUILDER_SCRIPT" # Path to hostbuild marker, for use if package has hostbuild step diff --git a/scripts/build/toolchain/termux_step_setup_toolchain_23c.sh b/scripts/build/toolchain/termux_step_setup_toolchain_23c.sh new file mode 100644 index 0000000000..f37994959a --- /dev/null +++ b/scripts/build/toolchain/termux_step_setup_toolchain_23c.sh @@ -0,0 +1,217 @@ +termux_step_setup_toolchain_23c() { + export CFLAGS="" + export CPPFLAGS="" + export LDFLAGS="-L${TERMUX_PREFIX}/lib" + + export AS=$TERMUX_HOST_PLATFORM-clang + export CC=$TERMUX_HOST_PLATFORM-clang + export CXX=$TERMUX_HOST_PLATFORM-clang++ + export CPP=$TERMUX_HOST_PLATFORM-cpp + export LD=ld.lld + export AR=llvm-ar + export OBJCOPY=llvm-objcopy + export OBJDUMP=llvm-objdump + export RANLIB=llvm-ranlib + export READELF=llvm-readelf + export STRIP=llvm-strip + export NM=llvm-nm + + export TERMUX_HASKELL_LLVM_BACKEND="-fllvm --ghc-option=-fllvm" + if [ "${TERMUX_ARCH}" = "i686" ]; then + TERMUX_HASKELL_LLVM_BACKEND="" + fi + + export TERMUX_HASKELL_OPTIMISATION="-O" + if [ "${TERMUX_DEBUG_BUILD}" = true ]; then + TERMUX_HASKELL_OPTIMISATION="-O0" + fi + + if [ "$TERMUX_ON_DEVICE_BUILD" = "false" ]; then + export PATH=$TERMUX_STANDALONE_TOOLCHAIN/bin:$PATH + export CC_FOR_BUILD=gcc + export PKG_CONFIG=$TERMUX_STANDALONE_TOOLCHAIN/bin/pkg-config + export PKGCONFIG=$PKG_CONFIG + export CCTERMUX_HOST_PLATFORM=$TERMUX_HOST_PLATFORM$TERMUX_PKG_API_LEVEL + if [ $TERMUX_ARCH = arm ]; then + CCTERMUX_HOST_PLATFORM=armv7a-linux-androideabi$TERMUX_PKG_API_LEVEL + fi + LDFLAGS+=" -Wl,-rpath=$TERMUX_PREFIX/lib" + else + export CC_FOR_BUILD=$CC + # Some build scripts use environment variable 'PKG_CONFIG', so + # using this for on-device builds too. + export PKG_CONFIG=pkg-config + fi + export PKG_CONFIG_LIBDIR="$TERMUX_PKG_CONFIG_LIBDIR" + + if [ "$TERMUX_ARCH" = "arm" ]; then + # https://developer.android.com/ndk/guides/standalone_toolchain.html#abi_compatibility: + # "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" + export GOARCH=arm + export GOARM=7 + elif [ "$TERMUX_ARCH" = "i686" ]; then + # From $NDK/docs/CPU-ARCH-ABIS.html: + CFLAGS+=" -march=i686 -msse3 -mstackrealign -mfpmath=sse" + # i686 seem to explicitly require -fPIC, see + # https://github.com/termux/termux-packages/issues/7215#issuecomment-906154438 + CFLAGS+=" -fPIC" + export GOARCH=386 + export GO386=sse2 + elif [ "$TERMUX_ARCH" = "aarch64" ]; then + export GOARCH=arm64 + elif [ "$TERMUX_ARCH" = "x86_64" ]; then + export GOARCH=amd64 + else + termux_error_exit "Invalid arch '$TERMUX_ARCH' - support arches are 'arm', 'i686', 'aarch64', 'x86_64'" + fi + + # -static-openmp requires -fopenmp in LDFLAGS to work; hopefully this won't be problematic + # even when we don't have -fopenmp in CFLAGS / when we don't want to enable OpenMP + # We might also want to consider shipping libomp.so instead; since r21 + LDFLAGS+=" -fopenmp -static-openmp" + + # Android 7 started to support DT_RUNPATH (but not DT_RPATH). + LDFLAGS+=" -Wl,--enable-new-dtags" + + # Avoid linking extra (unneeded) libraries. + LDFLAGS+=" -Wl,--as-needed" + + # Basic hardening. + CFLAGS+=" -fstack-protector-strong" + LDFLAGS+=" -Wl,-z,relro,-z,now" + + if [ "$TERMUX_DEBUG_BUILD" = "true" ]; then + CFLAGS+=" -g3 -O1" + CPPFLAGS+=" -D_FORTIFY_SOURCE=2 -D__USE_FORTIFY_LEVEL=2" + else + CFLAGS+=" -Oz" + fi + + export CXXFLAGS="$CFLAGS" + export CPPFLAGS+=" -I${TERMUX_PREFIX}/include" + + # If libandroid-support is declared as a dependency, link to it explicitly: + if [ "$TERMUX_PKG_DEPENDS" != "${TERMUX_PKG_DEPENDS/libandroid-support/}" ]; then + LDFLAGS+=" -Wl,--no-as-needed,-landroid-support,--as-needed" + fi + + export GOOS=android + export CGO_ENABLED=1 + export GO_LDFLAGS="-extldflags=-pie" + export CGO_LDFLAGS="${LDFLAGS/-Wl,-z,relro,-z,now/}" + CGO_LDFLAGS="${LDFLAGS/-static-openmp/}" + export CGO_CFLAGS="-I$TERMUX_PREFIX/include" + export RUSTFLAGS="-C link-arg=-Wl,-rpath=$TERMUX_PREFIX/lib -C link-arg=-Wl,--enable-new-dtags" + + export ac_cv_func_getpwent=no + export ac_cv_func_endpwent=yes + export ac_cv_func_getpwnam=no + export ac_cv_func_getpwuid=no + export ac_cv_func_sigsetmask=no + export ac_cv_c_bigendian=no + + # On Android 7, libutil functionality is provided by libc. + # But many programs still may search for libutil. + if [ ! -f $TERMUX_PREFIX/lib/libutil.so ]; then + mkdir -p "$TERMUX_PREFIX/lib" + echo 'INPUT(-lc)' > $TERMUX_PREFIX/lib/libutil.so + fi + + if [ "$TERMUX_ON_DEVICE_BUILD" = "true" ] || [ -d $TERMUX_STANDALONE_TOOLCHAIN ]; then + return + fi + + # Do not put toolchain in place until we are done with setup, to avoid having a half setup + # toolchain left in place if something goes wrong (or process is just aborted): + local _TERMUX_TOOLCHAIN_TMPDIR=${TERMUX_STANDALONE_TOOLCHAIN}-tmp + rm -Rf $_TERMUX_TOOLCHAIN_TMPDIR + + local _NDK_ARCHNAME=$TERMUX_ARCH + if [ "$TERMUX_ARCH" = "aarch64" ]; then + _NDK_ARCHNAME=arm64 + elif [ "$TERMUX_ARCH" = "i686" ]; then + _NDK_ARCHNAME=x86 + fi + cp $NDK/toolchains/llvm/prebuilt/linux-x86_64 $_TERMUX_TOOLCHAIN_TMPDIR -r + + # Remove android-support header wrapping not needed on android-21: + rm -Rf $_TERMUX_TOOLCHAIN_TMPDIR/sysroot/usr/local + + for HOST_PLAT in aarch64-linux-android armv7a-linux-androideabi i686-linux-android x86_64-linux-android; do + cp $_TERMUX_TOOLCHAIN_TMPDIR/bin/$HOST_PLAT$TERMUX_PKG_API_LEVEL-clang \ + $_TERMUX_TOOLCHAIN_TMPDIR/bin/$HOST_PLAT-clang + cp $_TERMUX_TOOLCHAIN_TMPDIR/bin/$HOST_PLAT$TERMUX_PKG_API_LEVEL-clang++ \ + $_TERMUX_TOOLCHAIN_TMPDIR/bin/$HOST_PLAT-clang++ + + cp $_TERMUX_TOOLCHAIN_TMPDIR/bin/$HOST_PLAT$TERMUX_PKG_API_LEVEL-clang \ + $_TERMUX_TOOLCHAIN_TMPDIR/bin/$HOST_PLAT-cpp + sed -i 's/clang/clang -E/' \ + $_TERMUX_TOOLCHAIN_TMPDIR/bin/$HOST_PLAT-cpp + + cp $_TERMUX_TOOLCHAIN_TMPDIR/bin/$HOST_PLAT-clang \ + $_TERMUX_TOOLCHAIN_TMPDIR/bin/$HOST_PLAT-gcc + cp $_TERMUX_TOOLCHAIN_TMPDIR/bin/$HOST_PLAT-clang++ \ + $_TERMUX_TOOLCHAIN_TMPDIR/bin/$HOST_PLAT-g++ + done + + cp $_TERMUX_TOOLCHAIN_TMPDIR/bin/armv7a-linux-androideabi$TERMUX_PKG_API_LEVEL-clang \ + $_TERMUX_TOOLCHAIN_TMPDIR/bin/arm-linux-androideabi-clang + cp $_TERMUX_TOOLCHAIN_TMPDIR/bin/armv7a-linux-androideabi$TERMUX_PKG_API_LEVEL-clang++ \ + $_TERMUX_TOOLCHAIN_TMPDIR/bin/arm-linux-androideabi-clang++ + cp $_TERMUX_TOOLCHAIN_TMPDIR/bin/armv7a-linux-androideabi-cpp \ + $_TERMUX_TOOLCHAIN_TMPDIR/bin/arm-linux-androideabi-cpp + + # Create a pkg-config wrapper. We use path to host pkg-config to + # avoid picking up a cross-compiled pkg-config later on. + local _HOST_PKGCONFIG + _HOST_PKGCONFIG=$(command -v pkg-config) + mkdir -p "$PKG_CONFIG_LIBDIR" + cat > $_TERMUX_TOOLCHAIN_TMPDIR/bin/pkg-config <<-HERE + #!/bin/sh + export PKG_CONFIG_DIR= + export PKG_CONFIG_LIBDIR=$PKG_CONFIG_LIBDIR + exec $_HOST_PKGCONFIG "\$@" + HERE + chmod +x "$_TERMUX_TOOLCHAIN_TMPDIR"/bin/pkg-config + + cd $_TERMUX_TOOLCHAIN_TMPDIR/sysroot + for f in $TERMUX_SCRIPTDIR/ndk-patches/$TERMUX_NDK_VERSION/*.patch; do + echo "Applying ndk-patch: $(basename $f)" + sed "s%\@TERMUX_PREFIX\@%${TERMUX_PREFIX}%g" "$f" | \ + sed "s%\@TERMUX_HOME\@%${TERMUX_ANDROID_HOME}%g" | \ + patch --silent -p1; + done + # libintl.h: Inline implementation gettext functions. + # langinfo.h: Inline implementation of nl_langinfo(). + cp "$TERMUX_SCRIPTDIR"/ndk-patches/{libintl.h,langinfo.h} usr/include + + # Remove because it is provided by libcap. + # Remove from the NDK in favour of that from the libandroid-shmem. + # Remove as it doesn't work for non-root. + # Remove as we currently provide it from libandroid-glob. + # Remove as it's provided by libiconv. + # Remove as it's only for future (later than android-27). + # Remove and as we build our own zlib. + # Remove unicode headers provided by libicu. + # Remove KRH/khrplatform.h provided by mesa. + # Remove NDK vulkan headers. + rm usr/include/{sys/{capability,shm,sem},{glob,iconv,spawn,zlib,zconf},KHR/khrplatform}.h + rm usr/include/unicode/{char16ptr,platform,ptypes,putil,stringoptions,ubidi,ubrk,uchar,uconfig,ucpmap,udisplaycontext,uenum,uldnames,ulocdata,uloc,umachine,unorm2,urename,uscript,ustring,utext,utf16,utf8,utf,utf_old,utypes,uvernum,uversion}.h + rm -Rf usr/include/vulkan + + sed -i "s/define __ANDROID_API__ __ANDROID_API_FUTURE__/define __ANDROID_API__ $TERMUX_PKG_API_LEVEL/" \ + usr/include/android/api-level.h + + $TERMUX_ELF_CLEANER usr/lib/*/*/*.so + for dir in usr/lib/*; do + # This seem to be needed when building rust + # packages + echo 'INPUT(-lunwind)' > $dir/libgcc.a + done + + grep -lrw $_TERMUX_TOOLCHAIN_TMPDIR/sysroot/usr/include/c++/v1 -e '' | xargs -n 1 sed -i 's//\"version\"/g' + mv $_TERMUX_TOOLCHAIN_TMPDIR $TERMUX_STANDALONE_TOOLCHAIN +} diff --git a/scripts/build/toolchain/termux_step_setup_toolchain_25.sh b/scripts/build/toolchain/termux_step_setup_toolchain_25.sh new file mode 100644 index 0000000000..471949b811 --- /dev/null +++ b/scripts/build/toolchain/termux_step_setup_toolchain_25.sh @@ -0,0 +1,210 @@ +termux_step_setup_toolchain_25() { + export CFLAGS="" + export CPPFLAGS="" + export LDFLAGS="-L${TERMUX_PREFIX}/lib" + + export AS=$TERMUX_HOST_PLATFORM-clang + export CC=$TERMUX_HOST_PLATFORM-clang + export CXX=$TERMUX_HOST_PLATFORM-clang++ + export LD=ld.lld + export AR=llvm-ar + export OBJCOPY=llvm-objcopy + export OBJDUMP=llvm-objdump + export RANLIB=llvm-ranlib + export READELF=llvm-readelf + export STRIP=llvm-strip + export NM=llvm-nm + + export TERMUX_HASKELL_LLVM_BACKEND="-fllvm --ghc-option=-fllvm" + if [ "${TERMUX_ARCH}" = "i686" ]; then + TERMUX_HASKELL_LLVM_BACKEND="" + fi + + export TERMUX_HASKELL_OPTIMISATION="-O" + if [ "${TERMUX_DEBUG_BUILD}" = true ]; then + TERMUX_HASKELL_OPTIMISATION="-O0" + fi + + if [ "$TERMUX_ON_DEVICE_BUILD" = "false" ]; then + export PATH=$TERMUX_STANDALONE_TOOLCHAIN/bin:$PATH + export CC_FOR_BUILD=gcc + export PKG_CONFIG=$TERMUX_STANDALONE_TOOLCHAIN/bin/pkg-config + export PKGCONFIG=$PKG_CONFIG + export CCTERMUX_HOST_PLATFORM=$TERMUX_HOST_PLATFORM$TERMUX_PKG_API_LEVEL + if [ $TERMUX_ARCH = arm ]; then + CCTERMUX_HOST_PLATFORM=armv7a-linux-androideabi$TERMUX_PKG_API_LEVEL + fi + LDFLAGS+=" -Wl,-rpath=$TERMUX_PREFIX/lib" + else + export CC_FOR_BUILD=$CC + # Some build scripts use environment variable 'PKG_CONFIG', so + # using this for on-device builds too. + export PKG_CONFIG=pkg-config + fi + export PKG_CONFIG_LIBDIR="$TERMUX_PKG_CONFIG_LIBDIR" + + if [ "$TERMUX_ARCH" = "arm" ]; then + # https://developer.android.com/ndk/guides/standalone_toolchain.html#abi_compatibility: + # "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" + export GOARCH=arm + export GOARM=7 + elif [ "$TERMUX_ARCH" = "i686" ]; then + # From $NDK/docs/CPU-ARCH-ABIS.html: + CFLAGS+=" -march=i686 -msse3 -mstackrealign -mfpmath=sse" + # i686 seem to explicitly require -fPIC, see + # https://github.com/termux/termux-packages/issues/7215#issuecomment-906154438 + CFLAGS+=" -fPIC" + export GOARCH=386 + export GO386=sse2 + elif [ "$TERMUX_ARCH" = "aarch64" ]; then + export GOARCH=arm64 + elif [ "$TERMUX_ARCH" = "x86_64" ]; then + export GOARCH=amd64 + else + termux_error_exit "Invalid arch '$TERMUX_ARCH' - support arches are 'arm', 'i686', 'aarch64', 'x86_64'" + fi + + # -static-openmp requires -fopenmp in LDFLAGS to work; hopefully this won't be problematic + # even when we don't have -fopenmp in CFLAGS / when we don't want to enable OpenMP + # We might also want to consider shipping libomp.so instead; since r21 + LDFLAGS+=" -fopenmp -static-openmp" + + # Android 7 started to support DT_RUNPATH (but not DT_RPATH). + LDFLAGS+=" -Wl,--enable-new-dtags" + + # Avoid linking extra (unneeded) libraries. + LDFLAGS+=" -Wl,--as-needed" + + # Basic hardening. + CFLAGS+=" -fstack-protector-strong" + LDFLAGS+=" -Wl,-z,relro,-z,now" + + if [ "$TERMUX_DEBUG_BUILD" = "true" ]; then + CFLAGS+=" -g3 -O1" + CPPFLAGS+=" -D_FORTIFY_SOURCE=2 -D__USE_FORTIFY_LEVEL=2" + else + CFLAGS+=" -Oz" + fi + + export CXXFLAGS="$CFLAGS" + export CPPFLAGS+=" -I${TERMUX_PREFIX}/include" + + # If libandroid-support is declared as a dependency, link to it explicitly: + if [ "$TERMUX_PKG_DEPENDS" != "${TERMUX_PKG_DEPENDS/libandroid-support/}" ]; then + LDFLAGS+=" -Wl,--no-as-needed,-landroid-support,--as-needed" + fi + + export GOOS=android + export CGO_ENABLED=1 + export GO_LDFLAGS="-extldflags=-pie" + export CGO_LDFLAGS="${LDFLAGS/-Wl,-z,relro,-z,now/}" + CGO_LDFLAGS="${LDFLAGS/-static-openmp/}" + export CGO_CFLAGS="-I$TERMUX_PREFIX/include" + export RUSTFLAGS="-C link-arg=-Wl,-rpath=$TERMUX_PREFIX/lib -C link-arg=-Wl,--enable-new-dtags" + + export ac_cv_func_getpwent=no + export ac_cv_func_endpwent=yes + export ac_cv_func_getpwnam=no + export ac_cv_func_getpwuid=no + export ac_cv_func_sigsetmask=no + export ac_cv_c_bigendian=no + + # On Android 7, libutil functionality is provided by libc. + # But many programs still may search for libutil. + if [ ! -f $TERMUX_PREFIX/lib/libutil.so ]; then + mkdir -p "$TERMUX_PREFIX/lib" + echo 'INPUT(-lc)' > $TERMUX_PREFIX/lib/libutil.so + fi + + if [ "$TERMUX_ON_DEVICE_BUILD" = "true" ] || [ -d $TERMUX_STANDALONE_TOOLCHAIN ]; then + return + fi + + # Do not put toolchain in place until we are done with setup, to avoid having a half setup + # toolchain left in place if something goes wrong (or process is just aborted): + local _TERMUX_TOOLCHAIN_TMPDIR=${TERMUX_STANDALONE_TOOLCHAIN}-tmp + rm -Rf $_TERMUX_TOOLCHAIN_TMPDIR + + local _NDK_ARCHNAME=$TERMUX_ARCH + if [ "$TERMUX_ARCH" = "aarch64" ]; then + _NDK_ARCHNAME=arm64 + elif [ "$TERMUX_ARCH" = "i686" ]; then + _NDK_ARCHNAME=x86 + fi + cp $NDK/toolchains/llvm/prebuilt/linux-x86_64 $_TERMUX_TOOLCHAIN_TMPDIR -r + + # Remove android-support header wrapping not needed on android-21: + rm -Rf $_TERMUX_TOOLCHAIN_TMPDIR/sysroot/usr/local + + for HOST_PLAT in aarch64-linux-android armv7a-linux-androideabi i686-linux-android x86_64-linux-android; do + cp $_TERMUX_TOOLCHAIN_TMPDIR/bin/$HOST_PLAT$TERMUX_PKG_API_LEVEL-clang \ + $_TERMUX_TOOLCHAIN_TMPDIR/bin/$HOST_PLAT-clang + cp $_TERMUX_TOOLCHAIN_TMPDIR/bin/$HOST_PLAT$TERMUX_PKG_API_LEVEL-clang++ \ + $_TERMUX_TOOLCHAIN_TMPDIR/bin/$HOST_PLAT-clang++ + + cp $_TERMUX_TOOLCHAIN_TMPDIR/bin/$HOST_PLAT-clang \ + $_TERMUX_TOOLCHAIN_TMPDIR/bin/$HOST_PLAT-gcc + cp $_TERMUX_TOOLCHAIN_TMPDIR/bin/$HOST_PLAT-clang++ \ + $_TERMUX_TOOLCHAIN_TMPDIR/bin/$HOST_PLAT-g++ + done + + cp $_TERMUX_TOOLCHAIN_TMPDIR/bin/armv7a-linux-androideabi$TERMUX_PKG_API_LEVEL-clang \ + $_TERMUX_TOOLCHAIN_TMPDIR/bin/arm-linux-androideabi-clang + cp $_TERMUX_TOOLCHAIN_TMPDIR/bin/armv7a-linux-androideabi$TERMUX_PKG_API_LEVEL-clang++ \ + $_TERMUX_TOOLCHAIN_TMPDIR/bin/arm-linux-androideabi-clang++ + + # Create a pkg-config wrapper. We use path to host pkg-config to + # avoid picking up a cross-compiled pkg-config later on. + local _HOST_PKGCONFIG + _HOST_PKGCONFIG=$(command -v pkg-config) + mkdir -p "$PKG_CONFIG_LIBDIR" + cat > $_TERMUX_TOOLCHAIN_TMPDIR/bin/pkg-config <<-HERE + #!/bin/sh + export PKG_CONFIG_DIR= + export PKG_CONFIG_LIBDIR=$PKG_CONFIG_LIBDIR + exec $_HOST_PKGCONFIG "\$@" + HERE + chmod +x "$_TERMUX_TOOLCHAIN_TMPDIR"/bin/pkg-config + + cd $_TERMUX_TOOLCHAIN_TMPDIR/sysroot + for f in $TERMUX_SCRIPTDIR/ndk-patches/$TERMUX_NDK_VERSION/*.patch; do + echo "Applying ndk-patch: $(basename $f)" + sed "s%\@TERMUX_PREFIX\@%${TERMUX_PREFIX}%g" "$f" | \ + sed "s%\@TERMUX_HOME\@%${TERMUX_ANDROID_HOME}%g" | \ + patch --silent -p1; + done + # libintl.h: Inline implementation gettext functions. + # langinfo.h: Inline implementation of nl_langinfo(). + cp "$TERMUX_SCRIPTDIR"/ndk-patches/{libintl.h,langinfo.h} usr/include + + # Remove because it is provided by libcap. + # Remove from the NDK in favour of that from the libandroid-shmem. + # Remove as it doesn't work for non-root. + # Remove as we currently provide it from libandroid-glob. + # Remove as it's provided by libiconv. + # Remove as it's only for future (later than android-27). + # Remove and as we build our own zlib. + # Remove unicode headers provided by libicu. + # Remove KRH/khrplatform.h provided by mesa. + # Remove execinfo provided by libandroid-execinfo. + # Remove NDK vulkan headers. + rm usr/include/{sys/{capability,shm,sem},{glob,iconv,spawn,zlib,zconf},KHR/khrplatform,execinfo}.h + rm usr/include/unicode/{char16ptr,platform,ptypes,putil,stringoptions,ubidi,ubrk,uchar,uconfig,ucpmap,udisplaycontext,uenum,uldnames,ulocdata,uloc,umachine,unorm2,urename,uscript,ustring,utext,utf16,utf8,utf,utf_old,utypes,uvernum,uversion}.h + rm -Rf usr/include/vulkan + + sed -i "s/define __ANDROID_API__ __ANDROID_API_FUTURE__/define __ANDROID_API__ $TERMUX_PKG_API_LEVEL/" \ + usr/include/android/api-level.h + + $TERMUX_ELF_CLEANER usr/lib/*/*/*.so + for dir in usr/lib/*; do + # This seem to be needed when building rust + # packages + echo 'INPUT(-lunwind)' > $dir/libgcc.a + done + + grep -lrw $_TERMUX_TOOLCHAIN_TMPDIR/sysroot/usr/include/c++/v1 -e '' | xargs -n 1 sed -i 's//\"version\"/g' + mv $_TERMUX_TOOLCHAIN_TMPDIR $TERMUX_STANDALONE_TOOLCHAIN +} diff --git a/scripts/properties.sh b/scripts/properties.sh index 98b9f468fb..3269849044 100644 --- a/scripts/properties.sh +++ b/scripts/properties.sh @@ -5,8 +5,8 @@ TERMUX_SDK_REVISION=8512546 TERMUX_ANDROID_BUILD_TOOLS_VERSION=30.0.3 -TERMUX_NDK_VERSION_NUM=23 -TERMUX_NDK_REVISION="c" +TERMUX_NDK_VERSION_NUM=25 +TERMUX_NDK_REVISION="" TERMUX_NDK_VERSION=$TERMUX_NDK_VERSION_NUM$TERMUX_NDK_REVISION # when changing the above: # remove TERMUX_PKG_REVISION in: diff --git a/scripts/setup-android-sdk.sh b/scripts/setup-android-sdk.sh index bb1cb83847..0a5ebf1e1e 100755 --- a/scripts/setup-android-sdk.sh +++ b/scripts/setup-android-sdk.sh @@ -10,8 +10,17 @@ set -e -u ANDROID_SDK_FILE=commandlinetools-linux-${TERMUX_SDK_REVISION}_latest.zip ANDROID_SDK_SHA256=2ccbda4302db862a28ada25aa7425d99dce9462046003c1714b059b5c47970d8 -ANDROID_NDK_FILE=android-ndk-r${TERMUX_NDK_VERSION}-linux.zip -ANDROID_NDK_SHA256=6ce94604b77d28113ecd588d425363624a5228d9662450c48d2e4053f8039242 +if [ "$TERMUX_NDK_VERSION" = 25 ]; then + ANDROID_NDK_FILE=android-ndk-r${TERMUX_NDK_VERSION}-linux.zip + ANDROID_NDK_SHA256=cd661aeda5d9b7cfb6e64bd80737c274d7c1c0d026df2f85be3bf3327b25e545 +elif [ "$TERMUX_NDK_VERSION" = 23c ]; then + ANDROID_NDK_FILE=android-ndk-r${TERMUX_NDK_VERSION}-linux.zip + ANDROID_NDK_SHA256=6ce94604b77d28113ecd588d425363624a5228d9662450c48d2e4053f8039242 +else + echo "Error: unknown NDK version $TERMUX_NDK_VERSION" + exit 1 +fi + if [ ! -d $ANDROID_HOME ]; then mkdir -p $ANDROID_HOME cd $ANDROID_HOME/..