.. SPDX-License-Identifier: CC-BY-2.0-UK

*****************************************
The Application Development Toolkit (ADT)
*****************************************

Part of the Yocto Project development solution is an Application
Development Toolkit (ADT). The ADT provides you with a custom-built,
cross-development platform suited for developing a user-targeted product
application.

Fundamentally, the ADT consists of the following:

-  An architecture-specific cross-toolchain and matching sysroot both
   built by the :term:`OpenEmbedded Build System`.
   The toolchain and
   sysroot are based on a `Metadata <&YOCTO_DOCS_DEV_URL;#metadata>`__
   configuration and extensions, which allows you to cross-develop on
   the host machine for the target hardware.

-  The Eclipse IDE Yocto Plug-in.

-  The Quick EMUlator (QEMU), which lets you simulate target hardware.

-  Various user-space tools that greatly enhance your application
   development experience.

The Cross-Development Toolchain
===============================

The `Cross-Development
Toolchain <&YOCTO_DOCS_DEV_URL;#cross-development-toolchain>`__ consists
of a cross-compiler, cross-linker, and cross-debugger that are used to
develop user-space applications for targeted hardware. This toolchain is
created either by running the ADT Installer script, a toolchain
installer script, or through a :term:`Build Directory`
that is based on
your Metadata configuration or extension for your targeted device. The
cross-toolchain works with a matching target sysroot.

Sysroot
=======

The matching target sysroot contains needed headers and libraries for
generating binaries that run on the target architecture. The sysroot is
based on the target root filesystem image that is built by the
OpenEmbedded build system and uses the same Metadata configuration used
to build the cross-toolchain.

.. _eclipse-overview:

Eclipse Yocto Plug-in
=====================

The Eclipse IDE is a popular development environment and it fully
supports development using the Yocto Project. When you install and
configure the Eclipse Yocto Project Plug-in into the Eclipse IDE, you
maximize your Yocto Project experience. Installing and configuring the
Plug-in results in an environment that has extensions specifically
designed to let you more easily develop software. These extensions allow
for cross-compilation, deployment, and execution of your output into a
QEMU emulation session. You can also perform cross-debugging and
profiling. The environment also supports a suite of tools that allows
you to perform remote profiling, tracing, collection of power data,
collection of latency data, and collection of performance data.

For information about the application development workflow that uses the
Eclipse IDE and for a detailed example of how to install and configure
the Eclipse Yocto Project Plug-in, see the "`Working Within
Eclipse <&YOCTO_DOCS_DEV_URL;#adt-eclipse>`__" section of the Yocto
Project Development Manual.

The QEMU Emulator
=================

The QEMU emulator allows you to simulate your hardware while running
your application or image. QEMU is made available a number of ways:

-  If you use the ADT Installer script to install ADT, you can specify
   whether or not to install QEMU.

-  If you have cloned the ``poky`` Git repository to create a
   :term:`Source Directory` and you have
   sourced the environment setup script, QEMU is installed and
   automatically available.

-  If you have downloaded a Yocto Project release and unpacked it to
   create a :term:`Source Directory`
   and you have sourced the environment setup script, QEMU is installed
   and automatically available.

-  If you have installed the cross-toolchain tarball and you have
   sourced the toolchain's setup environment script, QEMU is also
   installed and automatically available.

User-Space Tools
================

User-space tools are included as part of the Yocto Project. You will
find these tools helpful during development. The tools include
LatencyTOP, PowerTOP, OProfile, Perf, SystemTap, and Lttng-ust. These
tools are common development tools for the Linux platform.

-  *LatencyTOP:* LatencyTOP focuses on latency that causes skips in
   audio, stutters in your desktop experience, or situations that
   overload your server even when you have plenty of CPU power left.

-  *PowerTOP:* Helps you determine what software is using the most
   power. You can find out more about PowerTOP at
   https://01.org/powertop/.

-  *OProfile:* A system-wide profiler for Linux systems that is capable
   of profiling all running code at low overhead. You can find out more
   about OProfile at http://oprofile.sourceforge.net/about/. For
   examples on how to setup and use this tool, see the
   "`OProfile <&YOCTO_DOCS_PROF_URL;#profile-manual-oprofile>`__"
   section in the Yocto Project Profiling and Tracing Manual.

-  *Perf:* Performance counters for Linux used to keep track of certain
   types of hardware and software events. For more information on these
   types of counters see https://perf.wiki.kernel.org/. For
   examples on how to setup and use this tool, see the
   "`perf <&YOCTO_DOCS_PROF_URL;#profile-manual-perf>`__" section in the
   Yocto Project Profiling and Tracing Manual.

-  *SystemTap:* A free software infrastructure that simplifies
   information gathering about a running Linux system. This information
   helps you diagnose performance or functional problems. SystemTap is
   not available as a user-space tool through the Eclipse IDE Yocto
   Plug-in. See http://sourceware.org/systemtap for more
   information on SystemTap. For examples on how to setup and use this
   tool, see the
   "`SystemTap <&YOCTO_DOCS_PROF_URL;#profile-manual-systemtap>`__"
   section in the Yocto Project Profiling and Tracing Manual.

-  *Lttng-ust:* A User-space Tracer designed to provide detailed
   information on user-space activity. See http://lttng.org/ust
   for more information on Lttng-ust.
