# Maintainer: Márcio Silva # Contributor: André Silva # toolchain build order: linux-api-headers->glibc->binutils->gcc->binutils->glibc #+-------------------+-----------------------+-------------+------------------------------+ #| _CARCH | _os (GNU/Linux-libre) | _os (GNU) | _os (GNU/Linux-libre uClibc) | #+-------------------+-----------------------+-------------+------------------------------+ #| mips64el | unknown-linux-gnu | - | unknown-uclinux-gnu | #| x86_64 | unknown-linux-gnu | unknown-gnu | unknown-uclinux-gnu | #| i[65]86 | pc-linux-gnu | pc-gnu | unknown-uclinux-gnu | #| aarch64{,_be} | unknown-linux-gnu | - | unknown-uclinux-gnu | #| arm{,v[765]}{,eb} | unknown-linux-gnueabi | - | unknown-uclinux-gnueabi | #| sparc64 | unknown-linux-gnu | - | - | #| ia64 | unknown-linux-gnu | - | - | #+-------------------+-----------------------+-------------+------------------------------+ #+----------------+--------------------+ #| _CARCH | _os (ELF/EABI) | #+----------------+--------------------+ #| xtensa | unknown-elf | #| mips64{,el} | unknown-elf | #| mips32{,el} | unknown-elf | #| x86_64 | unknown-elf | #| i[653]86 | unknown-elf | #| aarch64{,_be} | unknown-elf | #| arm{,eb} | unknown-eabi | #| powerpc64{,le} | unknown-{elf,eabi} | #| powerpc32{,le} | unknown-{elf,eabi} | #| sh64{,l} | unknown-elf | #| sh{,l} | unknown-elf | #| m68k | unknown-elf | #+----------------+--------------------+ #--------------------------------------------------------------------------------------------------------------------------------------------- _pkgname="binutils" ### Base FLAGS: ### _CARCH="x86_64" _os="unknown-linux-gnu" _target="${_CARCH}-${_os}" _multilib="no" ### Patch FLAGS: ### _patch_ath9k_htc_fw="no" #--------------------------------------------------------------------------------------------------------------------------------------------- # For "_multilib" [[ ${_multilib} == "yes" ]] && { _multilib_name="-multilib" _multilib_desc=" for multilib" } [[ ${_CARCH} == i686 || ${_CARCH} == i586 || ${_CARCH} == i386 || ${_CARCH} == xtensa || ${_CARCH} == mips32 || ${_CARCH} == mips32el || ${_CARCH} == arm || ${_CARCH} == armeb || ${_CARCH} == armv7 || ${_CARCH} == armv7eb || ${_CARCH} == armv6 || ${_CARCH} == armv6eb || ${_CARCH} == armv5 || ${_CARCH} == armv5eb || ${_CARCH} == powerpc32 || ${_CARCH} == powerpc32le || ${_CARCH} == sh || ${_CARCH} == shl || ${_CARCH} == m68k ]] && _multilib="no" # For "_patch_ath9k_htc_fw" [[ ${_patch_ath9k_htc_fw} == "yes" ]] && { _ath9k_htc_name="-ath9k-htc" _ath9k_htc_desc=" adapted for ath9k-htc firmware" _multilib="no" } [[ ${_CARCH} != xtensa ]] && _patch_ath9k_htc_fw="no" #--------------------------------------------------------------------------------------------------------------------------------------------- pkgname=( "${_target}-${_pkgname}${_multilib_name}${_ath9k_htc_name}" "${_pkgname}-common" ) pkgver=2.23.2 pkgrel=2 arch=('i686' 'x86_64' 'mips64el') url="http://www.gnu.org/software/${_pkgname}/" license=('GPL2') groups=('cross-devel') checkdepends=('dejagnu' 'bc') # Make sure we compile this with {$CHOST-,}gcc-multilib [[ ${_multilib} == "yes" ]] && makedepends=('gcc-multilib') # makedepends=("$CHOST-gcc-multilib") options=('!libtool' '!distcc' '!ccache') source=(ftp://ftp.gnu.org/gnu/${_pkgname}/${_pkgname}-${pkgver}.tar.bz2{,.sig} ${_pkgname}-2.23.2-texinfo-5.0.patch) md5sums=('4f8fa651e35ef262edc01d60fb45702e' 'dfde4428f08d91f309cdcfe92bf28d08' '34e439ce23213a91e2af872dfbb5094c') [[ ${_patch_ath9k_htc_fw} == "yes" ]] && { source+=("_patch_ath9k_htc_fw.patch::https://raw.github.com/qca/open-ath9k-htc-firmware/1.3.2/local/patches/${_pkgname}.patch") md5sums+=('7077126d96e9a755a0eaddb5505efe68') } #--------------------------------------------------------------------------------------------------------------------------------------------- prepare() { cd ${srcdir}/${_pkgname}-${pkgver} msg "http://sourceware.org/git/?p=${_pkgname}.git;a=patch;h=e02bf935" msg "http://sourceware.org/git/?p=${_pkgname}.git;a=patch;h=935f8542" patch -p1 -i ${srcdir}/${_pkgname}-2.23.2-texinfo-5.0.patch [[ ${_patch_ath9k_htc_fw} == "yes" ]] && { patch -p1 -i ${srcdir}/_patch_ath9k_htc_fw.patch } msg "hack! - libiberty configure tests for header files using" "$CPP $CPPFLAGS" sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" libiberty/configure mkdir -v ${srcdir}/${_pkgname}-build } #--------------------------------------------------------------------------------------------------------------------------------------------- build() { cd ${srcdir}/${_pkgname}-build [[ $CARCH != ${_CARCH} ]] && _TARGET="--target=${_target}" if [[ $CARCH == x86_64 || $CARCH == mips64el || $CARCH == aarch64 || $CARCH == aarch64_be || $CARCH == sparc64 || $CARCH == ia64 ]]; then _LIB_PATH="--with-lib-path=/usr/lib:/usr/lib32:/usr/local/lib:/usr/local/lib32:/usr/${_target}/lib:/usr/${_target}/lib32" else _LIB_PATH="--with-lib-path=/usr/lib:/usr/local/lib:/usr/${_target}/lib" fi if [[ ${_multilib} == "yes" ]]; then _MULTILIB='--enable-multilib' else _MULTILIB='--disable-multilib' fi ${srcdir}/${_pkgname}-${pkgver}/configure --prefix=/opt/${pkgname[0]}/${pkgver} \ $_TARGET $_LIB_PATH \ --program-prefix=${_target}- \ --program-suffix=${_multilib_name}${_ath9k_htc_name}-${pkgver} \ --with-bugurl=https://labs.parabola.nu/ \ --enable-ld=default --enable-gold \ --enable-plugins --enable-threads \ --with-pic --enable-shared \ --disable-werror ${_MULTILIB} # !!! Disabled, due which problematic libretools (prepare() and build() with --bindir, --includedir and --datarootdir)" !!! #--bindir=/usr/bin --includedir=/usr/include --datarootdir=/usr/share \ msg "Check the host environment and makes sure all the necessary tools are available" make configure-host make tooldir=/opt/${pkgname[0]}/${pkgver} } #--------------------------------------------------------------------------------------------------------------------------------------------- check() { cd ${srcdir}/${_pkgname}-build msg "Unset LDFLAGS as testsuite makes assumptions about which ones are active" msg "do not abort on errors - manually check log files" make LDFLAGS="" -k check || true } #--------------------------------------------------------------------------------------------------------------------------------------------- _target-binutils() { pkgrel=$pkgrel pkgdesc="A set of programs to assemble and manipulate binary and object files${_multilib_desc}${_ath9k_htc_desc}. (${_target} architecture)" depends=('glibc>=2.17' 'zlib' "${_pkgname}-common") [[ $CHOST == ${_target} ]] && provides=("${_pkgname}=${pkgver}") if [[ ${_multilib} == "yes" ]]; then #conflicts=("${pkgname}") groups+=('multilib-devel') else groups+=('base-devel') fi groups+=("${_target}-devel") install="${_target}-${_pkgname}.install" cd ${srcdir}/${_pkgname}-build make prefix=${pkgdir}/opt/${pkgname}/${pkgver} tooldir=${pkgdir}/opt/${pkgname}/${pkgver} install # temp # msg "!!! Move 'bin', 'include' and 'share' dir to /usr, !!!" msg "!!! due which problematic libretools ('prepare()' and 'build()' with --bindir, --includedir and --datarootdir) !!!" install -vd ${pkgdir}/usr if [[ $CARCH == ${_CARCH} ]]; then mv -v ${pkgdir}/{opt/${pkgname}/${pkgver}/{bin,include,share},usr} else mv -v ${pkgdir}/{opt/${pkgname}/${pkgver}/{bin,$CHOST/${_target}/include,share},usr} fi # temp # [[ $CARCH != ${_CARCH} ]] && { msg "Move 'lib' files and directories, and remove architecture directories" mv -v ${pkgdir}/opt/${pkgname}/${pkgver}/{$CHOST/${_target}/lib/*,lib} rmdir -v ${pkgdir}/opt/${pkgname}/${pkgver}/$CHOST/{${_target}/{lib,},} } msg "Change lib-path on ldscripts files" sed -i "/^SEARCH_DIR/ s|/${pkgver}/${_target}/lib|/${pkgver}/lib|g; /^SEARCH_DIR/ s|/${pkgver}/lib|/${pkgver}/lib32|g; /^SEARCH_DIR/ s|/${pkgver}/lib3264|/${pkgver}/lib|g; /^SEARCH_DIR/ s|/${pkgver}/lib32x32|/${pkgver}/lib|g; " ${pkgdir}/opt/${pkgname}/${pkgver}/lib/ldscripts/* _removebin=(ar as nm objcopy objdump ranlib strip) for _rbin in ${_removebin[@]}; do msg "Remove conflicting binaries" rm -v ${pkgdir}/usr/bin/${_rbin[@]} done msg "Create links for libraries" install -vd ${pkgdir}/{usr/${_target},etc/ld.so.conf.d} ln -vs ../lib ${pkgdir}/usr/${_target}/lib echo /opt/${pkgname}/${pkgver}/lib > ${pkgdir}/etc/ld.so.conf.d/${pkgname}-${pkgver}.conf msg "Install PIC libiberty.a" install -vm644 libiberty/pic/libiberty.a ${pkgdir}/opt/${pkgname[0]}/${pkgver}/lib msg "Remove unnecessaries manuals and create links for manuals" _man=$(ls -1A ${pkgdir}/usr/share/man/man1) for _man_stage1 in ${_man[@]}; do _man_stage2=${_man_stage1/${_multilib_name}${_ath9k_htc_name}-${pkgver}/} _manuals=${_man_stage2/${_target}-/} rm -v ${pkgdir}/usr/share/man/man1/${_man_stage1} ln -vs ${_manuals}.gz ${pkgdir}/usr/share/man/man1/${_man_stage1}.gz done msg "Remove unnecessaries files and directories" rm -vr ${pkgdir}/usr/{include,share/{info,locale}} } #--------------------------------------------------------------------------------------------------------------------------------------------- # GNU/Linux-libre with GNU C Library (glibc) package_mips64el-unknown-linux-gnu-binutils() { _target-binutils; } package_mips64el-unknown-linux-gnu-binutils-multilib() { _target-binutils; } package_x86_64-unknown-linux-gnu-binutils() { _target-binutils; } package_x86_64-unknown-linux-gnu-binutils-multilib() { _target-binutils; } package_i686-pc-linux-gnu-binutils() { _target-binutils; } package_i586-pc-linux-gnu-binutils() { _target-binutils; } package_aarch64-unknown-linux-gnu-binutils() { _target-binutils; } package_aarch64-unknown-linux-gnu-binutils-multilib() { _target-binutils; } package_aarch64_be-unknown-linux-gnu-binutils() { _target-binutils; } package_aarch64_be-unknown-linux-gnu-binutils-multilib() { _target-binutils; } package_arm-unknown-linux-gnueabi-binutils() { _target-binutils; } package_armeb-unknown-linux-gnueabi-binutils() { _target-binutils; } package_armv7-unknown-linux-gnueabi-binutils() { _target-binutils; } package_armv7eb-unknown-linux-gnueabi-binutils() { _target-binutils; } package_armv6-unknown-linux-gnueabi-binutils() { _target-binutils; } package_armv6eb-unknown-linux-gnueabi-binutils() { _target-binutils; } package_armv5-unknown-linux-gnueabi-binutils() { _target-binutils; } package_armv5eb-unknown-linux-gnueabi-binutils() { _target-binutils; } package_sparc64-unknown-linux-gnu-binutils() { _target-binutils; } package_sparc64-unknown-linux-gnu-binutils-multilib() { _target-binutils; } package_ia64-unknown-linux-gnu-binutils() { _target-binutils; } package_ia64-unknown-linux-gnu-binutils-multilib() { _target-binutils; } # GNU package_x86_64-unknown-gnu-binutils() { _target-binutils; } package_x86_64-unknown-gnu-binutils-multilib() { _target-binutils; } package_i686-pc-gnu-binutils() { _target-binutils; } package_i586-pc-gnu-binutils() { _target-binutils; } # GNU/Linux-libre with uClibc package_mips64el-unknown-uclinux-gnu-binutils() { _target-binutils; } package_mips64el-unknown-uclinux-gnu-binutils-multilib() { _target-binutils; } package_x86_64-unknown-uclinux-gnu-binutils() { _target-binutils; } package_x86_64-unknown-uclinux-gnu-binutils-multilib() { _target-binutils; } package_i686-pc-uclinux-gnu-binutils() { _target-binutils; } package_i586-pc-uclinux-gnu-binutils() { _target-binutils; } package_aarch64-unknown-uclinux-gnu-binutils() { _target-binutils; } package_aarch64-unknown-uclinux-gnu-binutils-multilib() { _target-binutils; } package_aarch64_be-unknown-uclinux-gnu-binutils() { _target-binutils; } package_aarch64_be-unknown-uclinux-gnu-binutils-multilib() { _target-binutils; } package_arm-unknown-uclinux-gnueabi-binutils() { _target-binutils; } package_armeb-unknown-uclinux-gnueabi-binutils() { _target-binutils; } package_armv7-unknown-uclinux-gnueabi-binutils() { _target-binutils; } package_armv7eb-unknown-uclinux-gnueabi-binutils() { _target-binutils; } package_armv6-unknown-uclinux-gnueabi-binutils() { _target-binutils; } package_armv6eb-unknown-uclinux-gnueabi-binutils() { _target-binutils; } package_armv5-unknown-uclinux-gnueabi-binutils() { _target-binutils; } package_armv5eb-unknown-uclinux-gnueabi-binutils() { _target-binutils; } # ELF or EABI only package_xtensa-unknown-elf-binutils() { _target-binutils; } package_xtensa-unknown-elf-binutils-ath9k_htc() { _target-binutils; } package_mips64el-unknown-elf-binutils() { _target-binutils; } package_mips64el-unknown-elf-binutils-multilib() { _target-binutils; } package_mips64-unknown-elf-binutils() { _target-binutils; } package_mips64-unknown-elf-binutils-multilib() { _target-binutils; } package_mips32el-unknown-elf-binutils() { _target-binutils; } package_mips32-unknown-elf-binutils() { _target-binutils; } package_x86_64-unknown-elf-binutils() { _target-binutils; } package_x86_64-unknown-elf-binutils-multilib() { _target-binutils; } package_i686-unknown-elf-binutils() { _target-binutils; } package_i586-unknown-elf-binutils() { _target-binutils; } package_i386-unknown-elf-binutils() { _target-binutils; } package_aarch64-unknown-elf-binutils() { _target-binutils; } package_aarch64-unknown-elf-binutils-multilib() { _target-binutils; } package_aarch64_be-unknown-elf-binutils() { _target-binutils; } package_aarch64_be-unknown-elf-binutils-multilib() { _target-binutils; } package_arm-unknown-eabi-binutils() { _target-binutils; } package_armeb-unknown-eabi-binutils() { _target-binutils; } package_powerpc64-unknown-elf-binutils() { _target-binutils; } package_powerpc64-unknown-elf-binutils-multilib() { _target-binutils; } package_powerpc64le-unknown-elf-binutils() { _target-binutils; } package_powerpc64le-unknown-elf-binutils-multilib() { _target-binutils; } package_powerpc32-unknown-elf-binutils() { _target-binutils; } package_powerpc32le-unknown-elf-binutils() { _target-binutils; } package_powerpc64-unknown-eabi-binutils() { _target-binutils; } package_powerpc64-unknown-eabi-binutils-multilib() { _target-binutils; } package_powerpc64le-unknown-eabi-binutils() { _target-binutils; } package_powerpc64le-unknown-eabi-binutils-multilib() { _target-binutils; } package_powerpc32-unknown-eabi-binutils() { _target-binutils; } package_powerpc32le-unknown-eabi-binutils() { _target-binutils; } package_sh64-unknown-elf-binutils() { _target-binutils; } package_sh64-unknown-elf-binutils-multilib() { _target-binutils; } package_sh64l-unknown-elf-binutils() { _target-binutils; } package_sh64l-unknown-elf-binutils-multilib() { _target-binutils; } package_sh-unknown-elf-binutils() { _target-binutils; } package_shl-unknown-elf-binutils() { _target-binutils; } package_m68k-unknown-elf-binutils() { _target-binutils; } #--------------------------------------------------------------------------------------------------------------------------------------------- package_binutils-common() { pkgrel=$pkgrel pkgdesc="A set of programs to assemble and manipulate binary and object files. (headers, docs and locales files only)" arch=('any') depends=('linktools') install="${_pkgname}.install" cd ${srcdir}/${_pkgname}-build make prefix=${pkgdir}/opt/${pkgname}/${pkgver} tooldir=${pkgdir}/opt/${pkgname}/${pkgver} install [[ $CARCH != ${_CARCH} ]] && { msg "Move 'include' files and directories" mv -v ${pkgdir}/opt/${pkgname}/${pkgver}/{$CHOST/${_target}/include,} } msg "Add some useful headers" install -vm644 ${srcdir}/${_pkgname}-${pkgver}/include/{demangle,libiberty}.h ${pkgdir}/opt/${pkgname}/${pkgver}/include msg "Remove unnecessaries files and directories" rm -vr ${pkgdir}/opt/${pkgname}/${pkgver}/{bin,lib} [[ $CARCH != ${_CARCH} ]] && { rm -vr ${pkgdir}/opt/${pkgname}/${pkgver}/$CHOST } msg "Rename manuals" _man=$(ls -1A ${pkgdir}/opt/${pkgname}/${pkgver}/share/man/man1) for _man_stage1 in ${_man[@]}; do _man_stage2=${_man_stage1/${_multilib_name}${_ath9k_htc_name}-${pkgver}/} _manuals=${_man_stage2/${_target}-/} mv -v ${pkgdir}/opt/${pkgname}/${pkgver}/share/man/man1/{${_man_stage1},${_manuals}} done }