aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2019-02-23 10:10:32 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2019-02-23 10:35:36 +0000
commit531dcd221a10853f45cc057b52bb2d5083e0ee42 (patch)
tree7f2d98349e1bf5b7b3de3ca49fec59ea900276c5
parent8756e4ade67c16e35269ea0659e10b9ebaa6117f (diff)
downloadbitbake-531dcd221a10853f45cc057b52bb2d5083e0ee42.tar.gz
runqueue: Filter out multiconfig dependencies from BB_TASKDEPDATA
The consumers of BB_TASKDEPDATA in OE metadata can't cope with multiconfig dependencies. The choice is either to start adding code to each of them to filter out multiconfig dependencies, or do this at source. After consideration we've decided to do this at source as doing otherwise is code duplication and error prone and in any case we've looked at, they don't make sense. [YOCTO #13090] [YOCTO #13130] Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--lib/bb/runqueue.py19
1 files changed, 19 insertions, 0 deletions
diff --git a/lib/bb/runqueue.py b/lib/bb/runqueue.py
index 71f178de4..329cda33a 100644
--- a/lib/bb/runqueue.py
+++ b/lib/bb/runqueue.py
@@ -50,6 +50,11 @@ def fn_from_tid(tid):
def taskname_from_tid(tid):
return tid.rsplit(":", 1)[1]
+def mc_from_tid(tid):
+ if tid.startswith('multiconfig:'):
+ return tid.split(':')[1]
+ return ""
+
def split_tid(tid):
(mc, fn, taskname, _) = split_tid_mcfn(tid)
return (mc, fn, taskname)
@@ -2102,10 +2107,23 @@ class RunQueueExecuteTasks(RunQueueExecute):
return True
+ def filtermcdeps(self, task, deps):
+ ret = set()
+ mainmc = mc_from_tid(task)
+ for dep in deps:
+ mc = mc_from_tid(dep)
+ if mc != mainmc:
+ continue
+ ret.add(dep)
+ return ret
+
+ # We filter out multiconfig dependencies from taskdepdata we pass to the tasks
+ # as most code can't handle them
def build_taskdepdata(self, task):
taskdepdata = {}
next = self.rqdata.runtaskentries[task].depends
next.add(task)
+ next = self.filtermcdeps(task, next)
while next:
additional = []
for revdep in next:
@@ -2115,6 +2133,7 @@ class RunQueueExecuteTasks(RunQueueExecute):
provides = self.rqdata.dataCaches[mc].fn_provides[taskfn]
taskhash = self.rqdata.runtaskentries[revdep].hash
unihash = self.rqdata.runtaskentries[revdep].unihash
+ deps = self.filtermcdeps(task, deps)
taskdepdata[revdep] = [pn, taskname, fn, deps, provides, taskhash, unihash]
for revdep2 in deps:
if revdep2 not in taskdepdata: