summaryrefslogtreecommitdiffstats
path: root/bitbake
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake')
-rw-r--r--bitbake/lib/toaster/bldcontrol/localhostbecontroller.py51
1 files changed, 49 insertions, 2 deletions
diff --git a/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py b/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py
index a9909b8e1e..62fff1da34 100644
--- a/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py
+++ b/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py
@@ -23,9 +23,11 @@
23import os 23import os
24import sys 24import sys
25import re 25import re
26import shutil
26from django.db import transaction 27from django.db import transaction
27from django.db.models import Q 28from django.db.models import Q
28from bldcontrol.models import BuildEnvironment, BRLayer, BRVariable, BRTarget, BRBitbake 29from bldcontrol.models import BuildEnvironment, BRLayer, BRVariable, BRTarget, BRBitbake
30from orm.models import CustomImageRecipe, Layer, Layer_Version, ProjectLayer
29import subprocess 31import subprocess
30 32
31from toastermain import settings 33from toastermain import settings
@@ -197,7 +199,7 @@ class LocalhostBEController(BuildEnvironmentController):
197 return local_checkout_path 199 return local_checkout_path
198 200
199 201
200 def setLayers(self, bitbakes, layers): 202 def setLayers(self, bitbakes, layers, targets):
201 """ a word of attention: by convention, the first layer for any build will be poky! """ 203 """ a word of attention: by convention, the first layer for any build will be poky! """
202 204
203 assert self.be.sourcedir is not None 205 assert self.be.sourcedir is not None
@@ -299,6 +301,51 @@ class LocalhostBEController(BuildEnvironmentController):
299 if not os.path.exists(bblayerconf): 301 if not os.path.exists(bblayerconf):
300 raise BuildSetupException("BE is not consistent: bblayers.conf file missing at %s" % bblayerconf) 302 raise BuildSetupException("BE is not consistent: bblayers.conf file missing at %s" % bblayerconf)
301 303
304 # 6. create custom layer and add custom recipes to it
305 layerpath = os.path.join(self.be.sourcedir, "_meta-toaster-custom")
306 if os.path.isdir(layerpath):
307 shutil.rmtree(layerpath) # remove leftovers from previous builds
308 for target in targets:
309 try:
310 customrecipe = CustomImageRecipe.objects.get(name=target.target,
311 project=bitbakes[0].req.project)
312 except CustomImageRecipe.DoesNotExist:
313 continue # not a custom recipe, skip
314
315 # create directory structure
316 for name in ("conf", "recipes"):
317 path = os.path.join(layerpath, name)
318 if not os.path.isdir(path):
319 os.makedirs(path)
320
321 # create layer.oonf
322 config = os.path.join(layerpath, "conf", "layer.conf")
323 if not os.path.isfile(config):
324 with open(config, "w") as conf:
325 conf.write('BBPATH .= ":${LAYERDIR}"\nBBFILES += "${LAYERDIR}/recipes/*.bb"\n')
326
327 # create recipe
328 recipe = os.path.join(layerpath, "recipes", "%s.bb" % target.target)
329 with open(recipe, "w") as recipef:
330 recipef.write("require %s\n" % customrecipe.base_recipe.recipe.file_path)
331 packages = [pkg.name for pkg in customrecipe.packages.all()]
332 if packages:
333 recipef.write('IMAGE_INSTALL = "%s"\n' % ' '.join(packages))
334
335 # create *Layer* objects needed for build machinery to work
336 layer = Layer.objects.get_or_create(name="Toaster Custom layer",
337 summary="Layer for custom recipes",
338 vcs_url="file://%s" % layerpath)[0]
339 breq = target.req
340 lver = Layer_Version.objects.get_or_create(project=breq.project, layer=layer,
341 dirpath=layerpath, build=breq.build)[0]
342 ProjectLayer.objects.get_or_create(project=breq.project, layercommit=lver,
343 optional=False)
344 BRLayer.objects.get_or_create(req=breq, name=layer.name, dirpath=layerpath,
345 giturl="file://%s" % layerpath)
346 if os.path.isdir(layerpath):
347 layerlist.append(layerpath)
348
302 BuildEnvironmentController._updateBBLayers(bblayerconf, layerlist) 349 BuildEnvironmentController._updateBBLayers(bblayerconf, layerlist)
303 350
304 self.islayerset = True 351 self.islayerset = True
@@ -316,7 +363,7 @@ class LocalhostBEController(BuildEnvironmentController):
316 363
317 def triggerBuild(self, bitbake, layers, variables, targets): 364 def triggerBuild(self, bitbake, layers, variables, targets):
318 # set up the buid environment with the needed layers 365 # set up the buid environment with the needed layers
319 self.setLayers(bitbake, layers) 366 self.setLayers(bitbake, layers, targets)
320 self.writeConfFile("conf/toaster-pre.conf", variables) 367 self.writeConfFile("conf/toaster-pre.conf", variables)
321 self.writeConfFile("conf/toaster.conf", raw = "INHERIT+=\"toaster buildhistory\"") 368 self.writeConfFile("conf/toaster.conf", raw = "INHERIT+=\"toaster buildhistory\"")
322 369