<!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-tasks'>
<title>Tasks</title>

<para>
    Tasks are units of execution for BitBake.
    Recipes (<filename>.bb</filename> files) use tasks to complete
    configuring, compiling, and packaging software.
    This chapter provides a reference of the tasks defined in the
    OpenEmbedded build system.
</para>

<section id='normal-recipe-build-tasks'>
    <title>Normal Recipe Build Tasks</title>

    <para>
        The following sections describe normal tasks associated with building
        a recipe.
        For more information on tasks and dependencies, see the
        "<ulink url='&YOCTO_DOCS_BB_URL;#tasks'>Tasks</ulink>" and
        "<ulink url='&YOCTO_DOCS_BB_URL;#dependencies'>Dependencies</ulink>"
        sections in the BitBake User Manual.
    </para>

    <section id='ref-tasks-build'>
        <title><filename>do_build</filename></title>

        <para>
            The default task for all recipes.
            This task depends on all other normal tasks
            required to build a recipe.
        </para>
    </section>

    <section id='ref-tasks-compile'>
        <title><filename>do_compile</filename></title>

        <para>
            Compiles the source code.
            This task runs with the current working directory set
            to
            <filename>${</filename><link linkend='var-B'><filename>B</filename></link><filename>}</filename>.
        </para>

        <para>
            The default behavior of this task is to run the
            <filename>oe_runmake</filename> function if a makefile
            (<filename>Makefile</filename>, <filename>makefile</filename>,
            or <filename>GNUmakefile</filename>) is found.
            If no such file is found, the <filename>do_compile</filename>
            task does nothing.
        </para>
    </section>

    <section id='ref-tasks-compile_ptest_base'>
        <title><filename>do_compile_ptest_base</filename></title>

        <para>
            Compiles the runtime test suite included in the software being
            built.
        </para>
    </section>

    <section id='ref-tasks-configure'>
        <title><filename>do_configure</filename></title>

        <para>
            Configures the source by enabling and disabling any build-time and
            configuration options for the software being built.
            The task runs with the current working directory set to
            <filename>${</filename><link linkend='var-B'><filename>B</filename></link><filename>}</filename>.
        </para>

        <para>
            The default behavior of this task is to run
            <filename>oe_runmake clean</filename> if a makefile
            (<filename>Makefile</filename>, <filename>makefile</filename>,
            or <filename>GNUmakefile</filename>) is found and
            <link linkend='var-CLEANBROKEN'><filename>CLEANBROKEN</filename></link>
            is not set to "1".
            If no such file is found or the <filename>CLEANBROKEN</filename>
            variable is set to "1", the <filename>do_configure</filename>
            task does nothing.
        </para>
    </section>

    <section id='ref-tasks-configure_ptest_base'>
        <title><filename>do_configure_ptest_base</filename></title>

        <para>
            Configures the runtime test suite included in the software being
            built.
        </para>
    </section>

    <section id='ref-tasks-deploy'>
        <title><filename>do_deploy</filename></title>

        <para>
            Writes output files that are to be deployed to
            <filename>${</filename><link linkend='var-DEPLOY_DIR_IMAGE'><filename>DEPLOY_DIR_IMAGE</filename></link><filename>}</filename>.
            The task runs with the current working directory set to
            <filename>${</filename><link linkend='var-B'><filename>B</filename></link><filename>}</filename>.
        </para>

        <para>
            Recipes implementing this task should inherit the
            <link linkend='ref-classes-deploy'><filename>deploy</filename></link>
            class and should write the output to
            <filename>${</filename><link linkend='var-DEPLOYDIR'><filename>DEPLOYDIR</filename></link><filename>}</filename>,
            which is not to be confused with <filename>${DEPLOY_DIR}</filename>.
            The <filename>deploy</filename> class sets up
            <filename>do_deploy</filename> as a shared state (sstate) task that
            can be accelerated through sstate use.
            The sstate mechanism takes care of copying the output from
            <filename>${DEPLOYDIR}</filename> to
            <filename>${DEPLOY_DIR_IMAGE}</filename>.
            <note>
            <title>Caution</title>
                Do not write the output directly to
                <filename>${DEPLOY_DIR_IMAGE}</filename>, as this causes
                the sstate mechanism to malfunction.
            </note>
        </para>

        <para>
            The <filename>do_deploy</filename> task is not added as a task
            by default and consequently needs to be added manually.
            If you want the task to run after
            <link linkend='ref-tasks-compile'><filename>do_compile</filename></link>,
            you can add it by doing the following:
            <literallayout class='monospaced'>
     addtask deploy after do_compile
            </literallayout>
            Adding <filename>do_deploy</filename> after other tasks works the
            same way.
            <note>
                You do not need to add <filename>before do_build</filename>
                to the <filename>addtask</filename> command (though it is
                harmless), because the
                <link linkend='ref-classes-base'><filename>base</filename></link>
                class contains the following:
                <literallayout class='monospaced'>
     do_build[recrdeptask] += "do_deploy"
                </literallayout>
                See the
                "<ulink url='&YOCTO_DOCS_BB_URL;#dependencies'>Dependencies</ulink>"
                section in the BitBake User Manual for more information.
            </note>
        </para>

        <para>
            If the <filename>do_deploy</filename> task re-executes, any
            previous output is removed (i.e. "cleaned").
        </para>
    </section>

    <section id='ref-tasks-distrodata'>
        <title><filename>do_distrodata</filename></title>

        <para>
            Provides information about the recipe.
        </para>

        <para>
            The <filename>distrodata</filename> task is included as part of the
            <link linkend='ref-classes-distrodata'><filename>distrodata</filename></link>
            class.
        </para>

        <para>
            To build the <filename>distrodata</filename> task, use the
            <filename>bitbake</filename> command with the "-c" option and
            task name:
            <literallayout class='monospaced'>
     $ bitbake core-image-minimal -c distrodata
            </literallayout>
            By default, the results are stored in
            <link linkend='var-LOG_DIR'><filename>$LOG_DIR</filename></link>
            (e.g. <filename>$BUILD_DIR/tmp/log</filename>).
        </para>
    </section>

    <section id='ref-tasks-fetch'>
        <title><filename>do_fetch</filename></title>

        <para>
            Fetches the source code.
            This task uses the
            <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>
            variable and the argument's prefix to determine the correct
            fetcher module.
        </para>
    </section>

    <section id='ref-tasks-image'>
        <title><filename>do_image</filename></title>

        <para>
            Starts the image generation process.
            The <filename>do_image</filename> task runs after the
            OpenEmbedded build system has run the
            <link linkend='ref-tasks-rootfs'><filename>do_rootfs</filename></link>
            task during which packages are identified for installation into
            the image and the root filesystem is created, complete with
            post-processing.
        </para>

        <para>
            The <filename>do_image</filename> task performs pre-processing
            on the image through the
            <link linkend='var-IMAGE_PREPROCESS_COMMAND'><filename>IMAGE_PREPROCESS_COMMAND</filename></link>
            and dynamically generates supporting
            <filename>do_image_*</filename> tasks as needed.
        </para>

        <para>
            For more information on image creation, see the
            "<ulink url='&YOCTO_DOCS_OM_URL;#image-generation-dev-environment'>Image Generation</ulink>"
            section in the Yocto Project Overview and Concepts Manual.
        </para>
    </section>

    <section id='ref-tasks-image-complete'>
        <title><filename>do_image_complete</filename></title>

        <para>
            Completes the image generation process.
            The <filename>do_image_complete</filename> task runs after the
            OpenEmbedded build system has run the
            <link linkend='ref-tasks-image'><filename>do_image</filename></link>
            task during which image pre-processing occurs and through
            dynamically generated <filename>do_image_*</filename> tasks the
            image is constructed.
        </para>

        <para>
            The <filename>do_image_complete</filename> task performs
            post-processing on the image through the
            <link linkend='var-IMAGE_POSTPROCESS_COMMAND'><filename>IMAGE_POSTPROCESS_COMMAND</filename></link>.
        </para>

        <para>
            For more information on image creation, see the
            "<ulink url='&YOCTO_DOCS_OM_URL;#image-generation-dev-environment'>Image Generation</ulink>"
            section in the Yocto Project Overview and Concepts Manual.
        </para>
    </section>

    <section id='ref-tasks-install'>
        <title><filename>do_install</filename></title>

        <para>
            Copies files that are to be packaged into the holding area
            <filename>${</filename><link linkend='var-D'><filename>D</filename></link><filename>}</filename>.
            This task runs with the current working directory set to
            <filename>${</filename><link linkend='var-B'><filename>B</filename></link><filename>}</filename>,
            which is the compilation directory.
            The <filename>do_install</filename> task, as well as other tasks
            that either directly or indirectly depend on the installed files
            (e.g.
            <link linkend='ref-tasks-package'><filename>do_package</filename></link>,
            <link linkend='ref-tasks-package_write_deb'><filename>do_package_write_*</filename></link>,
            and
            <link linkend='ref-tasks-rootfs'><filename>do_rootfs</filename></link>),
            run under
            <ulink url='&YOCTO_DOCS_OM_URL;#fakeroot-and-pseudo'>fakeroot</ulink>.
            <note>
                <title>Caution</title>

                <para>
                    When installing files, be careful not to set the owner and
                    group IDs of the installed files to unintended values.
                    Some methods of copying files, notably when using the
                    recursive <filename>cp</filename> command, can preserve the
                    UID and/or GID of the original file, which is usually not
                    what you want.
                    The
                    <link linkend='insane-host-user-contaminated'><filename>host-user-contaminated</filename></link>
                    QA check checks for files that probably have the wrong
                    ownership.
                </para>

                <para>
                    Safe methods for installing files include the following:
                    <itemizedlist>
                        <listitem><para>
                            The <filename>install</filename> utility.
                            This utility is the preferred method.
                            </para></listitem>
                        <listitem><para>
                            The <filename>cp</filename> command with the
                            "--no-preserve=ownership" option.
                            </para></listitem>
                        <listitem><para>
                            The <filename>tar</filename> command with the
                            "--no-same-owner" option.
                            See the <filename>bin_package.bbclass</filename>
                            file in the <filename>meta/classes</filename>
                            directory of the
                            <link linkend='source-directory'>Source Directory</link>
                            for an example.
                            </para></listitem>
                    </itemizedlist>
                </para>
            </note>
        </para>
    </section>

    <section id='ref-tasks-install_ptest_base'>
        <title><filename>do_install_ptest_base</filename></title>

        <para>
            Copies the runtime test suite files from the compilation directory
            to a holding area.
        </para>
    </section>

    <section id='ref-tasks-package'>
        <title><filename>do_package</filename></title>

        <para>
            Analyzes the content of the holding area
            <filename>${</filename><link linkend='var-D'><filename>D</filename></link><filename>}</filename>
            and splits the content into subsets based on available packages
            and files.
            This task makes use of the
            <link linkend='var-PACKAGES'><filename>PACKAGES</filename></link>
            and
            <link linkend='var-FILES'><filename>FILES</filename></link>
            variables.
        </para>

        <para>
            The <filename>do_package</filename> task, in conjunction with the
            <link linkend='ref-tasks-packagedata'><filename>do_packagedata</filename></link>
            task, also saves some important package metadata.
            For additional information, see the
            <link linkend='var-PKGDESTWORK'><filename>PKGDESTWORK</filename></link>
            variable and the
            "<ulink url='&YOCTO_DOCS_OM_URL;#automatically-added-runtime-dependencies'>Automatically Added Runtime Dependencies</ulink>"
            section in the Yocto Project Overview and Concepts Manual.
        </para>
    </section>

    <section id='ref-tasks-package_qa'>
        <title><filename>do_package_qa</filename></title>

        <para>
            Runs QA checks on packaged files.
            For more information on these checks, see the
            <link linkend='ref-classes-insane'><filename>insane</filename></link>
            class.
        </para>
    </section>

    <section id='ref-tasks-package_write_deb'>
        <title><filename>do_package_write_deb</filename></title>

        <para>
            Creates Debian packages (i.e. <filename>*.deb</filename> files) and
            places them in the
            <filename>${</filename><link linkend='var-DEPLOY_DIR_DEB'><filename>DEPLOY_DIR_DEB</filename></link><filename>}</filename>
            directory in the package feeds area.
            For more information, see the
            "<ulink url='&YOCTO_DOCS_OM_URL;#package-feeds-dev-environment'>Package Feeds</ulink>"
            section in the Yocto Project Overview and Concepts Manual.
        </para>
    </section>

    <section id='ref-tasks-package_write_ipk'>
        <title><filename>do_package_write_ipk</filename></title>

        <para>
            Creates IPK packages (i.e. <filename>*.ipk</filename> files) and
            places them in the
            <filename>${</filename><link linkend='var-DEPLOY_DIR_IPK'><filename>DEPLOY_DIR_IPK</filename></link><filename>}</filename>
            directory in the package feeds area.
            For more information, see the
            "<ulink url='&YOCTO_DOCS_OM_URL;#package-feeds-dev-environment'>Package Feeds</ulink>"
            section in the Yocto Project Overview and Concepts Manual.
        </para>
    </section>

    <section id='ref-tasks-package_write_rpm'>
        <title><filename>do_package_write_rpm</filename></title>

        <para>
            Creates RPM packages (i.e. <filename>*.rpm</filename> files) and
            places them in the
            <filename>${</filename><link linkend='var-DEPLOY_DIR_RPM'><filename>DEPLOY_DIR_RPM</filename></link><filename>}</filename>
            directory in the package feeds area.
            For more information, see the
            "<ulink url='&YOCTO_DOCS_OM_URL;#package-feeds-dev-environment'>Package Feeds</ulink>"
            section in the Yocto Project Overview and Concepts Manual.
        </para>
    </section>

    <section id='ref-tasks-package_write_tar'>
        <title><filename>do_package_write_tar</filename></title>

        <para>
            Creates tarballs and places them in the
            <filename>${</filename><link linkend='var-DEPLOY_DIR_TAR'><filename>DEPLOY_DIR_TAR</filename></link><filename>}</filename>
            directory in the package feeds area.
            For more information, see the
            "<ulink url='&YOCTO_DOCS_OM_URL;#package-feeds-dev-environment'>Package Feeds</ulink>"
            section in the Yocto Project Overview and Concepts Manual.
        </para>
    </section>

    <section id='ref-tasks-packagedata'>
        <title><filename>do_packagedata</filename></title>

        <para>
            Saves package metadata generated by the
            <link linkend='ref-tasks-package'><filename>do_package</filename></link>
            task in
            <link linkend='var-PKGDATA_DIR'><filename>PKGDATA_DIR</filename></link>
            to make it available globally.
        </para>
    </section>

    <section id='ref-tasks-patch'>
        <title><filename>do_patch</filename></title>

        <para>
            Locates patch files and applies them to the source code.
        </para>

        <para>
            After fetching and unpacking source files, the build system
            uses the recipe's
            <ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
            statements to locate and apply patch files to the source code.
            <note>
                The build system uses the
                <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESPATH'><filename>FILESPATH</filename></ulink>
                variable to determine the default set of directories when
                searching for patches.
            </note>
            Patch files, by default, are <filename>*.patch</filename> and
            <filename>*.diff</filename> files created and kept in a
            subdirectory of the directory holding the recipe file.
            For example, consider the
            <ulink url='&YOCTO_GIT_URL;/cgit/cgit.cgi/poky/tree/meta/recipes-connectivity/bluez5'><filename>bluez5</filename></ulink>
            recipe from the OE-Core layer (i.e.
            <filename>poky/meta</filename>):
            <literallayout class='monospaced'>
     poky/meta/recipes-connectivity/bluez5
            </literallayout>
            This recipe has two patch files located here:
            <literallayout class='monospaced'>
     poky/meta/recipes-connectivity/bluez5/bluez5
            </literallayout>
        </para>

        <para>
            In the <filename>bluez5</filename> recipe, the
            <filename>SRC_URI</filename> statements point to the source and
            patch files needed to build the package.
            <note>
                In the case for the <filename>bluez5_5.48.bb</filename>
                recipe, the <filename>SRC_URI</filename> statements are from an
                include file <filename>bluez5.inc</filename>.
            </note>
        </para>

        <para>
            As mentioned earlier, the build system treats files whose file
            types are <filename>.patch</filename> and
            <filename>.diff</filename> as patch files.
            However, you can use the "apply=yes" parameter with the
            <filename>SRC_URI</filename> statement to indicate any file as a
            patch file:
            <literallayout class='monospaced'>
     SRC_URI = " \
          git://<replaceable>path_to_repo</replaceable>/<replaceable>some_package</replaceable> \
          file://<replaceable>file</replaceable>;apply=yes \
     "
            </literallayout>
        </para>

        <para>
            Conversely, if you have a directory full of patch files and you
            want to exclude some so that the <filename>do_patch</filename>
            task does not apply them during the patch phase, you can use
            the "apply=no" parameter with the <filename>SRC_URI</filename>
            statement:
            <literallayout class='monospaced'>
     SRC_URI = " \
          git://<replaceable>path_to_repo</replaceable>/<replaceable>some_package</replaceable> \
          file://<replaceable>path_to_lots_of_patch_files</replaceable> \
          file://<replaceable>path_to_lots_of_patch_files</replaceable>/<replaceable>patch_file5</replaceable>;apply=no \
     "
            </literallayout>
            In the previous example, assuming all the files in the directory
            holding the patch files end with either <filename>.patch</filename>
            or <filename>.diff</filename>, every file would be applied as a
            patch by default except for the
            <replaceable>patch_file5</replaceable> patch.
        </para>

        <para>
            You can find out more about the patching process in the
            "<ulink url='&YOCTO_DOCS_OM_URL;#patching-dev-environment'>Patching</ulink>"
            section in the Yocto Project Overview and Concepts Manual and the
            "<ulink url='&YOCTO_DOCS_DEV_URL;#new-recipe-patching-code'>Patching Code</ulink>"
            section in the Yocto Project Development Tasks Manual.
        </para>
    </section>

    <section id='ref-tasks-populate_lic'>
        <title><filename>do_populate_lic</filename></title>

        <para>
            Writes license information for the recipe that is collected later
            when the image is constructed.
        </para>
    </section>

    <section id='ref-tasks-populate_sdk'>
        <title><filename>do_populate_sdk</filename></title>

        <para>
            Creates the file and directory structure for an installable SDK.
            See the
            "<ulink url='&YOCTO_DOCS_OM_URL;#sdk-generation-dev-environment'>SDK Generation</ulink>"
            section in the Yocto Project Overview and Concepts Manual for more
            information.
        </para>
    </section>

    <section id='ref-tasks-populate_sysroot'>
        <title><filename>do_populate_sysroot</filename></title>

        <para>
            Stages (copies) a subset of the files installed by the
            <link linkend='ref-tasks-install'><filename>do_install</filename></link>
            task into the appropriate sysroot.
            For information on how to access these files from other recipes,
            see the
            <link linkend='var-STAGING_DIR_HOST'><filename>STAGING_DIR*</filename></link>
            variables.
            Directories that would typically not be needed by other recipes at
            build time (e.g. <filename>/etc</filename>) are not copied by
            default.
        </para>

        <para>
            For information on what directories are copied by default, see the
            <link linkend='var-SYSROOT_DIRS'><filename>SYSROOT_DIRS*</filename></link>
            variables.
            You can change these variables inside your recipe if you need
            to make additional (or fewer) directories available to other
            recipes at build time.
        </para>

        <para>
            The <filename>do_populate_sysroot</filename> task is a
            shared state (sstate) task, which means that the task can
            be accelerated through sstate use.
            Realize also that if the task is re-executed, any previous output
            is removed (i.e. "cleaned").
        </para>
    </section>

    <section id='ref-tasks-prepare_recipe_sysroot'>
        <title><filename>do_prepare_recipe_sysroot</filename></title>

        <para>
            Installs the files into the individual recipe specific sysroots
            (i.e. <filename>recipe-sysroot</filename> and
            <filename>recipe-sysroot-native</filename> under
            <filename>${</filename><link linkend='var-WORKDIR'><filename>WORKDIR</filename></link><filename>}</filename>
            based upon the dependencies specified by
            <link linkend='var-DEPENDS'><filename>DEPENDS</filename></link>).
            See the
            "<link linkend='ref-classes-staging'><filename>staging</filename></link>"
            class for more information.
        </para>
    </section>

    <section id='ref-tasks-rm_work'>
        <title><filename>do_rm_work</filename></title>

        <para>
            Removes work files after the OpenEmbedded build system has
            finished with them.
            You can learn more by looking at the
            "<link linkend='ref-classes-rm-work'><filename>rm_work.bbclass</filename></link>"
            section.
        </para>
    </section>

    <section id='ref-tasks-unpack'>
        <title><filename>do_unpack</filename></title>

        <para>
            Unpacks the source code into a working directory pointed to
            by
            <filename>${</filename><link linkend='var-WORKDIR'><filename>WORKDIR</filename></link><filename>}</filename>.
            The
            <link linkend='var-S'><filename>S</filename></link> variable also
            plays a role in where unpacked source files ultimately reside.
            For more information on how source files are unpacked, see the
            "<ulink url='&YOCTO_DOCS_OM_URL;#source-fetching-dev-environment'>Source Fetching</ulink>"
            section in the Yocto Project Overview and Concepts Manual and also
            see the <filename>WORKDIR</filename> and
            <filename>S</filename> variable descriptions.
        </para>
    </section>
</section>

<section id='manually-called-tasks'>
    <title>Manually Called Tasks</title>

    <para>
        These tasks are typically manually triggered (e.g. by using the
        <filename>bitbake -c</filename> command-line option):
    </para>

    <section id='ref-tasks-checkpkg'>
        <title><filename>do_checkpkg</filename></title>

        <para>
            Provides information about the recipe including its upstream
            version and status.
            The upstream version and status reveals whether or not a version
            of the recipe exists upstream and a status of not updated, updated,
            or unknown.
        </para>

        <para>
            The <filename>checkpkg</filename> task is included as part of the
            <link linkend='ref-classes-distrodata'><filename>distrodata</filename></link>
            class.
        </para>

        <para>
            To build the <filename>checkpkg</filename> task, use the
            <filename>bitbake</filename> command with the "-c" option and
            task name:
            <literallayout class='monospaced'>
     $ bitbake core-image-minimal -c checkpkg
            </literallayout>
            By default, the results are stored in
            <link linkend='var-LOG_DIR'><filename>$LOG_DIR</filename></link>
            (e.g. <filename>$BUILD_DIR/tmp/log</filename>).
        </para>
    </section>

    <section id='ref-tasks-checkuri'>
        <title><filename>do_checkuri</filename></title>

        <para>
            Validates the
            <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>
            value.
        </para>
    </section>

    <section id='ref-tasks-clean'>
        <title><filename>do_clean</filename></title>

        <para>
            Removes all output files for a target from the
            <link linkend='ref-tasks-unpack'><filename>do_unpack</filename></link>
            task forward (i.e. <filename>do_unpack</filename>,
            <link linkend='ref-tasks-configure'><filename>do_configure</filename></link>,
            <link linkend='ref-tasks-compile'><filename>do_compile</filename></link>,
            <link linkend='ref-tasks-install'><filename>do_install</filename></link>,
            and
            <link linkend='ref-tasks-package'><filename>do_package</filename></link>).
        </para>

        <para>
            You can run this task using BitBake as follows:
            <literallayout class='monospaced'>
     $ bitbake -c clean <replaceable>recipe</replaceable>
            </literallayout>
        </para>

        <para>
            Running this task does not remove the
            <ulink url='&YOCTO_DOCS_OM_URL;#shared-state-cache'>sstate</ulink>
            cache files.
            Consequently, if no changes have been made and the recipe is
            rebuilt after cleaning, output files are simply restored from the
            sstate cache.
            If you want to remove the sstate cache files for the recipe,
            you need to use the
            <link linkend='ref-tasks-cleansstate'><filename>do_cleansstate</filename></link>
            task instead (i.e. <filename>bitbake -c cleansstate</filename> <replaceable>recipe</replaceable>).
        </para>
    </section>

    <section id='ref-tasks-cleanall'>
        <title><filename>do_cleanall</filename></title>

        <para>
            Removes all output files, shared state
            (<ulink url='&YOCTO_DOCS_OM_URL;#shared-state-cache'>sstate</ulink>)
            cache, and downloaded source files for a target (i.e. the contents
            of
            <link linkend='var-DL_DIR'><filename>DL_DIR</filename></link>).
            Essentially, the <filename>do_cleanall</filename> task is
            identical to the
            <link linkend='ref-tasks-cleansstate'><filename>do_cleansstate</filename></link>
            task with the added removal of downloaded source files.
        </para>

        <para>
            You can run this task using BitBake as follows:
            <literallayout class='monospaced'>
     $ bitbake -c cleanall <replaceable>recipe</replaceable>
            </literallayout>
        </para>

        <para>
            Typically, you would not normally use the
            <filename>cleanall</filename> task.
            Do so only if you want to start fresh with the
            <link linkend='ref-tasks-fetch'><filename>do_fetch</filename></link>
            task.
        </para>
    </section>

    <section id='ref-tasks-cleansstate'>
        <title><filename>do_cleansstate</filename></title>

        <para>
            Removes all output files and shared state
            (<ulink url='&YOCTO_DOCS_OM_URL;#shared-state-cache'>sstate</ulink>)
            cache for a target.
            Essentially, the <filename>do_cleansstate</filename> task is
            identical to the
            <link linkend='ref-tasks-clean'><filename>do_clean</filename></link>
            task with the added removal of shared state
            (<ulink url='&YOCTO_DOCS_OM_URL;#shared-state-cache'>sstate</ulink>)
            cache.
        </para>

        <para>
            You can run this task using BitBake as follows:
            <literallayout class='monospaced'>
     $ bitbake -c cleansstate <replaceable>recipe</replaceable>
            </literallayout>
        </para>

        <para>
            When you run the <filename>do_cleansstate</filename> task,
            the OpenEmbedded build system no longer uses any
            sstate.
            Consequently, building the recipe from scratch is guaranteed.
            <note>
                The <filename>do_cleansstate</filename> task cannot remove
                sstate from a remote sstate mirror.
                If you need to build a target from scratch using remote
                mirrors, use the "-f" option as follows:
                <literallayout class='monospaced'>
     $ bitbake -f -c do_cleansstate <replaceable>target</replaceable>
                </literallayout>
            </note>
        </para>
     </section>

    <section id='ref-tasks-devpyshell'>
        <title><filename>do_devpyshell</filename></title>

        <para>
            Starts a shell in which an interactive Python interpreter allows
            you to interact with the BitBake build environment.
            From within this shell, you can directly examine and set
            bits from the data store and execute functions as if within
            the BitBake environment.
            See the
            "<ulink url='&YOCTO_DOCS_DEV_URL;#platdev-appdev-devpyshell'>Using a Development Python Shell</ulink>"
            section in the Yocto Project Development Tasks Manual for more
            information about using <filename>devpyshell</filename>.
        </para>
    </section>

    <section id='ref-tasks-devshell'>
        <title><filename>do_devshell</filename></title>

        <para>
            Starts a shell whose environment is set up for
            development, debugging, or both.
            See the
            "<ulink url='&YOCTO_DOCS_DEV_URL;#platdev-appdev-devshell'>Using a Development Shell</ulink>"
            section in the Yocto Project Development Tasks Manual for more
            information about using <filename>devshell</filename>.
        </para>
    </section>

    <section id='ref-tasks-listtasks'>
        <title><filename>do_listtasks</filename></title>

        <para>
            Lists all defined tasks for a target.
        </para>
    </section>

    <section id='ref-tasks-package_index'>
        <title><filename>do_package_index</filename></title>

        <para>
            Creates or updates the index in the
            <ulink url='&YOCTO_DOCS_OM_URL;#package-feeds-dev-environment'>Package Feeds</ulink>
            area.
            <note>
                This task is not triggered with the
                <filename>bitbake -c</filename> command-line option as
                are the other tasks in this section.
                Because this task is specifically for the
                <filename>package-index</filename> recipe,
                you run it using
                <filename>bitbake package-index</filename>.
            </note>
        </para>
    </section>
</section>

<section id='image-related-tasks'>
    <title>Image-Related Tasks</title>

    <para>
        The following tasks are applicable to image recipes.
    </para>

    <section id='ref-tasks-bootimg'>
        <title><filename>do_bootimg</filename></title>

        <para>
            Creates a bootable live image.
            See the
            <link linkend='var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></link>
            variable for additional information on live image types.
        </para>
    </section>

    <section id='ref-tasks-bundle_initramfs'>
        <title><filename>do_bundle_initramfs</filename></title>

        <para>
            Combines an initial RAM disk (initramfs) image and kernel
            together to form a single image.
            The
            <link linkend='var-CONFIG_INITRAMFS_SOURCE'><filename>CONFIG_INITRAMFS_SOURCE</filename></link>
            variable has some more information about these types of images.
        </para>
    </section>

    <section id='ref-tasks-rootfs'>
        <title><filename>do_rootfs</filename></title>

        <para>
            Creates the root filesystem (file and directory structure) for an
            image.
            See the
            "<ulink url='&YOCTO_DOCS_OM_URL;#image-generation-dev-environment'>Image Generation</ulink>"
            section in the Yocto Project Overview and Concepts Manual for more
            information on how the root filesystem is created.
        </para>
    </section>

    <section id='ref-tasks-testimage'>
        <title><filename>do_testimage</filename></title>

        <para>
            Boots an image and performs runtime tests within the image.
            For information on automatically testing images, see the
            "<ulink url='&YOCTO_DOCS_DEV_URL;#performing-automated-runtime-testing'>Performing Automated Runtime Testing</ulink>"
            section in the Yocto Project Development Tasks Manual.
        </para>
    </section>

    <section id='ref-tasks-testimage_auto'>
        <title><filename>do_testimage_auto</filename></title>

        <para>
            Boots an image and performs runtime tests within the image
            immediately after it has been built.
            This task is enabled when you set
            <link linkend='var-TESTIMAGE_AUTO'><filename>TESTIMAGE_AUTO</filename></link>
            equal to "1".
        </para>

        <para>
            For information on automatically testing images, see the
            "<ulink url='&YOCTO_DOCS_DEV_URL;#performing-automated-runtime-testing'>Performing Automated Runtime Testing</ulink>"
            section in the Yocto Project Development Tasks Manual.
        </para>
    </section>
</section>

<section id='kernel-related-tasks'>
    <title>Kernel-Related Tasks</title>

    <para>
        The following tasks are applicable to kernel recipes.
        Some of these tasks (e.g. the
        <link linkend='ref-tasks-menuconfig'><filename>do_menuconfig</filename></link>
        task) are also applicable to recipes that use
        Linux kernel style configuration such as the BusyBox recipe.
    </para>

    <section id='ref-tasks-compile_kernelmodules'>
        <title><filename>do_compile_kernelmodules</filename></title>

        <para>
            Runs the step that builds the kernel modules (if needed).
            Building a kernel consists of two steps: 1) the kernel
            (<filename>vmlinux</filename>) is built, and 2) the modules
            are built (i.e. <filename>make modules</filename>).
        </para>
    </section>

    <section id='ref-tasks-diffconfig'>
        <title><filename>do_diffconfig</filename></title>

        <para>
            When invoked by the user, this task creates a file containing the
            differences between the original config as produced by
            <link linkend='ref-tasks-kernel_configme'><filename>do_kernel_configme</filename></link>
            task and the changes made by the user with other methods
            (i.e. using
            (<link linkend='ref-tasks-kernel_menuconfig'><filename>do_kernel_menuconfig</filename></link>).
            Once the file of differences is created, it can be used to create
            a config fragment that only contains the differences.
            You can invoke this task from the command line as follows:
            <literallayout class='monospaced'>
     $ bitbake linux-yocto -c diffconfig
            </literallayout>
            For more information, see the
            "<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#creating-config-fragments'>Creating Configuration Fragments</ulink>"
            section in the Yocto Project Linux Kernel Development Manual.
        </para>
    </section>

    <section id='ref-tasks-kernel_checkout'>
        <title><filename>do_kernel_checkout</filename></title>

        <para>
            Converts the newly unpacked kernel source into a form with which
            the OpenEmbedded build system can work.
            Because the kernel source can be fetched in several different ways,
            the <filename>do_kernel_checkout</filename> task makes sure that
            subsequent tasks are given a clean working tree copy of the kernel
            with the correct branches checked out.
        </para>
    </section>

    <section id='ref-tasks-kernel_configcheck'>
        <title><filename>do_kernel_configcheck</filename></title>

        <para>
            Validates the configuration produced by the
            <link linkend='ref-tasks-kernel_menuconfig'><filename>do_kernel_menuconfig</filename></link>
            task.
            The <filename>do_kernel_configcheck</filename> task produces
            warnings when a requested configuration does not appear in the
            final <filename>.config</filename> file or when you override a
            policy configuration in a hardware configuration fragment.
            You can run this task explicitly and view the output by using
            the following command:
            <literallayout class='monospaced'>
     $ bitbake linux-yocto -c kernel_configcheck -f
            </literallayout>
            For more information, see the
            "<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#validating-configuration'>Validating Configuration</ulink>"
            section in the Yocto Project Linux Kernel Development Manual.
        </para>
    </section>

    <section id='ref-tasks-kernel_configme'>
        <title><filename>do_kernel_configme</filename></title>

        <para>
            After the kernel is patched by the
            <link linkend='ref-tasks-patch'><filename>do_patch</filename></link>
            task, the <filename>do_kernel_configme</filename> task assembles
            and merges all the kernel config fragments into a merged
            configuration that can then be passed to the kernel configuration
            phase proper.
            This is also the time during which user-specified defconfigs
            are applied if present, and where configuration modes such as
            <filename>--allnoconfig</filename> are applied.
        </para>
    </section>

    <section id='ref-tasks-kernel_menuconfig'>
        <title><filename>do_kernel_menuconfig</filename></title>

        <para>
            Invoked by the user to manipulate the
            <filename>.config</filename> file used to build a linux-yocto
            recipe.
            This task starts the Linux kernel configuration tool, which you
            then use to modify the kernel configuration.
            <note>
                You can also invoke this tool from the command line as
                follows:
                <literallayout class='monospaced'>
     $ bitbake linux-yocto -c menuconfig
                </literallayout>
            </note>
            See the
            "<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#using-menuconfig'>Using <filename>menuconfig</filename></ulink>"
            section in the Yocto Project Linux Kernel Development Manual
            for more information on this configuration tool.
        </para>
    </section>

    <section id='ref-tasks-kernel_metadata'>
        <title><filename>do_kernel_metadata</filename></title>

        <para>
            Collects all the features required for a given kernel build,
            whether the features come from
            <link linkend='var-SRC_URI'><filename>SRC_URI</filename></link>
            or from Git repositories.
            After collection, the <filename>do_kernel_metadata</filename> task
            processes the features into a series of config fragments and
            patches, which can then be applied by subsequent tasks such as
            <link linkend='ref-tasks-patch'><filename>do_patch</filename></link>
            and
            <link linkend='ref-tasks-kernel_configme'><filename>do_kernel_configme</filename></link>.
        </para>
    </section>

    <section id='ref-tasks-menuconfig'>
        <title><filename>do_menuconfig</filename></title>

        <para>
            Runs <filename>make menuconfig</filename> for the kernel.
            For information on <filename>menuconfig</filename>, see the
            "<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#using-menuconfig'>Using&nbsp;&nbsp;<filename>menuconfig</filename></ulink>"
            section in the Yocto Project Linux Kernel Development Manual.
        </para>
    </section>

    <section id='ref-tasks-savedefconfig'>
        <title><filename>do_savedefconfig</filename></title>

        <para>
            When invoked by the user, creates a defconfig file that can be
            used instead of the default defconfig.
            The saved defconfig contains the differences between the default
            defconfig and the changes made by the user using other methods
            (i.e. the
            <link linkend='ref-tasks-kernel_menuconfig'><filename>do_kernel_menuconfig</filename></link>
            task.
            You can invoke the task using the following command:
            <literallayout class='monospaced'>
     $ bitbake linux-yocto -c savedefconfig
            </literallayout>
        </para>
    </section>

    <section id='ref-tasks-shared_workdir'>
        <title><filename>do_shared_workdir</filename></title>

        <para>
            After the kernel has been compiled but before the kernel modules
            have been compiled, this task copies files required for module
            builds and which are generated from the  kernel build into the
            shared work directory.
            With these copies successfully copied, the
            <link linkend='ref-tasks-compile_kernelmodules'><filename>do_compile_kernelmodules</filename></link>
            task can successfully build the kernel modules in the next step
            of the build.
        </para>
    </section>

    <section id='ref-tasks-sizecheck'>
        <title><filename>do_sizecheck</filename></title>

        <para>
            After the kernel has been built, this task checks the size of the
            stripped kernel image against
            <link linkend='var-KERNEL_IMAGE_MAXSIZE'><filename>KERNEL_IMAGE_MAXSIZE</filename></link>.
            If that variable was set and the size of the stripped kernel
            exceeds that size, the kernel build produces a warning to that
            effect.
        </para>
    </section>

    <section id='ref-tasks-strip'>
        <title><filename>do_strip</filename></title>

        <para>
            If
            <filename>KERNEL_IMAGE_STRIP_EXTRA_SECTIONS</filename> is defined,
            this task strips the sections named in that variable from
            <filename>vmlinux</filename>.
            This stripping is typically used to remove nonessential sections
            such as <filename>.comment</filename> sections from a
            size-sensitive configuration.
        </para>
    </section>

    <section id='ref-tasks-validate_branches'>
        <title><filename>do_validate_branches</filename></title>

        <para>
            After the kernel is unpacked but before it is patched, this task
            makes sure that the machine and metadata branches as specified
            by the <link linkend='var-SRCREV'><filename>SRCREV</filename></link>
            variables actually exist on the specified branches.
            If these branches do not exist and
            <link linkend='var-AUTOREV'><filename>AUTOREV</filename></link>
            is not being used, the <filename>do_validate_branches</filename>
            task fails during the build.
        </para>
    </section>
</section>

<section id='miscellaneous-tasks'>
    <title>Miscellaneous Tasks</title>

    <para>
        The following sections describe miscellaneous tasks.
    </para>

    <section id='ref-tasks-spdx'>
        <title><filename>do_spdx</filename></title>

        <para>
            A build stage that takes the source code and scans it on a remote
            FOSSOLOGY server in order to produce an SPDX document.
            This task applies only to the
            <link linkend='ref-classes-spdx'><filename>spdx</filename></link>
            class.
        </para>
    </section>
</section>

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