Multilib fixes
cover Multilib fixes
This represents a set of multilib fixes.
The following changes since commit 90c0eb29f0b41e4ac2d3d17ebad7295c2ebdc02a:
rootfs_rpm.bbclass: remove debug code (2012-12-19 21:43:55 +0000)
are available in the git repository at:
git://git.pokylinux.org/poky-contrib cmuscax/multilib3
http://git.pokylinux.org/cgit.cgi/poky-contrib/log/?h=cmuscax/multilib3
Constantin Musca (3):
multilib: fix allarch/kernel/module-base multilib issues
xserver-xorg: enable multilib
xorg-driver: enable multilib
meta/classes/multilib.bbclass | 3 +++ meta/classes/multilib_global.bbclass | 5 +++- meta/classes/package.bbclass | 30 ++++++++++++++++++++++ meta/classes/sanity.bbclass | 4 +++ meta/conf/multilib.conf | 2 ++ .../xorg-driver/xorg-driver-common.inc | 5 ++-- .../recipes-graphics/xorg-xserver/xserver-xorg.inc | 5 ++-- 7 files changed, 49 insertions(+), 5 deletions(-)
Signature · 1 line
1.7.11.7
PATCH 1/3 multilib: fix allarch/kernel/module-base multilib issues
- skip the non-packagegroup allarch recipes in multilib_virtclass_handler
- extend PROVIDES/RPROVIDES for allarch recipes which are not packagegroups
- use variants from MULTILIB_GLOBAL_VARIANTS (lib32 lib64 libx32) to create additional pkgdata files for multilib allarch: ${pkgdatadir}/${variant}-${PN} and ${pkgdatadir}/runtime/${variant}-${pkg}
- use variants from MULTILIB_VARIANTS to create additional pkgdata files for multilib kernel/module-base recipes
- add a sanity check to determine if the current multilib is in MULTILIB_GLOBAL_VARIANTS
[YOCTO #2918]
[YOCTO #3440]
[YOCTO #3565]
[YOCTO #3568]
--- meta/classes/multilib.bbclass | 3 +++ meta/classes/multilib_global.bbclass | 5 ++++- meta/classes/package.bbclass | 30 ++++++++++++++++++++++++++++++ meta/classes/sanity.bbclass | 4 ++++ meta/conf/multilib.conf | 2 ++ 5 files changed, 43 insertions(+), 1 deletion(-)
meta/classes/multilib.bbclass +3 -0
@@ -31,6 +31,9 @@ python multilib_virtclass_handler () { if bb.data.inherits_class('nativesdk', e.data) or bb.data.inherits_class('crosssdk', e.data): raise bb.parse.SkipPackage("We can't extend nativesdk recipes") + if bb.data.inherits_class('allarch', e.data) and not bb.data.inherits_class('packagegroup', e.data): + raise bb.parse.SkipPackage("Don't extend allarch recipes which are not packagegroups") + save_var_name=e.data.getVar("MULTILIB_SAVE_VARNAME", True) or "" for name in save_var_name.split(): val=e.data.getVar(name, True)
meta/classes/multilib_global.bbclass +4 -1
@@ -10,7 +10,10 @@ python multilib_virtclass_handler_global () { variant = e.data.getVar("BBEXTENDVARIANT", True) if isinstance(e, bb.event.RecipeParsed) and not variant: - if bb.data.inherits_class('kernel', e.data) or bb.data.inherits_class('module-base', e.data): + if bb.data.inherits_class('kernel', e.data) or \ + bb.data.inherits_class('module-base', e.data) or \ + (bb.data.inherits_class('allarch', e.data) and\ + not bb.data.inherits_class('packagegroup', e.data)): variants = (e.data.getVar("MULTILIB_VARIANTS", True) or "").split() import oe.classextend
meta/classes/package.bbclass +30 -0
@@ -1132,6 +1132,20 @@ python emit_pkgdata() { size = 0 return size + def write_extra_pkgs(variants, pn, packages, pkgdatadir): + for variant in variants: + with open("%s/%s-%s" % (pkgdatadir, variant, pn), 'w') as fd: + fd.write("PACKAGES: %s\n" % ' '.join( + map(lambda pkg: '%s-%s' % (variant, pkg), packages.split()))) + + def write_extra_runtime_pkgs(variants, packages, pkgdatadir): + for variant in variants: + for pkg in packages.split(): + ml_pkg = "%s-%s" % (variant, pkg) + subdata_file = "%s/runtime/%s" % (pkgdatadir, ml_pkg) + with open(subdata_file, 'w') as fd: + fd.write("PKG_%s: %s" % (ml_pkg, pkg)) + packages = d.getVar('PACKAGES', True) pkgdest = d.getVar('PKGDEST', True) pkgdatadir = d.getVar('PKGDESTWORK', True)
@@ -1144,6 +1158,16 @@ python emit_pkgdata() { f.write("PACKAGES: %s\n" % packages) f.close() + pn = d.getVar('PN', True) + global_variants = (d.getVar('MULTILIB_GLOBAL_VARIANTS', True) or "").split() + variants = (d.getVar('MULTILIB_VARIANTS', True) or "").split() + + if bb.data.inherits_class('kernel', d) or bb.data.inherits_class('module-base', d): + write_extra_pkgs(variants, pn, packages, pkgdatadir) + + if (bb.data.inherits_class('allarch', d) and not bb.data.inherits_class('packagegroup', d)): + write_extra_pkgs(global_variants, pn, packages, pkgdatadir) + workdir = d.getVar('WORKDIR', True) for pkg in packages.split():
@@ -1198,6 +1222,12 @@ python emit_pkgdata() { packagedfile = pkgdatadir + '/runtime/%s.packaged' % pkg file(packagedfile, 'w').close() + if bb.data.inherits_class('kernel', d) or bb.data.inherits_class('module-base', d): + write_extra_runtime_pkgs(variants, packages, pkgdatadir) + + if bb.data.inherits_class('allarch', d) and not bb.data.inherits_class('packagegroup', d): + write_extra_runtime_pkgs(global_variants, packages, pkgdatadir) + bb.utils.unlockfile(lf) } emit_pkgdata[dirs] = "${PKGDESTWORK}/runtime ${PKGDESTWORK}/runtime-reverse"
meta/classes/sanity.bbclass +4 -0
@@ -114,6 +114,8 @@ def check_toolchain(data): tune_error_set.append(tune_errors) multilibs = (data.getVar("MULTILIB_VARIANTS", True) or "").split() + global_multilibs = (data.getVar("MULTILIB_GLOBAL_VARIANTS", True) or "").split() + if multilibs: seen_libs = [] seen_tunes = []
@@ -122,6 +124,8 @@ def check_toolchain(data): tune_error_set.append("The multilib '%s' appears more than once." % lib) else: seen_libs.append(lib) + if not lib in global_multilibs: + tune_error_set.append("Multilib %s is not present in MULTILIB_GLOBAL_VARIANTS" % lib) tune = data.getVar("DEFAULTTUNE_virtclass-multilib-%s" % lib, True) if tune in seen_tunes: tune_error_set.append("The tuning '%s' appears in more than one multilib." % tune)
meta/conf/multilib.conf +2 -0
@@ -12,3 +12,5 @@ STAGING_DIR_TARGET = "${STAGING_DIR}/${MLPREFIX}${MACHINE}" INHERIT += "multilib_global" BBCLASSEXTEND_append = " ${MULTILIBS}" + +MULTILIB_GLOBAL_VARIANTS = "lib32 lib64 libx32"
Signature · 1 line
1.7.11.7
PATCH 2/3 xserver-xorg: enable multilib
In reply to Constantin Musca[YOCTO #3438]
--- meta/recipes-graphics/xorg-xserver/xserver-xorg.inc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
meta/recipes-graphics/xorg-xserver/xserver-xorg.inc +3 -2
@@ -13,7 +13,7 @@ PROVIDES = "virtual/xserver-xf86" PROVIDES += "virtual/xserver" PE = "2" -INC_PR = "r7" +INC_PR = "r8" XORG_PN = "xorg-server" SRC_URI = "${XORG_MIRROR}/individual/xserver/${XORG_PN}-${PV}.tar.bz2"
@@ -151,7 +151,8 @@ python populate_packages_prepend() { p = subprocess.Popen(args="pkg-config --variable=%s xorg-server" % abis[name], shell=True, env=newenv, stdout=subprocess.PIPE) output = p.communicate()[0] - return "xorg-abi-%s-%s" % (name, output.split(".")[0]) + mlprefix = d.getVar('MLPREFIX', True) or '' + return "%sxorg-abi-%s-%s" % (mlprefix, name, output.split(".")[0]) pn = d.getVar("PN", True) d.appendVar("RPROVIDES_" + pn, " " + get_abi("input"))
Signature · 1 line
1.7.11.7
PATCH 3/3 xorg-driver: enable multilib
In reply to Constantin Musca[YOCTO #3438]
--- meta/recipes-graphics/xorg-driver/xorg-driver-common.inc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
meta/recipes-graphics/xorg-driver/xorg-driver-common.inc +3 -2
@@ -5,7 +5,7 @@ SECTION = "x11/drivers" LICENSE = "MIT-X" PE = "2" -INC_PR = "r20" +INC_PR = "r21" DEPENDS = "virtual/xserver xproto randrproto util-macros"
@@ -34,7 +34,8 @@ def add_abi_depends(d, name): } output = os.popen("pkg-config xorg-server --variable=%s" % abis[name]).read() - abi = "xorg-abi-%s-%s" % (name, output.split(".")[0]) + mlprefix = d.getVar('MLPREFIX', True) or '' + abi = "%sxorg-abi-%s-%s" % (mlprefix, name, output.split(".")[0]) pn = d.getVar("PN", True) d.appendVar('RDEPENDS_' + pn, ' ' + abi)
Signature · 1 line
1.7.11.7