We need only libbfd, libiberty and libopcodes from binutils native. To get them we build entire binutils with --enable-targets=all to include all possible output targets support and then remove all but these three libs.
This has two side effects: 1) it wastes build time 2) may cause errors caused by --enable-targets=all on some exotics build hosts like PowerPC 32bit To address both of these effects we can configure binutils in general and only required libs and their dependencies (zlib and intl at the time). Then build only build these libs and their dependencies. Regarding to PowerPC 32-bit build host issues we get following errors when building on Ubuntu 16.04 LTS for PowerPC with command: MACHINE=qemuppc setarch ppc bitbake binutils-native <output omitted> | /usr/lib/gcc/powerpc-linux-gnu/5/../../../powerpc-linux-gnu/crti.o: In function `_init': | (.init+0x22): relocation truncated to fit: R_PPC_GOT16 against undefined symbol `__gmon_start__' | dwarf.o: In function `parse_gnu_debuglink': | dwarf.c:(.text+0x482): relocation truncated to fit: R_PPC_GOT16 against symbol `byte_get' defined in .sbss section in elfcomm.o | dwarf.o: In function `fetch_indexed_string': | dwarf.c:(.text+0x8fa): relocation truncated to fit: R_PPC_GOT16 against symbol `byte_get' defined in .sbss section in elfcomm.o | dwarf.o: In function `read_debug_line_header': | dwarf.c:(.text+0x114a): relocation truncated to fit: R_PPC_GOT16 against symbol `byte_get' defined in .sbss section in elfcomm.o | dwarf.c:(.text+0x12c6): relocation truncated to fit: R_PPC_GOT16 against symbol `byte_get' defined in .sbss section in elfcomm.o | dwarf.o: In function `display_debug_ranges_list': | dwarf.c:(.text+0x187e): relocation truncated to fit: R_PPC_GOT16 against symbol `byte_get' defined in .sbss section in elfcomm.o | dwarf.c:(.text+0x18a2): relocation truncated to fit: R_PPC_GOT16 against symbol `stdout@@GLIBC_2.0' defined in .sdata section in /lib/powerpc-linux-gnu/libc.so.6 | dwarf.o: In function `display_debug_rnglists_list': | dwarf.c:(.text+0x1bf2): relocation truncated to fit: R_PPC_GOT16 against symbol `byte_get' defined in .sbss section in elfcomm.o | dwarf.c:(.text+0x1c06): relocation truncated to fit: R_PPC_GOT16 against symbol `stdout@@GLIBC_2.0' defined in .sdata section in /lib/powerpc-linux-gnu/libc.so.6 | dwarf.o: In function `display_block': | dwarf.c:(.text+0x2486): relocation truncated to fit: R_PPC_GOT16 against symbol `byte_get' defined in .sbss section in elfcomm.o | dwarf.o: In function `introduce.isra.2': | dwarf.c:(.text+0x2556): additional relocation overflows omitted from the output | collect2: error: ld returned 1 exit status | Makefile:909: recipe for target 'objdump' failed | make[4]: *** [objdump] Error 1 | make[4]: *** Waiting for unfinished jobs.... <output omitted> While 'byte_get' is defined in small bss section in elfcomm.o and generally can be fixed, symbol from host glibc 'stdout@@GLIBC_2.0' in small data section can't be moved without recompile of Ubuntu 16.04 LTS glibc. Signed-off-by: Serhey Popovych <serhe.popov...@gmail.com> --- meta/recipes-devtools/binutils/binutils_2.31.bb | 33 ++++++++++++++----------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/meta/recipes-devtools/binutils/binutils_2.31.bb b/meta/recipes-devtools/binutils/binutils_2.31.bb index 51a9748..6796749 100644 --- a/meta/recipes-devtools/binutils/binutils_2.31.bb +++ b/meta/recipes-devtools/binutils/binutils_2.31.bb @@ -20,26 +20,31 @@ EXTRA_OECONF_class-native = "--enable-targets=all \ --enable-install-libbfd \ --disable-werror" +do_configure_append_class-native () { + for l in zlib intl bfd libiberty opcodes; do + oe_runmake configure-${l} + done +} + +do_compile_class-native () { + for l in zlib intl bfd libiberty opcodes; do + cd "${l}" + autotools_do_compile + cd - >/dev/null + done +} + do_install_class-native () { - autotools_do_install + for l in bfd libiberty opcodes; do + cd "${l}" + autotools_do_install + cd - >/dev/null + done # Install the libiberty header install -d ${D}${includedir} install -m 644 ${S}/include/ansidecl.h ${D}${includedir} install -m 644 ${S}/include/libiberty.h ${D}${includedir} - - # We only want libiberty, libbfd and libopcodes - rm -rf ${D}${bindir} - rm -rf ${D}${prefix}/${TARGET_SYS} - rm -rf ${D}${prefix}/lib/ldscripts - rm -rf ${D}${prefix}/share/info - rm -rf ${D}${prefix}/share/locale - rm -rf ${D}${prefix}/share/man - rmdir ${D}${prefix}/share || : - rmdir ${D}/${libdir}/gcc-lib || : - rmdir ${D}/${libdir}64/gcc-lib || : - rmdir ${D}/${libdir} || : - rmdir ${D}/${libdir}64 || : } # Split out libbfd-*.so so including perf doesn't include extra stuff -- 2.7.4 -- _______________________________________________ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-core