[yocto] The BitBake equivalent of "Hello, World!"

Patrick Turley PatrickTurley at gamestop.com
Thu Oct 4 17:47:28 PDT 2012


*Very* helpful stuff.

I have re-created the tree you described, and everything seems to work. In particular, bitbake-layers seems happy. I tried executing it against BitBake 1.12.0 and it succeeded.  FYI, it failed against the current BitBake master, which is 1.16.0.

I have some additional questions below.  You've already been so helpful that I'm reluctant to impose … but I'm going to try anyway :)

On Oct 4, 2012, at 1:58 PM, Rudolf Streif <rudolf.streif at linux.com<mailto:rudolf.streif at linux.com>> wrote:


My Bitbake "Hello World" is a little more than a basic "Hello World".


Indeed it is.  One of my first tasks will be to *remove* as much as possible from this until the only thing it does is print out "Hello, World!"  I'll be happy to share my results if anyone is interested.


Bitbake will require a base.bbclass file somewhere in a classes subdirectory of BBPATH. I used the base.bbclass file from the Bitbake download. As a minimum it should contain a do_build task. That's the target that Bitbake invokes by default if you do not use the -c option explicitly.

    …

addtask build
do_build[dirs] = "${TOPDIR}"
do_build[nostamp] = "1"
python base_do_build () {
        bb.note("The included, default BB base.bbclass does not define a useful default task.")
        bb.note("Try running the 'listtasks' task against a .bb to see what tasks are defined.")
}


If I understand correctly, the name of the task is "build", and the name of the Python function that implements it is "do_build()".  So, it appears BitBake prefixes all task names with "do_" to derive the name of the function that implements the task.  Have I got that right?

The "build" task is *required*, and it's the *only* one that's required?

I've been looking around in the BitBake source code a lot, so I'm *somewhat* familiar with it.  I tried to find the "hard" reference to "do_build" you described,  but I couldn't.  Can you give me a hint?


Finally a recipe to build the Nano editor:

DESCRIPTION = "Recipe to build the 'nano' editor"

PN = "nano"
PV = "2.2.6"

SRC_URI = "http://www.nano-editor.org/dist/v2.2/nano-2.2.6.tar.gz"

python do_fetch() {
   bb.note("Downloading source tarball from ${SRC_URI} ...")

   src_uri = (bb.data.getVar('SRC_URI', d, True) or "").split()
   if len(src_uri) == 0:
      bb.fatal("Empty URI")

   try:
      bb.fetch.init(src_uri, d)
      bb.fetch.go(d)
   except FetchError:
      bb.fatal("Could not fetch source tarball.")

   bb.note("Download successful.")
}

addtask fetch before do_build


I see here that you're creating the recipe-specific "do_fetch()" function, which seems intended to "override" the default "do_fetch()" provided by the base class.  This prompts some questions:

1) Must a "task function" be a Python function?  Or will a bash function do?

2) Is it absolutely necessary to follow a recipe-specific task function with an "addtask"?  Based on experience from "real" object-oriented languages, a naive observer (like me) would guess the simple presence of "do_fetch()" in the recipe is all that's necessary.  Or is it the "addtask" that actually "slots" the new function in?

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.yoctoproject.org/pipermail/yocto/attachments/20121005/653ed205/attachment.html>


More information about the yocto mailing list