summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb/ui/crumbs/hobeventhandler.py
diff options
context:
space:
mode:
authorJoshua Lock <josh@linux.intel.com>2011-07-15 10:30:48 -0700
committerRichard Purdie <richard.purdie@linuxfoundation.org>2011-07-26 20:15:47 +0100
commit2d608f837d51c900dacadeb9737fbde068578d8a (patch)
treea56305cb5cc6e7ce1438c0c74b85728d834ac169 /bitbake/lib/bb/ui/crumbs/hobeventhandler.py
parent6d76379af89aafb3757d60bc67b96c6f65ca8455 (diff)
downloadpoky-2d608f837d51c900dacadeb9737fbde068578d8a.tar.gz
ui/hob: switch from buildFile to buildTargets for custom image builds
We need to use the buildTargets command to ensure dependencies, such as native tools to build the rootfs, are correctly included. This patch achieves this by modifying BBPATH and BBFILES to include matches for the location of the generated recipe file and reparsing the metadata before calling buildTargets. Fixes [YOCTO #1228] (Bitbake rev: 5840d59098141e773c12bea8ed8d9f4f1a706132) Signed-off-by: Joshua Lock <josh@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/bb/ui/crumbs/hobeventhandler.py')
-rw-r--r--bitbake/lib/bb/ui/crumbs/hobeventhandler.py67
1 files changed, 49 insertions, 18 deletions
diff --git a/bitbake/lib/bb/ui/crumbs/hobeventhandler.py b/bitbake/lib/bb/ui/crumbs/hobeventhandler.py
index d10c8588dc..4897bccd26 100644
--- a/bitbake/lib/bb/ui/crumbs/hobeventhandler.py
+++ b/bitbake/lib/bb/ui/crumbs/hobeventhandler.py
@@ -52,16 +52,13 @@ class HobHandler(gobject.GObject):
52 "error" : (gobject.SIGNAL_RUN_LAST, 52 "error" : (gobject.SIGNAL_RUN_LAST,
53 gobject.TYPE_NONE, 53 gobject.TYPE_NONE,
54 (gobject.TYPE_STRING,)), 54 (gobject.TYPE_STRING,)),
55 "build-complete" : (gobject.SIGNAL_RUN_LAST,
56 gobject.TYPE_NONE,
57 ()),
58 "reload-triggered" : (gobject.SIGNAL_RUN_LAST, 55 "reload-triggered" : (gobject.SIGNAL_RUN_LAST,
59 gobject.TYPE_NONE, 56 gobject.TYPE_NONE,
60 (gobject.TYPE_STRING, 57 (gobject.TYPE_STRING,
61 gobject.TYPE_STRING)), 58 gobject.TYPE_STRING)),
62 } 59 }
63 60
64 (CFG_PATH_LOCAL, CFG_PATH_HOB, CFG_PATH_LAYERS, CFG_FILES_DISTRO, CFG_FILES_MACH, CFG_FILES_SDK, FILES_MATCH_CLASS, GENERATE_TGTS, REPARSE_FILES) = range(9) 61 (CFG_PATH_LOCAL, CFG_PATH_HOB, CFG_PATH_LAYERS, CFG_FILES_DISTRO, CFG_FILES_MACH, CFG_FILES_SDK, FILES_MATCH_CLASS, GENERATE_TGTS, REPARSE_FILES, BUILD_IMAGE) = range(10)
65 62
66 def __init__(self, taskmodel, server): 63 def __init__(self, taskmodel, server):
67 gobject.GObject.__init__(self) 64 gobject.GObject.__init__(self)
@@ -111,8 +108,21 @@ class HobHandler(gobject.GObject):
111 self.generating = False 108 self.generating = False
112 self.current_command = None 109 self.current_command = None
113 elif self.current_command == self.REPARSE_FILES: 110 elif self.current_command == self.REPARSE_FILES:
114 self.current_command = self.CFG_PATH_LAYERS 111 if self.build_queue:
112 self.current_command = self.BUILD_IMAGE
113 else:
114 self.current_command = self.CFG_PATH_LAYERS
115 self.server.runCommand(["reparseFiles"]) 115 self.server.runCommand(["reparseFiles"])
116 elif self.current_command == self.BUILD_IMAGE:
117 self.building = "image"
118 if self.generating:
119 self.emit("data-generated")
120 self.generating = False
121 bbpath = self.server.runCommand(["getVariable", "BBPATH"])
122 bbfiles = self.server.runCommand(["getVariable", "BBFILES"])
123 self.server.runCommand(["buildTargets", self.build_queue, "build"])
124 self.build_queue = []
125 self.current_command = None
116 126
117 def handle_event(self, event, running_build, pbar): 127 def handle_event(self, event, running_build, pbar):
118 if not event: 128 if not event:
@@ -208,27 +218,48 @@ class HobHandler(gobject.GObject):
208 pmake = "-j %s" % threads 218 pmake = "-j %s" % threads
209 self.server.runCommand(["setVariable", "BB_NUMBER_THREADS", pmake]) 219 self.server.runCommand(["setVariable", "BB_NUMBER_THREADS", pmake])
210 220
211 def run_build(self, tgts): 221 def build_image(self, image, image_path, configurator):
212 self.building = "image"
213 targets = [] 222 targets = []
214 targets.append(tgts) 223 targets.append(image)
215 if self.build_toolchain and self.build_toolchain_headers: 224 if self.build_toolchain and self.build_toolchain_headers:
216 targets = ["meta-toolchain-sdk"] + targets 225 targets.append("meta-toolchain-sdk")
217 elif self.build_toolchain: 226 elif self.build_toolchain:
218 targets = ["meta-toolchain"] + targets 227 targets.append("meta-toolchain")
219 self.server.runCommand(["buildTargets", targets, "build"]) 228 self.build_queue = targets
229
230 bbpath_ok = False
231 bbpath = self.server.runCommand(["getVariable", "BBPATH"])
232 if image_path in bbpath.split(":"):
233 bbpath_ok = True
234
235 bbfiles_ok = False
236 bbfiles = self.server.runCommand(["getVariable", "BBFILES"]).split(" ")
237 for files in bbfiles:
238 import re
239 pattern = "%s/\*.bb" % image_path
240 if re.match(pattern, files):
241 bbfiles_ok = True
242
243 if not bbpath_ok:
244 nbbp = image_path
245 else:
246 nbbp = None
247
248 if not bbfiles_ok:
249 nbbf = "%s/*.bb" % image_path
250 else:
251 nbbf = None
252
253 if not bbfiles_ok or not bbpath_ok:
254 configurator.insertTempBBPath(nbbp, nbbf)
255
256 self.current_command = self.REPARSE_FILES
257 self.run_next_command()
220 258
221 def build_packages(self, pkgs): 259 def build_packages(self, pkgs):
222 self.building = "packages" 260 self.building = "packages"
223 if 'meta-toolchain' in self.build_queue:
224 self.build_queue.remove('meta-toolchain')
225 pkgs.extend('meta-toolchain')
226 self.server.runCommand(["buildTargets", pkgs, "build"]) 261 self.server.runCommand(["buildTargets", pkgs, "build"])
227 262
228 def build_file(self, image):
229 self.building = "image"
230 self.server.runCommand(["buildFile", image, "build"])
231
232 def cancel_build(self, force=False): 263 def cancel_build(self, force=False):
233 if force: 264 if force:
234 # Force the cooker to stop as quickly as possible 265 # Force the cooker to stop as quickly as possible