| .. SPDX-License-Identifier: CC-BY-SA-2.0-UK | 
|   | 
| ************************** | 
| Source Directory Structure | 
| ************************** | 
|   | 
| The :term:`Source Directory` consists of numerous files, | 
| directories and subdirectories; understanding their locations and | 
| contents is key to using the Yocto Project effectively. This chapter | 
| describes the Source Directory and gives information about those files | 
| and directories. | 
|   | 
| For information on how to establish a local Source Directory on your | 
| development system, see the | 
| ":ref:`dev-manual/start:locating yocto project source files`" | 
| section in the Yocto Project Development Tasks Manual. | 
|   | 
| .. 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. | 
|   | 
| .. _structure-core: | 
|   | 
| Top-Level Core Components | 
| ========================= | 
|   | 
| This section describes the top-level components of the :term:`Source Directory`. | 
|   | 
| .. _structure-core-bitbake: | 
|   | 
| ``bitbake/`` | 
| ------------ | 
|   | 
| 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 :term:`Metadata` interpreter, reads the | 
| Yocto Project Metadata and runs the tasks defined by that data. Failures | 
| are usually caused by errors in your Metadata and not from BitBake | 
| itself. | 
|   | 
| When you run the ``bitbake`` command, the main BitBake executable (which | 
| resides in the ``bitbake/bin/`` directory) starts. Sourcing the | 
| environment setup script (i.e. :ref:`structure-core-script`) places | 
| the ``scripts/`` and ``bitbake/bin/`` directories (in that order) into | 
| the shell's ``PATH`` environment variable. | 
|   | 
| For more information on BitBake, see the :doc:`BitBake User Manual | 
| <bitbake:index>`. | 
|   | 
| .. _structure-core-build: | 
|   | 
| ``build/`` | 
| ---------- | 
|   | 
| 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 :term:`Build Directory` | 
| is created initially when you ``source`` | 
| the OpenEmbedded build environment setup script (i.e. | 
| :ref:`structure-core-script`). | 
|   | 
| It is also possible to place output and configuration files in a | 
| directory separate from the :term:`Source Directory` by | 
| providing a directory name when you ``source`` the setup script. For | 
| information on separating output from your local Source Directory files | 
| (commonly described as an "out of tree" build), see the | 
| ":ref:`structure-core-script`" section. | 
|   | 
| .. _handbook: | 
|   | 
| ``documentation/`` | 
| ------------------ | 
|   | 
| 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 its own sub-folder; | 
| for example, the files for this reference manual reside in the | 
| ``ref-manual/`` directory. | 
|   | 
| .. _structure-core-meta: | 
|   | 
| ``meta/`` | 
| --------- | 
|   | 
| This directory contains the minimal, underlying OpenEmbedded-Core | 
| metadata. The directory holds recipes, common classes, and machine | 
| configuration for strictly emulated targets (``qemux86``, ``qemuarm``, | 
| and so forth.) | 
|   | 
| .. _structure-core-meta-poky: | 
|   | 
| ``meta-poky/`` | 
| -------------- | 
|   | 
| Designed above the ``meta/`` content, this directory adds just enough | 
| metadata to define the Poky reference distribution. | 
|   | 
| .. _structure-core-meta-yocto-bsp: | 
|   | 
| ``meta-yocto-bsp/`` | 
| ------------------- | 
|   | 
| This directory contains the Yocto Project reference hardware Board | 
| Support Packages (BSPs). For more information on BSPs, see the | 
| :doc:`/bsp-guide/index`. | 
|   | 
| .. _structure-meta-selftest: | 
|   | 
| ``meta-selftest/`` | 
| ------------------ | 
|   | 
| This directory adds additional recipes and append files used by the | 
| OpenEmbedded selftests to verify the behavior of the build system. You | 
| do not have to add this layer to your ``bblayers.conf`` file unless you | 
| want to run the selftests. | 
|   | 
| .. _structure-meta-skeleton: | 
|   | 
| ``meta-skeleton/`` | 
| ------------------ | 
|   | 
| This directory contains template recipes for BSP and kernel development. | 
|   | 
| .. _structure-core-scripts: | 
|   | 
| ``scripts/`` | 
| ------------ | 
|   | 
| This directory contains various integration scripts that implement extra | 
| functionality in the Yocto Project environment (e.g. QEMU scripts). The | 
| :ref:`structure-core-script` script prepends this directory to the | 
| shell's ``PATH`` environment variable. | 
|   | 
| The ``scripts`` directory has useful scripts that assist in contributing | 
| back to the Yocto Project, such as ``create-pull-request`` and | 
| ``send-pull-request``. | 
|   | 
| .. _structure-core-script: | 
|   | 
| ``oe-init-build-env`` | 
| --------------------- | 
|   | 
| This script sets up the OpenEmbedded build environment. Running this | 
| script with the ``source`` command in a shell makes changes to ``PATH`` | 
| 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 ``scripts`` | 
| directory to do the bulk of the work. | 
|   | 
| When you run this script, your Yocto Project environment is set up, a | 
| :term:`Build Directory` is created, your working | 
| directory becomes the Build Directory, and you are presented with some | 
| simple suggestions as to what to do next, including a list of some | 
| possible targets to build. Here is an example:: | 
|   | 
|    $ source oe-init-build-env | 
|   | 
|    ### Shell environment set up for builds. ### | 
|   | 
|    You can now run 'bitbake <target>' | 
|   | 
|    Common targets are: | 
|        core-image-minimal | 
|        core-image-sato | 
|        meta-toolchain | 
|        meta-ide-support | 
|   | 
|    You can also run generated QEMU images with a command like 'runqemu qemux86-64' | 
|   | 
| The default output of the ``oe-init-build-env`` script is from the | 
| ``conf-notes.txt`` file, which is found in the ``meta-poky`` directory | 
| within the :term:`Source Directory`. If you design a | 
| custom distribution, you can include your own version of this | 
| configuration file to mention the targets defined by your distribution. | 
| See the | 
| ":ref:`dev-manual/common-tasks:creating a custom template configuration directory`" | 
| section in the Yocto Project Development Tasks Manual for more | 
| information. | 
|   | 
| By default, running this script without a Build Directory argument | 
| creates the ``build/`` directory in your current working directory. If | 
| you provide a Build Directory argument when you ``source`` 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 ``mybuilds/`` that is outside of the :term:`Source Directory`:: | 
|   | 
|    $ source oe-init-build-env ~/mybuilds | 
|   | 
| The OpenEmbedded build system uses the template configuration files, which | 
| are found by default in the ``meta-poky/conf/`` directory in the Source | 
| Directory. See the | 
| ":ref:`dev-manual/common-tasks:creating a custom template configuration directory`" | 
| section in the Yocto Project Development Tasks 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 ``oe-init-build-env`` | 
|    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. | 
|   | 
| .. _structure-basic-top-level: | 
|   | 
| ``LICENSE, README, and README.hardware`` | 
| ---------------------------------------- | 
|   | 
| These files are standard top-level files. | 
|   | 
| .. _structure-build: | 
|   | 
| The Build Directory - ``build/`` | 
| ================================ | 
|   | 
| The OpenEmbedded build system creates the :term:`Build Directory` | 
| when you run the build environment setup | 
| script :ref:`structure-core-script`. If you do not give the Build | 
| Directory a specific name when you run the setup script, the name | 
| defaults to ``build/``. | 
|   | 
| For subsequent parsing and processing, the name of the Build directory | 
| is available via the :term:`TOPDIR` variable. | 
|   | 
| .. _structure-build-buildhistory: | 
|   | 
| ``build/buildhistory/`` | 
| ----------------------- | 
|   | 
| The OpenEmbedded build system creates this directory when you enable | 
| build history via the ``buildhistory`` class file. The directory | 
| organizes build information into image, packages, and SDK | 
| subdirectories. For information on the build history feature, see the | 
| ":ref:`dev-manual/common-tasks:maintaining build output quality`" | 
| section in the Yocto Project Development Tasks Manual. | 
|   | 
| .. _structure-build-conf-local.conf: | 
|   | 
| ``build/conf/local.conf`` | 
| ------------------------- | 
|   | 
| This configuration file contains all the local user configurations for | 
| your build environment. The ``local.conf`` 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 such variables are | 
| relatively rare. | 
|   | 
| At a minimum, you would normally edit this file to select the target | 
| :term:`MACHINE`, which package types you wish to use | 
| (:term:`PACKAGE_CLASSES`), and the location from | 
| which you want to access downloaded files (:term:`DL_DIR`). | 
|   | 
| If ``local.conf`` is not present when you start the build, the | 
| OpenEmbedded build system creates it from ``local.conf.sample`` when you | 
| ``source`` the top-level build environment setup script | 
| :ref:`structure-core-script`. | 
|   | 
| The source ``local.conf.sample`` file used depends on the | 
| ``$TEMPLATECONF`` script variable, which defaults to ``meta-poky/conf/`` | 
| when you are building from the Yocto Project development environment, | 
| and to ``meta/conf/`` when you are building from the OpenEmbedded-Core | 
| environment. Because the script variable points to the source of the | 
| ``local.conf.sample`` 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:: | 
|   | 
|    TEMPLATECONF=your_layer/conf | 
|   | 
| Once the build process gets the sample | 
| file, it uses ``sed`` to substitute final | 
| ``${``\ :term:`OEROOT`\ ``}`` values for all | 
| ``##OEROOT##`` values. | 
|   | 
| .. note:: | 
|   | 
|    You can see how the ``TEMPLATECONF`` variable is used by looking at the | 
|    ``scripts/oe-setup-builddir`` script in the :term:`Source Directory`. | 
|    You can find the Yocto Project version of the ``local.conf.sample`` file in | 
|    the ``meta-poky/conf`` directory. | 
|   | 
| .. _structure-build-conf-bblayers.conf: | 
|   | 
| ``build/conf/bblayers.conf`` | 
| ---------------------------- | 
|   | 
| This configuration file defines | 
| :ref:`layers <dev-manual/common-tasks:understanding and creating layers>`, | 
| which are directory trees, traversed (or walked) by BitBake. The | 
| ``bblayers.conf`` file uses the :term:`BBLAYERS` | 
| variable to list the layers BitBake tries to find. | 
|   | 
| If ``bblayers.conf`` is not present when you start the build, the | 
| OpenEmbedded build system creates it from ``bblayers.conf.sample`` when | 
| you ``source`` the top-level build environment setup script (i.e. | 
| :ref:`structure-core-script`). | 
|   | 
| As with the ``local.conf`` file, the source ``bblayers.conf.sample`` | 
| file used depends on the ``$TEMPLATECONF`` script variable, which | 
| defaults to ``meta-poky/conf/`` when you are building from the Yocto | 
| Project development environment, and to ``meta/conf/`` when you are | 
| building from the OpenEmbedded-Core environment. Because the script | 
| variable points to the source of the ``bblayers.conf.sample`` 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:: | 
|   | 
|    TEMPLATECONF=your_layer/conf | 
|   | 
| Once the build process gets the sample file, it uses ``sed`` to substitute final | 
| ``${``\ :term:`OEROOT`\ ``}`` values for all ``##OEROOT##`` values. | 
|   | 
| .. note:: | 
|   | 
|    You can see how the ``TEMPLATECONF`` variable ``scripts/oe-setup-builddir`` | 
|    script in the :term:`Source Directory`. You can find the Yocto Project | 
|    version of the ``bblayers.conf.sample`` file in the ``meta-poky/conf/`` | 
|    directory. | 
|   | 
| .. _structure-build-conf-sanity_info: | 
|   | 
| ``build/cache/sanity_info`` | 
| --------------------------- | 
|   | 
| This file indicates the state of the sanity checks and is created during | 
| the build. | 
|   | 
| .. _structure-build-downloads: | 
|   | 
| ``build/downloads/`` | 
| -------------------- | 
|   | 
| 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 | 
| :term:`DL_DIR` variable. | 
|   | 
| .. _structure-build-sstate-cache: | 
|   | 
| ``build/sstate-cache/`` | 
| ----------------------- | 
|   | 
| 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 | 
| :term:`SSTATE_DIR` variable. | 
|   | 
| .. _structure-build-tmp: | 
|   | 
| ``build/tmp/`` | 
| -------------- | 
|   | 
| The OpenEmbedded build system creates and uses this directory for all | 
| the build system's output. The :term:`TMPDIR` variable | 
| points to this directory. | 
|   | 
| 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 ``tmp`` directory or get | 
| rid of the directory completely. If you do, you should also completely | 
| remove the ``build/sstate-cache`` directory. | 
|   | 
| .. _structure-build-tmp-buildstats: | 
|   | 
| ``build/tmp/buildstats/`` | 
| ------------------------- | 
|   | 
| This directory stores the build statistics. | 
|   | 
| .. _structure-build-tmp-cache: | 
|   | 
| ``build/tmp/cache/`` | 
| -------------------- | 
|   | 
| When BitBake parses the metadata (recipes and configuration files), it | 
| caches the results in ``build/tmp/cache/`` to speed up future builds. | 
| The results are stored on a per-machine basis. | 
|   | 
| During subsequent builds, BitBake checks each recipe (together with, for | 
| example, any files included or appended to it) to see if they have been | 
| modified. Changes can be detected, for example, through file | 
| modification time (mtime) changes and hashing of file contents. If no | 
| changes to the file are detected, then the parsed result stored in the | 
| cache is reused. If the file has changed, it is reparsed. | 
|   | 
| .. _structure-build-tmp-deploy: | 
|   | 
| ``build/tmp/deploy/`` | 
| --------------------- | 
|   | 
| This directory contains any "end result" output from the OpenEmbedded | 
| build process. The :term:`DEPLOY_DIR` variable points | 
| to this directory. For more detail on the contents of the ``deploy`` | 
| directory, see the | 
| ":ref:`overview-manual/concepts:images`" and | 
| ":ref:`overview-manual/concepts:application development sdk`" sections in the Yocto | 
| Project Overview and Concepts Manual. | 
|   | 
| .. _structure-build-tmp-deploy-deb: | 
|   | 
| ``build/tmp/deploy/deb/`` | 
| ------------------------- | 
|   | 
| This directory receives any ``.deb`` packages produced by the build | 
| process. The packages are sorted into feeds for different architecture | 
| types. | 
|   | 
| .. _structure-build-tmp-deploy-rpm: | 
|   | 
| ``build/tmp/deploy/rpm/`` | 
| ------------------------- | 
|   | 
| This directory receives any ``.rpm`` packages produced by the build | 
| process. The packages are sorted into feeds for different architecture | 
| types. | 
|   | 
| .. _structure-build-tmp-deploy-ipk: | 
|   | 
| ``build/tmp/deploy/ipk/`` | 
| ------------------------- | 
|   | 
| This directory receives ``.ipk`` packages produced by the build process. | 
|   | 
| .. _structure-build-tmp-deploy-licenses: | 
|   | 
| ``build/tmp/deploy/licenses/`` | 
| ------------------------------ | 
|   | 
| This directory receives package licensing information. For example, the | 
| directory contains sub-directories for ``bash``, ``busybox``, and | 
| ``glibc`` (among others) that in turn contain appropriate ``COPYING`` | 
| license files with other licensing information. For information on | 
| licensing, see the | 
| ":ref:`dev-manual/common-tasks:maintaining open source license compliance during your product's lifecycle`" | 
| section in the Yocto Project Development Tasks Manual. | 
|   | 
| .. _structure-build-tmp-deploy-images: | 
|   | 
| ``build/tmp/deploy/images/`` | 
| ---------------------------- | 
|   | 
| This directory is populated with the basic output objects of the build | 
| (think of them as the "generated artifacts" of the build process), | 
| including things like the boot loader image, kernel, root filesystem and | 
| more. If you want to flash the resulting image from a build onto a | 
| device, look here for the necessary components. | 
|   | 
| Be careful when deleting files in this directory. You can safely delete | 
| old images from this directory (e.g. ``core-image-*``). However, the | 
| kernel (``*zImage*``, ``*uImage*``, 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. | 
|   | 
| 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:: | 
|   | 
|    $ bitbake -c clean virtual/kernel | 
|    $ bitbake virtual/kernel | 
|   | 
| .. _structure-build-tmp-deploy-sdk: | 
|   | 
| ``build/tmp/deploy/sdk/`` | 
| ------------------------- | 
|   | 
| 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 ":ref:`sdk-manual/appendix-obtain:building an sdk installer`" | 
| section in the Yocto Project Application Development and the Extensible | 
| Software Development Kit (eSDK) manual. | 
|   | 
| .. _structure-build-tmp-sstate-control: | 
|   | 
| ``build/tmp/sstate-control/`` | 
| ----------------------------- | 
|   | 
| 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. | 
|   | 
| .. _structure-build-tmp-sysroots-components: | 
|   | 
| ``build/tmp/sysroots-components/`` | 
| ---------------------------------- | 
|   | 
| This directory is the location of the sysroot contents that the task | 
| :ref:`ref-tasks-prepare_recipe_sysroot` | 
| links or copies into the recipe-specific sysroot for each recipe listed | 
| in :term:`DEPENDS`. Population of this directory is | 
| handled through shared state, while the path is specified by the | 
| :term:`COMPONENTS_DIR` variable. Apart from a few | 
| unusual circumstances, handling of the ``sysroots-components`` directory | 
| should be automatic, and recipes should not directly reference | 
| ``build/tmp/sysroots-components``. | 
|   | 
| .. _structure-build-tmp-sysroots: | 
|   | 
| ``build/tmp/sysroots/`` | 
| ----------------------- | 
|   | 
| Previous versions of the OpenEmbedded build system used to create a | 
| global shared sysroot per machine along with a native sysroot. Since | 
| the 2.3 version of the Yocto Project, there are sysroots in | 
| recipe-specific :term:`WORKDIR` directories. Thus, the | 
| ``build/tmp/sysroots/`` directory is unused. | 
|   | 
| .. note:: | 
|   | 
|    The ``build/tmp/sysroots/`` directory can still be populated using the | 
|    ``bitbake build-sysroots`` command and can be used for compatibility in some | 
|    cases. However, in general it is not recommended to populate this directory. | 
|    Individual recipe-specific sysroots should be used. | 
|   | 
| .. _structure-build-tmp-stamps: | 
|   | 
| ``build/tmp/stamps/`` | 
| --------------------- | 
|   | 
| 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:: | 
|   | 
|       stamps/all-poky-linux/distcc-config/1.0-r0.do_build-2fdd....2do | 
|   | 
| Although the files in the directory are empty of data, BitBake uses the filenames | 
| and timestamps for tracking purposes. | 
|   | 
| For information on how BitBake uses stamp files to determine if a task | 
| should be rerun, see the | 
| ":ref:`overview-manual/concepts:stamp files and the rerunning of tasks`" | 
| section in the Yocto Project Overview and Concepts Manual. | 
|   | 
| .. _structure-build-tmp-log: | 
|   | 
| ``build/tmp/log/`` | 
| ------------------ | 
|   | 
| This directory contains general logs that are not otherwise placed using | 
| the package's :term:`WORKDIR`. Examples of logs are the output from the | 
| ``do_check_pkg`` or ``do_distro_check`` tasks. Running a build does not | 
| necessarily mean this directory is created. | 
|   | 
| .. _structure-build-tmp-work: | 
|   | 
| ``build/tmp/work/`` | 
| ------------------- | 
|   | 
| 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 | 
| :term:`WORKDIR`. | 
|   | 
| It is worth considering the structure of a typical work directory. As an | 
| example, consider ``linux-yocto-kernel-3.0`` on the machine ``qemux86`` | 
| built within the Yocto Project. For this package, a work directory of | 
| ``tmp/work/qemux86-poky-linux/linux-yocto/3.0+git1+<.....>``, referred | 
| to as the :term:`WORKDIR`, is created. Within this directory, the source is | 
| unpacked to ``linux-qemux86-standard-build`` and then patched by Quilt. | 
| (See the ":ref:`dev-manual/common-tasks:using quilt in your workflow`" section in | 
| the Yocto Project Development Tasks Manual for more information.) Within | 
| the ``linux-qemux86-standard-build`` directory, standard Quilt | 
| directories ``linux-3.0/patches`` and ``linux-3.0/.pc`` are created, and | 
| standard Quilt commands can be used. | 
|   | 
| There are other directories generated within :term:`WORKDIR`. The most | 
| important directory is ``WORKDIR/temp/``, which has log files for each | 
| task (``log.do_*.pid``) and contains the scripts BitBake runs for each | 
| task (``run.do_*.pid``). The ``WORKDIR/image/`` directory is where "make | 
| install" places its output that is then split into sub-packages within | 
| ``WORKDIR/packages-split/``. | 
|   | 
| .. _structure-build-tmp-work-tunearch-recipename-version: | 
|   | 
| ``build/tmp/work/tunearch/recipename/version/`` | 
| ----------------------------------------------- | 
|   | 
| The recipe work directory - ``${WORKDIR}``. | 
|   | 
| As described earlier in the | 
| ":ref:`structure-build-tmp-sysroots`" section, | 
| beginning with the 2.3 release of the Yocto Project, the OpenEmbedded | 
| build system builds each recipe in its own work directory (i.e. | 
| :term:`WORKDIR`). The path to the work directory is | 
| constructed using the architecture of the given build (e.g. | 
| :term:`TUNE_PKGARCH`, :term:`MACHINE_ARCH`, or "allarch"), the recipe | 
| name, and the version of the recipe (i.e. | 
| :term:`PE`\ ``:``\ :term:`PV`\ ``-``\ :term:`PR`). | 
|   | 
| Here are key subdirectories within each recipe work directory: | 
|   | 
| -  ``${WORKDIR}/temp``: Contains the log files of each task executed for | 
|    this recipe, the "run" files for each executed task, which contain | 
|    the code run, and a ``log.task_order`` file, which lists the order in | 
|    which tasks were executed. | 
|   | 
| -  ``${WORKDIR}/image``: Contains the output of the | 
|    :ref:`ref-tasks-install` task, which corresponds to | 
|    the ``${``\ :term:`D`\ ``}`` variable in that task. | 
|   | 
| -  ``${WORKDIR}/pseudo``: Contains the pseudo database and log for any | 
|    tasks executed under pseudo for the recipe. | 
|   | 
| -  ``${WORKDIR}/sysroot-destdir``: Contains the output of the | 
|    :ref:`ref-tasks-populate_sysroot` task. | 
|   | 
| -  ``${WORKDIR}/package``: Contains the output of the | 
|    :ref:`ref-tasks-package` task before the output is | 
|    split into individual packages. | 
|   | 
| -  ``${WORKDIR}/packages-split``: Contains the output of the | 
|    ``do_package`` task after the output has been split into individual | 
|    packages. There are subdirectories for each individual package created by | 
|    the recipe. | 
|   | 
| -  ``${WORKDIR}/recipe-sysroot``: A directory populated with the target | 
|    dependencies of the recipe. This directory looks like the target | 
|    filesystem and contains libraries that the recipe might need to link | 
|    against (e.g. the C library). | 
|   | 
| -  ``${WORKDIR}/recipe-sysroot-native``: A directory populated with the | 
|    native dependencies of the recipe. This directory contains the tools | 
|    the recipe needs to build (e.g. the compiler, Autoconf, libtool, and | 
|    so forth). | 
|   | 
| -  ``${WORKDIR}/build``: This subdirectory applies only to recipes that | 
|    support builds where the source is separate from the build artifacts. | 
|    The OpenEmbedded build system uses this directory as a separate build | 
|    directory (i.e. ``${``\ :term:`B`\ ``}``). | 
|   | 
| .. _structure-build-work-shared: | 
|   | 
| ``build/tmp/work-shared/`` | 
| -------------------------- | 
|   | 
| 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 ``gcc`` and its variants | 
| (e.g. ``gcc-cross``, ``libgcc``, ``gcc-runtime``, and so forth). | 
|   | 
| .. _structure-meta: | 
|   | 
| The Metadata - ``meta/`` | 
| ======================== | 
|   | 
| As mentioned previously, :term:`Metadata` is the core of the | 
| Yocto Project. Metadata has several important subdivisions: | 
|   | 
| .. _structure-meta-classes: | 
|   | 
| ``meta/classes/`` | 
| ----------------- | 
|   | 
| This directory contains the ``*.bbclass`` files. Class files are used to | 
| abstract common code so it can be reused by multiple packages. Every | 
| package inherits the ``base.bbclass`` file. Examples of other important | 
| classes are ``autotools.bbclass``, which in theory allows any | 
| Autotool-enabled package to work with the Yocto Project with minimal | 
| effort. Another example is ``kernel.bbclass`` 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 | 
| ``image.bbclass``, ``rootfs_*.bbclass`` and ``package*.bbclass``. | 
|   | 
| For reference information on classes, see the | 
| ":ref:`ref-manual/classes:Classes`" chapter. | 
|   | 
| .. _structure-meta-conf: | 
|   | 
| ``meta/conf/`` | 
| -------------- | 
|   | 
| This directory contains the core set of configuration files that start | 
| from ``bitbake.conf`` and from which all other configuration files are | 
| included. See the include statements at the end of the ``bitbake.conf`` | 
| file and you will note that even ``local.conf`` is loaded from there. | 
| While ``bitbake.conf`` sets up the defaults, you can often override | 
| these by using the (``local.conf``) file, machine file or the | 
| distribution configuration file. | 
|   | 
| .. _structure-meta-conf-machine: | 
|   | 
| ``meta/conf/machine/`` | 
| ---------------------- | 
|   | 
| This directory contains all the machine configuration files. If you set | 
| ``MACHINE = "qemux86"``, the OpenEmbedded build system looks for a | 
| ``qemux86.conf`` file in this directory. The ``include`` 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. | 
|   | 
| .. _structure-meta-conf-distro: | 
|   | 
| ``meta/conf/distro/`` | 
| --------------------- | 
|   | 
| The contents of this directory controls any distribution-specific | 
| configurations. For the Yocto Project, the ``defaultsetup.conf`` is the | 
| main file here. This directory includes the versions and the :term:`SRCDATE` | 
| definitions for applications that are configured here. An example of an | 
| alternative configuration might be ``poky-bleeding.conf``. Although this | 
| file mainly inherits its configuration from Poky. | 
|   | 
| .. _structure-meta-conf-machine-sdk: | 
|   | 
| ``meta/conf/machine-sdk/`` | 
| -------------------------- | 
|   | 
| The OpenEmbedded build system searches this directory for configuration | 
| files that correspond to the value of | 
| :term:`SDKMACHINE`. 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. | 
|   | 
| .. _structure-meta-files: | 
|   | 
| ``meta/files/`` | 
| --------------- | 
|   | 
| 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. | 
|   | 
| .. _structure-meta-lib: | 
|   | 
| ``meta/lib/`` | 
| ------------- | 
|   | 
| This directory contains OpenEmbedded Python library code used during the | 
| build process. | 
|   | 
| .. _structure-meta-recipes-bsp: | 
|   | 
| ``meta/recipes-bsp/`` | 
| --------------------- | 
|   | 
| This directory contains anything linking to specific hardware or | 
| hardware configuration information such as "u-boot" and "grub". | 
|   | 
| .. _structure-meta-recipes-connectivity: | 
|   | 
| ``meta/recipes-connectivity/`` | 
| ------------------------------ | 
|   | 
| This directory contains libraries and applications related to | 
| communication with other devices. | 
|   | 
| .. _structure-meta-recipes-core: | 
|   | 
| ``meta/recipes-core/`` | 
| ---------------------- | 
|   | 
| This directory contains what is needed to build a basic working Linux | 
| image including commonly used dependencies. | 
|   | 
| .. _structure-meta-recipes-devtools: | 
|   | 
| ``meta/recipes-devtools/`` | 
| -------------------------- | 
|   | 
| This directory contains tools that are primarily used by the build | 
| system. The tools, however, can also be used on targets. | 
|   | 
| .. _structure-meta-recipes-extended: | 
|   | 
| ``meta/recipes-extended/`` | 
| -------------------------- | 
|   | 
| This directory contains non-essential applications that add features | 
| compared to the alternatives in core. You might need this directory for | 
| full tool functionality. | 
|   | 
| .. _structure-meta-recipes-gnome: | 
|   | 
| ``meta/recipes-gnome/`` | 
| ----------------------- | 
|   | 
| This directory contains all things related to the GTK+ application | 
| framework. | 
|   | 
| .. _structure-meta-recipes-graphics: | 
|   | 
| ``meta/recipes-graphics/`` | 
| -------------------------- | 
|   | 
| This directory contains X and other graphically related system | 
| libraries. | 
|   | 
| .. _structure-meta-recipes-kernel: | 
|   | 
| ``meta/recipes-kernel/`` | 
| ------------------------ | 
|   | 
| This directory contains the kernel and generic applications and | 
| libraries that have strong kernel dependencies. | 
|   | 
| .. _structure-meta-recipes-multimedia: | 
|   | 
| ``meta/recipes-multimedia/`` | 
| ---------------------------- | 
|   | 
| This directory contains codecs and support utilities for audio, images | 
| and video. | 
|   | 
| .. _structure-meta-recipes-rt: | 
|   | 
| ``meta/recipes-rt/`` | 
| -------------------- | 
|   | 
| This directory contains package and image recipes for using and testing | 
| the ``PREEMPT_RT`` kernel. | 
|   | 
| .. _structure-meta-recipes-sato: | 
|   | 
| ``meta/recipes-sato/`` | 
| ---------------------- | 
|   | 
| This directory contains the Sato demo/reference UI/UX and its associated | 
| applications and configuration data. | 
|   | 
| .. _structure-meta-recipes-support: | 
|   | 
| ``meta/recipes-support/`` | 
| ------------------------- | 
|   | 
| This directory contains recipes used by other recipes, but that are not | 
| directly included in images (i.e. dependencies of other recipes). | 
|   | 
| .. _structure-meta-site: | 
|   | 
| ``meta/site/`` | 
| -------------- | 
|   | 
| 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. | 
|   | 
| .. _structure-meta-recipes-txt: | 
|   | 
| ``meta/recipes.txt`` | 
| -------------------- | 
|   | 
| This file is a description of the contents of ``recipes-*``. |