f685fefcba0ba3394368cf7a87d6bedda6cc1579
[termux-packages] / packages / gcc / build.sh
1 TERMUX_PKG_HOMEPAGE=http://gcc.gnu.org/
2 TERMUX_PKG_DESCRIPTION="GNU C compiler"
3 TERMUX_PKG_DEPENDS="binutils, libgmp, libmpfr, libmpc, ndk-sysroot, libgcc, libisl, libgnustl"
4 TERMUX_PKG_VERSION=6.1.0
5 TERMUX_PKG_SRCURL=ftp://ftp.fu-berlin.de/unix/languages/gcc/releases/gcc-${TERMUX_PKG_VERSION}/gcc-${TERMUX_PKG_VERSION}.tar.bz2
6 TERMUX_PKG_EXTRA_CONFIGURE_ARGS="--enable-languages=c,c++ --with-system-zlib --disable-multilib --disable-lto"
7 TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" --target=$TERMUX_HOST_PLATFORM"
8 TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" --with-gmp=$TERMUX_PREFIX --with-mpfr=$TERMUX_PREFIX --with-mpc=$TERMUX_PREFIX"
9 # To build gcc as a PIE binary:
10 TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" --with-stage1-ldflags=\"-specs=$TERMUX_SCRIPTDIR/termux.spec\""
11 TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" --with-isl-include=$TERMUX_PREFIX/include --with-isl-lib=$TERMUX_PREFIX/lib"
12 TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" --disable-isl-version-check"
13 TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" --disable-tls"
14 TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" --enable-host-shared"
15 TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" --enable-default-pie"
16
17 if [ "$TERMUX_ARCH" = "arm" ]; then
18 TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" --with-arch=armv7-a --with-fpu=neon --with-float=hard"
19 elif [ "$TERMUX_ARCH" = "aarch64" ]; then
20 TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" --with-arch=armv8-a"
21 elif [ "$TERMUX_ARCH" = "i686" ]; then
22 # -mstackrealign -msse3 -m32
23 TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" --with-arch=i686 --with-tune=atom --with-fpmath=sse"
24 fi
25 TERMUX_PKG_RM_AFTER_INSTALL="bin/gcc-ar bin/gcc-ranlib bin/*c++ bin/gcc-nm lib/gcc/*-linux-*/${TERMUX_PKG_VERSION}/plugin lib/gcc/*-linux-*/${TERMUX_PKG_VERSION}/include-fixed lib/gcc/*-linux-*/$TERMUX_PKG_VERSION/install-tools libexec/gcc/*-linux-*/${TERMUX_PKG_VERSION}/plugin libexec/gcc/*-linux-*/${TERMUX_PKG_VERSION}/install-tools share/man/man7"
26
27 export AR_FOR_TARGET="$AR"
28 export AS_FOR_TARGET="$AS"
29 export CC_FOR_TARGET="$CC"
30 export CFLAGS_FOR_TARGET="$CFLAGS"
31 export CPP_FOR_TARGET="$CPP"
32 export CPPFLAGS_FOR_TARGET="$CPPFLAGS"
33 export CXXFLAGS_FOR_TARGET="$CXXFLAGS"
34 export CXX_FOR_TARGET="$CXX"
35 export LDFLAGS_FOR_TARGET="$LDFLAGS"
36 export LD_FOR_TARGET="$LD"
37 export PKG_CONFIG_FOR_TARGET="$PKG_CONFIG"
38 export RANLIB_FOR_TARGET="$RANLIB"
39
40 unset AR
41 unset AS
42 unset CC
43 unset CFLAGS
44 unset CPP
45 unset CPPFLAGS
46 unset CXXFLAGS
47 unset CXX
48 unset LDFLAGS
49 unset LD
50 unset PKG_CONFIG
51 unset RANLIB
52
53 termux_step_make () {
54 make -j $TERMUX_MAKE_PROCESSES all-gcc
55 }
56
57 termux_step_make_install () {
58 make install-gcc
59 }
60
61 termux_step_post_make_install () {
62 # Android 5.0 only supports PIE binaries, so build that by default with a specs file:
63 local GCC_SPECS=$TERMUX_PREFIX/lib/gcc/$TERMUX_HOST_PLATFORM/$TERMUX_PKG_VERSION/specs
64 cp $TERMUX_SCRIPTDIR/termux.spec $GCC_SPECS
65
66 if [ $TERMUX_ARCH = "i686" ]; then
67 # See https://github.com/termux/termux-packages/issues/3
68 # and https://github.com/termux/termux-packages/issues/14
69 cat >> $GCC_SPECS <<HERE
70
71 *link_emulation:
72 elf_i386
73
74 *dynamic_linker:
75 /system/bin/linker
76 HERE
77 fi
78
79 # Replace hardlinks with symlinks:
80 cd $TERMUX_PREFIX/bin
81 rm ${TERMUX_HOST_PLATFORM}-g++; ln -s g++ ${TERMUX_HOST_PLATFORM}-g++
82 rm ${TERMUX_HOST_PLATFORM}-gcc; ln -s gcc ${TERMUX_HOST_PLATFORM}-gcc
83 rm ${TERMUX_HOST_PLATFORM}-gcc-${TERMUX_PKG_VERSION}; ln -s gcc ${TERMUX_HOST_PLATFORM}-gcc-${TERMUX_PKG_VERSION}
84 }