Name binutils
Description A set of programs to assemble and manipulate binary and object files
Version 2.46-1
Package Base binutils
Homepage https://www.gnu.org/software/binutils/
Maintainers ['Frederik Schwan <freswa@archlinux.org>', 'Giancarlo Razzolini <grazzolini@archlinux.org>']
Contributors ['Allan McRae <allan@archlinux.org>', 'Bartłomiej Piotrowski <bpiotrowski@archlinux.org>']
Distro-repo https://gitlab.archlinux.org/archlinux/packaging/packages/binutils
Sources ['0001-strip-Don-t-treat-fat-IR-objects-as-plugin-object.patch', 'git+https://sourceware.org/git/binutils-gdb.git#commit=49d4d3fafa4ec4ff5a3460d91d5b1ed5286487db', 'gold-warn-unsupported.patch']
Dependencies ['gcc-libs', 'glibc', 'jansson', 'libelf', 'zlib', 'zstd']
Optional-Dependencies ['debuginfod', 'perl']
Build-Dependencies ['git']
Provides ['libctf.so', 'libgprofng.so', 'libsframe.so']
Builddate 09-02-2026 14:27:22
Architecture x86_64
Distro-Version
Licenses ['FSFAP', 'GFDL-1.3', 'GPL-2.0-or-later', 'GPL-3.0-or-later', 'LGPL-2.0-or-later', 'LGPL-3.0-or-later']
Hash 7c24091987bd8961e0492249435bde86f11fd44f0e94eb95235ce21aa96735ad
# Maintainer: Giancarlo Razzolini <grazzolini@archlinux.org>
# Maintainer: Frederik Schwan <freswa at archlinux dot org>
# Contributor:  Bartłomiej Piotrowski <bpiotrowski@archlinux.org>
# Contributor: Allan McRae <allan@archlinux.org>

# toolchain build order: linux-api-headers->glibc->binutils->gcc->glibc->binutils->gcc

pkgname=binutils
pkgver=2.46
_commit=49d4d3fafa4ec4ff5a3460d91d5b1ed5286487db
pkgrel=1
pkgdesc='A set of programs to assemble and manipulate binary and object files'
arch=(x86_64)
url='https://www.gnu.org/software/binutils/'
license=(GPL-2.0-or-later GPL-3.0-or-later LGPL-2.0-or-later LGPL-3.0-or-later GFDL-1.3 FSFAP)
depends=(
  glibc
  jansson
  libelf
  libgcc
  libstdc++
  zlib
  zstd
)
makedepends=(
  git
)
checkdepends=(
  bc
  dejagnu
  debuginfod
)
optdepends=(
  'debuginfod: for debuginfod server/client functionality'
  'perl: for gprofng-display-html'
)
conflicts=(
  binutils-multilib
)
replaces=(
  binutils-multilib
)
provides=(
  libctf.so
  libgprofng.so
  libsframe.so
)
backup=(
  'etc/gprofng.rc'
)
options=(
  staticlibs
  !distcc
  !ccache
)
source=(
  git+https://sourceware.org/git/binutils-gdb.git#commit=${_commit}
  gold-warn-unsupported.patch
  0001-strip-Don-t-treat-fat-IR-objects-as-plugin-object.patch
)
sha256sums=('0a4d90af84c0c310048fa80352178fc16bfb98de6dbf7c7efeb1d7f6276ed011'
            '2d430b66f84a19c154725ec535280c493be1d34f1a90f95208dce02fecd0e4e4'
            'cd1816becb0e992ebc09f2ff66050e4b92fad33f0b7acc833cf513f4e4791d1a')
validpgpkeys=(3A24BC1E8FB409FA9F14371813FCEF89DD9E3C4F)

pkgver() {
  cd binutils-gdb
  git describe --abbrev=12 --tags | sed 's/[^-]*-//;s/[^-]*-/&r/;s/-/+/g;s/_/./g'
}

prepare() {
  [[ ! -d binutils-gdb ]] && ln -s binutils-${pkgver} binutils-gdb
  mkdir -p binutils-build

  cd binutils-gdb

  # Turn off development mode (-Werror, gas run-time checks, date in sonames)
  sed -i '/^development=/s/true/false/' bfd/development.sh

  # Creds @Fedora
  # Change the gold configuration script to only warn about
  # unsupported targets.  This allows the binutils to be built with
  # BPF support enabled.
  patch -Np1 < ../gold-warn-unsupported.patch
}

build() {
  cd binutils-build

  "${srcdir}"/binutils-gdb/configure \
    --prefix=/usr \
    --sysconfdir="${pkgdir}"/etc \
    --with-lib-path=/usr/lib:/usr/local/lib \
    --with-bugurl=https://gitlab.archlinux.org/archlinux/packaging/packages/binutils/-/issues \
    --enable-cet \
    --enable-colored-disassembly \
    --enable-default-execstack=no \
    --enable-deterministic-archives \
    --enable-gold \
    --enable-install-libiberty \
    --enable-jansson \
    --enable-ld=default \
    --enable-new-dtags \
    --enable-pgo-build=lto \
    --enable-plugins \
    --enable-relro \
    --enable-shared \
    --enable-targets=x86_64-pep,bpf-unknown-none \
    --enable-threads \
    --disable-gdb \
    --disable-gdbserver \
    --disable-libdecnumber \
    --disable-readline \
    --disable-sim \
    --disable-werror \
    --with-debuginfod \
    --with-pic \
    --with-system-zlib

  make -O tooldir=/usr

  # Extract the FSF All Permissive License
  # <https://www.gnu.org/prep/maintain/html_node/License-Notices-for-Other-Files.html>
  # used for some linker scripts.
  tail -n 5 "${srcdir}"/binutils-gdb/ld/scripttempl/README > FSFAP
}

check() {
  cd binutils-build

  # Use minimal flags for testsuite
  # ld testsuite uses CFLAGS_FOR_TARGET and requires -g
  # gold testsuite requires CXXFLAGS/CFLAGS with default PIE/PIC disabled
  make -O CFLAGS_FOR_TARGET="-O2 -g" \
          CXXFLAGS="-O2 -no-pie -fno-PIC" \
          CFLAGS="-O2 -no-pie" \
          LDFLAGS="" \
          check || true
}

package() {
  cd binutils-build
  make prefix="${pkgdir}"/usr tooldir="${pkgdir}"/usr install

  # install PIC version of libiberty
  install -m644 libiberty/pic/libiberty.a "${pkgdir}"/usr/lib

  # Remove unwanted files
  rm -f "${pkgdir}"/usr/share/man/man1/{dlltool,windres,windmc}*

  # No shared linking to these files outside binutils
  rm -f "${pkgdir}"/usr/lib/lib{bfd,opcodes}.so
  tee "${pkgdir}"/usr/lib/libbfd.so << EOS
/* GNU ld script */

INPUT( /usr/lib/libbfd.a -lsframe -liberty -lz -lzstd -ldl )
EOS

  tee "${pkgdir}"/usr/lib/libopcodes.so << EOS
/* GNU ld script */

INPUT( /usr/lib/libopcodes.a -lbfd )
EOS

  # install FSF All Permissive License
  install -Dm644 -t "${pkgdir}"/usr/share/licenses/${pkgname}/ FSFAP
}