# 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 }