scripts: add termux_setup_gnu_as_23c for NDK r25 (#11615)
NDK r25 has removed GNU Assembler (GAS). Removal of GAS introduced a number of build issues. The most prominent is: /usr/bin/as: unrecognized option '-EL' Some options to solve this: 1. Disable building custom assembly and suffer performance penalty 2. Hand rewrite the custom assembly to be LLVM compatible 3. Wait for upstream to write LLVM compatible assembly (openssl, openssl-1.1) 4. Bring back GAS from NDK r23c In this commit, GAS is brought back as a separate toolchain instead of following NDK r23c file hierarchy. We pass "--gcc-toolchain=GAS_TOOLCHAIN_DIR" to NDK r25 clang to detect. Packages only have to add "termux_step_gnu_as_23c" to build.sh to enable GAS. In the future, we expect packages should follow option 3 more than option 4 as that is a last resort. This commit also bumps revision for packages that rely (or previously rely) on "-fno-integrated-as": hors, libffi, libgcrypt, libpixman, openssl, openssl-1.1 Co-authored-by: Henrik Grimler <grimler@termux.dev> Co-authored-by: Chongyun Lee <45286352+licy183@users.noreply.github.com>
This commit is contained in:
parent
4e9f3db288
commit
035c918418
|
@ -190,17 +190,21 @@ source "$TERMUX_SCRIPTDIR/scripts/build/termux_step_handle_hostbuild.sh"
|
|||
source "$TERMUX_SCRIPTDIR/scripts/build/termux_step_host_build.sh"
|
||||
|
||||
# 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"
|
||||
# shellcheck source=scripts/build/toolchain/termux_setup_toolchain_25.sh
|
||||
source "$TERMUX_SCRIPTDIR/scripts/build/toolchain/termux_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"
|
||||
# shellcheck source=scripts/build/toolchain/termux_setup_toolchain_23c.sh
|
||||
source "$TERMUX_SCRIPTDIR/scripts/build/toolchain/termux_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"
|
||||
|
||||
# Setup a standalone toolchain with GNU Assembler (GAS). Can be called from build.sh.
|
||||
# shellcheck source=scripts/build/toolchain/termux_setup_gnu_as_23c.sh
|
||||
source "$TERMUX_SCRIPTDIR/scripts/build/toolchain/termux_setup_gnu_as_23c.sh"
|
||||
|
||||
# Apply all *.patch files for the package. Not to be overridden by packages.
|
||||
# shellcheck source=scripts/build/termux_step_patch_package.sh
|
||||
source "$TERMUX_SCRIPTDIR/scripts/build/termux_step_patch_package.sh"
|
||||
|
|
|
@ -3,13 +3,15 @@ TERMUX_PKG_DESCRIPTION="Instant coding answers via the command line (howdoi in r
|
|||
TERMUX_PKG_LICENSE="GPL-3.0"
|
||||
TERMUX_PKG_MAINTAINER="Krishna Kanhaiya @kcubeterm"
|
||||
TERMUX_PKG_VERSION=0.8.2
|
||||
TERMUX_PKG_REVISION=1
|
||||
TERMUX_PKG_SRCURL=https://github.com/WindSoilder/hors/archive/v${TERMUX_PKG_VERSION}.tar.gz
|
||||
TERMUX_PKG_SHA256=22419b26f64a2793759d3a3616df58196897cd9227074f475aeb3e1c366296a9
|
||||
TERMUX_PKG_AUTO_UPDATE=true
|
||||
TERMUX_PKG_BUILD_IN_SRC=true
|
||||
|
||||
termux_step_pre_configure() {
|
||||
if [ $TERMUX_ARCH = arm ]; then
|
||||
if [ "$TERMUX_ARCH" = arm ]; then
|
||||
termux_setup_gnu_as_23c
|
||||
CFLAGS+=" -fno-integrated-as"
|
||||
fi
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@ TERMUX_PKG_DESCRIPTION="Library providing a portable, high level programming int
|
|||
TERMUX_PKG_LICENSE="MIT"
|
||||
TERMUX_PKG_MAINTAINER="@termux"
|
||||
TERMUX_PKG_VERSION=3.4.2
|
||||
TERMUX_PKG_REVISION=1
|
||||
TERMUX_PKG_SRCURL=https://github.com/libffi/libffi/releases/download/v${TERMUX_PKG_VERSION}/libffi-${TERMUX_PKG_VERSION}.tar.gz
|
||||
TERMUX_PKG_SHA256=540fb721619a6aba3bdeef7d940d8e9e0e6d2c193595bc243241b77ff9e93620
|
||||
TERMUX_PKG_BREAKS="libffi-dev"
|
||||
|
@ -11,7 +12,8 @@ TERMUX_PKG_EXTRA_CONFIGURE_ARGS="--disable-multi-os-directory"
|
|||
TERMUX_PKG_RM_AFTER_INSTALL="lib/libffi-${TERMUX_PKG_VERSION}/include"
|
||||
|
||||
termux_step_pre_configure() {
|
||||
if [ $TERMUX_ARCH = arm ]; then
|
||||
if [ "$TERMUX_ARCH" = arm ]; then
|
||||
termux_setup_gnu_as_23c
|
||||
CFLAGS+=" -fno-integrated-as"
|
||||
fi
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@ TERMUX_PKG_LICENSE="GPL-2.0, LGPL-2.1, BSD 3-Clause, MIT, Public Domain"
|
|||
TERMUX_PKG_LICENSE_FILE="COPYING, COPYING.LIB, LICENSES"
|
||||
TERMUX_PKG_MAINTAINER="@termux"
|
||||
TERMUX_PKG_VERSION=1.10.1
|
||||
TERMUX_PKG_REVISION=1
|
||||
TERMUX_PKG_SRCURL=https://www.gnupg.org/ftp/gcrypt/libgcrypt/libgcrypt-${TERMUX_PKG_VERSION}.tar.bz2
|
||||
TERMUX_PKG_SHA256=ef14ae546b0084cd84259f61a55e07a38c3b53afc0f546bffcef2f01baffe9de
|
||||
TERMUX_PKG_DEPENDS="libgpg-error"
|
||||
|
@ -16,13 +17,14 @@ ac_cv_lib_pthread_pthread_create=yes
|
|||
"
|
||||
|
||||
termux_step_pre_configure() {
|
||||
CFLAGS+=" -no-integrated-as"
|
||||
if [ $TERMUX_ARCH = "arm" ]; then
|
||||
termux_setup_gnu_as_23c
|
||||
CFLAGS+=" -fno-integrated-as"
|
||||
if [ "$TERMUX_ARCH" = arm ]; then
|
||||
# See http://marc.info/?l=gnupg-devel&m=139136972631909&w=3
|
||||
CFLAGS+=" -mno-unaligned-access"
|
||||
# Avoid text relocations:
|
||||
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" gcry_cv_gcc_inline_asm_neon=no"
|
||||
elif [ $TERMUX_ARCH = "i686" ] || [ $TERMUX_ARCH = "x86_64" ]; then
|
||||
elif [ "$TERMUX_ARCH" = i686 ] || [ "$TERMUX_ARCH" = x86_64 ]; then
|
||||
# Fix i686 android build, also in https://bugzilla.gnome.org/show_bug.cgi?id=724050
|
||||
TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" --disable-asm"
|
||||
fi
|
||||
|
|
|
@ -3,7 +3,7 @@ TERMUX_PKG_DESCRIPTION="Low-level library for pixel manipulation"
|
|||
TERMUX_PKG_LICENSE="MIT"
|
||||
TERMUX_PKG_MAINTAINER="@termux"
|
||||
TERMUX_PKG_VERSION=0.40.0
|
||||
TERMUX_PKG_REVISION=2
|
||||
TERMUX_PKG_REVISION=3
|
||||
TERMUX_PKG_SRCURL=https://cairographics.org/releases/pixman-${TERMUX_PKG_VERSION}.tar.gz
|
||||
TERMUX_PKG_SHA256=6d200dec3740d9ec4ec8d1180e25779c00bc749f94278c8b9021f5534db223fc
|
||||
TERMUX_PKG_BREAKS="libpixman-dev"
|
||||
|
@ -11,7 +11,8 @@ TERMUX_PKG_REPLACES="libpixman-dev"
|
|||
TERMUX_PKG_EXTRA_CONFIGURE_ARGS="--disable-libpng"
|
||||
|
||||
termux_step_pre_configure() {
|
||||
if [ $TERMUX_ARCH = arm ]; then
|
||||
if [ "$TERMUX_ARCH" = arm ]; then
|
||||
termux_setup_gnu_as_23c
|
||||
CFLAGS+=" -fno-integrated-as"
|
||||
fi
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@ TERMUX_PKG_LICENSE="custom"
|
|||
TERMUX_PKG_LICENSE_FILE="LICENSE"
|
||||
TERMUX_PKG_MAINTAINER="@termux"
|
||||
TERMUX_PKG_VERSION=1.1.1o
|
||||
TERMUX_PKG_REVISION=1
|
||||
TERMUX_PKG_SRCURL=https://www.openssl.org/source/openssl-${TERMUX_PKG_VERSION/\~/-}.tar.gz
|
||||
TERMUX_PKG_SHA256=9384a2b0570dd80358841464677115df785edb941c71211f75076d72fe6b438f
|
||||
TERMUX_PKG_DEPENDS="ca-certificates, zlib"
|
||||
|
@ -27,9 +28,6 @@ termux_step_configure() {
|
|||
fi
|
||||
|
||||
CFLAGS+=" -DNO_SYSLOG"
|
||||
if [ $TERMUX_ARCH = arm ]; then
|
||||
CFLAGS+=" -fno-integrated-as"
|
||||
fi
|
||||
|
||||
perl -p -i -e "s@TERMUX_CFLAGS@$CFLAGS@g" Configure
|
||||
test $TERMUX_ARCH = "arm" && TERMUX_OPENSSL_PLATFORM="android-arm"
|
||||
|
|
|
@ -3,6 +3,7 @@ TERMUX_PKG_DESCRIPTION="Library implementing the SSL and TLS protocols as well a
|
|||
TERMUX_PKG_LICENSE="Apache-2.0"
|
||||
TERMUX_PKG_MAINTAINER="@termux"
|
||||
TERMUX_PKG_VERSION=3.0.3
|
||||
TERMUX_PKG_REVISION=1
|
||||
TERMUX_PKG_SRCURL=https://www.openssl.org/source/openssl-${TERMUX_PKG_VERSION/\~/-}.tar.gz
|
||||
TERMUX_PKG_SHA256=ee0078adcef1de5f003c62c80cc96527721609c6f3bb42b7795df31f8b558c0b
|
||||
TERMUX_PKG_DEPENDS="ca-certificates, zlib"
|
||||
|
@ -21,9 +22,6 @@ termux_step_configure() {
|
|||
fi
|
||||
|
||||
CFLAGS+=" -DNO_SYSLOG"
|
||||
if [ $TERMUX_ARCH = arm ]; then
|
||||
ASLAGS+=" -fno-integrated-as"
|
||||
fi
|
||||
|
||||
perl -p -i -e "s@TERMUX_CFLAGS@$CFLAGS@g" Configure
|
||||
rm -Rf $TERMUX_PREFIX/lib/libcrypto.* $TERMUX_PREFIX/lib/libssl.*
|
||||
|
|
|
@ -7,10 +7,10 @@ termux_step_setup_toolchain() {
|
|||
# toolchain
|
||||
if [ "${TERMUX_NDK_VERSION}" = 25 ]; then
|
||||
TERMUX_STANDALONE_TOOLCHAIN+="-v1"
|
||||
termux_step_setup_toolchain_25
|
||||
termux_setup_toolchain_25
|
||||
elif [ "${TERMUX_NDK_VERSION}" = 23c ]; then
|
||||
TERMUX_STANDALONE_TOOLCHAIN+="-v2"
|
||||
termux_step_setup_toolchain_23c
|
||||
termux_setup_toolchain_23c
|
||||
else
|
||||
termux_error_exit "We do not have a setup_toolchain function for NDK version $TERMUX_NDK_VERSION"
|
||||
fi
|
||||
|
|
|
@ -0,0 +1,92 @@
|
|||
# shellcheck shell=bash disable=SC2034 disable=SC2155
|
||||
termux_setup_gnu_as_23c() {
|
||||
if [ "$TERMUX_ON_DEVICE_BUILD" = true ]; then
|
||||
if [ -z "$(command -v as)" ]; then
|
||||
echo "Command 'as' is not installed."
|
||||
if [ "$TERMUX_APP_PACKAGE_MANAGER" = apt ]; then
|
||||
echo "You can install it with"
|
||||
echo
|
||||
echo " pkg install binutils"
|
||||
echo
|
||||
elif [ "$TERMUX_APP_PACKAGE_MANAGER" = pacman ]; then
|
||||
echo "You can install it with"
|
||||
echo
|
||||
echo " pacman -S binutils"
|
||||
echo
|
||||
fi
|
||||
exit 1
|
||||
fi
|
||||
return
|
||||
fi
|
||||
|
||||
local GAS_TOOLCHAIN_REVISION="-v0"
|
||||
local GAS_TOOLCHAIN_DIR="$TERMUX_COMMON_CACHEDIR/android-r23c-gas-api-${TERMUX_PKG_API_LEVEL}${GAS_TOOLCHAIN_REVISION}"
|
||||
local NDK="$(dirname "$NDK")"/android-ndk-r23c
|
||||
# set to 23c
|
||||
local TERMUX_NDK_VERSION_NUM=23
|
||||
local TERMUX_NDK_REVISION=c
|
||||
local TERMUX_NDK_VERSION=$TERMUX_NDK_VERSION_NUM$TERMUX_NDK_REVISION
|
||||
# install NDK r23c if necessary
|
||||
NDK=$NDK TERMUX_NDK_VERSION_NUM=$TERMUX_NDK_VERSION_NUM TERMUX_NDK_REVISION=$TERMUX_NDK_REVISION "$TERMUX_SCRIPTDIR"/scripts/setup-android-sdk.sh
|
||||
|
||||
# https://github.com/android/ndk/issues/1569
|
||||
# https://android-review.googlesource.com/c/platform/ndk/+/1817218
|
||||
# GNU Assembler (GAS) must be installed this way in a standalone toolchain for clang -fno-integrated-as to work correctly
|
||||
# Only bin/ need to present in PATH var
|
||||
# 1. bin/*-linux-android*-as
|
||||
# 2. *-linux-android*/bin/as (symlink to #1)
|
||||
# 3. lib/gcc/*-linux-android*/4.9.x/crtbegin.o (dummy file)
|
||||
|
||||
# No. 3 is important as demonstrated below:
|
||||
# Running android-ndk-r23c/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android24-clang -v
|
||||
# ...
|
||||
# Found candidate GCC installation: /home/builder/lib/android-ndk-r23c/toolchains/llvm/prebuilt/linux-x86_64/bin/../lib/gcc/aarch64-linux-android/4.9.x
|
||||
# Selected GCC installation: /home/builder/lib/android-ndk-r23c/toolchains/llvm/prebuilt/linux-x86_64/bin/../lib/gcc/aarch64-linux-android/4.9.x
|
||||
# ...
|
||||
|
||||
# Running android-ndk-r25/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android24-clang -v
|
||||
# unmodified will not show anything on GCC installation as GAS has been removed
|
||||
|
||||
# https://clang.llvm.org/docs/ClangCommandLineReference.html#cmdoption-clang-gcc-toolchain
|
||||
# Alternatively if we install GAS to a separate dir and pass --gcc-toolchain, output as shown:
|
||||
# Running android-ndk-r25/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android24-clang -v --gcc-toolchain=/home/builder/.termux-build/_cache/android-r23c-gas-api-24-v0/
|
||||
# ...
|
||||
# Found candidate GCC installation: /home/builder/.termux-build/_cache/android-r23c-gas-api-24-v0/lib/gcc/aarch64-linux-android/4.9.x
|
||||
# Selected GCC installation: /home/builder/.termux-build/_cache/android-r23c-gas-api-24-v0/lib/gcc/aarch64-linux-android/4.9.x
|
||||
# ...
|
||||
|
||||
# be really pedantic
|
||||
local GAS_TOOLCHAIN_VALID=true
|
||||
[ ! -x "$GAS_TOOLCHAIN_DIR/bin/arm-linux-androideabi-as" ] && GAS_TOOLCHAIN_VALID=false
|
||||
[ ! -x "$GAS_TOOLCHAIN_DIR/bin/aarch64-linux-android-as" ] && GAS_TOOLCHAIN_VALID=false
|
||||
[ ! -x "$GAS_TOOLCHAIN_DIR/bin/i686-linux-android-as" ] && GAS_TOOLCHAIN_VALID=false
|
||||
[ ! -x "$GAS_TOOLCHAIN_DIR/bin/x86_64-linux-android-as" ] && GAS_TOOLCHAIN_VALID=false
|
||||
[ ! -x "$GAS_TOOLCHAIN_DIR/arm-linux-androideabi/bin/as" ] && GAS_TOOLCHAIN_VALID=false
|
||||
[ ! -x "$GAS_TOOLCHAIN_DIR/aarch64-linux-android/bin/as" ] && GAS_TOOLCHAIN_VALID=false
|
||||
[ ! -x "$GAS_TOOLCHAIN_DIR/i686-linux-android/bin/as" ] && GAS_TOOLCHAIN_VALID=false
|
||||
[ ! -x "$GAS_TOOLCHAIN_DIR/x86_64-linux-android/bin/as" ] && GAS_TOOLCHAIN_VALID=false
|
||||
[ ! -e "$GAS_TOOLCHAIN_DIR/lib/gcc/arm-linux-androideabi/crtbegin.o" ] && GAS_TOOLCHAIN_VALID=false
|
||||
[ ! -e "$GAS_TOOLCHAIN_DIR/lib/gcc/aarch64-linux-android/crtbegin.o" ] && GAS_TOOLCHAIN_VALID=false
|
||||
[ ! -e "$GAS_TOOLCHAIN_DIR/lib/gcc/i686-linux-android/crtbegin.o" ] && GAS_TOOLCHAIN_VALID=false
|
||||
[ ! -e "$GAS_TOOLCHAIN_DIR/lib/gcc/x86_64-linux-android/crtbegin.o" ] && GAS_TOOLCHAIN_VALID=false
|
||||
|
||||
if ! $GAS_TOOLCHAIN_VALID; then
|
||||
rm -fr "$GAS_TOOLCHAIN_DIR" "$GAS_TOOLCHAIN_DIR"-tmp
|
||||
mkdir -p "$GAS_TOOLCHAIN_DIR"-tmp/bin
|
||||
cp -fv "$NDK"/toolchains/llvm/prebuilt/linux-x86_64/bin/{arm-linux-androideabi,{aarch64,i686,x86_64}-linux-android}-as \
|
||||
"$GAS_TOOLCHAIN_DIR-tmp/bin"
|
||||
mkdir -p "$GAS_TOOLCHAIN_DIR-tmp"/{arm-linux-androideabi,{aarch64,i686,x86_64}-linux-android}/bin
|
||||
for triple in {arm-linux-androideabi,{aarch64,i686,x86_64}-linux-android}; do
|
||||
cp -fP "$NDK/toolchains/llvm/prebuilt/linux-x86_64/$triple/bin/as" "$GAS_TOOLCHAIN_DIR-tmp/$triple/bin/as"
|
||||
done
|
||||
mkdir -p "$GAS_TOOLCHAIN_DIR-tmp/lib"
|
||||
rm -fr "$GAS_TOOLCHAIN_DIR-tmp/lib/gcc"
|
||||
cp -fr "$NDK/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc" "$GAS_TOOLCHAIN_DIR-tmp/lib/gcc"
|
||||
mv "$GAS_TOOLCHAIN_DIR"-tmp "$GAS_TOOLCHAIN_DIR"
|
||||
fi
|
||||
|
||||
export PATH="$GAS_TOOLCHAIN_DIR"/bin:"$PATH"
|
||||
export AS=$TERMUX_HOST_PLATFORM-as
|
||||
CFLAGS+=" --gcc-toolchain=$GAS_TOOLCHAIN_DIR"
|
||||
CXXFLAGS+=" --gcc-toolchain=$GAS_TOOLCHAIN_DIR"
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
termux_step_setup_toolchain_23c() {
|
||||
termux_setup_toolchain_23c() {
|
||||
export CFLAGS=""
|
||||
export CPPFLAGS=""
|
||||
export LDFLAGS="-L${TERMUX_PREFIX}/lib"
|
|
@ -1,4 +1,4 @@
|
|||
termux_step_setup_toolchain_25() {
|
||||
termux_setup_toolchain_25() {
|
||||
export CFLAGS=""
|
||||
export CPPFLAGS=""
|
||||
export LDFLAGS="-L${TERMUX_PREFIX}/lib"
|
|
@ -5,8 +5,8 @@
|
|||
|
||||
TERMUX_SDK_REVISION=8512546
|
||||
TERMUX_ANDROID_BUILD_TOOLS_VERSION=30.0.3
|
||||
TERMUX_NDK_VERSION_NUM=25
|
||||
TERMUX_NDK_REVISION=""
|
||||
: "${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:
|
||||
|
|
Loading…
Reference in New Issue