Konstantin Demin d43c458e02 package: binutils: deduplicate ld
ld.bfd is the default/only implementation for now but things may change in future.

Signed-off-by: Konstantin Demin <rockdrilla@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21997
Signed-off-by: Nick Hainke <vincent@systemli.org>
2026-04-18 19:34:21 +02:00

197 lines
4.6 KiB
Makefile

#
# Copyright (C) 2006-2013 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
include $(TOPDIR)/rules.mk
PKG_NAME:=binutils
PKG_VERSION:=2.46.0
PKG_RELEASE:=1
PKG_SOURCE_URL:=@GNU/binutils
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_HASH:=d75a94f4d73e7a4086f7513e67e439e8fcdcbb726ffe63f4661744e6256b2cf2
PKG_FIXUP:=patch-libtool
PKG_LIBTOOL_PATHS:=. gas bfd opcodes gprof gprofng binutils ld libiberty gold intl libctf libsframe
PKG_REMOVE_FILES:=libtool.m4
PKG_INSTALL:=1
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
PKG_LICENSE:=GPL-3.0+
PKG_CPE_ID:=cpe:/a:gnu:binutils
PKG_BUILD_PARALLEL:=1
PKG_BUILD_FLAGS:=no-mips16
include $(INCLUDE_DIR)/nls.mk
include $(INCLUDE_DIR)/package.mk
define Package/libbfd
SECTION:=libs
CATEGORY:=Libraries
TITLE:=libbfd
DEPENDS:=+zlib $(INTL_DEPENDS)
endef
define Package/libctf
SECTION:=libs
CATEGORY:=Libraries
TITLE:=libctf
DEPENDS:=+libbfd
endef
define Package/libopcodes
SECTION:=libs
CATEGORY:=Libraries
TITLE:=libopcodes
DEPENDS:=+libbfd
endef
define Package/binutils
SECTION:=devel
CATEGORY:=Development
TITLE:=binutils
DEPENDS:=+objdump +ar
ALTERNATIVES:=200:/usr/bin/strings:/usr/bin/binutils-strings
endef
define Package/objdump
SECTION:=devel
CATEGORY:=Development
TITLE:=objdump
DEPENDS:=+libopcodes +libctf
endef
define Package/ar
SECTION:=devel
CATEGORY:=Development
TITLE:=ar
DEPENDS:=+zlib +libbfd
endef
define Package/binutils/description
The Binutils package contains a linker, an assembler, and other tools for handling object files
endef
TARGET_CFLAGS += $(FPIC) -Wno-unused-value
TARGET_LDFLAGS += $(if $(INTL_FULL),-lintl)
CONFIGURE_ARGS += \
--host=$(REAL_GNU_TARGET_NAME) \
--target=$(REAL_GNU_TARGET_NAME) \
--enable-shared \
--enable-dependency-tracking \
--enable-serial-configure \
--enable-obsolete \
--enable-deterministic-archives \
--enable-install-libiberty \
--enable-install-libbfd \
--enable-install-libctf \
--disable-werror \
--disable-gprofng \
--disable-nls \
--disable-sim \
--disable-gdb \
--with-system-zlib \
--without-debuginfod \
--without-msgpack \
--without-zstd \
BINUTILS_VARS = \
ac_cv_path_EXPECT= \
ac_cv_prog_CARGO= \
ac_cv_prog_EXPECT= \
ac_cv_prog_GDC= \
ac_cv_prog_GNATBIND= \
ac_cv_prog_GNATMAKE= \
ac_cv_prog_MAKEINFO= \
ac_cv_prog_ac_ct_GDC= \
ac_cv_prog_ac_ct_GNATBIND= \
ac_cv_prog_ac_ct_GNATMAKE= \
ac_cv_dejagnu_compat=no \
ac_cv_libctf_tcl_try=no \
acx_cv_cc_gcc_supports_ada=no \
acx_cv_d_compiler_works=no \
CONFIGURE_VARS += $(BINUTILS_VARS)
MAKE_VARS += $(BINUTILS_VARS) \
CPPFLAGS="$(TARGET_CPPFLAGS) $(EXTRA_CPPFLAGS)"
define Build/Install
$(call Build/Install/Default)
$(MAKE) -C $(PKG_BUILD_DIR)/libiberty \
target_header_dir=libiberty \
DESTDIR="$(PKG_INSTALL_DIR)" \
MULTIOSDIR="" \
install
endef
define Build/InstallDev
$(CP) $(PKG_INSTALL_DIR)/* $(1)/
endef
define Package/libbfd/install
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libbfd*.so* $(1)/usr/lib/
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libsframe*.so* $(1)/usr/lib/
endef
define Package/libctf/install
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libctf*.so* $(1)/usr/lib/
endef
define Package/libopcodes/install
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libopcodes*.so $(1)/usr/lib/
endef
define Package/objdump/install
$(INSTALL_DIR) $(1)/usr/bin
$(CP) $(PKG_INSTALL_DIR)/usr/bin/objdump $(1)/usr/bin/
endef
define Package/ar/install
$(INSTALL_DIR) $(1)/usr/bin
$(CP) $(PKG_INSTALL_DIR)/usr/bin/ar $(1)/usr/bin/
endef
define Package/binutils/install
$(INSTALL_DIR) $(1)/usr $(1)/bin
$(CP) $(PKG_INSTALL_DIR)/usr/bin/ $(1)/usr/
mv $(1)/usr/bin/strings $(1)/usr/bin/binutils-strings
rm -f $(1)/usr/bin/objdump
rm -f $(1)/usr/bin/ar
: # deduplicate "/usr/bin/ld.*":
: # "ld.bfd" is the implementation, "ld" is the variant selector,
: # so the link should be "ld" -> "ld.bfd"
_ld='$(1)/usr/bin/ld'; \
[ -f "$$$${_ld}" ] || exit 0; \
find "$$$${_ld%/*}/" -follow -name "$$$${_ld##*/}*" -type f \
| grep -Fxv -e "$$$${_ld}" | sort -V \
| while read -r _ld_variant; do \
cmp -s "$$$${_ld}" "$$$${_ld_variant}" || continue; \
cp -L "$$$${_ld_variant}" "$$$${_ld_variant}.new"; \
rm -f "$$$${_ld_variant}"; \
mv "$$$${_ld_variant}.new" "$$$${_ld_variant}"; \
rm -f "$$$${_ld}"; \
ln -s "$$$${_ld_variant##*/}" "$$$${_ld}"; \
break; \
done
endef
$(eval $(call BuildPackage,libbfd))
$(eval $(call BuildPackage,libctf))
$(eval $(call BuildPackage,libopcodes))
$(eval $(call BuildPackage,binutils))
$(eval $(call BuildPackage,objdump))
$(eval $(call BuildPackage,ar))