1SUMMARY = "GNU binary utilities" 2DESCRIPTION = "The GNU Binutils are a collection of binary tools. \ 3The main ones are ld (GNU Linker), and as (GNU Assembler). This \ 4package also includes addition tools such as addr2line (Converts \ 5addresses into filenames and line numbers), ar (utility for creating, \ 6modifying and extracting archives), nm (list symbols in object \ 7files), objcopy (copy and translate object files), objdump (Display \ 8object information), and other tools and related libraries." 9HOMEPAGE = "http://www.gnu.org/software/binutils/" 10BUGTRACKER = "http://sourceware.org/bugzilla/" 11SECTION = "devel" 12LICENSE = "GPL-3.0-only" 13 14DEPENDS = "flex-native bison-native zlib-native gnu-config-native autoconf-native" 15 16inherit autotools gettext multilib_header pkgconfig texinfo 17 18FILES:${PN} = " \ 19 ${bindir}/${TARGET_PREFIX}* \ 20 ${libdir}/lib*.so.* \ 21 ${libdir}/bfd-plugins/lib*.so \ 22 ${libdir}/lib*-${PV}*.so \ 23 ${prefix}/${TARGET_SYS}/bin/* \ 24 ${bindir}/embedspu" 25 26RPROVIDES:${PN} += "${PN}-symlinks" 27 28FILES:${PN}-dev = " \ 29 ${includedir} \ 30 ${libdir}/*.la \ 31 ${libdir}/libbfd.so \ 32 ${libdir}/libctf.so \ 33 ${libdir}/libctf-nobfd.so \ 34 ${libdir}/libopcodes.so" 35 36# Rather than duplicating multiple entries for these, make one 37# list and reuse it. 38 39LDGOLD_ALTS ?= "ld.gold dwp" 40LDGOLD_ALTS:riscv64 = "" 41LDGOLD_ALTS:riscv32 = "" 42LDGOLD_ALTS:libc-glibc:mipsarch = "" 43 44USE_ALTERNATIVES_FOR = " \ 45 addr2line \ 46 ar \ 47 as \ 48 c++filt \ 49 elfedit \ 50 gprof \ 51 ld \ 52 ld.bfd \ 53 ${LDGOLD_ALTS} \ 54 nm \ 55 objcopy \ 56 objdump \ 57 ranlib \ 58 readelf \ 59 size \ 60 strings \ 61 strip \ 62" 63 64python do_package:prepend() { 65 make_alts = d.getVar("USE_ALTERNATIVES_FOR") or "" 66 prefix = d.getVar("TARGET_PREFIX") 67 bindir = d.getVar("bindir") 68 for alt in make_alts.split(): 69 d.setVarFlag('ALTERNATIVE_TARGET', alt, bindir + "/" + prefix + alt) 70 d.setVarFlag('ALTERNATIVE_LINK_NAME', alt, bindir + "/" + alt) 71} 72 73B = "${S}/build.${HOST_SYS}.${TARGET_SYS}" 74 75EXTRA_OECONF = "--program-prefix=${TARGET_PREFIX} \ 76 --disable-werror \ 77 --enable-deterministic-archives \ 78 --enable-plugins \ 79 --disable-gdb \ 80 --disable-gdbserver \ 81 --disable-libdecnumber \ 82 --disable-readline \ 83 --disable-sim \ 84 ${LDGOLD} \ 85 ${EXTRA_TARGETS} \ 86 ${@bb.utils.contains('DISTRO_FEATURES', 'multiarch', '--enable-64-bit-bfd', '', d)}" 87 88EXTRA_TARGETS = "" 89EXTRA_TARGETS:x86-64 = " --enable-targets=x86_64-pe,x86_64-pep " 90EXTRA_TARGETS:class-native = "" 91 92LDGOLD:class-native = "" 93LDGOLD:class-crosssdk = "" 94LDGOLD:libc-glibc:mipsarch = "" 95LDGOLD ?= "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-gold', '--enable-gold=default --enable-threads', '--enable-gold --enable-ld=default --enable-threads', d)}" 96 97 98# This is necessary due to a bug in the binutils Makefiles 99# EXTRA_OEMAKE = "configure-build-libiberty all" 100 101export AR = "${HOST_PREFIX}ar" 102export AS = "${HOST_PREFIX}as" 103export LD = "${HOST_PREFIX}ld" 104export NM = "${HOST_PREFIX}nm" 105export RANLIB = "${HOST_PREFIX}ranlib" 106export OBJCOPY = "${HOST_PREFIX}objcopy" 107export OBJDUMP = "${HOST_PREFIX}objdump" 108 109export AR_FOR_TARGET = "${TARGET_PREFIX}ar" 110export AS_FOR_TARGET = "${TARGET_PREFIX}as" 111export LD_FOR_TARGET = "${TARGET_PREFIX}ld" 112export NM_FOR_TARGET = "${TARGET_PREFIX}nm" 113export RANLIB_FOR_TARGET = "${TARGET_PREFIX}ranlib" 114 115export CC_FOR_HOST = "${CCACHE}${HOST_PREFIX}gcc ${HOST_CC_ARCH}" 116export CXX_FOR_HOST = "${CCACHE}${HOST_PREFIX}gcc ${HOST_CC_ARCH}" 117 118# autotools.bbclass sets the _FOR_BUILD variables, but for some reason we need 119# to unset LD_LIBRARY_PATH. 120export CC_FOR_BUILD = "LD_LIBRARY_PATH= ${BUILD_CC}" 121 122MULTIARCH := "${@bb.utils.contains("DISTRO_FEATURES", "multiarch", "yes", "no", d)}" 123do_configure[vardeps] += "MULTIARCH" 124do_configure () { 125 (cd ${S} && gnu-configize) 126 127 oe_runconf 128# 129# must prime config.cache to ensure the build of libiberty 130# 131 mkdir -p ${B}/build-${BUILD_SYS} 132 for i in ${CONFIG_SITE}; do 133 cat $i >> ${B}/build-${BUILD_SYS}/config.cache || true 134 done 135} 136 137do_install () { 138 autotools_do_install 139 140 # We don't really need these, so we'll remove them... 141 rm -rf ${D}${libdir}/ldscripts 142 143 bindir_rel=${@os.path.relpath('${bindir}', '${prefix}/${TARGET_SYS}/bin')} 144 145 # Fix the /usr/${TARGET_SYS}/bin/* links 146 for l in ${D}${prefix}/${TARGET_SYS}/bin/*; do 147 rm -f $l 148 ln -sf $bindir_rel/${TARGET_PREFIX}`basename $l` $l 149 done 150 151 # Install the libiberty header 152 install -d ${D}${includedir} 153 install -m 644 ${S}/include/ansidecl.h ${D}${includedir} 154 install -m 644 ${S}/include/libiberty.h ${D}${includedir} 155 156 # insall pic version of libiberty if available 157 if [ -e ${B}/libiberty/pic/libiberty.a ]; then 158 install -Dm 0644 ${B}/libiberty/pic/libiberty.a ${D}${libdir}/libiberty.a 159 fi 160 161 cd ${D}${bindir} 162 163 # Symlinks for ease of running these on the native target 164 for p in ${TARGET_PREFIX}* ; do 165 ln -sf $p `echo $p | sed -e s,${TARGET_PREFIX},,` 166 done 167 168 for alt in ${USE_ALTERNATIVES_FOR}; do 169 rm -f ${D}${bindir}/$alt 170 done 171 172 oe_multilib_header bfd.h 173} 174 175inherit update-alternatives 176 177ALTERNATIVE_PRIORITY = "100" 178 179ALTERNATIVE:${PN}:class-target = "${USE_ALTERNATIVES_FOR}" 180 181python () { 182 if bb.utils.contains('DISTRO_FEATURES', 'ld-is-gold', True, False, d) and bb.utils.contains_any('TARGET_ARCH', 'riscv32 riscv64', True, False, d): 183 bb.fatal("Gold linker does not _yet_ support RISC-V architecture please remove ld-is-gold from DISTRO_FEATURES") 184} 185