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