[bitbake-devel] [PATCH] hob/bitbake: custom image is now using the base image

Richard Purdie richard.purdie at linuxfoundation.org
Thu Dec 6 15:22:13 UTC 2012


On Thu, 2012-12-06 at 15:15 +0200, Cristiana Voicu wrote:
> Till now, a custom image made in Hob was using only the packages from
> the base image. Now it is using everything declared in the base image.
> Also next to hob-image.bb, it creates another .bb file which is used
> in building process. Those images are ignored by git.
> 
> [YOCTO #2601]
> Signed-off-by: Cristiana Voicu <cristiana.voicu at intel.com>
> ---
>  .gitignore                                  |    1 +
>  bitbake/lib/bb/command.py                   |    8 +++++--
>  bitbake/lib/bb/cooker.py                    |   31 +++++++++++++++++++++++++--
>  bitbake/lib/bb/ui/crumbs/builder.py         |    3 +++
>  bitbake/lib/bb/ui/crumbs/hobeventhandler.py |    5 +++--
>  5 files changed, 42 insertions(+), 6 deletions(-)
> 
> diff --git a/.gitignore b/.gitignore
> index 88c91f6..003f09a 100644
> --- a/.gitignore
> +++ b/.gitignore
> @@ -15,3 +15,4 @@ meta-*
>  *~
>  !meta-yocto
>  !meta-yocto-bsp
> +hob-image-*.bb
> diff --git a/bitbake/lib/bb/command.py b/bitbake/lib/bb/command.py
> index 3f28bca..48b09e4 100644
> --- a/bitbake/lib/bb/command.py
> +++ b/bitbake/lib/bb/command.py
> @@ -220,8 +220,12 @@ class CommandsAsync:
>          """
>          pkgs_to_build = params[0]
>          task = params[1]
> -
> -        command.cooker.buildTargets(pkgs_to_build, task)
> +        if len(params) > 2:
> +            base_image = params[2]
> +            package_queue = params[3]
> +            command.cooker.buildTargets(pkgs_to_build, task, base_image, package_queue)
> +        else:
> +            command.cooker.buildTargets(pkgs_to_build, task)
>      buildTargets.needcache = True
>  
>      def generateDepTreeEvent(self, command, params):
> diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py
> index 6b58f91..22d8bd1 100644
> --- a/bitbake/lib/bb/cooker.py
> +++ b/bitbake/lib/bb/cooker.py
> @@ -23,7 +23,7 @@
>  # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
>  
>  from __future__ import print_function
> -import sys, os, glob, os.path, re, time
> +import sys, os, glob, os.path, re, time, shutil
>  import atexit
>  import itertools
>  import logging
> @@ -1127,11 +1127,14 @@ class BBCooker:
>  
>          self.server_registration_cb(buildFileIdle, rq)
>  
> -    def buildTargets(self, targets, task):
> +    def buildTargets(self, targets, task, base_image=None, package_queue=None):
>          """
>          Attempt to build the targets specified
>          """
>  
> +        if base_image != None and targets[0] == "hob-image":
> +            self.prepareHobImage(base_image, package_queue)
> +
>          # Need files parsed
>          self.updateCache()
>  
> @@ -1188,6 +1191,30 @@ class BBCooker:
>  
>          self.server_registration_cb(buildTargetsIdle, rq)

This looks good, I'd just ask for one tweak.

Rather than overload "buildTargets", lets add a new command say
"generateNewImage" which generates the this. Lets also not make this
"hob" specific, lets pass in the necessary parameters.

This may mean we need to also add a command to run "matchFile" on the
server so we can call the "generateNewImage" command with the right
options.

Cheers,

Richard


> +    def prepareHobImage(self, base_image, package_queue):
> +        '''
> +        Create a new hob-image with a "require" base_image statement
> +        '''
> +        hob_image = self.matchFile("hob-image.bb")
> +        base_image = self.matchFile(str(base_image) + ".bb")
> +        with open(hob_image, "a") as hobimagefile:
> +            hobimagefile.write("require " + base_image + "\n")
> +            package_install = "PACKAGE_INSTALL_forcevariable = \""
> +            for package in package_queue:
> +                package_install += str(package) + " "
> +            package_install += "\"\n"
> +            hobimagefile.write(package_install)
> +
> +        dir_hob_image = os.path.dirname(hob_image)
> +        timestr = time.strftime("%Y%m%d-%H%M%S")
> +        dest = dir_hob_image + "/hob-image-" + str(timestr) + ".bb"
> +        shutil.copyfile(hob_image, dest)
> +
> +        self.parser.reparse(hob_image)
> +
> +        with open(hob_image, "w") as hobimagefile:
> +            hobimagefile.write("inherit image\n")
> +
>      def updateCache(self):
>          if self.state == state.running:
>              return
> diff --git a/bitbake/lib/bb/ui/crumbs/builder.py b/bitbake/lib/bb/ui/crumbs/builder.py
> index 2f3d6d0..663c322 100755
> --- a/bitbake/lib/bb/ui/crumbs/builder.py
> +++ b/bitbake/lib/bb/ui/crumbs/builder.py
> @@ -611,15 +611,18 @@ class Builder(gtk.Window):
>          # Build image
>          self.set_user_config()
>          toolchain_packages = []
> +        base_image = None
>          if self.configuration.toolchain_build:
>              toolchain_packages = self.package_model.get_selected_packages_toolchain()
>          if self.configuration.selected_image == self.recipe_model.__custom_image__:
>              packages = self.package_model.get_selected_packages()
>              image = self.hob_image
> +            base_image = self.configuration.initial_selected_image
>          else:
>              packages = []
>              image = self.configuration.selected_image
>          self.handler.generate_image(image,
> +                                    base_image,
>                                      self.hob_toolchain,
>                                      packages,
>                                      toolchain_packages,
> diff --git a/bitbake/lib/bb/ui/crumbs/hobeventhandler.py b/bitbake/lib/bb/ui/crumbs/hobeventhandler.py
> index 8a2ac5f..1583f76 100644
> --- a/bitbake/lib/bb/ui/crumbs/hobeventhandler.py
> +++ b/bitbake/lib/bb/ui/crumbs/hobeventhandler.py
> @@ -166,7 +166,7 @@ class HobHandler(gobject.GObject):
>              if self.toolchain_packages:
>                  self.runCommand(["setVariable", "TOOLCHAIN_TARGET_TASK", " ".join(self.toolchain_packages)])
>                  targets.append(self.toolchain)
> -            self.runCommand(["buildTargets", targets, self.default_task])
> +            self.runCommand(["buildTargets", targets, self.default_task, self.base_image, self.package_queue])
>  
>      def display_error(self):
>          self.clear_busy()
> @@ -386,8 +386,9 @@ class HobHandler(gobject.GObject):
>          self.commands_async.append(self.SUB_BUILD_RECIPES)
>          self.run_next_command(self.GENERATE_PACKAGES)
>  
> -    def generate_image(self, image, toolchain, image_packages=[], toolchain_packages=[], default_task="build"):
> +    def generate_image(self, image, base_image, toolchain, image_packages=[], toolchain_packages=[], default_task="build"):
>          self.image = image
> +        self.base_image = base_image
>          self.toolchain = toolchain
>          self.package_queue = image_packages
>          self.toolchain_packages = toolchain_packages






More information about the bitbake-devel mailing list