[Toaster] [PATCH v2 13/15] toaster: reimplement triggerBuild
Ed Bartosh
ed.bartosh at linux.intel.com
Tue Mar 8 05:53:59 PST 2016
Reimplemented triggerBuild method to support one build directory
per project:
- start bitbake server from the cloned repository
- don't run observer
- run bitbake build directly instead of triggering it
through xmlrpc
[YOCTO #7880]
[YOCTO #9058]
[YOCTO #8958]
Signed-off-by: Ed Bartosh <ed.bartosh at linux.intel.com>
---
.../toaster/bldcontrol/localhostbecontroller.py | 80 +++++++++++++---------
1 file changed, 46 insertions(+), 34 deletions(-)
diff --git a/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py b/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py
index 833c685..9923b13 100644
--- a/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py
+++ b/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py
@@ -250,44 +250,56 @@ class LocalhostBEController(BuildEnvironmentController):
def triggerBuild(self, bitbake, layers, variables, targets, brbe):
- # set up the build environment with the needed layers
- self.setLayers(bitbake, layers, targets)
+ layers = self.setLayers(bitbake, layers, targets)
+
+ # init build environment from the clone
+ builddir = '%s-toaster-%s' % (self.be.builddir, bitbake.req.project.name)
+ oe_init = os.path.join(self.pokydirname, 'oe-init-build-env')
+ # init build environment
+ self._shellcmd('source %s %s' % (oe_init, builddir), self.be.sourcedir)
+
+ # update bblayers.conf
+ bblconfpath = os.path.join(builddir, "conf/bblayers.conf")
+ conflines = open(bblconfpath, "r").readlines()
+ skip = False
+ with open(bblconfpath, 'w') as bblayers:
+ for line in conflines:
+ if line.startswith("# line added by toaster"):
+ skip = True
+ continue
+ if skip:
+ skip = False
+ else:
+ bblayers.write(line)
+
+ bblayers.write('# line added by toaster build control\n'
+ 'BBLAYERS = "%s"' % ' '.join(layers))
# write configuration file
- filepath = os.path.join(self.be.builddir, "conf/toaster.conf")
- with open(filepath, 'w') as conf:
+ confpath = os.path.join(builddir, 'conf/toaster.conf')
+ with open(confpath, 'w') as conf:
for var in variables:
conf.write('%s="%s"\n' % (var.name, var.value))
conf.write('INHERIT+="toaster buildhistory"')
- # get the bb server running with the build req id and build env id
- bbctrl = self.getBBController()
-
- # set variables; TOASTER_BRBE is not set on the server, as this
- # causes events from command-line builds to be attached to the last
- # Toaster-triggered build; instead, TOASTER_BRBE is fired as an event so
- # that toasterui can set it on the buildinfohelper;
- # see https://bugzilla.yoctoproject.org/show_bug.cgi?id=9021
- for var in variables:
- if var.name == 'TOASTER_BRBE':
- bbctrl.triggerEvent('bb.event.MetadataEvent("SetBRBE", "%s")' \
- % var.value)
- else:
- bbctrl.setVariable(var.name, var.value)
-
- # Add 'toaster' and 'buildhistory' to INHERIT variable
- inherit = {item.strip() for item in bbctrl.getVariable('INHERIT').split()}
- inherit = inherit.union(["toaster", "buildhistory"])
- bbctrl.setVariable('INHERIT', ' '.join(inherit))
+ # run bitbake server from the clone
+ bitbake = os.path.join(self.pokydirname, 'bitbake', 'bin', 'bitbake')
+ self._shellcmd('source %s %s; BITBAKE_UI="" %s --read %s '
+ '--server-only -t xmlrpc -B 0.0.0.0:0' % (oe_init, builddir,
+ bitbake, confpath), self.be.sourcedir)
- # trigger the build command
- task = reduce(lambda x, y: x if len(y)== 0 else y, map(lambda y: y.task, targets))
- if len(task) == 0:
- task = None
-
- bbctrl.build(list(map(lambda x:x.target, targets)), task)
-
- logger.debug("localhostbecontroller: Build launched, exiting. Follow build logs at %s/toaster_ui.log" % self.be.builddir)
-
- # disconnect from the server
- bbctrl.disconnect()
+ bbtargets = ''
+ for target in targets:
+ task = target.task or 'do_build'
+ if not task.startswith('do_'):
+ task = 'do_' + task
+ bbtargets += '%s:%s ' % (target.target, task)
+
+ # run build with local bitbake
+ log = os.path.join(builddir, 'toaster_ui.log')
+ self._shellcmd('TOASTER_BRBE="%s" BBSERVER="0.0.0.0:-1" '
+ '../bitbake/bin/bitbake %s -u toasterui '
+ '>>%s 2>&1 &' % (brbe, bbtargets, log), builddir)
+
+ logger.debug('localhostbecontroller: Build launched, exiting. '
+ 'Follow build logs at %s' % log)
--
2.1.4
More information about the toaster
mailing list