# Contributor: Wojtek Kosior <kwojtus@protonmail.com>
# TODO Maybe enable more languages? And pack them separately?
_target=arm-linux-gnueabi
pkgname=${_target}-gcc
pkgver=6.3.0
pkgrel=1
pkgdesc="The GNU Compiler Collection - cross compiler for ARM GNU/Linux EABI target"
arch=('i686' 'x86_64')
license=('GPL-3' 'LGPL-3' 'custom:GCC-Exception-3.1' 'FDL-1.3')
url="https://gcc.gnu.org"
groups=('cross-devel')
depends=("${_target}-binutils>=2.28" "${_target}-glibc" 'libmpc')
makedepends=('gcc-ada' 'doxygen' "gcc-source=${pkgver}")
# Check()ing a cross-compiler would require using an emulator (qemu), I believe.
# For now - leave checkdepends commented-out
# checkdepends=('dejagnu' 'inetutils')
options=('!emptydirs' 'staticlibs' '!strip')
source=(COPYING.DOC)
sha512sums=('bea1788b2bdc84f470e459114b871cf4ee991718964a63e18adde65116806d7676484cb30857cf74dece5eef5f96a015ee4a21900e019623e5d3484868b28b7f')
prepare() {
cd "${srcdir}"
prepare-gcc-source .
# Do not run fixincludes
sed -i 's@\./fixinc\.sh@-c true@' gcc-${pkgver}/gcc/Makefile.in
# hack! - some configure tests for header files using "$CPP $CPPFLAGS"
sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" gcc-${pkgver}/{libiberty,gcc}/configure
mkdir gcc_build
}
build() {
cd "${srcdir}/gcc_build"
# using -pipe causes spurious test-suite failures
# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48565
CFLAGS=${CFLAGS/-pipe/}
CXXFLAGS=${CXXFLAGS/-pipe/}
# libmpx seems to be some intel stuff - x86 only
"${srcdir}/gcc-${pkgver}/configure" \
--prefix=/usr \
--libdir=/usr/lib \
--libexecdir=/usr/libexec \
--with-local-prefix=/usr/${_target} \
--with-sysroot=/usr/${_target} \
--with-build-sysroot=/usr/${_target} \
--with-as=/usr/bin/${_target}-as \
--with-ld=/usr/bin/${_target}-ld \
--with-native-system-header-dir=/include \
--with-bugurl=https://issues.hyperbola.info/ \
--enable-languages=c,c++,lto \
--enable-shared \
--enable-threads=posix \
`[[ $_target =~ (i686)|(x86_64) ]] &&
echo --enable-libmpx` \
--with-system-zlib \
--with-isl \
--enable-__cxa_atexit \
--disable-libunwind-exceptions \
--enable-clocale=gnu \
--disable-libstdcxx-pch \
--disable-libssp \
--enable-gnu-unique-object \
--enable-linker-build-id \
--enable-lto \
--enable-plugin \
--enable-install-libiberty \
--with-linker-hash-style=gnu \
--enable-gnu-indirect-function \
--disable-multilib \
--disable-werror \
--enable-checking=release \
--disable-nls \
--target=${_target}
make
}
# maybe check() using qemu?
package() {
cd "${srcdir}/gcc_build"
make DESTDIR="${pkgdir}" install-gcc \
install-target-{libgcc,libstdc++-v3,libgomp,libquadmath}
# TODO I'm not sure about this stripping. Everybody seems to be doing it a different way...
# I commented out all 2>/dev/null to be able to see what's going on. Uncomment them once
# everything works as it should :)
# strip target binaries
find "${pkgdir}/usr/lib/gcc/${_target}/" "${pkgdir}/usr/${_target}/lib" \
-type f -and \( -name \*.a -or -name \*.o \) \
-exec ${_target}-strip $STRIP_STATIC '{}' + 2>/dev/null
find "${pkgdir}/usr/lib/gcc/${_target}/" "${pkgdir}/usr/${_target}/lib" \
-not -name 'libgcc_s.so' -name \*.so -type f \
-exec ${_target}-strip $STRIP_SHARED '{}' + 2>/dev/null
# strip host binaries
find "${pkgdir}/usr/bin/" "${pkgdir}/usr/lib/gcc/${_target}/" \
-type f -executable -exec strip $STRIP_BINARIES '{}' + 2>/dev/null
# many packages expect this symlink
ln -s "${_target}-gcc" "${pkgdir}/usr/bin/${_target}-cc"
# POSIX conformance launcher scripts for c89 and c99
cat > "${pkgdir}/usr/bin/${_target}-c89" <<"EOF"
#!/bin/sh
fl="-std=c89"
for opt; do
case "$opt" in
-ansi|-std=c89|-std=iso9899:1990) fl="";;
-std=*) echo "`basename $0` called with non ANSI/ISO C option $opt" >&2
exit 1;;
esac
done
exec gcc $fl ${1+"$@"}
EOF
sed -i "s|exec gcc|exec ${_target}-gcc|" "${pkgdir}/usr/bin/${_target}-c89"
cat > "${pkgdir}/usr/bin/${_target}-c99" <<"EOF"
#!/bin/sh
fl="-std=c99"
for opt; do
case "$opt" in
-std=c99|-std=iso9899:1999) fl="";;
-std=*) echo "`basename $0` called with non ISO C99 option $opt" >&2
exit 1;;
esac
done
exec gcc $fl ${1+"$@"}
EOF
sed -i "s|exec gcc|exec ${_target}-gcc|" "${pkgdir}/usr/bin/${_target}-c99"
chmod 755 "${pkgdir}/usr/bin/${_target}"-c{8,9}9
# Remove man documents that conflict with host version
rm -rf ${pkgdir}/usr/share/man/man7
# Remove unused dirs
rm -rf ${pkgdir}/usr/share/{info,gcc-${pkgver}}
# Add licenses
install -m755 -d "${pkgdir}/usr/share/licenses/${_target}-gcc"
install -m644 "${srcdir}/gcc-${pkgver}"/COPYING{3{,.LIB},.RUNTIME} "${srcdir}/COPYING.DOC" \
"${pkgdir}/usr/share/licenses/${_target}-gcc"
}