Patchwork elfutils: split libraries into separate packages

login
register
mail settings
Submitter Marcin Juszkiewicz
Date March 20, 2013, 9:11 a.m.
Message ID <1363770696-2908-1-git-send-email-marcin.juszkiewicz@linaro.org>
Download mbox | patch
Permalink /patch/46543/
State New
Headers show

Comments

Marcin Juszkiewicz - March 20, 2013, 9:11 a.m.
Elfutils contains libraries which are often used by other
applications/libraries. But sometimes there are also conflicting
packages needed - for example libdw-dev conflicts with libdwarf-dev
because both provide /usr/include/dwarf.h header file.

This change makes it more in line with Debian based systems. It also
allows to have libdwarf-dev installed in image without having to go into
ugly hacks or rewriting 3rdparty software.

Signed-off-by: Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org>
---
 meta/recipes-devtools/elfutils/elfutils_0.148.bb | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)
Saul Wold - April 3, 2013, 3:50 p.m.
On 03/20/2013 02:11 AM, Marcin Juszkiewicz wrote:
> Elfutils contains libraries which are often used by other
> applications/libraries. But sometimes there are also conflicting
> packages needed - for example libdw-dev conflicts with libdwarf-dev
> because both provide /usr/include/dwarf.h header file.
>
> This change makes it more in line with Debian based systems. It also
> allows to have libdwarf-dev installed in image without having to go into
> ugly hacks or rewriting 3rdparty software.
>

This change seems to cause some issues with multilib build with lib32 on 
x86-64:
> ERROR: QA Issue: non -dev/-dbg/-nativesdk package contains symlink .so: lib32-libdw path '/work/x86-pokymllib32-linux/lib32-elfutils/0.148-r11/packages-split/lib32-libdw/usr/lib/elfutils/libebl_parisc.so'
> ERROR: QA Issue: non -dev/-dbg/-nativesdk package contains symlink .so: lib32-libdw path '/work/x86-pokymllib32-linux/lib32-elfutils/0.148-r11/packages-split/lib32-libdw/usr/lib/elfutils/libebl_arm.so'
> ERROR: QA Issue: non -dev/-dbg/-nativesdk package contains symlink .so: lib32-libdw path '/work/x86-pokymllib32-linux/lib32-elfutils/0.148-r11/packages-split/lib32-libdw/usr/lib/elfutils/libebl_ia64.so'
> ERROR: QA Issue: non -dev/-dbg/-nativesdk package contains symlink .so: lib32-libdw path '/work/x86-pokymllib32-linux/lib32-elfutils/0.148-r11/packages-split/lib32-libdw/usr/lib/elfutils/libebl_ppc64.so'
> ERROR: QA Issue: non -dev/-dbg/-nativesdk package contains symlink .so: lib32-libdw path '/work/x86-pokymllib32-linux/lib32-elfutils/0.148-r11/packages-split/lib32-libdw/usr/lib/elfutils/libebl_alpha.so'
> ERROR: QA Issue: non -dev/-dbg/-nativesdk package contains symlink .so: lib32-libdw path '/work/x86-pokymllib32-linux/lib32-elfutils/0.148-r11/packages-split/lib32-libdw/usr/lib/elfutils/libebl_i386.so'
> ERROR: QA Issue: non -dev/-dbg/-nativesdk package contains symlink .so: lib32-libdw path '/work/x86-pokymllib32-linux/lib32-elfutils/0.148-r11/packages-split/lib32-libdw/usr/lib/elfutils/libebl_mips.so'
> ERROR: QA Issue: non -dev/-dbg/-nativesdk package contains symlink .so: lib32-libdw path '/work/x86-pokymllib32-linux/lib32-elfutils/0.148-r11/packages-split/lib32-libdw/usr/lib/elfutils/libebl_s390.so'
> ERROR: QA Issue: non -dev/-dbg/-nativesdk package contains symlink .so: lib32-libdw path '/work/x86-pokymllib32-linux/lib32-elfutils/0.148-r11/packages-split/lib32-libdw/usr/lib/elfutils/libebl_sparc.so'
> ERROR: QA Issue: non -dev/-dbg/-nativesdk package contains symlink .so: lib32-libdw path '/work/x86-pokymllib32-linux/lib32-elfutils/0.148-r11/packages-split/lib32-libdw/usr/lib/elfutils/libebl_x86_64.so'
> ERROR: QA Issue: non -dev/-dbg/-nativesdk package contains symlink .so: lib32-libdw path '/work/x86-pokymllib32-linux/lib32-elfutils/0.148-r11/packages-split/lib32-libdw/usr/lib/elfutils/libebl_m68k.so'
> ERROR: QA Issue: non -dev/-dbg/-nativesdk package contains symlink .so: lib32-libdw path '/work/x86-pokymllib32-linux/lib32-elfutils/0.148-r11/packages-split/lib32-libdw/usr/lib/elfutils/libebl_sh.so'
> ERROR: QA Issue: non -dev/-dbg/-nativesdk package contains symlink .so: lib32-libdw path '/work/x86-pokymllib32-linux/lib32-elfutils/0.148-r11/packages-split/lib32-libdw/usr/lib/elfutils/libebl_ppc.so'

If you could resolve that then we can take this change.

Thanks
	Sau!


> Signed-off-by: Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org>
> ---
>   meta/recipes-devtools/elfutils/elfutils_0.148.bb | 15 ++++++++++-----
>   1 file changed, 10 insertions(+), 5 deletions(-)
>
> diff --git a/meta/recipes-devtools/elfutils/elfutils_0.148.bb b/meta/recipes-devtools/elfutils/elfutils_0.148.bb
> index e8d58fb..dfed235 100644
> --- a/meta/recipes-devtools/elfutils/elfutils_0.148.bb
> +++ b/meta/recipes-devtools/elfutils/elfutils_0.148.bb
> @@ -68,7 +68,7 @@ EXTRA_OEMAKE_class-nativesdk = ""
>   BBCLASSEXTEND = "native nativesdk"
>
>   # Package utilities separately
> -PACKAGES =+ "${PN}-binutils"
> +PACKAGES =+ "${PN}-binutils libelf libasm libdw libdw-dev libasm-dev libelf-dev"
>   FILES_${PN}-binutils = "\
>       ${bindir}/eu-addr2line \
>       ${bindir}/eu-ld \
> @@ -77,11 +77,16 @@ FILES_${PN}-binutils = "\
>       ${bindir}/eu-size \
>       ${bindir}/eu-strip"
>
> +FILES_libelf = "${libdir}/libelf-${PV}.so ${libdir}/libelf.so.*"
> +FILES_libasm = "${libdir}/libasm-${PV}.so ${libdir}/libasm.so.*"
> +FILES_libdw  = "${libdir}/libdw-${PV}.so ${libdir}/libdw.so.* ${libdir}/elfutils/lib*"
> +FILES_libelf-dev = "${libdir}/libelf.so ${includedir}"
> +FILES_libasm-dev = "${libdir}/libasm.so ${includedir}/elfutils/libasm.h"
> +FILES_libdw-dev  = "${libdir}/libdw.so  ${includedir}/dwarf.h ${includedir}/elfutils/libdw*.h"
>   # Some packages have the version preceeding the .so instead properly
>   # versioned .so.<version>, so we need to reorder and repackage.
> -FILES_${PN} += "${libdir}/*-${PV}.so ${base_libdir}/*-${PV}.so"
> -FILES_SOLIBSDEV = "${libdir}/libasm.so ${libdir}/libdw.so ${libdir}/libelf.so"
> +#FILES_${PN} += "${libdir}/*-${PV}.so ${base_libdir}/*-${PV}.so"
> +#FILES_SOLIBSDEV = "${libdir}/libasm.so ${libdir}/libdw.so ${libdir}/libelf.so"
>
>   # The package contains symlinks that trip up insane
> -INSANE_SKIP_${PN} = "dev-so"
> -
> +INSANE_SKIP_libdw = "dev-so"
>
Marcin Juszkiewicz - April 3, 2013, 8:47 p.m.
W dniu 03.04.2013 17:50, Saul Wold pisze:
> This change seems to cause some issues with multilib build with lib32 on
> x86-64:

I have to admit that I never did any multilib builds with OE. Can you
point me to config options I need to set to get such build done?
Saul Wold - April 3, 2013, 8:59 p.m.
On 04/03/2013 01:47 PM, Marcin Juszkiewicz wrote:
> W dniu 03.04.2013 17:50, Saul Wold pisze:
>> This change seems to cause some issues with multilib build with lib32 on
>> x86-64:
>
> I have to admit that I never did any multilib builds with OE. Can you
> point me to config options I need to set to get such build done?
>
>

Sure set the following in your local.conf:

MACHINE = "qemux86-64"
require conf/multilib.conf
MULTILIBS = "multilib:lib32"
DEFAULTTUNE_virtclass-multilib-lib32 = "x86"


bitbake lib32-elfutils

you can also bitbake world, but that will take some time.

Sau!
Marcin Juszkiewicz - April 4, 2013, 12:14 p.m.
W dniu 03.04.2013 22:59, Saul Wold pisze:
> On 04/03/2013 01:47 PM, Marcin Juszkiewicz wrote:
>> W dniu 03.04.2013 17:50, Saul Wold pisze:
>>> This change seems to cause some issues with multilib build with lib32 on
>>> x86-64:
>>
>> I have to admit that I never did any multilib builds with OE. Can you
>> point me to config options I need to set to get such build done?
>>
>>
> 
> Sure set the following in your local.conf:
> 
> MACHINE = "qemux86-64"
> require conf/multilib.conf
> MULTILIBS = "multilib:lib32"
> DEFAULTTUNE_virtclass-multilib-lib32 = "x86"
> 
> 
> bitbake lib32-elfutils

Never mind do I use gcc-4.7 or gcc-linaro-4.7 it fails (conf/site.conf
attached):

NOTE: Preparing runqueue
NOTE: Executing SetScene Tasks
NOTE: Executing RunQueue Tasks
ERROR: Error executing a python function in
/home/hrw/HDD/devel/canonical/aarch64/openembedded/repos/openembedded-core/meta/recipes-devtools/gcc/libgcc_4.7.bb:
NameError: global name 'get_tune_parameters' is not defined

ERROR: The stack trace of python calls that resulted in this
exception/failure was:
ERROR:   File "do_multilib_install", line 64, in <module>
ERROR:
ERROR:   File "do_multilib_install", line 17, in do_multilib_install
ERROR:
ERROR: The code that was being executed was:
ERROR:      0060:            os.unlink(dest)
ERROR:      0061:        os.symlink(src, dest)
ERROR:      0062:
ERROR:      0063:
ERROR:  *** 0064:do_multilib_install(d)
ERROR:      0065:
ERROR: [From file: 'do_multilib_install', lineno: 64, function: <module>]
ERROR:      0013:        return
ERROR:      0014:
ERROR:      0015:    if mlprefix:
ERROR:      0016:        orig_tune =
d.getVar('DEFAULTTUNE_MULTILIB_ORIGINAL', True)
ERROR:  *** 0017:        orig_tune_params =
get_tune_parameters(orig_tune, d)
ERROR:      0018:        orig_tune_baselib = orig_tune_params['baselib']
ERROR:      0019:        orig_tune_bitness =
orig_tune_baselib.replace('lib', '')
ERROR:      0020:        if not orig_tune_bitness:
ERROR:      0021:            orig_tune_bitness = '32'
ERROR: [From file: 'do_multilib_install', lineno: 17, function:
do_multilib_install]
ERROR: Function failed: do_multilib_install
ERROR: Logfile of failure stored in:
/home/hrw/HDD/devel/canonical/aarch64/openembedded/build/tmp-eglibc/work/x86-oemllib32-linux/lib32-libgcc/4.7.2-r13/temp/log.do_multilib_install.9501
ERROR: Task 679
(virtual:multilib:lib32:/home/hrw/HDD/devel/canonical/aarch64/openembedded/repos/openembedded-core/meta/recipes-devtools/gcc/libgcc_4.7.bb,
do_multilib_install) failed with exit code '1'
NOTE: Tasks Summary: Attempted 924 tasks of which 923 didn't need to be
rerun and 1 failed.
No currently running tasks (461 of 1042)

Summary: 1 task failed:

virtual:multilib:lib32:/home/hrw/HDD/devel/canonical/aarch64/openembedded/repos/openembedded-core/meta/recipes-devtools/gcc/libgcc_4.7.bb,
do_multilib_install
Summary: There were 25 ERROR messages shown, returning a non-zero exit code.
SCONF_VERSION = "1"
# specify the alignment of the root file system
# this is required when building for qemuarmv7a
IMAGE_ROOTFS_ALIGNMENT = "2048"

BB_GENERATE_MIRROR_TARBALLS = "True"
#MACHINE ?= "genericarmv8"
BB_NUMBER_THREADS = "18"
PARALLEL_MAKE = "-j8"
IMAGE_FSTYPES = "tar.gz ext2"
SOURCE_MIRROR_URL = "http://snapshots.linaro.org/openembedded/sources/"
INHERIT += "own-mirrors"

DL_DIR = "/home/hrw/devel/sources/oe"

INHERIT += "rm_work"

# SOURCE_ARCHIVE_PACKAGE_TYPE = "tar"
# SOURCE_ARCHIVE_LOG_WITH_SCRIPTS = "logs_with_scripts"
# INHERIT += "archive-original-source"

#GCCVERSION       = "linaro-4.7"
#SDKGCCVERSION    = "linaro-4.7"

#GCCVERSION       = "4.8%"
#SDKGCCVERSION    = "4.8%"

BINUVERSION      = "2.23.1"

PREFERRED_PROVIDER_libevent = "libevent-fb"

LICENSE_FLAGS_WHITELIST = "Commercial commercial"

#DISTRO_FEATURES_append = " ptest "


# cross toolchain from tcwg
#TCMODE = "external-linaro"
#TMPDIR = tmp-external-linaro
#ELT_TARGET_SYS = "aarch64-linux-gnu"
#EXTERNAL_TOOLCHAIN = "/home/hrw/devel/canonical/aarch64/openembedded/build/linaro-tcwg/gcc-linaro-aarch64-linux-gnu-4.7-2013.03-20130313_linux"

# armv7a
#EXTERNAL_TOOLCHAIN = "/home/hrw/devel/canonical/aarch64/openembedded/build/linaro-tcwg/gcc-linaro-arm-linux-gnueabihf-4.7-2013.03-20130313_linux"
#MACHINE = "genericarmv7a"

MACHINE = "qemux86-64"
require conf/multilib.conf
MULTILIBS = "multilib:lib32"
DEFAULTTUNE_virtclass-multilib-lib32 = "x86"

Patch

diff --git a/meta/recipes-devtools/elfutils/elfutils_0.148.bb b/meta/recipes-devtools/elfutils/elfutils_0.148.bb
index e8d58fb..dfed235 100644
--- a/meta/recipes-devtools/elfutils/elfutils_0.148.bb
+++ b/meta/recipes-devtools/elfutils/elfutils_0.148.bb
@@ -68,7 +68,7 @@  EXTRA_OEMAKE_class-nativesdk = ""
 BBCLASSEXTEND = "native nativesdk"
 
 # Package utilities separately
-PACKAGES =+ "${PN}-binutils"
+PACKAGES =+ "${PN}-binutils libelf libasm libdw libdw-dev libasm-dev libelf-dev"
 FILES_${PN}-binutils = "\
     ${bindir}/eu-addr2line \
     ${bindir}/eu-ld \
@@ -77,11 +77,16 @@  FILES_${PN}-binutils = "\
     ${bindir}/eu-size \
     ${bindir}/eu-strip"
 
+FILES_libelf = "${libdir}/libelf-${PV}.so ${libdir}/libelf.so.*"
+FILES_libasm = "${libdir}/libasm-${PV}.so ${libdir}/libasm.so.*"
+FILES_libdw  = "${libdir}/libdw-${PV}.so ${libdir}/libdw.so.* ${libdir}/elfutils/lib*"
+FILES_libelf-dev = "${libdir}/libelf.so ${includedir}"
+FILES_libasm-dev = "${libdir}/libasm.so ${includedir}/elfutils/libasm.h"
+FILES_libdw-dev  = "${libdir}/libdw.so  ${includedir}/dwarf.h ${includedir}/elfutils/libdw*.h"
 # Some packages have the version preceeding the .so instead properly
 # versioned .so.<version>, so we need to reorder and repackage.
-FILES_${PN} += "${libdir}/*-${PV}.so ${base_libdir}/*-${PV}.so"
-FILES_SOLIBSDEV = "${libdir}/libasm.so ${libdir}/libdw.so ${libdir}/libelf.so"
+#FILES_${PN} += "${libdir}/*-${PV}.so ${base_libdir}/*-${PV}.so"
+#FILES_SOLIBSDEV = "${libdir}/libasm.so ${libdir}/libdw.so ${libdir}/libelf.so"
 
 # The package contains symlinks that trip up insane
-INSANE_SKIP_${PN} = "dev-so"
-
+INSANE_SKIP_libdw = "dev-so"