1*4882a593SmuzhiyunSUMMARY = "Utilities and libraries for handling compiled object files" 2*4882a593SmuzhiyunHOMEPAGE = "https://sourceware.org/elfutils" 3*4882a593SmuzhiyunDESCRIPTION = "elfutils is a collection of utilities and libraries to read, create and modify ELF binary files, find and handle DWARF debug data, symbols, thread state and stacktraces for processes and core files on GNU/Linux." 4*4882a593SmuzhiyunSECTION = "base" 5*4882a593SmuzhiyunLICENSE = "GPL-2.0-only & GPL-2.0-or-later & LGPL-3.0-or-later & GPL-3.0-or-later" 6*4882a593SmuzhiyunLIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504 \ 7*4882a593Smuzhiyun file://debuginfod/debuginfod-client.c;endline=27;md5=d2adfd8f5347d4c96e3c280393ce66da \ 8*4882a593Smuzhiyun " 9*4882a593SmuzhiyunDEPENDS = "zlib virtual/libintl" 10*4882a593SmuzhiyunDEPENDS:append:libc-musl = " argp-standalone fts musl-obstack " 11*4882a593Smuzhiyun# The Debian patches below are from: 12*4882a593Smuzhiyun# http://ftp.de.debian.org/debian/pool/main/e/elfutils/elfutils_0.176-1.debian.tar.xz 13*4882a593SmuzhiyunSRC_URI = "https://sourceware.org/elfutils/ftp/${PV}/${BP}.tar.bz2 \ 14*4882a593Smuzhiyun file://0001-dso-link-change.patch \ 15*4882a593Smuzhiyun file://0002-Fix-elf_cvt_gunhash-if-dest-and-src-are-same.patch \ 16*4882a593Smuzhiyun file://0003-fixheadercheck.patch \ 17*4882a593Smuzhiyun file://0006-Fix-build-on-aarch64-musl.patch \ 18*4882a593Smuzhiyun file://0001-libasm-may-link-with-libbz2-if-found.patch \ 19*4882a593Smuzhiyun file://0001-libelf-elf_end.c-check-data_list.data.d.d_buf-before.patch \ 20*4882a593Smuzhiyun file://0001-skip-the-test-when-gcc-not-deployed.patch \ 21*4882a593Smuzhiyun file://run-ptest \ 22*4882a593Smuzhiyun file://ptest.patch \ 23*4882a593Smuzhiyun file://0001-tests-Makefile.am-compile-test_nlist-with-standard-C.patch \ 24*4882a593Smuzhiyun file://0001-debuginfod-fix-compilation-on-platforms-without-erro.patch \ 25*4882a593Smuzhiyun file://0001-debuginfod-debuginfod-client.c-use-long-for-cache-ti.patch \ 26*4882a593Smuzhiyun " 27*4882a593SmuzhiyunSRC_URI:append:libc-musl = " \ 28*4882a593Smuzhiyun file://0003-musl-utils.patch \ 29*4882a593Smuzhiyun file://0015-config-eu.am-do-not-use-Werror.patch \ 30*4882a593Smuzhiyun " 31*4882a593SmuzhiyunSRC_URI[sha256sum] = "7f6fb9149b1673d38d9178a0d3e0fb8a1ec4f53a9f4c2ff89469609879641177" 32*4882a593Smuzhiyun 33*4882a593Smuzhiyuninherit autotools gettext ptest pkgconfig 34*4882a593SmuzhiyunPTEST_ENABLED:libc-musl = "0" 35*4882a593Smuzhiyun 36*4882a593SmuzhiyunEXTRA_OECONF = "--program-prefix=eu-" 37*4882a593Smuzhiyun 38*4882a593SmuzhiyunDEPENDS_BZIP2 = "bzip2-replacement-native" 39*4882a593SmuzhiyunDEPENDS_BZIP2:class-target = "bzip2" 40*4882a593Smuzhiyun 41*4882a593SmuzhiyunPACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'debuginfod', 'debuginfod libdebuginfod', '', d)}" 42*4882a593SmuzhiyunPACKAGECONFIG[bzip2] = "--with-bzlib,--without-bzlib,${DEPENDS_BZIP2}" 43*4882a593SmuzhiyunPACKAGECONFIG[xz] = "--with-lzma,--without-lzma,xz" 44*4882a593SmuzhiyunPACKAGECONFIG[zstd] = "--with-zstd,--without-zstd,zstd" 45*4882a593SmuzhiyunPACKAGECONFIG[libdebuginfod] = "--enable-libdebuginfod,--disable-libdebuginfod,curl" 46*4882a593SmuzhiyunPACKAGECONFIG[debuginfod] = "--enable-debuginfod,--disable-debuginfod,libarchive sqlite3 libmicrohttpd" 47*4882a593Smuzhiyun 48*4882a593SmuzhiyunRDEPENDS:${PN}-ptest += "libasm libelf bash make coreutils ${PN}-binutils iproute2-ss bsdtar gcc-symlinks binutils-symlinks libgcc-dev" 49*4882a593Smuzhiyun 50*4882a593SmuzhiyunEXTRA_OECONF:append:class-target = " --disable-tests-rpath" 51*4882a593Smuzhiyun 52*4882a593SmuzhiyunRDEPENDS:${PN}-ptest:append:libc-glibc = " glibc-utils glibc-dbg glibc-dev" 53*4882a593SmuzhiyunINSANE_SKIP:${PN}-ptest = "debug-deps dev-deps" 54*4882a593Smuzhiyun 55*4882a593Smuzhiyundo_compile_ptest() { 56*4882a593Smuzhiyun cd ${B}/tests 57*4882a593Smuzhiyun oe_runmake buildtest-TESTS oecheck 58*4882a593Smuzhiyun} 59*4882a593Smuzhiyun 60*4882a593Smuzhiyundo_install_ptest() { 61*4882a593Smuzhiyun if [ ${PTEST_ENABLED} = "1" ]; then 62*4882a593Smuzhiyun # copy the files which needed by the cases 63*4882a593Smuzhiyun TEST_FILES="strip strip.o addr2line elfcmp objdump readelf size.o nm.o nm elflint elfcompress elfclassify stack unstrip" 64*4882a593Smuzhiyun install -d -m 755 ${D}${PTEST_PATH}/src 65*4882a593Smuzhiyun install -d -m 755 ${D}${PTEST_PATH}/libelf 66*4882a593Smuzhiyun install -d -m 755 ${D}${PTEST_PATH}/libdw 67*4882a593Smuzhiyun install -d -m 755 ${D}${PTEST_PATH}/libdwfl 68*4882a593Smuzhiyun install -d -m 755 ${D}${PTEST_PATH}/libdwelf 69*4882a593Smuzhiyun install -d -m 755 ${D}${PTEST_PATH}/libasm 70*4882a593Smuzhiyun install -d -m 755 ${D}${PTEST_PATH}/libcpu 71*4882a593Smuzhiyun install -d -m 755 ${D}${PTEST_PATH}/libebl 72*4882a593Smuzhiyun for test_file in ${TEST_FILES}; do 73*4882a593Smuzhiyun if [ -f ${B}/src/${test_file} ]; then 74*4882a593Smuzhiyun cp -r ${B}/src/${test_file} ${D}${PTEST_PATH}/src 75*4882a593Smuzhiyun fi 76*4882a593Smuzhiyun done 77*4882a593Smuzhiyun cp ${D}${libdir}/libelf-${PV}.so ${D}${PTEST_PATH}/libelf/libelf.so 78*4882a593Smuzhiyun cp ${D}${libdir}/libdw-${PV}.so ${D}${PTEST_PATH}/libdw/libdw.so 79*4882a593Smuzhiyun cp ${D}${libdir}/libasm-${PV}.so ${D}${PTEST_PATH}/libasm/libasm.so 80*4882a593Smuzhiyun cp ${B}/libcpu/libcpu.a ${D}${PTEST_PATH}/libcpu/ 81*4882a593Smuzhiyun cp ${B}/libebl/libebl.a ${D}${PTEST_PATH}/libebl/ 82*4882a593Smuzhiyun cp ${S}/libelf/*.h ${D}${PTEST_PATH}/libelf/ 83*4882a593Smuzhiyun cp ${S}/libdw/*.h ${D}${PTEST_PATH}/libdw/ 84*4882a593Smuzhiyun cp ${S}/libdwfl/*.h ${D}${PTEST_PATH}/libdwfl/ 85*4882a593Smuzhiyun cp ${S}/libdwelf/*.h ${D}${PTEST_PATH}/libdwelf/ 86*4882a593Smuzhiyun cp ${S}/libasm/*.h ${D}${PTEST_PATH}/libasm/ 87*4882a593Smuzhiyun cp -r ${S}/tests/ ${D}${PTEST_PATH} 88*4882a593Smuzhiyun cp -r ${B}/tests/* ${D}${PTEST_PATH}/tests 89*4882a593Smuzhiyun cp -r ${B}/config.h ${D}${PTEST_PATH} 90*4882a593Smuzhiyun cp -r ${B}/backends ${D}${PTEST_PATH} 91*4882a593Smuzhiyun cp -r ${B}/debuginfod ${D}${PTEST_PATH} 92*4882a593Smuzhiyun sed -i '/^Makefile:/c Makefile:' ${D}${PTEST_PATH}/tests/Makefile 93*4882a593Smuzhiyun find ${D}${PTEST_PATH} -type f -name *.[hoc] | xargs -i rm {} 94*4882a593Smuzhiyun fi 95*4882a593Smuzhiyun} 96*4882a593Smuzhiyun 97*4882a593SmuzhiyunEXTRA_OEMAKE:class-native = "" 98*4882a593SmuzhiyunEXTRA_OEMAKE:class-nativesdk = "" 99*4882a593Smuzhiyun 100*4882a593SmuzhiyunBBCLASSEXTEND = "native nativesdk" 101*4882a593Smuzhiyun 102*4882a593Smuzhiyun# Package utilities separately 103*4882a593SmuzhiyunPACKAGES =+ "${PN}-binutils libelf libasm libdw libdebuginfod" 104*4882a593Smuzhiyun 105*4882a593Smuzhiyun# Shared libraries are licensed GPL-2.0-only or GPL-3.0-or-later, binaries 106*4882a593Smuzhiyun# GPL-3.0-or-later. According to NEWS file: 107*4882a593Smuzhiyun# "The license is now GPLv2/LGPLv3+ for the libraries and GPLv3+ for stand-alone 108*4882a593Smuzhiyun# programs. There is now also a formal CONTRIBUTING document describing how to 109*4882a593Smuzhiyun# submit patches." 110*4882a593SmuzhiyunLICENSE:${PN}-binutils = "GPL-3.0-or-later" 111*4882a593SmuzhiyunLICENSE:${PN} = "GPL-3.0-or-later" 112*4882a593SmuzhiyunLICENSE:libelf = "GPL-2.0-only | LGPL-3.0-or-later" 113*4882a593SmuzhiyunLICENSE:libasm = "GPL-2.0-only | LGPL-3.0-or-later" 114*4882a593SmuzhiyunLICENSE:libdw = "GPL-2.0-only | LGPL-3.0-or-later" 115*4882a593SmuzhiyunLICENSE:libdebuginfod = "GPL-2.0-or-later | LGPL-3.0-or-later" 116*4882a593Smuzhiyun 117*4882a593SmuzhiyunFILES:${PN}-binutils = "\ 118*4882a593Smuzhiyun ${bindir}/eu-addr2line \ 119*4882a593Smuzhiyun ${bindir}/eu-ld \ 120*4882a593Smuzhiyun ${bindir}/eu-nm \ 121*4882a593Smuzhiyun ${bindir}/eu-readelf \ 122*4882a593Smuzhiyun ${bindir}/eu-size \ 123*4882a593Smuzhiyun ${bindir}/eu-strip" 124*4882a593Smuzhiyun 125*4882a593SmuzhiyunFILES:libelf = "${libdir}/libelf-${PV}.so ${libdir}/libelf.so.*" 126*4882a593SmuzhiyunFILES:libasm = "${libdir}/libasm-${PV}.so ${libdir}/libasm.so.*" 127*4882a593SmuzhiyunFILES:libdw = "${libdir}/libdw-${PV}.so ${libdir}/libdw.so.* ${libdir}/elfutils/lib*" 128*4882a593SmuzhiyunFILES:libdebuginfod = "${libdir}/libdebuginfod-${PV}.so ${libdir}/libdebuginfod.so.*" 129*4882a593Smuzhiyun# Some packages have the version preceeding the .so instead properly 130*4882a593Smuzhiyun# versioned .so.<version>, so we need to reorder and repackage. 131*4882a593Smuzhiyun#FILES:${PN} += "${libdir}/*-${PV}.so ${base_libdir}/*-${PV}.so" 132*4882a593Smuzhiyun#FILES_SOLIBSDEV = "${libdir}/libasm.so ${libdir}/libdw.so ${libdir}/libelf.so" 133*4882a593Smuzhiyun 134*4882a593Smuzhiyun# The package contains symlinks that trip up insane 135*4882a593SmuzhiyunINSANE_SKIP:${MLPREFIX}libdw = "dev-so" 136*4882a593Smuzhiyun# The nlist binary in the tests uses explicitly minimal compiler flags 137*4882a593SmuzhiyunINSANE_SKIP:${PN}-ptest += "ldflags" 138*4882a593Smuzhiyun 139*4882a593Smuzhiyun# avoid stripping some generated binaries otherwise some of the tests such as test-nlist, 140*4882a593Smuzhiyun# run-strip-reloc.sh, run-strip-strmerge.sh and so on will fail 141*4882a593SmuzhiyunINHIBIT_PACKAGE_STRIP_FILES = "\ 142*4882a593Smuzhiyun ${PKGD}${PTEST_PATH}/tests/test-nlist \ 143*4882a593Smuzhiyun ${PKGD}${PTEST_PATH}/tests/elfstrmerge \ 144*4882a593Smuzhiyun ${PKGD}${PTEST_PATH}/tests/backtrace-child \ 145*4882a593Smuzhiyun ${PKGD}${PTEST_PATH}/tests/backtrace-data \ 146*4882a593Smuzhiyun ${PKGD}${PTEST_PATH}/tests/backtrace-dwarf \ 147*4882a593Smuzhiyun ${PKGD}${PTEST_PATH}/tests/deleted \ 148*4882a593Smuzhiyun ${PKGD}${PTEST_PATH}/tests/dwfllines \ 149*4882a593Smuzhiyun ${PKGD}${PTEST_PATH}/src/strip \ 150*4882a593Smuzhiyun ${PKGD}${PTEST_PATH}/src/addr2line \ 151*4882a593Smuzhiyun ${PKGD}${PTEST_PATH}/src/elfcmp \ 152*4882a593Smuzhiyun ${PKGD}${PTEST_PATH}/src/objdump \ 153*4882a593Smuzhiyun ${PKGD}${PTEST_PATH}/src/readelf \ 154*4882a593Smuzhiyun ${PKGD}${PTEST_PATH}/src/nm \ 155*4882a593Smuzhiyun ${PKGD}${PTEST_PATH}/src/elflint \ 156*4882a593Smuzhiyun ${PKGD}${PTEST_PATH}/src/elfclassify \ 157*4882a593Smuzhiyun ${PKGD}${PTEST_PATH}/src/stack \ 158*4882a593Smuzhiyun ${PKGD}${PTEST_PATH}/src/unstrip \ 159*4882a593Smuzhiyun ${PKGD}${PTEST_PATH}/libelf/libelf.so \ 160*4882a593Smuzhiyun ${PKGD}${PTEST_PATH}/libdw/libdw.so \ 161*4882a593Smuzhiyun ${PKGD}${PTEST_PATH}/libasm/libasm.so \ 162*4882a593Smuzhiyun ${PKGD}${PTEST_PATH}/backends/libebl_i386.so \ 163*4882a593Smuzhiyun ${PKGD}${PTEST_PATH}/backends/libebl_x86_64.so \ 164*4882a593Smuzhiyun" 165*4882a593Smuzhiyun 166*4882a593SmuzhiyunPRIVATE_LIBS:${PN}-ptest = "libdw.so.1 libelf.so.1 libasm.so.1 libdebuginfod.so.1" 167