From f71bfe833c657244d2fd07b3b71e86081d7d1c04 Mon Sep 17 00:00:00 2001 From: Alejandro Enedino Hernandez Samaniego Date: Wed, 25 Jul 2018 09:05:51 -0700 Subject: multiconfig: Enable multiconfig dependencies on oe-core This patch enables multiconfig dependencies (mcdepends) to be used on recipes using the following format: task[mcdepends] = "multiconfig:FROM-MC:TO-MC:PN:task-to-depend-on" For the sake of simplicity consider the following example: Assuming we have set up multiconfig builds, one for qemux86 and one for qemuarm, named x86 and arm respectively. Adding the following line to an image recipe (core-image-sato): do_image[mcdepends] = "multiconfig:x86:arm:core-image-minimal:do_rootfs" Would state that core-image-sato:do_image from x86 will depend on core-image-minimal:do_rootfs from arm so it can be executed. This patch makes modifications to bitbake.conf to enable mcdepends, and to sstatesig and staging.bbclass to avoid conflicts between packages from different multiconfigs. [YOCTO #10681] Signed-off-by: Alejandro Enedino Hernandez Samaniego Signed-off-by: Richard Purdie --- meta/classes/staging.bbclass | 8 +++++++- meta/conf/bitbake.conf | 2 +- meta/lib/oe/sstatesig.py | 9 ++++++++- 3 files changed, 16 insertions(+), 3 deletions(-) (limited to 'meta') diff --git a/meta/classes/staging.bbclass b/meta/classes/staging.bbclass index 41df883495..27b012ecbd 100644 --- a/meta/classes/staging.bbclass +++ b/meta/classes/staging.bbclass @@ -256,7 +256,7 @@ python extend_recipe_sysroot() { workdir = d.getVar("WORKDIR") #bb.warn(str(taskdepdata)) pn = d.getVar("PN") - + mc = d.getVar("BB_CURRENT_MC") stagingdir = d.getVar("STAGING_DIR") sharedmanifests = d.getVar("COMPONENTS_DIR") + "/manifests" recipesysroot = d.getVar("RECIPE_SYSROOT") @@ -443,7 +443,13 @@ python extend_recipe_sysroot() { msg_exists = [] msg_adding = [] + for dep in configuredeps: + if mc != 'default': + # We should not care about other multiconfigs + depmc = dep.split(':')[1] + if depmc != mc: + continue c = setscenedeps[dep][0] if c not in installed: continue diff --git a/meta/conf/bitbake.conf b/meta/conf/bitbake.conf index e28f3c7311..f68954c511 100644 --- a/meta/conf/bitbake.conf +++ b/meta/conf/bitbake.conf @@ -877,7 +877,7 @@ BB_SIGNATURE_EXCLUDE_FLAGS ?= "doc deps depends \ file-checksums python func task export unexport noexec nostamp dirs cleandirs \ sstate-lockfile-shared prefuncs postfuncs export_func deptask rdeptask \ recrdeptask nodeprrecs stamp-extra-info sstate-outputdirs filename lineno \ - progress" + progress mcdepends" MLPREFIX ??= "" MULTILIB_VARIANTS ??= "" diff --git a/meta/lib/oe/sstatesig.py b/meta/lib/oe/sstatesig.py index 5dcc2f5cd6..18c5a353a2 100644 --- a/meta/lib/oe/sstatesig.py +++ b/meta/lib/oe/sstatesig.py @@ -150,16 +150,23 @@ class SignatureGeneratorOEBasicHash(bb.siggen.SignatureGeneratorBasicHash): if recipename in self.unlockedrecipes: unlocked = True else: + def get_mc(tid): + tid = tid.rsplit('.', 1)[0] + if tid.startswith('multiconfig:'): + elems = tid.split(':') + return elems[1] def recipename_from_dep(dep): # The dep entry will look something like # /path/path/recipename.bb.task, virtual:native:/p/foo.bb.task, # ... + fn = dep.rsplit('.', 1)[0] return dataCache.pkg_fn[fn] + mc = get_mc(fn) # If any unlocked recipe is in the direct dependencies then the # current recipe should be unlocked as well. - depnames = [ recipename_from_dep(x) for x in deps ] + depnames = [ recipename_from_dep(x) for x in deps if mc == get_mc(x)] if any(x in y for y in depnames for x in self.unlockedrecipes): self.unlockedrecipes[recipename] = '' unlocked = True -- cgit 1.2.3-korg