# Contributor: Wojtek Kosior <kwojtus@protonmail.com>
# TODO tools from ${_target}-binutils package could be used instead
# of building temporary binutils. I couldn't get them to work easily,
# however. If You can (and have time), fix it.
# TODO There should be some switch to disable building of docs.
# It'd speed up the build + enable us to remove doxygen from depends
_target=arm-linux-gnueabi
pkgname=${_target}-glibc
pkgver=2.25
pkgrel=1
pkgdesc="The GNU C Library ARM GNU/Linux EABI target"
arch=(any)
license=('GPL-3' 'LGPL-3')
url="https://gcc.gnu.org"
groups=('cross-devel')
depends=("glibc-source=$pkgver" 'gcc-source' 'binutils-source')
makedepends=('gcc-ada' 'doxygen')
# The following are checkdepends of gcc. They should only get
# uncommented if we decide to check the temporary compiler.
# checkdepends=('dejagnu' 'inetutils')
options=('!strip' 'staticlibs')
prepare() {
cd "${srcdir}"
prepare-gcc-source .
prepare-glibc-source .
prepare-binutils-source .
# hack! - some configure tests for header files using "$CPP $CPPFLAGS"
sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" \
gcc-*/{libiberty,gcc}/configure binutils-*/libiberty/configure
mkdir -p {gcc,glibc,binutils}_build cross_tools
}
build() {
# Build primitive binutils and gcc for building glibc
cd "${srcdir}/binutils_build"
../binutils-*/configure \
--prefix="${srcdir}/cross_tools" \
--with-sysroot="${srcdir}/cross_tools" \
--with-lib-path="${srcdir}/cross_tools/lib" \
--target=${_target} \
--disable-gdb \
--disable-nls \
--disable-werror \
--disable-multilib \
--disable-threads \
--disable-gold # or could we enable it and use gold for glibc later?
make configure-host
make
make install
cd "${srcdir}/gcc_build"
# using -pipe causes spurious test-suite failures
# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48565
# But for now we're not testing this temporary compiler,
# so the next 2 lines stay commented-out :)
# CFLAGS=${CFLAGS/-pipe/}
# CXXFLAGS=${CXXFLAGS/-pipe/}
../gcc-*/configure \
--target=${_target} \
--prefix="${srcdir}/cross_tools" \
--with-newlib \
--without-headers \
--disable-nls \
--disable-shared \
--disable-multilib \
--disable-decimal-float \
--disable-threads \
--disable-libatomic \
--disable-libgomp \
--disable-libquadmath \
--disable-libssp \
--disable-libvtv \
--disable-libstdcxx \
--enable-languages=c,c++ \
--with-bugurl=https://issues.hyperbola.info/ \
--with-system-zlib \
--with-glibc-version=2.11
# Perhaps `make all-gcc target-libgcc` would be the right thing?
make
make install
cd "${srcdir}/glibc_build"
# If (for example) we're building glibc for arm and CFLAGS contains
# -march=x86_64, it shall break configure. That's why we remove -march= flag.
# -mtune=generic is also not supported on some arches.
# Warning: extglob option in bash must be enabled for this
# pattern matching to work (can be done using shopt builtin).
CFLAGS=${CFLAGS/-march=+([^[:space:]])/}
CFLAGS=${CFLAGS/-mtune=+([^[:space:]])/}
# remove fortify for building libraries
CPPFLAGS=${CPPFLAGS/-D_FORTIFY_SOURCE=[[:digit:]]/}
echo "slibdir=/lib" > configparms
echo "rtlddir=/lib" >> configparms
echo "sbindir=/usr/sbin" >> configparms
echo "rootsbindir=/sbin" >> configparms
echo "vardbdir=/var/lib/misc" >> configparms
../glibc-*/configure \
--prefix=/usr \
--includedir=/include \
--libdir=/lib \
--libexecdir=/libexec \
--with-bugurl=https://issues.hyperbola.info/ \
--enable-add-ons \
--enable-obsolete-rpc \
--enable-kernel=2.6.32 \
--enable-bind-now \
--disable-profile \
--enable-stackguard-randomization \
--enable-stack-protector=strong \
--enable-lock-elision \
--enable-multi-arch \
--disable-werror \
--host=${_target} \
--with-headers=/usr/${_target}/include \
--with-binutils="${srcdir}/cross_tools/bin/" \
CC="${srcdir}/cross_tools/bin/${_target}-gcc"
echo "build-programs=no" >> configparms
make
}
package() {
cd "${srcdir}/glibc_build"
make install_root="${pkgdir}/usr/${_target}" install
rm -r "${pkgdir}/usr/${_target}/"{etc,var,usr}
STRIP="${srcdir}/cross_tools/bin/${_target}-strip"
# Aside from using different strip tool, we do all the stripping the same, as it
# is done for native glibc. Perhaps it is wrong. If You know better, change it.
if check_option 'debug' n; then
find "${pkgdir}/usr/${_target}/bin" -type f -executable -exec \
"$STRIP" $STRIP_BINARIES {} + 2> /dev/null || true
find "${pkgdir}/usr/${_target}/lib" -name '*.a' -type f -exec \
"$STRIP" $STRIP_STATIC {} + 2> /dev/null || true
# Do not strip these for gdb and valgrind functionality, but strip the rest.
find "$pkgdir"/usr/${_target}/lib \
-not -name 'ld-*.so' \
-not -name 'libc-*.so' \
-not -name 'libpthread-*.so' \
-not -name 'libthread_db-*.so' \
-name '*-*.so' -type f -exec "$STRIP" $STRIP_SHARED {} + 2> /dev/null || true
fi
}