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