diff options
Diffstat (limited to 'bitbake/lib/bb/runqueue.py')
-rw-r--r-- | bitbake/lib/bb/runqueue.py | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py index 201f427f45..dff4ff7f3e 100644 --- a/bitbake/lib/bb/runqueue.py +++ b/bitbake/lib/bb/runqueue.py | |||
@@ -30,6 +30,12 @@ import stat | |||
30 | import fcntl | 30 | import fcntl |
31 | import copy | 31 | import copy |
32 | 32 | ||
33 | try: | ||
34 | import cPickle as pickle | ||
35 | except ImportError: | ||
36 | import pickle | ||
37 | bb.msg.note(1, bb.msg.domain.Cache, "Importing cPickle failed. Falling back to a very slow implementation.") | ||
38 | |||
33 | class RunQueueStats: | 39 | class RunQueueStats: |
34 | """ | 40 | """ |
35 | Holds statistics on the tasks handled by the associated runQueue | 41 | Holds statistics on the tasks handled by the associated runQueue |
@@ -703,6 +709,21 @@ class RunQueueData: | |||
703 | procdep.append(self.taskData.fn_index[self.runq_fnid[dep]] + "." + self.runq_task[dep]) | 709 | procdep.append(self.taskData.fn_index[self.runq_fnid[dep]] + "." + self.runq_task[dep]) |
704 | self.runq_hash[task] = bb.parse.siggen.get_taskhash(self.taskData.fn_index[self.runq_fnid[task]], self.runq_task[task], procdep, self.dataCache) | 710 | self.runq_hash[task] = bb.parse.siggen.get_taskhash(self.taskData.fn_index[self.runq_fnid[task]], self.runq_task[task], procdep, self.dataCache) |
705 | 711 | ||
712 | hashdata = {} | ||
713 | hashdata["hashes"] = {} | ||
714 | hashdata["deps"] = {} | ||
715 | for task in range(len(self.runq_fnid)): | ||
716 | hashdata["hashes"][self.taskData.fn_index[self.runq_fnid[task]] + "." + self.runq_task[task]] = self.runq_hash[task] | ||
717 | deps = [] | ||
718 | for dep in self.runq_depends[task]: | ||
719 | deps.append(self.taskData.fn_index[self.runq_fnid[dep]] + "." + self.runq_task[dep]) | ||
720 | hashdata["deps"][self.taskData.fn_index[self.runq_fnid[task]] + "." + self.runq_task[task]] = deps | ||
721 | |||
722 | # Write out the hashes into a file for use by the individual tasks | ||
723 | self.hashfile = bb.data.expand("${TMPDIR}/cache/hashdata.dat", self.cooker.configuration.data) | ||
724 | p = pickle.Pickler(file(self.hashfile, "wb"), -1) | ||
725 | p.dump(hashdata) | ||
726 | |||
706 | return len(self.runq_fnid) | 727 | return len(self.runq_fnid) |
707 | 728 | ||
708 | def dump_data(self, taskQueue): | 729 | def dump_data(self, taskQueue): |
@@ -1047,7 +1068,7 @@ class RunQueueExecute: | |||
1047 | sys.stdout.flush() | 1068 | sys.stdout.flush() |
1048 | sys.stderr.flush() | 1069 | sys.stderr.flush() |
1049 | 1070 | ||
1050 | proc = subprocess.Popen(["bitbake-runtask", fn, taskname, str(self.cooker.configuration.dry_run)], env=env, stdout=subprocess.PIPE, stdin=subprocess.PIPE) | 1071 | proc = subprocess.Popen(["bitbake-runtask", self.rqdata.hashfile, fn, taskname, str(self.cooker.configuration.dry_run)], env=env, stdout=subprocess.PIPE, stdin=subprocess.PIPE) |
1051 | pipein = proc.stdout | 1072 | pipein = proc.stdout |
1052 | pipeout = proc.stdin | 1073 | pipeout = proc.stdin |
1053 | pid = proc.pid | 1074 | pid = proc.pid |