<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
[<!ENTITY % poky SYSTEM "../poky.ent"> %poky; ] >

<chapter id='ref-structure'>

<title>Source Directory Structure</title>

<para>
    The <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink> consists of several components.
    Understanding them and knowing where they are located is key to using the Yocto Project well.
    This chapter describes the Source Directory and gives information about the various
    files and directories.
</para>

<para>
    For information on how to establish a local Source Directory on your development system, see the
    "<ulink url='&YOCTO_DOCS_DEV_URL;#getting-setup'>Getting Set Up</ulink>"
    section in the Yocto Project Development Manual.
</para>

<note>
    The OpenEmbedded build system does not support file or directory names that
    contain spaces.
    Be sure that the Source Directory you use does not contain these types
    of names.
</note>

<section id='structure-core'>
    <title>Top-Level Core Components</title>

    <para>
        This section describes the top-level components of the
        <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
    </para>

    <section id='structure-core-bitbake'>
        <title><filename>bitbake/</filename></title>

        <para>
            This directory includes a copy of BitBake for ease of use.
            The copy usually matches the current stable BitBake release from
            the BitBake project.
            BitBake, a
            <ulink url='&YOCTO_DOCS_DEV_URL;#metadata'>Metadata</ulink>
            interpreter, reads the Yocto Project Metadata and runs the tasks
            defined by that data.
            Failures are usually from the Metadata and not from BitBake itself.
            Consequently, most users do not need to worry about BitBake.
        </para>

        <para>
            When you run the <filename>bitbake</filename> command, the
            main BitBake executable, which resides in the
            <filename>bitbake/bin/</filename> directory, starts.
            Sourcing an environment setup script (e.g.
            <link linkend="structure-core-script"><filename>&OE_INIT_FILE;</filename></link>
            or
            <link linkend="structure-memres-core-script"><filename>oe-init-build-env-memres</filename></link>)
            places the <filename>scripts</filename> and
            <filename>bitbake/bin</filename> directories (in that order) into
            the shell's <filename>PATH</filename> environment variable.
        </para>

        <para>
            For more information on BitBake, see the
            <ulink url='&YOCTO_DOCS_BB_URL;'>BitBake User Manual</ulink>.
        </para>
    </section>

    <section id='structure-core-build'>
        <title><filename>build/</filename></title>

        <para>
            This directory contains user configuration files and the output
            generated by the OpenEmbedded build system in its standard configuration where
            the source tree is combined with the output.
            The <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>
            is created initially when you <filename>source</filename>
            the OpenEmbedded build environment setup script
            (i.e.
            <link linkend='structure-core-script'><filename>&OE_INIT_FILE;</filename></link>
            or
            <link linkend='structure-memres-core-script'><filename>oe-init-build-env-memres</filename></link>).
        </para>

        <para>
            It is also possible to place output and configuration
            files in a directory separate from the
            <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>
            by providing a directory name when you <filename>source</filename>
            the setup script.
            For information on separating output from your local
            Source Directory files, see the
            "<link linkend='structure-core-script'><filename>&OE_INIT_FILE;</filename></link>
            and
            "<link linkend='structure-memres-core-script'><filename>oe-init-build-env-memres</filename></link>"
            sections.
        </para>
    </section>

    <section id='handbook'>
        <title><filename>documentation/</filename></title>

        <para>
            This directory holds the source for the Yocto Project documentation
            as well as templates and tools that allow you to generate PDF and HTML
            versions of the manuals.
            Each manual is contained in a sub-folder.
            For example, the files for this manual reside in
            the <filename>ref-manual/</filename> directory.
        </para>
    </section>

    <section id='structure-core-meta'>
        <title><filename>meta/</filename></title>

        <para>
            This directory contains the OpenEmbedded Core metadata.
            The directory holds recipes, common classes, and machine
            configuration for emulated targets (<filename>qemux86</filename>,
            <filename>qemuarm</filename>, and so forth.)
        </para>
    </section>

    <section id='structure-core-meta-yocto'>
        <title><filename>meta-yocto/</filename></title>

        <para>
            This directory contains the configuration for the Poky
            reference distribution.
        </para>
    </section>

    <section id='structure-core-meta-yocto-bsp'>
        <title><filename>meta-yocto-bsp/</filename></title>

        <para>
            This directory contains the Yocto Project reference
            hardware Board Support Packages (BSPs).
            For more information on BSPs, see the
            <ulink url='&YOCTO_DOCS_BSP_URL;'>Yocto Project Board Support
            Package (BSP) Developer's Guide</ulink>.
        </para>
    </section>

    <section id='structure-meta-selftest'>
        <title><filename>meta-selftest/</filename></title>

        <para>
            This directory adds additional recipes and append files
            used by the OpenEmbedded selftests to verify the behavior
            of the build system.
        </para>

        <para>
            You do not have to add this layer to your
            <filename>bblayers.conf</filename> file unless you want to run the
            selftests.
        </para>
    </section>

    <section id='structure-meta-skeleton'>
        <title><filename>meta-skeleton/</filename></title>

        <para>
            This directory contains template recipes for BSP and kernel development.
        </para>
    </section>

    <section id='structure-core-scripts'>
        <title><filename>scripts/</filename></title>

        <para>
            This directory contains various integration scripts that implement
            extra functionality in the Yocto Project environment (e.g. QEMU scripts).
            The <link linkend="structure-core-script"><filename>&OE_INIT_FILE;</filename></link>
            and
            <link linkend='structure-memres-core-script'><filename>oe-init-build-env-memres</filename></link>
            scripts append this directory to the shell's
            <filename>PATH</filename> environment variable.
        </para>

        <para>
            The <filename>scripts</filename> directory has useful scripts that assist in contributing
            back to the Yocto Project, such as <filename>create-pull-request</filename> and
            <filename>send-pull-request</filename>.
        </para>
    </section>

    <section id='structure-core-script'>
        <title><filename>&OE_INIT_FILE;</filename></title>

        <para>
            This script is one of two scripts that set up the OpenEmbedded build
            environment.
            For information on the other script, see the
            "<link linkend='structure-memres-core-script'><filename>oe-init-build-env-memres</filename></link>"
            section.
        </para>

        <para>
            Running this script with the <filename>source</filename> command in
            a shell makes changes to <filename>PATH</filename> and sets other
            core BitBake variables based on the current working directory.
            You need to run an environment setup script before running BitBake
            commands.
            The script uses other scripts within the
            <filename>scripts</filename> directory to do the bulk of the work.
        </para>

        <para>
            When you run this script, your Yocto Project environment is set
            up, a
            <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>
            is created, your working directory becomes the Build Directory,
            and you are presented with a list of common BitBake targets.
            Here is an example:
            <literallayout class='monospaced'>
     $ source oe-init-build-env

     ### Shell environment set up for builds. ###

     You can now run 'bitbake &lt;target&gt;'

     Common targets are:
         core-image-minimal
         core-image-sato
         meta-toolchain
         adt-installer
         meta-ide-support

     You can also run generated qemu images with a command like 'runqemu qemux86'
            </literallayout>
            The script gets its default list of common targets from the
            <filename>conf-notes.txt</filename> file, which is found in the
            <filename>meta-yocto</filename> directory within the
            <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
            Should you have custom distributions, it is very easy to modify
            this configuration file to include your targets for your
            distribution.
            See the
            "<ulink url='&YOCTO_DOCS_DEV_URL;#creating-a-custom-template-configuration-directory'>Creating a Custom Template Configuration Directory</ulink>"
            section in the Yocto Project Development Manual for more
            information.
        </para>

        <para>
            By default, running this script without a
            <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>
            argument creates the <filename>build</filename> directory
            in your current working directory.
            If you provide a Build Directory argument when you
            <filename>source</filename> the script, you direct the OpenEmbedded
            build system to create a Build Directory of your choice.
            For example, the following command creates a Build Directory named
            <filename>mybuilds</filename> that is outside of the
            <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>:
            <literallayout class='monospaced'>
     $ source &OE_INIT_FILE; ~/mybuilds
            </literallayout>
            The OpenEmbedded build system uses the template configuration
            files, which are found by default in the
            <filename>meta-yocto/conf</filename> directory in the
            <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
            See the
            "<ulink url='&YOCTO_DOCS_DEV_URL;#creating-a-custom-template-configuration-directory'>Creating a Custom Template Configuration Directory</ulink>"
            section in the Yocto Project Development Manual for more
            information.
            <note>
                The OpenEmbedded build system does not support file or directory names that
                contain spaces.
                If you attempt to run the <filename>&OE_INIT_FILE;</filename> script
                from a Source Directory that contains spaces in either the filenames
                or directory names, the script returns an error indicating no such
                file or directory.
                Be sure to use a Source Directory free of names containing spaces.
            </note>
        </para>
    </section>

    <section id='structure-memres-core-script'>
        <title><filename>oe-init-build-env-memres</filename></title>

        <para>
            This script is one of two scripts that set up the OpenEmbedded
            build environment.
            Aside from setting up the environment, this script starts a
            memory-resident BitBake server.
            For information on the other setup script, see the
            "<link linkend='structure-core-script'><filename>&OE_INIT_FILE;</filename></link>"
            section.
        </para>

        <para>
            Memory-resident BitBake resides in memory until you specifically
            remove it using the following BitBake command:
            <literallayout class='monospaced'>
     $ bitbake -m
            </literallayout>
        </para>

        <para>
            Running this script with the <filename>source</filename> command in
            a shell makes changes to <filename>PATH</filename> and sets other
            core BitBake variables based on the current working directory.
            One of these variables is the
            <link linkend='var-BBSERVER'><filename>BBSERVER</filename></link>
            variable, which allows the OpenEmbedded build system to locate
            the server that is running BitBake.
        </para>

        <para>
            You need to run an environment setup script before using BitBake
            commands.
            Following is the script syntax:
            <literallayout class='monospaced'>
     $ source oe-init-build-env-memres <replaceable>port_number</replaceable> <replaceable>build_dir</replaceable>
            </literallayout>
            Following are some considerations when sourcing this script:
            <itemizedlist>
                <listitem><para>
                    The script uses other scripts within the
                    <filename>scripts</filename> directory to do the bulk of
                    the work.
                    </para></listitem>
                <listitem><para>
                    If you do not provide a port number with the script, the
                    BitBake server starts at a randomly selected port.
                    </para></listitem>
                <listitem><para>
                    The script's parameters are positionally dependent.
                    Consequently, you cannot run the script and provide a
                    <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>
                    name without also providing a port number.
                    In other words, the following syntax is illegal:
                    <literallayout class='monospaced'>
     $ source oe-initbuild-env-memres <replaceable>build_dir</replaceable>
                    </literallayout>
                    <note>
                        The previous restriction might be resolved in the
                        future.
                        See
                        <ulink url='https://bugzilla.yoctoproject.org/show_bug.cgi?id=7555'>Bug 7555</ulink>
                        for more information.
                    </note>
                    </para></listitem>
            </itemizedlist>
        </para>

        <para>
            When you run this script, your Yocto Project environment is set
            up, a Build Directory is created, your working directory becomes
            the Build Directory, and you are presented with a list of common
            BitBake targets.
            Here is an example:
            <literallayout class='monospaced'>
     $ source oe-init-build-env-memres
     No port specified, using dynamically selected port

     ### Shell environment set up for builds. ###

     You can now run 'bitbake &lt;target&gt;'

     Common targets are:
         core-image-minimal
         core-image-sato
         meta-toolchain
         adt-installer
         meta-ide-support

     You can also run generated qemu images with a command like 'runqemu qemux86'
     Bitbake server address: 127.0.0.1, server port: 53995
     Bitbake server started on demand as needed, use bitbake -m to shut it down
            </literallayout>
            The script gets its default list of common targets from the
            <filename>conf-notes.txt</filename> file, which is found in the
            <filename>meta-yocto</filename> directory within the
            <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
            Should you have custom distributions, it is very easy to modify
            this configuration file to include your targets for your
            distribution.
            See the
            "<ulink url='&YOCTO_DOCS_DEV_URL;#creating-a-custom-template-configuration-directory'>Creating a Custom Template Configuration Directory</ulink>"
            section in the Yocto Project Development Manual for more
            information.
        </para>

        <para>
            By default, running this script without a
            <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>
            argument creates a build directory named
            <filename>build</filename>.
            If you provide a Build Directory argument and port number when you
            <filename>source</filename> the script, the Build Directory is
            created using that name.
            For example, the following command starts the BitBake server using
            port 53995 and creates a Build Directory named
            <filename>mybuilds</filename> that is outside of the
            <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>:
            <literallayout class='monospaced'>
     $ source oe-init-build-env-memres 53995 ~/mybuilds
            </literallayout>
            The <filename>oe-init-build-env-memres</filename> script starts a
            memory resident BitBake server.
            This BitBake instance uses the
            <filename>bitbake-cookerdaemon.log</filename> file, which is
            located in the Build Directory.
        </para>

        <para>
            The OpenEmbedded build system uses the template configuration
            files, which are found by default in the
            <filename>meta-yocto/conf</filename> directory in the
            <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
            See the
            "<ulink url='&YOCTO_DOCS_DEV_URL;#creating-a-custom-template-configuration-directory'>Creating a Custom Template Configuration Directory</ulink>"
            section in the Yocto Project Development Manual for more
            information.
            <note>
                The OpenEmbedded build system does not support file or
                directory names that contain spaces.
                If you attempt to run the
                <filename>oe-init-build-env-memres</filename> script
                from a Source Directory that contains spaces in either the
                filenames or directory names, the script returns an error
                indicating no such file or directory.
                Be sure to use a Source Directory free of names containing
                spaces.
            </note>
        </para>
    </section>

    <section id='structure-basic-top-level'>
        <title><filename>LICENSE, README, and README.hardware</filename></title>

        <para>
            These files are standard top-level files.
        </para>
    </section>
</section>

<section id='structure-build'>
    <title>The Build Directory - <filename>build/</filename></title>

    <para>
        The OpenEmbedded build system creates the
        <ulink url='&YOCTO_DOCS_DEV_URL;#build-directory'>Build Directory</ulink>
        when you run one of the build environment setup scripts (i.e.
        <link linkend='structure-core-script'><filename>&OE_INIT_FILE;</filename></link>
        or
        <link linkend='structure-memres-core-script'><filename>oe-init-build-env-memres</filename></link>).
    </para>

    <para>
        If you do not give the Build Directory a specific name when you run
        a setup script, the name defaults to <filename>build</filename>.
    </para>

    <para>
        The
        <link linkend='var-TOPDIR'><filename>TOPDIR</filename></link> variable
        points to the Build Directory.
    </para>

    <section id='structure-build-buildhistory'>
        <title><filename>build/buildhistory</filename></title>

        <para>
            The OpenEmbedded build system creates this directory when you
            enable the build history feature.
            The directory tracks build information into image, packages, and
            SDK subdirectories.
            For information on the build history feature, see the
            "<link linkend='maintaining-build-output-quality'>Maintaining Build Output Quality</link>"
            section.
        </para>
    </section>

    <section id='structure-build-conf-local.conf'>
        <title><filename>build/conf/local.conf</filename></title>

        <para>
            This configuration file contains all the local user configurations
            for your build environment.
            The <filename>local.conf</filename> file contains documentation on
            the various configuration options.
            Any variable set here overrides any variable set elsewhere within
            the environment unless that variable is hard-coded within a file
            (e.g. by using '=' instead of '?=').
            Some variables are hard-coded for various reasons but these
            variables are relatively rare.
        </para>

        <para>
            Edit this file to set the
            <filename><link linkend='var-MACHINE'>MACHINE</link></filename>
            for which you want to build, which package types you wish to use
            (<link linkend='var-PACKAGE_CLASSES'><filename>PACKAGE_CLASSES</filename></link>),
            and the location from which you want to access downloaded files
            (<filename><link linkend='var-DL_DIR'>DL_DIR</link></filename>).
        </para>

        <para>
            If <filename>local.conf</filename> is not present when you
            start the build, the OpenEmbedded build system creates it from
            <filename>local.conf.sample</filename> when
            you <filename>source</filename> the top-level build environment
            setup script (i.e.
            <link linkend='structure-core-script'><filename>&OE_INIT_FILE;</filename></link>
            or
            <link linkend='structure-memres-core-script'><filename>oe-init-build-env-memres</filename></link>).
        </para>

        <para>
            The source <filename>local.conf.sample</filename> file used
            depends on the <filename>$TEMPLATECONF</filename> script variable,
            which defaults to <filename>meta-yocto/conf</filename>
            when you are building from the Yocto Project development
            environment and defaults to <filename>meta/conf</filename> when
            you are building from the OpenEmbedded Core environment.
            Because the script variable points to the source of the
            <filename>local.conf.sample</filename> file, this implies that
            you can configure your build environment from any layer by setting
            the variable in the top-level build environment setup script as
            follows:
            <literallayout class='monospaced'>
     TEMPLATECONF=<replaceable>your_layer</replaceable>/conf
            </literallayout>
            Once the build process gets the sample file, it uses
            <filename>sed</filename> to substitute final
            <filename>${</filename><link linkend='var-OEROOT'><filename>OEROOT</filename></link><filename>}</filename>
            values for all <filename>##OEROOT##</filename> values.
            <note>
                You can see how the <filename>TEMPLATECONF</filename> variable
                is used by looking at the
                <filename>scripts/oe-setup-builddir</filename> script in the
                <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
                You can find the Yocto Project version of the
                <filename>local.conf.sample</filename> file in the
                <filename>meta-yocto/conf</filename> directory.
            </note>
        </para>
    </section>

    <section id='structure-build-conf-bblayers.conf'>
        <title><filename>build/conf/bblayers.conf</filename></title>

        <para>
            This configuration file defines
            <ulink url='&YOCTO_DOCS_DEV_URL;#understanding-and-creating-layers'>layers</ulink>,
            which are directory trees, traversed (or walked) by BitBake.
            The <filename>bblayers.conf</filename> file uses the
            <link linkend='var-BBLAYERS'><filename>BBLAYERS</filename></link>
            variable to list the layers BitBake tries to find.
        </para>

        <para>
            If <filename>bblayers.conf</filename> is not present when you
            start the build, the OpenEmbedded build system creates it from
            <filename>bblayers.conf.sample</filename> when
            you <filename>source</filename> the top-level build environment
            setup script (i.e.
            <link linkend='structure-core-script'><filename>&OE_INIT_FILE;</filename></link>
            or
            <link linkend='structure-memres-core-script'><filename>oe-init-build-env-memres</filename></link>).
        </para>

        <para>
            The source <filename>bblayers.conf.sample</filename> file used
            depends on the <filename>$TEMPLATECONF</filename> script variable,
            which defaults to <filename>meta-yocto/conf</filename>
            when you are building from the Yocto Project development
            environment and defaults to <filename>meta/conf</filename> when
            you are building from the OpenEmbedded Core environment.
            Because the script variable points to the source of the
            <filename>bblayers.conf.sample</filename> file, this implies that
            you can base your build from any layer by setting the variable in
            the top-level build environment setup script as follows:
            <literallayout class='monospaced'>
     TEMPLATECONF=<replaceable>your_layer</replaceable>/conf
            </literallayout>
            Once the build process gets the sample file, it uses
            <filename>sed</filename> to substitute final
            <filename>${</filename><link linkend='var-OEROOT'><filename>OEROOT</filename></link><filename>}</filename>
            values for all <filename>##OEROOT##</filename> values.
            <note>
                You can see how the <filename>TEMPLATECONF</filename> variable
                <filename>scripts/oe-setup-builddir</filename> script in the
                <ulink url='&YOCTO_DOCS_DEV_URL;#source-directory'>Source Directory</ulink>.
                You can find the Yocto Project version of the
                <filename>bblayers.conf.sample</filename> file in the
                <filename>meta-yocto/conf</filename> directory.
            </note>
        </para>
    </section>

    <section id='structure-build-conf-sanity_info'>
        <title><filename>build/conf/sanity_info</filename></title>

        <para>
            This file indicates the state of the sanity checks and is created
            during the build.
        </para>
    </section>

    <section id='structure-build-downloads'>
        <title><filename>build/downloads/</filename></title>

        <para>
            This directory contains downloaded upstream source tarballs.
            You can reuse the directory for multiple builds or move
            the directory to another location.
            You can control the location of this directory through the
            <filename><link linkend='var-DL_DIR'>DL_DIR</link></filename> variable.
        </para>
    </section>

    <section id='structure-build-sstate-cache'>
        <title><filename>build/sstate-cache/</filename></title>

        <para>
            This directory contains the shared state cache.
            You can reuse the directory for multiple builds or move
            the directory to another location.
            You can control the location of this directory through the
            <filename><link linkend='var-SSTATE_DIR'>SSTATE_DIR</link></filename> variable.
        </para>
    </section>

    <section id='structure-build-tmp'>
        <title><filename>build/tmp/</filename></title>

        <para>
            The OpenEmbedded build system creates and uses this directory
            for all the build system's output.
            The
            <link linkend='var-TMPDIR'><filename>TMPDIR</filename></link>
            variable points to this directory.
        </para>

        <para>
            BitBake creates this directory if it does not exist.
            As a last resort, to clean up a build and start it from scratch
            (other than the downloads), you can remove everything in the
            <filename>tmp</filename> directory or get rid of the
            directory completely.
            If you do, you should also completely remove the
            <filename>build/sstate-cache</filename> directory.
        </para>
    </section>

    <section id='structure-build-tmp-buildstats'>
        <title><filename>build/tmp/buildstats/</filename></title>

        <para>
            This directory stores the build statistics.
        </para>
    </section>

    <section id='structure-build-tmp-cache'>
        <title><filename>build/tmp/cache/</filename></title>

        <para>
            When BitBake parses the metadata, it creates a cache file of the result that can
            be used when subsequently running commands.
            BitBake stores these results here on a per-machine basis.
        </para>
    </section>

    <section id='structure-build-tmp-deploy'>
        <title><filename>build/tmp/deploy/</filename></title>

        <para>
            This directory contains any "end result" output from the
            OpenEmbedded build process.
            The <link linkend='var-DEPLOY_DIR'><filename>DEPLOY_DIR</filename></link>
            variable points to this directory.
            For more detail on the contents of the <filename>deploy</filename>
            directory, see the
            "<link linkend='images-dev-environment'>Images</link>" and
            "<link linkend='sdk-dev-environment'>Application Development SDK</link>"
            sections.
        </para>
    </section>

    <section id='structure-build-tmp-deploy-deb'>
        <title><filename>build/tmp/deploy/deb/</filename></title>

        <para>
            This directory receives any <filename>.deb</filename> packages produced by
            the build process.
            The packages are sorted into feeds for different architecture types.
        </para>
    </section>

    <section id='structure-build-tmp-deploy-rpm'>
        <title><filename>build/tmp/deploy/rpm/</filename></title>

        <para>
            This directory receives any <filename>.rpm</filename> packages produced by
            the build process.
            The packages are sorted into feeds for different architecture types.
        </para>
    </section>

    <section id='structure-build-tmp-deploy-ipk'>
        <title><filename>build/tmp/deploy/ipk/</filename></title>

        <para>
            This directory receives <filename>.ipk</filename> packages produced by
            the build process.
        </para>
    </section>

    <section id='structure-build-tmp-deploy-licenses'>
        <title><filename>build/tmp/deploy/licenses/</filename></title>

        <para>
            This directory receives package licensing information.
            For example, the directory contains sub-directories for <filename>bash</filename>,
            <filename>busybox</filename>, and <filename>glibc</filename> (among others) that in turn
            contain appropriate <filename>COPYING</filename> license files with other licensing information.
            For information on licensing, see the
            "<ulink url='&YOCTO_DOCS_DEV_URL;#maintaining-open-source-license-compliance-during-your-products-lifecycle'>Maintaining Open Source License Compliance During Your Product's Lifecycle</ulink>"
            section.
        </para>
    </section>

    <section id='structure-build-tmp-deploy-images'>
        <title><filename>build/tmp/deploy/images/</filename></title>

        <para>
            This directory receives complete filesystem images.
            If you want to flash the resulting image from a build onto a device, look here for the image.
        </para>

        <para>
            Be careful when deleting files in this directory.
            You can safely delete old images from this directory (e.g.
            <filename>core-image-*</filename>, <filename>hob-image-*</filename>,
            etc.).
            However, the kernel (<filename>*zImage*</filename>, <filename>*uImage*</filename>, etc.),
            bootloader and other supplementary files might be deployed here prior to building an
            image.
            Because these files are not directly produced from the image, if you
            delete them they will not be automatically re-created when you build the image again.
        </para>

        <para>
            If you do accidentally delete files here, you will need to force them to be
            re-created.
            In order to do that, you will need to know the target that produced them.
            For example, these commands rebuild and re-create the kernel files:
            <literallayout class='monospaced'>
     $ bitbake -c clean virtual/kernel
     $ bitbake virtual/kernel
            </literallayout>
        </para>
    </section>

    <section id='structure-build-tmp-deploy-sdk'>
        <title><filename>build/tmp/deploy/sdk/</filename></title>

        <para>
            The OpenEmbedded build system creates this directory to hold
            toolchain installer scripts, which when executed, install the
            sysroot that matches your target hardware.
            You can find out more about these installers in the
            "<ulink url='&YOCTO_DOCS_ADT_URL;#optionally-building-a-toolchain-installer'>Optionally Building a Toolchain Installer</ulink>"
            section in the Yocto Project Application Developer's Guide.
        </para>
    </section>

    <section id='structure-build-tmp-sstate-control'>
        <title><filename>build/tmp/sstate-control/</filename></title>

        <para>
            The OpenEmbedded build system uses this directory for the
            shared state manifest files.
            The shared state code uses these files to record the files
            installed by each sstate task so that the files can be removed
            when cleaning the recipe or when a newer version is about to
            be installed.
            The build system also uses the manifests to detect and produce
            a warning when files from one task are overwriting those from
            another.
        </para>
    </section>

    <section id='structure-build-tmp-sysroots'>
        <title><filename>build/tmp/sysroots/</filename></title>

        <para>
            This directory contains shared header files and libraries as well as other shared
            data.
            Packages that need to share output with other packages do so within this directory.
            The directory is subdivided by architecture so multiple builds can run within
            the one Build Directory.
        </para>
    </section>

    <section id='structure-build-tmp-stamps'>
        <title><filename>build/tmp/stamps/</filename></title>

        <para>
            This directory holds information that BitBake uses for accounting purposes
            to track what tasks have run and when they have run.
            The directory is sub-divided by architecture, package name, and
            version.
            Following is an example:
            <literallayout class='monospaced'>
     stamps/all-poky-linux/distcc-config/1.0-r0.do_build-2fdd....2do
            </literallayout>
            Although the files in the directory are empty of data,
            BitBake uses the filenames and timestamps for tracking purposes.
        </para>
    </section>

    <section id='structure-build-tmp-log'>
        <title><filename>build/tmp/log/</filename></title>

        <para>
            This directory contains general logs that are not otherwise placed using the
            package's <filename><link linkend='var-WORKDIR'>WORKDIR</link></filename>.
            Examples of logs are the output from the
            <filename>do_check_pkg</filename> or
            <filename>do_distro_check</filename> tasks.
            Running a build does not necessarily mean this directory is created.
        </para>
    </section>

    <section id='structure-build-tmp-work'>
        <title><filename>build/tmp/work/</filename></title>

        <para>
            This directory contains architecture-specific work sub-directories
            for packages built by BitBake.
            All tasks execute from the appropriate work directory.
            For example, the source for a particular package is unpacked,
            patched, configured and compiled all within its own work directory.
            Within the work directory, organization is based on the package group
            and version for which the source is being compiled
            as defined by the
            <link linkend='var-WORKDIR'><filename>WORKDIR</filename></link>.
        </para>

        <para>
            It is worth considering the structure of a typical work directory.
            As an example, consider <filename>linux-yocto-kernel-3.0</filename>
            on the machine <filename>qemux86</filename>
            built within the Yocto Project.
            For this package, a work directory of
            <filename>tmp/work/qemux86-poky-linux/linux-yocto/3.0+git1+&lt;.....&gt;</filename>,
            referred to as the
            <filename><link linkend='var-WORKDIR'>WORKDIR</link></filename>, is created.
            Within this directory, the source is unpacked to
            <filename>linux-qemux86-standard-build</filename> and then patched by Quilt.
            (See the
            "<ulink url='&YOCTO_DOCS_DEV_URL;#using-a-quilt-workflow'>Using Quilt in Your Workflow</ulink>"
            section in the Yocto Project Development Manual for more information.)
            Within the <filename>linux-qemux86-standard-build</filename> directory,
            standard Quilt directories <filename>linux-3.0/patches</filename>
            and <filename>linux-3.0/.pc</filename> are created,
            and standard Quilt commands can be used.
        </para>

        <para>
            There are other directories generated within <filename>WORKDIR</filename>.
            The most important directory is <filename>WORKDIR/temp/</filename>,
            which has log files for each task (<filename>log.do_*.pid</filename>)
            and contains the scripts BitBake runs for each task
            (<filename>run.do_*.pid</filename>).
            The <filename>WORKDIR/image/</filename> directory is where "make
            install" places its output that is then split into sub-packages
            within <filename>WORKDIR/packages-split/</filename>.
        </para>
    </section>

    <section id='structure-build-work-shared'>
        <title><filename>build/tmp/work-shared/</filename></title>

        <para>
            For efficiency, the OpenEmbedded build system creates and uses
            this directory to hold recipes that share a work directory with
            other recipes.
            In practice, this is only used for <filename>gcc</filename>
            and its variants (e.g. <filename>gcc-cross</filename>,
            <filename>libgcc</filename>, <filename>gcc-runtime</filename>,
            and so forth).
        </para>
    </section>
</section>

<section id='structure-meta'>
    <title>The Metadata - <filename>meta/</filename></title>

    <para>
        As mentioned previously,
        <ulink url='&YOCTO_DOCS_DEV_URL;#metadata'>Metadata</ulink> is the core
        of the Yocto Project.
        Metadata has several important subdivisions:
    </para>

    <section id='structure-meta-classes'>
        <title><filename>meta/classes/</filename></title>

        <para>
            This directory contains the <filename>*.bbclass</filename> files.
            Class files are used to abstract common code so it can be reused by multiple
            packages.
            Every package inherits the <filename>base.bbclass</filename> file.
            Examples of other important classes are <filename>autotools.bbclass</filename>, which
            in theory allows any Autotool-enabled package to work with the Yocto Project with minimal effort.
            Another example is <filename>kernel.bbclass</filename> that contains common code and functions
            for working with the Linux kernel.
            Functions like image generation or packaging also have their specific class files
            such as <filename>image.bbclass</filename>, <filename>rootfs_*.bbclass</filename> and
            <filename>package*.bbclass</filename>.
        </para>

        <para>
            For reference information on classes, see the
            "<link linkend='ref-classes'>Classes</link>" chapter.
        </para>
    </section>

    <section id='structure-meta-conf'>
        <title><filename>meta/conf/</filename></title>

        <para>
            This directory contains the core set of configuration files that start from
            <filename>bitbake.conf</filename> and from which all other configuration
            files are included.
            See the include statements at the end of the
            <filename>bitbake.conf</filename> file and you will note that even
            <filename>local.conf</filename> is loaded from there.
            While <filename>bitbake.conf</filename> sets up the defaults, you can often override
            these by using the (<filename>local.conf</filename>) file, machine file or
            the distribution configuration file.
        </para>
    </section>

    <section id='structure-meta-conf-machine'>
        <title><filename>meta/conf/machine/</filename></title>

        <para>
            This directory contains all the machine configuration files.
            If you set <filename>MACHINE = "qemux86"</filename>,
            the OpenEmbedded build system looks for a <filename>qemux86.conf</filename> file in this
            directory.
            The <filename>include</filename> directory contains various data common to multiple machines.
            If you want to add support for a new machine to the Yocto Project, look in this directory.
        </para>
    </section>

    <section id='structure-meta-conf-distro'>
        <title><filename>meta/conf/distro/</filename></title>

        <para>
            The contents of this directory controls any distribution-specific
            configurations.
            For the Yocto Project, the <filename>defaultsetup.conf</filename> is the main file here.
            This directory includes the versions and the
            <filename>SRCDATE</filename> definitions for applications that are configured here.
            An example of an alternative configuration might be <filename>poky-bleeding.conf</filename>.
            Although this file mainly inherits its configuration from Poky.
        </para>
    </section>

    <section id='structure-meta-conf-machine-sdk'>
        <title><filename>meta/conf/machine-sdk/</filename></title>

        <para>
            The OpenEmbedded build system searches this directory for
            configuration files that correspond to the value of
            <link linkend='var-SDKMACHINE'><filename>SDKMACHINE</filename></link>.
            By default, 32-bit and 64-bit x86 files ship with the Yocto
            Project that support some SDK hosts.
            However, it is possible to extend that support to other SDK hosts
            by adding additional configuration files in this subdirectory
            within another layer.
        </para>
    </section>

    <section id='structure-meta-files'>
        <title><filename>meta/files/</filename></title>

        <para>
            This directory contains common license files and several text files
            used by the build system.
            The text files contain minimal device information and
            lists of files and directories with known permissions.
        </para>
    </section>

    <section id='structure-meta-lib'>
        <title><filename>meta/lib/</filename></title>

        <para>
            This directory contains OpenEmbedded Python library code
            used during the build process.
        </para>
    </section>

    <section id='structure-meta-recipes-bsp'>
        <title><filename>meta/recipes-bsp/</filename></title>

        <para>
            This directory contains anything linking to specific hardware or hardware
            configuration information such as "u-boot" and "grub".
        </para>
    </section>

    <section id='structure-meta-recipes-connectivity'>
        <title><filename>meta/recipes-connectivity/</filename></title>

        <para>
            This directory contains libraries and applications related to communication with other devices.
        </para>
    </section>

    <section id='structure-meta-recipes-core'>
        <title><filename>meta/recipes-core/</filename></title>

        <para>
            This directory contains what is needed to build a basic working Linux image
            including commonly used dependencies.
        </para>
    </section>

    <section id='structure-meta-recipes-devtools'>
        <title><filename>meta/recipes-devtools/</filename></title>

        <para>
            This directory contains tools that are primarily used by the build system.
            The tools, however, can also be used on targets.
        </para>
    </section>

    <section id='structure-meta-recipes-extended'>
        <title><filename>meta/recipes-extended/</filename></title>

        <para>
            This directory contains non-essential applications that add features compared to the
            alternatives in core.
            You might need this directory for full tool functionality or for Linux Standard Base (LSB)
            compliance.
        </para>
    </section>

    <section id='structure-meta-recipes-gnome'>
        <title><filename>meta/recipes-gnome/</filename></title>

        <para>
            This directory contains all things related to the GTK+ application framework.
        </para>
    </section>

    <section id='structure-meta-recipes-graphics'>
        <title><filename>meta/recipes-graphics/</filename></title>

        <para>
            This directory contains X and other graphically related system libraries
        </para>
    </section>

    <section id='structure-meta-recipes-kernel'>
        <title><filename>meta/recipes-kernel/</filename></title>

        <para>
            This directory contains the kernel and generic applications and libraries that
            have strong kernel dependencies.
        </para>
    </section>

    <section id='structure-meta-recipes-lsb4'>
        <title><filename>meta/recipes-lsb4/</filename></title>

        <para>
            This directory contains recipes specifically added to support
            the Linux Standard Base (LSB) version 4.x.
        </para>
    </section>

    <section id='structure-meta-recipes-multimedia'>
        <title><filename>meta/recipes-multimedia/</filename></title>

        <para>
            This directory contains codecs and support utilities for audio, images and video.
        </para>
    </section>

    <section id='structure-meta-recipes-qt'>
        <title><filename>meta/recipes-qt/</filename></title>

        <para>
            This directory contains all things related to the Qt application framework.
        </para>
    </section>

    <section id='structure-meta-recipes-rt'>
        <title><filename>meta/recipes-rt/</filename></title>

        <para>
            This directory contains package and image recipes for using and testing
            the <filename>PREEMPT_RT</filename> kernel.
        </para>
    </section>

    <section id='structure-meta-recipes-sato'>
        <title><filename>meta/recipes-sato/</filename></title>

        <para>
            This directory contains the Sato demo/reference UI/UX and its associated applications
            and configuration data.
        </para>
    </section>

    <section id='structure-meta-recipes-support'>
        <title><filename>meta/recipes-support/</filename></title>

        <para>
            This directory contains recipes used by other recipes, but that are
            not directly included in images (i.e. dependencies of other
            recipes).
        </para>
    </section>

    <section id='structure-meta-site'>
        <title><filename>meta/site/</filename></title>

        <para>
            This directory contains a list of cached results for various architectures.
            Because certain "autoconf" test results cannot be determined when cross-compiling due to
            the tests not able to run on a live system, the information in this directory is
            passed to "autoconf" for the various architectures.
        </para>
    </section>

    <section id='structure-meta-recipes-txt'>
        <title><filename>meta/recipes.txt</filename></title>

        <para>
            This file is a description of the contents of <filename>recipes-*</filename>.
        </para>
    </section>
</section>

</chapter>
<!--
vim: expandtab tw=80 ts=4
-->
