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] (From OE-Core rev: bc4da2573dfb59ea2fc4af359701818df20f7663) Signed-off-by: Constantin Musca <constantinx.musca@intel.com> Signed-off-by: Saul Wold <sgw@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
415c4fa12c
commit
1674541ed8
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -12,3 +12,5 @@ STAGING_DIR_TARGET = "${STAGING_DIR}/${MLPREFIX}${MACHINE}"
|
|||
INHERIT += "multilib_global"
|
||||
|
||||
BBCLASSEXTEND_append = " ${MULTILIBS}"
|
||||
|
||||
MULTILIB_GLOBAL_VARIANTS = "lib32 lib64 libx32"
|
||||
|
|
Loading…
Reference in New Issue