<!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; ] >

<appendix id='sdk-appendix-obtain'>

<title>Obtaining the SDK</title>

<section id='sdk-locating-pre-built-sdk-installers'>
    <title>Locating Pre-Built SDK Installers</title>

    <para>
        You can use existing, pre-built toolchains by locating and running
        an SDK installer script that ships with the Yocto Project.
        Using this method, you select and download an architecture-specific
        SDK installer and then run the script to hand-install the
        toolchain.
    </para>

    <para>
        Follow these steps to locate and hand-install the toolchain:
        <orderedlist>
            <listitem><para>
                <emphasis>Go to the Installers Directory:</emphasis>
                Go to <ulink url='&YOCTO_TOOLCHAIN_DL_URL;'></ulink>
                </para></listitem>
            <listitem><para>
                <emphasis>Open the Folder for Your Build Host:</emphasis>
                Open the folder that matches your
                <ulink url='&YOCTO_DOCS_REF_URL;#build-system-term'>build host</ulink>
                (i.e. <filename>i686</filename> for 32-bit machines or
                <filename>x86_64</filename> for 64-bit machines).
                </para></listitem>
            <listitem><para>
                <emphasis>Locate and Download the SDK Installer:</emphasis>
                You need to find and download the installer appropriate for
                your build host, target hardware, and image type.
                </para>

                <para>The installer files (<filename>*.sh</filename>) follow
                this naming convention:
                <literallayout class='monospaced'>
     poky-glibc-<replaceable>host_system</replaceable>-core-image-<replaceable>type</replaceable>-<replaceable>arch</replaceable>-toolchain[-ext]-<replaceable>release</replaceable>.sh

     Where:
         <replaceable>host_system</replaceable> is a string representing your development system:
                "i686" or "x86_64"

         <replaceable>type</replaceable> is a string representing the image:
                "sato" or "minimal"

         <replaceable>arch</replaceable> is a string representing the target architecture:
                "aarch64", "armv5e", "core2-64", "coretexa8hf-neon", "i586", "mips32r2",
                "mips64", or "ppc7400"

         <replaceable>release</replaceable> is the version of Yocto Project.

         NOTE:
            The standard SDK installer does not have the "-ext" string as
            part of the filename.

                </literallayout>
                The toolchains provided by the Yocto Project are based off of
                the <filename>core-image-sato</filename> and
                <filename>core-image-minimal</filename> images and contain
                libraries appropriate for developing against those images.
                </para>

                <para>For example, if your build host is a 64-bit x86 system
                and you need an extended SDK for a 64-bit core2 target, go
                into the <filename>x86_64</filename> folder and download the
                following installer:
                <literallayout class='monospaced'>
     poky-glibc-x86_64-core-image-sato-core2-64-toolchain-ext-&DISTRO;.sh
                </literallayout>
                </para></listitem>
            <listitem><para>
                <emphasis>Run the Installer:</emphasis>
                Be sure you have execution privileges and run the installer.
                Following is an example from the <filename>Downloads</filename>
                directory:
                <literallayout class='monospaced'>
     $ ~/Downloads/poky-glibc-x86_64-core-image-sato-core2-64-toolchain-ext-&DISTRO;.sh
                </literallayout>
                During execution of the script, you choose the root location
                for the toolchain.
                See the
                "<link linkend='sdk-installed-standard-sdk-directory-structure'>Installed Standard SDK Directory Structure</link>"
                section and the
                "<link linkend='sdk-installed-extensible-sdk-directory-structure'>Installed Extensible SDK Directory Structure</link>"
                section for more information.
                </para></listitem>
        </orderedlist>
    </para>
</section>

<section id='sdk-building-an-sdk-installer'>
    <title>Building an SDK Installer</title>

    <para>
        As an alternative to locating and downloading an SDK installer,
        you can build the SDK installer.
        Follow these steps:
        <orderedlist>
            <listitem><para>
                <emphasis>Set Up the Build Environment:</emphasis>
                Be sure you are set up to use BitBake in a shell.
                See the
                "<ulink url='&YOCTO_DOCS_DEV_URL;#dev-preparing-the-build-host'>Preparing the Build Host</ulink>"
                section in the Yocto Project Development Tasks Manual for
                information on how to get a build host ready that is either a
                native Linux machine or a machine that uses CROPS.
                </para></listitem>
            <listitem><para>
                <emphasis>Clone the <filename>poky</filename> Repository:</emphasis>
                You need to have a local copy of the Yocto Project
                <ulink url='&YOCTO_DOCS_REF_URL;#source-directory'>Source Directory</ulink>
                (i.e. a local <filename>poky</filename> repository).
                See the
                "<ulink url='&YOCTO_DOCS_DEV_URL;#cloning-the-poky-repository'>Cloning the <filename>poky</filename> Repository</ulink>"
                and possibly the
                "<ulink url='&YOCTO_DOCS_DEV_URL;#checking-out-by-branch-in-poky'>Checking Out by Branch in Poky</ulink>"
                and
                "<ulink url='&YOCTO_DOCS_DEV_URL;#checkout-out-by-tag-in-poky'>Checking Out by Tag in Poky</ulink>"
                sections all in the Yocto Project Development Tasks Manual for
                information on how to clone the <filename>poky</filename>
                repository and check out the appropriate branch for your work.
                </para></listitem>
            <listitem><para>
                <emphasis>Initialize the Build Environment:</emphasis>
                While in the root directory of the Source Directory (i.e.
                <filename>poky</filename>), run the
                <ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>&OE_INIT_FILE;</filename></ulink>
                environment setup script to define the OpenEmbedded
                build environment on your build host.
                <literallayout class='monospaced'>
     $ source &OE_INIT_FILE;
                </literallayout>
                Among other things, the script creates the
                <ulink url='&YOCTO_DOCS_REF_URL;#build-directory'>Build Directory</ulink>,
                which is <filename>build</filename> in this case
                and is located in the Source Directory.
                After the script runs, your current working directory
                is set to the <filename>build</filename> directory.
                </para></listitem>
            <listitem><para>
                <emphasis>Make Sure You Are Building an Installer for the Correct Machine:</emphasis>
                Check to be sure that your
                <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink>
                variable in the <filename>local.conf</filename> file in your
                Build Directory matches the architecture for which you are
                building.
                </para></listitem>
            <listitem><para>
                <emphasis>Make Sure Your SDK Machine is Correctly Set:</emphasis>
                If you are building a toolchain designed to run on an
                architecture that differs from your current development host
                machine (i.e. the build host), be sure that the
                <ulink url='&YOCTO_DOCS_REF_URL;#var-SDKMACHINE'><filename>SDKMACHINE</filename></ulink>
                variable in the <filename>local.conf</filename> file in your
                Build Directory is correctly set.
                <note>
                    If you are building an SDK installer for the Extensible
                    SDK, the <filename>SDKMACHINE</filename> value must be
                    set for the architecture of the machine you are using to
                    build the installer.
                    If <filename>SDKMACHINE</filename> is not set appropriately,
                    the build fails and provides an error message similar to
                    the following:
                    <literallayout class='monospaced'>
     The extensible SDK can currently only be built for the same architecture as the machine being built on - SDK_ARCH is
     set to i686 (likely via setting SDKMACHINE) which is different from the architecture of the build machine (x86_64).
     Unable to continue.
                    </literallayout>
                </note>
                </para></listitem>
            <listitem><para>
                <emphasis>Build the SDK Installer:</emphasis>
                To build the SDK installer for a standard SDK and populate
                the SDK image, use the following command form.
                Be sure to replace <replaceable>image</replaceable> with
                an image (e.g. "core-image-sato"):
                <literallayout class='monospaced'>
     $ bitbake <replaceable>image</replaceable> -c populate_sdk
                </literallayout>
                You can do the same for the extensible SDK using this command
                form:
                <literallayout class='monospaced'>
     $ bitbake <replaceable>image</replaceable> -c populate_sdk_ext
                </literallayout>
                These commands produce an SDK installer that contains the
                sysroot that matches your target root filesystem.</para>

                <para>When the <filename>bitbake</filename> command completes,
                the SDK installer will be in
                <filename>tmp/deploy/sdk</filename> in the Build Directory.
                <note><title>Notes</title>
                    <itemizedlist>
                        <listitem><para>
                            By default, the previous BitBake command does not
                            build static binaries.
                            If you want to use the toolchain to build these
                            types of libraries, you need to be sure your SDK
                            has the appropriate static development libraries.
                            Use the
                            <ulink url='&YOCTO_DOCS_REF_URL;#var-TOOLCHAIN_TARGET_TASK'><filename>TOOLCHAIN_TARGET_TASK</filename></ulink>
                            variable inside your <filename>local.conf</filename>
                            file before building the SDK installer.
                            Doing so ensures that the eventual SDK installation
                            process installs the appropriate library packages
                            as part of the SDK.
                            Following is an example using
                            <filename>libc</filename> static development
                            libraries:
                            <literallayout class='monospaced'>
     TOOLCHAIN_TARGET_TASK_append = " libc-staticdev"
                            </literallayout>
                            </para></listitem>
                    </itemizedlist>
                </note>
            </para></listitem>
            <listitem><para>
                <emphasis>Run the Installer:</emphasis>
                You can now run the SDK installer from
                <filename>tmp/deploy/sdk</filename> in the Build Directory.
                Following is an example:
                <literallayout class='monospaced'>
     $ cd ~/poky/build/tmp/deploy/sdk
     $ ./poky-glibc-x86_64-core-image-sato-core2-64-toolchain-ext-&DISTRO;.sh
                </literallayout>
                During execution of the script, you choose the root location
                for the toolchain.
                See the
                "<link linkend='sdk-installed-standard-sdk-directory-structure'>Installed Standard SDK Directory Structure</link>"
                section and the
                "<link linkend='sdk-installed-extensible-sdk-directory-structure'>Installed Extensible SDK Directory Structure</link>"
                section for more information.
                </para></listitem>
        </orderedlist>
    </para>
</section>

<section id='sdk-extracting-the-root-filesystem'>
    <title>Extracting the Root Filesystem</title>

    <para>
        After installing the toolchain, for some use cases you
        might need to separately extract a root filesystem:
        <itemizedlist>
            <listitem><para>
                You want to boot the image using NFS.
                </para></listitem>
            <listitem><para>
                You want to use the root filesystem as the
                target sysroot.
                </para></listitem>
            <listitem><para>
                You want to develop your target application
                using the root filesystem as the target sysroot.
                </para></listitem>
        </itemizedlist>
    </para>

    <para>
        Follow these steps to extract the root filesystem:
        <orderedlist>
            <listitem><para>
                <emphasis>Locate and Download the Tarball for the Pre-Built
                Root Filesystem Image File:</emphasis>
                You need to find and download the root filesystem image
                file that is appropriate for your target system.
                These files are kept in machine-specific folders in the
                <ulink url='&YOCTO_DL_URL;/releases/yocto/yocto-&DISTRO;/machines/'>Index of Releases</ulink>
                in the "machines" directory.</para>

                <para>The machine-specific folders of the "machines" directory
                contain tarballs (<filename>*.tar.bz2</filename>) for supported
                machines.
                These directories also contain flattened root filesystem
                image files (<filename>*.ext4</filename>), which you can use
                with QEMU directly.</para>

                <para>The pre-built root filesystem image files
                follow these naming conventions:
                <literallayout class='monospaced'>
<!--
     core-image-<replaceable>profile</replaceable>-<replaceable>arch</replaceable>-<replaceable>date_time</replaceable>.rootfs.tar.bz2
-->
     core-image-<replaceable>profile</replaceable>-<replaceable>arch</replaceable>.tar.bz2

     Where:
         <replaceable>profile</replaceable> is the filesystem image's profile:
                   lsb, lsb-dev, lsb-sdk, minimal, minimal-dev, minimal-initramfs,
                   sato, sato-dev, sato-sdk, sato-sdk-ptest. For information on
                   these types of image profiles, see the "<ulink url='&YOCTO_DOCS_REF_URL;#ref-images'>Images</ulink>" chapter in
                   the Yocto Project Reference Manual.

         <replaceable>arch</replaceable> is a string representing the target architecture:
                   beaglebone-yocto, beaglebone-yocto-lsb, edgerouter, edgerouter-lsb,
                   genericx86, genericx86-64, genericx86-64-lsb, genericx86-lsb,
                   mpc8315e-rdb, mpc8315e-rdb-lsb, and qemu*.

<!-->
         <replaceable>date_time</replaceable> is a date and time stamp.
-->

                </literallayout>
                The root filesystems provided by the Yocto Project are based
                off of the <filename>core-image-sato</filename> and
                <filename>core-image-minimal</filename> images.
                </para>

                <para>For example, if you plan on using a BeagleBone device
                as your target hardware and your image is a
                <filename>core-image-sato-sdk</filename>
                image, you can download the following file:
                <literallayout class='monospaced'>
     core-image-sato-sdk-beaglebone-yocto.tar.bz2
                </literallayout>
                </para></listitem>
            <listitem><para>
                <emphasis>Initialize the Cross-Development Environment:</emphasis>
                You must <filename>source</filename> the cross-development
                environment setup script to establish necessary environment
                variables.</para>

                <para>This script is located in the top-level directory in
                which you installed the toolchain (e.g.
                <filename>poky_sdk</filename>).</para>

                <para>Following is an example based on the toolchain installed
                in the
                "<link linkend='sdk-locating-pre-built-sdk-installers'>Locating Pre-Built SDK Installers</link>"
                section:
                <literallayout class='monospaced'>
     $ source ~/poky_sdk/environment-setup-core2-64-poky-linux
                </literallayout>
                </para></listitem>
            <listitem><para>
                <emphasis>Extract the Root Filesystem:</emphasis>
                Use the <filename>runqemu-extract-sdk</filename> command
                and provide the root filesystem image.</para>

                <para>Following is an example command that extracts the root
                filesystem from a previously built root filesystem image that
                was downloaded from the
                <ulink url='&YOCTO_DOCS_OM_URL;#index-downloads'>Index of Releases</ulink>.
                This command extracts the root filesystem into the
                <filename>core2-64-sato</filename> directory:
                <literallayout class='monospaced'>
     $ runqemu-extract-sdk ~/Downloads/core-image-sato-sdk-beaglebone-yocto.tar.bz2 ~/beaglebone-sato
                </literallayout>
                You could now point to the target sysroot at
                <filename>beablebone-sato</filename>.
                </para></listitem>
        </orderedlist>
    </para>
</section>

<section id='sdk-installed-standard-sdk-directory-structure'>
    <title>Installed Standard SDK Directory Structure</title>

    <para>
        The following figure shows the resulting directory structure after
        you install the Standard SDK by running the <filename>*.sh</filename>
        SDK installation script:
    </para>

    <para>
        <imagedata fileref="figures/sdk-installed-standard-sdk-directory.png" scale="80" align="center" />
    </para>

    <para>
        The installed SDK consists of an environment setup script for the SDK,
        a configuration file for the target, a version file for the target,
        and the root filesystem (<filename>sysroots</filename>) needed to
        develop objects for the target system.
    </para>

    <para>
        Within the figure, italicized text is used to indicate replaceable
        portions of the file or directory name.
        For example,
        <replaceable>install_dir</replaceable>/<replaceable>version</replaceable>
        is the directory where the SDK is installed.
        By default, this directory is <filename>/opt/poky/</filename>.
        And, <replaceable>version</replaceable> represents the specific
        snapshot of the SDK (e.g. <filename>&DISTRO;</filename>).
        Furthermore, <replaceable>target</replaceable> represents the target
        architecture (e.g. <filename>i586</filename>) and
        <replaceable>host</replaceable> represents the development system's
        architecture (e.g. <filename>x86_64</filename>).
        Thus, the complete names of the two directories within the
        <filename>sysroots</filename> could be
        <filename>i586-poky-linux</filename> and
        <filename>x86_64-pokysdk-linux</filename> for the target and host,
        respectively.
    </para>
</section>

<section id='sdk-installed-extensible-sdk-directory-structure'>
    <title>Installed Extensible SDK Directory Structure</title>

    <para>
        The following figure shows the resulting directory structure after
        you install the Extensible SDK by running the <filename>*.sh</filename>
        SDK installation script:
    </para>

    <para>
        <imagedata fileref="figures/sdk-installed-extensible-sdk-directory.png" scale="80" align="center" />
    </para>

    <para>
        The installed directory structure for the extensible SDK is quite
        different than the installed structure for the standard SDK.
        The extensible SDK does not separate host and target parts in the
        same manner as does the standard SDK.
        The extensible SDK uses an embedded copy of the OpenEmbedded
        build system, which has its own sysroots.
    </para>

    <para>
        Of note in the directory structure are an environment setup script
        for the SDK, a configuration file for the target, a version file for
        the target, and log files for the OpenEmbedded build system
        preparation script run by the installer and BitBake.
    </para>

    <para>
        Within the figure, italicized text is used to indicate replaceable
        portions of the file or directory name.
        For example,
        <replaceable>install_dir</replaceable> is the directory where the SDK
        is installed, which is <filename>poky_sdk</filename> by default, and
        <replaceable>target</replaceable> represents the target
        architecture (e.g. <filename>i586</filename>).
    </para>
</section>

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