<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
    "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">

<chapter id="bitbake-user-manual-intro">
    <title>Overview</title>

    <para>
        Welcome to the BitBake User Manual.
        This manual provides information on the BitBake tool.
        The information attempts to be as independent as possible regarding
        systems that use BitBake, such as OpenEmbedded and the
        Yocto Project.
        In some cases, scenarios or examples within the context of
        a build system are used in the manual to help with understanding.
        For these cases, the manual clearly states the context.
    </para>

    <section id="intro">
        <title>Introduction</title>

        <para>
            Fundamentally, BitBake is a generic task execution
            engine that allows shell and Python tasks to be run
            efficiently and in parallel while working within
            complex inter-task dependency constraints.
            One of BitBake's main users, OpenEmbedded, takes this core
            and builds embedded Linux software stacks using
            a task-oriented approach.
        </para>

        <para>
            Conceptually, BitBake is similar to GNU Make in
            some regards but has significant differences:
            <itemizedlist>
                <listitem><para>
                    BitBake executes tasks according to provided
                    metadata that builds up the tasks.
                    Metadata is stored in recipe (<filename>.bb</filename>)
                    and related recipe "append" (<filename>.bbappend</filename>)
                    files, configuration (<filename>.conf</filename>) and
                    underlying include (<filename>.inc</filename>) files, and
                    in class (<filename>.bbclass</filename>) files.
                    The metadata provides
                    BitBake with instructions on what tasks to run and
                    the dependencies between those tasks.
                    </para></listitem>
                <listitem><para>
                    BitBake includes a fetcher library for obtaining source
                    code from various places such as local files, source control
                    systems, or websites.
                    </para></listitem>
                <listitem><para>
                    The instructions for each unit to be built (e.g. a piece
                    of software) are known as "recipe" files and
                    contain all the information about the unit
                    (dependencies, source file locations, checksums, description
                    and so on).
                    </para></listitem>
                <listitem><para>
                    BitBake includes a client/server abstraction and can
                    be used from a command line or used as a service over
                    XML-RPC and has several different user interfaces.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id="history-and-goals">
        <title>History and Goals</title>

        <para>
            BitBake was originally a part of the OpenEmbedded project.
            It was inspired by the Portage package management system
            used by the Gentoo Linux distribution.
            On December 7, 2004, OpenEmbedded project team member
            Chris Larson split the project into two distinct pieces:
            <itemizedlist>
                <listitem><para>BitBake, a generic task executor</para></listitem>
                <listitem><para>OpenEmbedded, a metadata set utilized by
                    BitBake</para></listitem>
            </itemizedlist>
            Today, BitBake is the primary basis of the
            <ulink url="http://www.openembedded.org/">OpenEmbedded</ulink>
            project, which is being used to build and maintain Linux
            distributions such as the
            <ulink url='http://www.angstrom-distribution.org/'>Angstrom Distribution</ulink>,
            and which is also being used as the build tool for Linux projects
            such as the
            <ulink url='http://www.yoctoproject.org'>Yocto Project</ulink>.
        </para>

        <para>
            Prior to BitBake, no other build tool adequately met the needs of
            an aspiring embedded Linux distribution.
            All of the build systems used by traditional desktop Linux
            distributions lacked important functionality, and none of the
            ad hoc Buildroot-based systems, prevalent in the
            embedded space, were scalable or maintainable.
        </para>

        <para>
            Some important original goals for BitBake were:
            <itemizedlist>
                <listitem><para>
                    Handle cross-compilation.
                    </para></listitem>
                <listitem><para>
                    Handle inter-package dependencies (build time on
                    target architecture, build time on native
                    architecture, and runtime).
                    </para></listitem>
                <listitem><para>
                    Support running any number of tasks within a given
                    package, including, but not limited to, fetching
                    upstream sources, unpacking them, patching them,
                    configuring them, and so forth.
                    </para></listitem>
                <listitem><para>
                    Be Linux distribution agnostic for both build and
                    target systems.
                    </para></listitem>
                <listitem><para>
                    Be architecture agnostic.
                    </para></listitem>
                <listitem><para>
                    Support multiple build and target operating systems
                    (e.g. Cygwin, the BSDs, and so forth).
                    </para></listitem>
                <listitem><para>
                    Be self-contained, rather than tightly
                    integrated into the build machine's root
                    filesystem.
                    </para></listitem>
                <listitem><para>
                    Handle conditional metadata on the target architecture,
                    operating system, distribution, and machine.
                    </para></listitem>
                <listitem><para>
                    Be easy to use the tools to supply local metadata and packages
                    against which to operate.
                    </para></listitem>
                <listitem><para>
                    Be easy to use BitBake to collaborate between multiple
                    projects for their builds.
                    </para></listitem>
                <listitem><para>
                    Provide an inheritance mechanism to share
                    common metadata between many packages.
                    </para></listitem>
            </itemizedlist>
            Over time it became apparent that some further requirements
            were necessary:
            <itemizedlist>
                <listitem><para>
                    Handle variants of a base recipe (e.g. native, sdk,
                    and multilib).
                    </para></listitem>
                <listitem><para>
                    Split metadata into layers and allow layers
                    to enhance or override other layers.
                    </para></listitem>
                <listitem><para>
                    Allow representation of a given set of input variables
                    to a task as a checksum.
                    Based on that checksum, allow acceleration of builds
                    with prebuilt components.
                    </para></listitem>
            </itemizedlist>
            BitBake satisfies all the original requirements and many more
            with extensions being made to the basic functionality to
            reflect the additional requirements.
            Flexibility and power have always been the priorities.
            BitBake is highly extensible and supports embedded Python code and
            execution of any arbitrary tasks.
        </para>
    </section>

    <section id="Concepts">
        <title>Concepts</title>

        <para>
            BitBake is a program written in the Python language.
            At the highest level, BitBake interprets metadata, decides
            what tasks are required to run, and executes those tasks.
            Similar to GNU Make, BitBake controls how software is
            built.
            GNU Make achieves its control through "makefiles", while
            BitBake uses "recipes".
        </para>

        <para>
            BitBake extends the capabilities of a simple
            tool like GNU Make by allowing for the definition of much more
            complex tasks, such as assembling entire embedded Linux
            distributions.
        </para>

        <para>
            The remainder of this section introduces several concepts
            that should be understood in order to better leverage
            the power of BitBake.
        </para>

        <section id='recipes'>
            <title>Recipes</title>

            <para>
                BitBake Recipes, which are denoted by the file extension
                <filename>.bb</filename>, are the most basic metadata files.
                These recipe files provide BitBake with the following:
                <itemizedlist>
                    <listitem><para>Descriptive information about the
                        package (author, homepage, license, and so on)</para></listitem>
                    <listitem><para>The version of the recipe</para></listitem>
                    <listitem><para>Existing dependencies (both build
                        and runtime dependencies)</para></listitem>
                    <listitem><para>Where the source code resides and
                        how to fetch it</para></listitem>
                    <listitem><para>Whether the source code requires
                        any patches, where to find them, and how to apply
                        them</para></listitem>
                    <listitem><para>How to configure and compile the
                        source code</para></listitem>
                    <listitem><para>How to assemble the generated artifacts into
                        one or more installable packages</para></listitem>
                    <listitem><para>Where on the target machine to install the
                        package or packages created</para></listitem>
                </itemizedlist>
            </para>

            <para>
                Within the context of BitBake, or any project utilizing BitBake
                as its build system, files with the <filename>.bb</filename>
                extension are referred to as <firstterm>recipes</firstterm>.
                <note>
                    The term "package" is also commonly used to describe recipes.
                    However, since the same word is used to describe packaged
                    output from a project, it is best to maintain a single
                    descriptive term - "recipes".
                    Put another way, a single "recipe" file is quite capable
                    of generating a number of related but separately installable
                    "packages".
                    In fact, that ability is fairly common.
                </note>
            </para>
        </section>

        <section id='configuration-files'>
            <title>Configuration Files</title>

            <para>
                Configuration files, which are denoted by the
                <filename>.conf</filename> extension, define
                various configuration variables that govern the project's build
                process.
                These files fall into several areas that define
                machine configuration, distribution configuration,
                possible compiler tuning, general common
                configuration, and user configuration.
                The main configuration file is the sample
                <filename>bitbake.conf</filename> file, which is
                located within the BitBake source tree
                <filename>conf</filename> directory.
            </para>
        </section>

        <section id='classes'>
            <title>Classes</title>

            <para>
                Class files, which are denoted by the
                <filename>.bbclass</filename> extension, contain
                information that is useful to share between metadata files.
                The BitBake source tree currently comes with one class metadata file
                called <filename>base.bbclass</filename>.
                You can find this file in the
                <filename>classes</filename> directory.
                The <filename>base.bbclass</filename> class files is special since it
                is always included automatically for all recipes
                and classes.
                This class contains definitions for standard basic tasks such
                as fetching, unpacking, configuring (empty by default),
                compiling (runs any Makefile present), installing (empty by
                default) and packaging (empty by default).
                These tasks are often overridden or extended by other classes
                added during the project development process.
            </para>
        </section>

        <section id='layers'>
            <title>Layers</title>

            <para>
                Layers allow you to isolate different types of
                customizations from each other.
                While you might find it tempting to keep everything in one layer
                when working on a single project, the more modular
                your metadata, the easier it is to cope with future changes.
            </para>

            <para>
                To illustrate how you can use layers to keep things modular,
                consider customizations you might make to support a specific target machine.
                These types of customizations typically reside in a special layer,
                rather than a general layer, called a <firstterm>Board Support Package</firstterm> (BSP)
                layer.
                Furthermore, the machine customizations should be isolated from
                recipes and metadata that support a new GUI environment, for
                example.
                This situation gives you a couple of layers: one for the machine
                configurations and one for the GUI environment.
                It is important to understand, however, that the BSP layer can still
                make machine-specific additions to recipes within
                the GUI environment layer without polluting the GUI layer itself
                with those machine-specific changes.
                You can accomplish this through a recipe that is a BitBake append
                (<filename>.bbappend</filename>) file.
            </para>
        </section>

        <section id='append-bbappend-files'>
            <title>Append Files</title>

            <para>
                Append files, which are files that have the
                <filename>.bbappend</filename> file extension, extend or
                override information in an existing recipe file.
            </para>

            <para>
                BitBake expects every append file to have a corresponding recipe file.
                Furthermore, the append file and corresponding recipe file
                must use the same root filename.
                The filenames can differ only in the file type suffix used
                (e.g. <filename>formfactor_0.0.bb</filename> and
                <filename>formfactor_0.0.bbappend</filename>).
            </para>

            <para>
                Information in append files extends or
                overrides the information in the underlying,
                similarly-named recipe files.
            </para>

            <para>
                When you name an append file, you can use the
                "<filename>%</filename>" wildcard character to allow for matching
                recipe names.
                For example, suppose you have an append file named
                as follows:
                <literallayout class='monospaced'>
     busybox_1.21.%.bbappend
                </literallayout>
                That append file would match any <filename>busybox_1.21.</filename><replaceable>x</replaceable><filename>.bb</filename>
                version of the recipe.
                So, the append file would match the following recipe names:
                <literallayout class='monospaced'>
     busybox_1.21.1.bb
     busybox_1.21.2.bb
     busybox_1.21.3.bb
                </literallayout>
                <note><title>Important</title>
                    The use of the "<filename>%</filename>" character
                    is limited in that it only works directly in front of the
                    <filename>.bbappend</filename> portion of the append file's
                    name.
                    You cannot use the wildcard character in any other
                    location of the name.
                </note>
                If the <filename>busybox</filename> recipe was updated to
                <filename>busybox_1.3.0.bb</filename>, the append name would not
                match.
                However, if you named the append file
                <filename>busybox_1.%.bbappend</filename>, then you would have a match.
            </para>

            <para>
                In the most general case, you could name the append file something as
                simple as <filename>busybox_%.bbappend</filename> to be entirely
                version independent.
            </para>
        </section>
    </section>

    <section id='obtaining-bitbake'>
        <title>Obtaining BitBake</title>

        <para>
            You can obtain BitBake several different ways:
            <itemizedlist>
                <listitem><para><emphasis>Cloning BitBake:</emphasis>
                    Using Git to clone the BitBake source code repository
                    is the recommended method for obtaining BitBake.
                    Cloning the repository makes it easy to get bug fixes
                    and have access to stable branches and the master
                    branch.
                    Once you have cloned BitBake, you should use
                    the latest stable
                    branch for development since the master branch is for
                    BitBake development and might contain less stable changes.
                    </para>
                    <para>You usually need a version of BitBake
                    that matches the metadata you are using.
                    The metadata is generally backwards compatible but
                    not forward compatible.</para>
                    <para>Here is an example that clones the BitBake repository:
                    <literallayout class='monospaced'>
     $ git clone git://git.openembedded.org/bitbake
                    </literallayout>
                    This command clones the BitBake Git repository into a
                    directory called <filename>bitbake</filename>.
                    Alternatively, you can
                    designate a directory after the
                    <filename>git clone</filename> command
                    if you want to call the new directory something
                    other than <filename>bitbake</filename>.
                    Here is an example that names the directory
                    <filename>bbdev</filename>:
                    <literallayout class='monospaced'>
     $ git clone git://git.openembedded.org/bitbake bbdev
                    </literallayout></para></listitem>
                <listitem><para><emphasis>Installation using your Distribution
                    Package Management System:</emphasis>
                    This method is not
                    recommended because the BitBake version that is
                    provided by your distribution, in most cases,
                    is several
                    releases behind a snapshot of the BitBake repository.
                    </para></listitem>
                <listitem><para><emphasis>Taking a snapshot of BitBake:</emphasis>
                    Downloading a snapshot of BitBake from the
                    source code repository gives you access to a known
                    branch or release of BitBake.
                    <note>
                         Cloning the Git repository, as described earlier,
                         is the preferred method for getting BitBake.
                         Cloning the repository makes it easier to update as
                         patches are added to the stable branches.
                    </note></para>
                    <para>The following example downloads a snapshot of
                    BitBake version 1.17.0:
                    <literallayout class='monospaced'>
     $ wget http://git.openembedded.org/bitbake/snapshot/bitbake-1.17.0.tar.gz
     $ tar zxpvf bitbake-1.17.0.tar.gz
                    </literallayout>
                    After extraction of the tarball using the tar utility,
                    you have a directory entitled
                    <filename>bitbake-1.17.0</filename>.
                    </para></listitem>
                <listitem><para><emphasis>Using the BitBake that Comes With Your
                    Build Checkout:</emphasis>
                    A final possibility for getting a copy of BitBake is that it
                    already comes with your checkout of a larger BitBake-based build
                    system, such as Poky.
                    Rather than manually checking out individual layers and
                    gluing them together yourself, you can check
                    out an entire build system.
                    The checkout will already include a version of BitBake that
                    has been thoroughly tested for compatibility with the other
                    components.
                    For information on how to check out a particular BitBake-based
                    build system, consult that build system's supporting documentation.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id="bitbake-user-manual-command">
        <title>The BitBake Command</title>

        <para>
            The <filename>bitbake</filename> command is the primary interface
            to the BitBake tool.
            This section presents the BitBake command syntax and provides
            several execution examples.
        </para>

        <section id='usage-and-syntax'>
            <title>Usage and syntax</title>

            <para>
                Following is the usage and syntax for BitBake:
                <literallayout class='monospaced'>
     $ bitbake -h
     Usage: bitbake [options] [recipename/target recipe:do_task ...]

         Executes the specified task (default is 'build') for a given set of target recipes (.bb files).
         It is assumed there is a conf/bblayers.conf available in cwd or in BBPATH which
         will provide the layer, BBFILES and other configuration information.

     Options:
       --version             show program's version number and exit
       -h, --help            show this help message and exit
       -b BUILDFILE, --buildfile=BUILDFILE
                             Execute tasks from a specific .bb recipe directly.
                             WARNING: Does not handle any dependencies from other
                             recipes.
       -k, --continue        Continue as much as possible after an error. While the
                             target that failed and anything depending on it cannot
                             be built, as much as possible will be built before
                             stopping.
       -f, --force           Force the specified targets/task to run (invalidating
                             any existing stamp file).
       -c CMD, --cmd=CMD     Specify the task to execute. The exact options
                             available depend on the metadata. Some examples might
                             be 'compile' or 'populate_sysroot' or 'listtasks' may
                             give a list of the tasks available.
       -C INVALIDATE_STAMP, --clear-stamp=INVALIDATE_STAMP
                             Invalidate the stamp for the specified task such as
                             'compile' and then run the default task for the
                             specified target(s).
       -r PREFILE, --read=PREFILE
                             Read the specified file before bitbake.conf.
       -R POSTFILE, --postread=POSTFILE
                             Read the specified file after bitbake.conf.
       -v, --verbose         Enable tracing of shell tasks (with 'set -x'). Also
                             print bb.note(...) messages to stdout (in addition to
                             writing them to ${T}/log.do_&lt;task&gt;).
       -D, --debug           Increase the debug level. You can specify this more
                             than once. -D sets the debug level to 1, where only
                             bb.debug(1, ...) messages are printed to stdout; -DD
                             sets the debug level to 2, where both bb.debug(1, ...)
                             and bb.debug(2, ...) messages are printed; etc.
                             Without -D, no debug messages are printed. Note that
                             -D only affects output to stdout. All debug messages
                             are written to ${T}/log.do_taskname, regardless of the
                             debug level.
       -q, --quiet           Output less log message data to the terminal. You can
                             specify this more than once.
       -n, --dry-run         Don't execute, just go through the motions.
       -S SIGNATURE_HANDLER, --dump-signatures=SIGNATURE_HANDLER
                             Dump out the signature construction information, with
                             no task execution. The SIGNATURE_HANDLER parameter is
                             passed to the handler. Two common values are none and
                             printdiff but the handler may define more/less. none
                             means only dump the signature, printdiff means compare
                             the dumped signature with the cached one.
       -p, --parse-only      Quit after parsing the BB recipes.
       -s, --show-versions   Show current and preferred versions of all recipes.
       -e, --environment     Show the global or per-recipe environment complete
                             with information about where variables were
                             set/changed.
       -g, --graphviz        Save dependency tree information for the specified
                             targets in the dot syntax.
       -I EXTRA_ASSUME_PROVIDED, --ignore-deps=EXTRA_ASSUME_PROVIDED
                             Assume these dependencies don't exist and are already
                             provided (equivalent to ASSUME_PROVIDED). Useful to
                             make dependency graphs more appealing
       -l DEBUG_DOMAINS, --log-domains=DEBUG_DOMAINS
                             Show debug logging for the specified logging domains
       -P, --profile         Profile the command and save reports.
       -u UI, --ui=UI        The user interface to use (knotty, ncurses or taskexp
                             - default knotty).
       --token=XMLRPCTOKEN   Specify the connection token to be used when
                             connecting to a remote server.
       --revisions-changed   Set the exit code depending on whether upstream
                             floating revisions have changed or not.
       --server-only         Run bitbake without a UI, only starting a server
                             (cooker) process.
       -B BIND, --bind=BIND  The name/address for the bitbake xmlrpc server to bind
                             to.
       -T SERVER_TIMEOUT, --idle-timeout=SERVER_TIMEOUT
                             Set timeout to unload bitbake server due to
                             inactivity, set to -1 means no unload, default:
                             Environment variable BB_SERVER_TIMEOUT.
       --no-setscene         Do not run any setscene tasks. sstate will be ignored
                             and everything needed, built.
       --setscene-only       Only run setscene tasks, don't run any real tasks.
       --remote-server=REMOTE_SERVER
                             Connect to the specified server.
       -m, --kill-server     Terminate any running bitbake server.
       --observe-only        Connect to a server as an observing-only client.
       --status-only         Check the status of the remote bitbake server.
       -w WRITEEVENTLOG, --write-log=WRITEEVENTLOG
                             Writes the event log of the build to a bitbake event
                             json file. Use '' (empty string) to assign the name
                             automatically.
       --runall=RUNALL       Run the specified task for any recipe in the taskgraph
                             of the specified target (even if it wouldn't otherwise
                             have run).
       --runonly=RUNONLY     Run only the specified task within the taskgraph of
                             the specified targets (and any task dependencies those
                             tasks may have).
                </literallayout>
            </para>
        </section>

        <section id='bitbake-examples'>
            <title>Examples</title>

            <para>
                This section presents some examples showing how to use BitBake.
            </para>

            <section id='example-executing-a-task-against-a-single-recipe'>
                <title>Executing a Task Against a Single Recipe</title>

                <para>
                    Executing tasks for a single recipe file is relatively simple.
                    You specify the file in question, and BitBake parses
                    it and executes the specified task.
                    If you do not specify a task, BitBake executes the default
                    task, which is "build”.
                    BitBake obeys inter-task dependencies when doing
                    so.
                </para>

                <para>
                    The following command runs the build task, which is
                    the default task, on the <filename>foo_1.0.bb</filename>
                    recipe file:
                    <literallayout class='monospaced'>
     $ bitbake -b foo_1.0.bb
                    </literallayout>
                    The following command runs the clean task on the
                    <filename>foo.bb</filename> recipe file:
                    <literallayout class='monospaced'>
     $ bitbake -b foo.bb -c clean
                    </literallayout>
                    <note>
                        The "-b" option explicitly does not handle recipe
                        dependencies.
                        Other than for debugging purposes, it is instead
                        recommended that you use the syntax presented in the
                        next section.
                    </note>
                </para>
            </section>

            <section id='executing-tasks-against-a-set-of-recipe-files'>
                <title>Executing Tasks Against a Set of Recipe Files</title>

                <para>
                    There are a number of additional complexities introduced
                    when one wants to manage multiple <filename>.bb</filename>
                    files.
                    Clearly there needs to be a way to tell BitBake what
                    files are available and, of those, which you
                    want to execute.
                    There also needs to be a way for each recipe
                    to express its dependencies, both for build-time and
                    runtime.
                    There must be a way for you to express recipe preferences
                    when multiple recipes provide the same functionality, or when
                    there are multiple versions of a recipe.
                </para>

                <para>
                    The <filename>bitbake</filename> command, when not using
                    "--buildfile" or "-b" only accepts a "PROVIDES".
                    You cannot provide anything else.
                    By default, a recipe file generally "PROVIDES" its
                    "packagename" as shown in the following example:
                    <literallayout class='monospaced'>
     $ bitbake foo
                    </literallayout>
                    This next example "PROVIDES" the package name and also uses
                    the "-c" option to tell BitBake to just execute the
                    <filename>do_clean</filename> task:
                    <literallayout class='monospaced'>
     $ bitbake -c clean foo
                    </literallayout>
                </para>
            </section>

            <section id='executing-a-list-of-task-and-recipe-combinations'>
                <title>Executing a List of Task and Recipe Combinations</title>

                <para>
                    The BitBake command line supports specifying different
                    tasks for individual targets when you specify multiple
                    targets.
                    For example, suppose you had two targets (or recipes)
                    <filename>myfirstrecipe</filename> and
                    <filename>mysecondrecipe</filename> and you needed
                    BitBake to run <filename>taskA</filename> for the first
                    recipe and <filename>taskB</filename> for the second
                    recipe:
                    <literallayout class='monospaced'>
     $ bitbake myfirstrecipe:do_taskA mysecondrecipe:do_taskB
                    </literallayout>
                </para>
            </section>

            <section id='generating-dependency-graphs'>
                <title>Generating Dependency Graphs</title>

                <para>
                    BitBake is able to generate dependency graphs using
                    the <filename>dot</filename> syntax.
                    You can convert these graphs into images using the
                    <filename>dot</filename> tool from
                    <ulink url='http://www.graphviz.org'>Graphviz</ulink>.
                </para>

                <para>
                    When you generate a dependency graph, BitBake writes three files
                    to the current working directory:
                    <itemizedlist>
                        <listitem><para>
                            <emphasis><filename>recipe-depends.dot</filename>:</emphasis>
                            Shows dependencies between recipes (i.e. a collapsed version of
                            <filename>task-depends.dot</filename>).
                            </para></listitem>
                        <listitem><para>
                            <emphasis><filename>task-depends.dot</filename>:</emphasis>
                            Shows dependencies between tasks.
                            These dependencies match BitBake's internal task execution list.
                            </para></listitem>
                        <listitem><para>
                            <emphasis><filename>pn-buildlist</filename>:</emphasis>
                            Shows a simple list of targets that are to be built.
                            </para></listitem>
                    </itemizedlist>
                </para>

                <para>
                    To stop depending on common depends, use the "-I" depend
                    option and BitBake omits them from the graph.
                    Leaving this information out can produce more readable graphs.
                    This way, you can remove from the graph
                    <filename>DEPENDS</filename> from inherited classes
                    such as <filename>base.bbclass</filename>.
                </para>

                <para>
                    Here are two examples that create dependency graphs.
                    The second example omits depends common in OpenEmbedded from
                    the graph:
                    <literallayout class='monospaced'>
     $ bitbake -g foo

     $ bitbake -g -I virtual/kernel -I eglibc foo
                    </literallayout>
                </para>
            </section>

            <section id='executing-a-multiple-configuration-build'>
                <title>Executing a Multiple Configuration Build</title>

                <para>
                    BitBake is able to build multiple images or packages
                    using a single command where the different targets
                    require different configurations (multiple configuration
                    builds).
                    Each target, in this scenario, is referred to as a
                    "multiconfig".
                </para>

                <para>
                    To accomplish a multiple configuration build, you must
                    define each target's configuration separately using
                    a parallel configuration file in the build directory.
                    The location for these multiconfig configuration files
                    is specific.
                    They must reside in the current build directory in
                    a sub-directory of <filename>conf</filename> named
                    <filename>multiconfig</filename>.
                    Following is an example for two separate targets:
                    <imagedata fileref="figures/bb_multiconfig_files.png" align="center" width="4in" depth="3in" />
                </para>

                <para>
                    The reason for this required file hierarchy
                    is because the <filename>BBPATH</filename> variable
                    is not constructed until the layers are parsed.
                    Consequently, using the configuration file as a
                    pre-configuration file is not possible unless it is
                    located in the current working directory.
                </para>

                <para>
                    Minimally, each configuration file must define the
                    machine and the temporary directory BitBake uses
                    for the build.
                    Suggested practice dictates that you do not
                    overlap the temporary directories used during the
                    builds.
                </para>

                <para>
                    Aside from separate configuration files for each
                    target, you must also enable BitBake to perform multiple
                    configuration builds.
                    Enabling is accomplished by setting the
                    <link linkend='var-bb-BBMULTICONFIG'><filename>BBMULTICONFIG</filename></link>
                    variable in the <filename>local.conf</filename>
                    configuration file.
                    As an example, suppose you had configuration files
                    for <filename>target1</filename> and
                    <filename>target2</filename> defined in the build
                    directory.
                    The following statement in the
                    <filename>local.conf</filename> file both enables
                    BitBake to perform multiple configuration builds and
                    specifies the two extra multiconfigs:
                    <literallayout class='monospaced'>
     BBMULTICONFIG = "target1 target2"
                    </literallayout>
                </para>

                <para>
                    Once the target configuration files are in place and
                    BitBake has been enabled to perform multiple configuration
                    builds, use the following command form to start the
                    builds:
                    <literallayout class='monospaced'>
     $ bitbake [mc:<replaceable>multiconfigname</replaceable>:]<replaceable>target</replaceable> [[[mc:<replaceable>multiconfigname</replaceable>:]<replaceable>target</replaceable>] ... ]
                    </literallayout>
                    Here is an example for two extra multiconfigs:
                    <filename>target1</filename> and
                    <filename>target2</filename>:
                    <literallayout class='monospaced'>
     $ bitbake mc::<replaceable>target</replaceable> mc:target1:<replaceable>target</replaceable> mc:target2:<replaceable>target</replaceable>
                    </literallayout>
                </para>
            </section>

            <section id='bb-enabling-multiple-configuration-build-dependencies'>
                <title>Enabling Multiple Configuration Build Dependencies</title>

                <para>
                    Sometimes dependencies can exist between targets
                    (multiconfigs) in a multiple configuration build.
                    For example, suppose that in order to build an image
                    for a particular architecture, the root filesystem of
                    another build for a different architecture needs to
                    exist.
                    In other words, the image for the first multiconfig depends
                    on the root filesystem of the second multiconfig.
                    This dependency is essentially that the task in the recipe
                    that builds one multiconfig is dependent on the
                    completion of the task in the recipe that builds
                    another multiconfig.
                </para>

                <para>
                    To enable dependencies in a multiple configuration
                    build, you must declare the dependencies in the recipe
                    using the following statement form:
                    <literallayout class='monospaced'>
     <replaceable>task_or_package</replaceable>[mcdepends] = "mc:<replaceable>from_multiconfig</replaceable>:<replaceable>to_multiconfig</replaceable>:<replaceable>recipe_name</replaceable>:<replaceable>task_on_which_to_depend</replaceable>"
                    </literallayout>
                    To better show how to use this statement, consider an
                    example with two multiconfigs: <filename>target1</filename>
                    and <filename>target2</filename>:
                    <literallayout class='monospaced'>
     <replaceable>image_task</replaceable>[mcdepends] = "mc:target1:target2:<replaceable>image2</replaceable>:<replaceable>rootfs_task</replaceable>"
                    </literallayout>
                    In this example, the
                    <replaceable>from_multiconfig</replaceable> is "target1" and
                    the <replaceable>to_multiconfig</replaceable> is "target2".
                    The task on which the image whose recipe contains
                    <replaceable>image_task</replaceable> depends on the
                    completion of the <replaceable>rootfs_task</replaceable>
                    used to build out <replaceable>image2</replaceable>, which
                    is associated with the "target2" multiconfig.
               </para>

               <para>
                   Once you set up this dependency, you can build the
                   "target1" multiconfig using a BitBake command as follows:
                   <literallayout class='monospaced'>
     $ bitbake mc:target1:<replaceable>image1</replaceable>
                   </literallayout>
                   This command executes all the tasks needed to create
                   <replaceable>image1</replaceable> for the "target1"
                   multiconfig.
                   Because of the dependency, BitBake also executes through
                   the <replaceable>rootfs_task</replaceable> for the "target2"
                   multiconfig build.
               </para>

               <para>
                   Having a recipe depend on the root filesystem of another
                   build might not seem that useful.
                   Consider this change to the statement in the
                   <replaceable>image1</replaceable> recipe:
                   <literallayout class='monospaced'>
     <replaceable>image_task</replaceable>[mcdepends] = "mc:target1:target2:<replaceable>image2</replaceable>:<replaceable>image_task</replaceable>"
                   </literallayout>
                   In this case, BitBake must create
                   <replaceable>image2</replaceable> for the "target2"
                   build since the "target1" build depends on it.
               </para>

               <para>
                   Because "target1" and "target2" are enabled for multiple
                   configuration builds and have separate configuration
                   files, BitBake places the artifacts for each build in the
                   respective temporary build directories.
               </para>
            </section>
        </section>
    </section>
</chapter>
