@@ -29,6 +29,8 @@ source $_SCRIPTDIR/common-files/termux_download.sh
2929: ${_MAKE_PROCESSES:= $(nproc)}
3030: ${GCC_VERSION:= 12.1.0}
3131: ${GCC_SHA256:= e88a004a14697bbbaba311f38a938c716d9a652fd151aaaa4cf1b5b99b90e2de}
32+ : ${BINUTILS_VERSION:= 2.39}
33+ : ${BINUTILS_SHA256:= d12ea6f239f1ffe3533ea11ad6e224ffcb89eb5d01bbea589e9158780fa11f10}
3234
3335export TOOLCHAIN_ARCH
3436
@@ -39,16 +41,18 @@ mkdir -p $_TMP_DIR
3941
4042_HOST_PLATFORM=" ${TOOLCHAIN_ARCH} -linux-android"
4143
42- _EXTRA_HOST_BUILD=" "
44+ _GCC_EXTRA_HOST_BUILD=" "
45+ _BINUTILS_EXTRA_HOST_BUILD=" --enable-gold=default"
4346if [ " $TOOLCHAIN_ARCH " = " arm" ]; then
4447 _HOST_PLATFORM=" ${_HOST_PLATFORM} eabi"
45- _EXTRA_HOST_BUILD =" --with-arch=armv7-a --with-float=soft --with-fpu=vfp"
48+ _GCC_EXTRA_HOST_BUILD =" --with-arch=armv7-a --with-float=soft --with-fpu=vfp"
4649elif [ " $TOOLCHAIN_ARCH " = " aarch64" ]; then
47- _EXTRA_HOST_BUILD=" --enable-fix-cortex-a53-835769 --enable-fix-cortex-a53-843419"
50+ _GCC_EXTRA_HOST_BUILD=" --enable-fix-cortex-a53-835769 --enable-fix-cortex-a53-843419"
51+ _BINUTILS_EXTRA_HOST_BUILD=" --enable-gold $_GCC_EXTRA_HOST_BUILD "
4852elif [ " $TOOLCHAIN_ARCH " = " i686" ]; then
49- _EXTRA_HOST_BUILD =" --with-arch=i686 --with-fpmath=sse "
53+ _GCC_EXTRA_HOST_BUILD =" --with-arch=i686 --with-fpmath=sse "
5054elif [ " $TOOLCHAIN_ARCH " = " x86_64" ]; then
51- _EXTRA_HOST_BUILD =" --with-arch=x86-64 --with-fpmath=sse"
55+ _GCC_EXTRA_HOST_BUILD =" --with-arch=x86-64 --with-fpmath=sse"
5256fi
5357
5458# Install dependencies
@@ -59,39 +63,57 @@ sudo apt install -y libgmp-dev libmpfr-dev libmpc-dev zlib1g-dev libisl-dev libt
5963pushd $_TMP_DIR
6064
6165# Download source
62- SRC_URL=https://ftp.gnu.org/gnu/gcc/gcc-${GCC_VERSION} /gcc-${GCC_VERSION} .tar.gz
63- SRC_FILE=$_CACHE_DIR /gcc-${GCC_VERSION} .tar.gz
64- SRC_DIR=$_TMP_DIR /gcc-${GCC_VERSION}
65- termux_download $SRC_URL $SRC_FILE $GCC_SHA256
66+ GCC_SRC_URL=https://ftp.gnu.org/gnu/gcc/gcc-${GCC_VERSION} /gcc-${GCC_VERSION} .tar.gz
67+ GCC_SRC_FILE=$_CACHE_DIR /gcc-${GCC_VERSION} .tar.gz
68+ GCC_SRC_DIR=$_TMP_DIR /gcc-${GCC_VERSION}
69+ termux_download $GCC_SRC_URL $GCC_SRC_FILE $GCC_SHA256
70+ BINUTILS_SRC_URL=https://ftp.gnu.org/gnu/binutils/binutils-${BINUTILS_VERSION} .tar.gz
71+ BINUTILS_SRC_FILE=$_CACHE_DIR /binutils-${BINUTILS_VERSION} .tar.gz
72+ BINUTILS_SRC_DIR=$_TMP_DIR /binutils-${BINUTILS_VERSION}
73+ termux_download $BINUTILS_SRC_URL $BINUTILS_SRC_FILE $BINUTILS_SHA256
6674
6775# Setup a standalone toolchain
6876_setup_standalone_toolchain_ndk_r17c $_TMP_DIR /standalone-toolchain
6977cp -R $_TMP_DIR /standalone-toolchain/sysroot/usr/include/$_HOST_PLATFORM /* $_TMP_DIR /standalone-toolchain/sysroot/usr/include/
7078
71- PATH=" $_TMP_DIR /standalone-toolchain/bin:$PATH "
72-
7379# Extract source
74- tar -xf $SRC_FILE -C $_TMP_DIR /
80+ tar -xf $GCC_SRC_FILE -C $_TMP_DIR /
7581pushd $_TMP_DIR
7682PATCHES=" $( find " $_SCRIPTDIR /patches/" -maxdepth 1 -type f -name * .patch | sort) "
7783for f in $PATCHES ; do
7884 echo " Applying patch: $( basename $f ) "
79- patch -d " $SRC_DIR /" -p1 < " $f " ;
85+ patch -d " $GCC_SRC_DIR /" -p1 < " $f " ;
8086done
87+ tar -xf $BINUTILS_SRC_FILE -C $_TMP_DIR /
8188popd
8289
83- # Build a custom toolchain
90+ # Copy sysroot
8491mkdir -p $_TMP_DIR /newer-toolchain
8592cp -R $_TMP_DIR /standalone-toolchain/sysroot $_TMP_DIR /newer-toolchain/
8693
94+ # Build binutils
95+ mkdir -p binutils-build
96+ pushd binutils-build
97+ $BINUTILS_SRC_DIR /configure \
98+ --target=$_HOST_PLATFORM \
99+ --prefix=$_TMP_DIR /newer-toolchain \
100+ --with-sysroot=$_TMP_DIR /newer-toolchain/sysroot \
101+ $_BINUTILS_EXTRA_HOST_BUILD
102+ make -j $_MAKE_PROCESSES
103+ make -j $_MAKE_PROCESSES install-strip
104+ popd # binutils-build
105+
106+ export PATH=" $_TMP_DIR /newer-toolchain/bin:$PATH "
107+
108+ # Build GCC toolchain
87109mkdir -p newer-toolchain-build
88110pushd newer-toolchain-build
89111
90112export CFLAGS=" -D__ANDROID_API__=$_API_LEVEL "
91113export CPPFLAGS=" -D__ANDROID_API__=$_API_LEVEL "
92114export CXXFLAGS=" -D__ANDROID_API__=$_API_LEVEL "
93115
94- $SRC_DIR /configure \
116+ $GCC_SRC_DIR /configure \
95117 --host=x86_64-linux-gnu \
96118 --build=x86_64-linux-gnu \
97119 --target=$_HOST_PLATFORM \
@@ -102,6 +124,7 @@ $SRC_DIR/configure \
102124 --with-gnu-as --with-gnu-ld \
103125 --disable-libstdc__-v3 \
104126 --disable-tls \
127+ --disable-ssp \
105128 --disable-bootstrap \
106129 --enable-initfini-array \
107130 --enable-libatomic-ifuncs=no \
@@ -115,12 +138,12 @@ $SRC_DIR/configure \
115138 --enable-eh-frame-hdr-for-static \
116139 --enable-graphite=yes --with-isl \
117140 --disable-multilib \
118- $_EXTRA_HOST_BUILD \
141+ $_GCC_EXTRA_HOST_BUILD \
119142 --with-sysroot=$_TMP_DIR /newer-toolchain/sysroot \
120143 --with-gxx-include-dir=$_TMP_DIR /newer-toolchain/include/c++/$GCC_VERSION
121144
122145make -j $_MAKE_PROCESSES
123- make -j $_MAKE_PROCESSES install
146+ make -j $_MAKE_PROCESSES install-strip
124147
125148popd # newer-toolchain-build
126149
0 commit comments