summaryrefslogtreecommitdiff
path: root/poky/documentation/sdk-manual/sdk-extensible.rst
diff options
context:
space:
mode:
authorAndrew Geissler <geissonator@yahoo.com>2020-12-13 17:44:15 +0300
committerAndrew Geissler <geissonator@yahoo.com>2020-12-15 21:53:47 +0300
commit09209eec235a35b7089db987561c12e9bd023237 (patch)
tree2d3580484ffacafe11b72e9abaab50a428dd617d /poky/documentation/sdk-manual/sdk-extensible.rst
parentf7ba29eda266e04f867e4338b6b8b10c1969419c (diff)
downloadopenbmc-09209eec235a35b7089db987561c12e9bd023237.tar.xz
poky: subtree update:0ac99625bf..796be0593a
Alexander Kanavin (31): netbase: upgrade 6.1 -> 6.2 meson: upgrade 0.55.1 -> 0.56.0 vulkan-samples: update to latest revision libcap: update 2.44 -> 2.45 bind: upgrade 9.16.7 -> 9.16.9 quota: upgrade 4.05 -> 4.06 pango: upgrade 1.46.2 -> 1.48.0 elfutils: upgrade 0.181 -> 0.182 ifupdown: upgrade 0.8.35 -> 0.8.36 createrepo-c: upgrade 0.16.1 -> 0.16.2 acpica: upgrade 20200925 -> 20201113 grep: upgrade 3.5 -> 3.6 man-pages: upgrade 5.08 -> 5.09 stress-ng: upgrade 0.11.23 -> 0.11.24 libhandy: upgrade 1.0.1 -> 1.0.2 piglit: upgrade to latest revision xkbcomp: upgrade 1.4.3 -> 1.4.4 lz4: upgrade 1.9.2 -> 1.9.3 bison: upgrade 3.7.3 -> 3.7.4 python3-setuptools-scm: fix upstream version check cantarell-fonts: update 0.0.25 -> 0.201 meta/lib/oe/reproducible.py: gitsm:// works just as fine as git:// for timestamps llvm: fix reproducibility ruby: fix reproducibility webkitgtk: fix reproducibility ffmpeg: fix reproducibility piglit: fix reproducibility serf: do not install the static library llvm: sort the lists in generated source reproducibibly kea: fix reproducibility poky.conf: do not write current date into distro version, use git hash instead Andrej Valek (1): kernel-dummy: fix executing unexpected tasks Anuj Mittal (1): releases.rst: add gatesgarth to current releases Brett Warren (1): libffi: add patch to revert clang VFP workaround Chandana kalluri (1): populate_sdk_ext: use SDK_CUSTOM_TEPLATECONF variable to enable custom templateconf.cfg Changqing Li (1): buildtools-tarball: add wic dependency into extended buildtools Diego Sueiro (2): modutils-initscripts: Fix modules.dep creation when USE_DEPMOD="0" initscripts: Change execution order between checkroot and modutils Dmitry Baryshkov (2): linux-firmware: upgrade 20201022 -> 20201118 linux-firmware: package ath11k firmware Fabio Berton (1): mesa: Update 20.2.1 -> 20.2.4 Gratian Crisan (1): kernel-module-split.bbclass: fix kernel modules getting marked as CONFFILES Jack Mitchell (3): Revert "connman: set service to conflict with systemd-networkd" systemd-conf: add PACKAGECONFIG to enable/disable auto ethernet DHCP systemd-conf: match ethernet interfaces by type rather than globbing Joshua Watt (2): bitbake: hashserv: client: Fix AF_UNIX path length limits bitbake: hashserv: Fix broken AF_UNIX path length limit Kai Kang (2): systemd-systemctl-native: capable to call without argument systemd.bbclass: update command to check systemctl available Kevin Hao (1): tune-octeontx2.inc: Add tune for Marvell OCTEON TX2 core Li Wang (2): qemu: CVE-2020-29129 CVE-2020-29130 qemu: CVE-2020-25624 Luca Boccassi (1): dbus: move messagebus user to dbus-common package Michael Halstead (1): releases: conf: add link to 3.1.4, update to include 3.1.4 Nicolas Dechesne (19): sphinx: add .vscode in .gitignore {dev,kernel,sdk}-manual: replace hardcoded release version with &DISTRO; sphinx: replace bitbake labels with references to corresponding title brief-yoctoprojectqs: replace labels with references to section title dev-manual: replace labels with references to section title ref-manual: replace labels with references to section title sdk-manual: replace labels with references to section title overview-manual: remove unused labels dev-manual: remove unused labels sphinx: rename top level document in each manual sphinx: use absolute paths for :doc: references test-manual: remove 'test-manual' from filenames toaster-manual: remove 'toaster-manual' from filenames dev-manual: remove 'dev-manual' from filenames kernel-dev: remove 'kernel-dev' from filenames profile-manual: remove 'profile-manual' from filenames overview-manual: remove 'overview-manual' from filenames sdk-manual: remove 'sdk' from filenames ref-manual: remove 'ref' from filenames Paul Barker (5): documentation: Simplify yocto_wiki links documentation: Simplify yocto_git links ref-manual: Simplify oe_git links poky.conf: Add opensuseleap-15.2 and fedora-33 to tested distros poky.conf: Drop fedora-30 from tested distros Peter Kjellerstedt (2): pseudo: Simplify pseudo_client_ignore_path_chroot() bitbake.conf: Add all layers (from BBLAYERS) to PSEUDO_IGNORE_PATHS Richard Purdie (8): lz4: Use the new branch naming from upstream Revert "bitbake.conf: Add all layers (from BBLAYERS) to PSEUDO_IGNORE_PATHS" build-appliance-image: Update to master head revision bitbake: Revert "fetch2: use relative symlinks for anything pulled from PREMIRRORS" build-appliance-image: Update to master head revision metadata_scm: Fix signature handling of METADATA_REVISION and METADATA_BRANCH poky: Set SDK_VERSION explicitly build-appliance-image: Update to master head revision Ross Burton (9): oeqa/devtool: use Yocto mirror for pv-1.5.3 tarball image_types: remove obsolete tar comment image_types: sort tarball file listings package_manager/ipk: neaten OPKGLIBDIR logic ldconfig-native: don't write auxiliary cache package_manager/ipk: improve remove_packaging_data oeqa/selftest/containerimage: update for improved cleanup coreutils: add SUSE-specific issues to CVE whitelist bitbake: msg: use safe YAML loader Sinan Kaya (1): poky-tiny: enable section removal Tomasz Dziendzielski (1): pseudo: Update to print PSEUDO_LOGFILE in abort message on path mismatches sangeeta jain (1): meta/lib/oeqa/manual/oe-core.json: Update test_bitbake_devshell zangrc (3): libinput: upgrade 1.16.3 -> 1.16.4 lighttpd: upgrade 1.4.55 -> 1.4.56 sysstat: upgrade 12.4.0 -> 12.4.1 Signed-off-by: Andrew Geissler <geissonator@yahoo.com> Change-Id: I65f2f1c9d44433f3e62609240012c42256679b51
Diffstat (limited to 'poky/documentation/sdk-manual/sdk-extensible.rst')
-rw-r--r--poky/documentation/sdk-manual/sdk-extensible.rst1312
1 files changed, 0 insertions, 1312 deletions
diff --git a/poky/documentation/sdk-manual/sdk-extensible.rst b/poky/documentation/sdk-manual/sdk-extensible.rst
deleted file mode 100644
index 10e4d2061..000000000
--- a/poky/documentation/sdk-manual/sdk-extensible.rst
+++ /dev/null
@@ -1,1312 +0,0 @@
-.. SPDX-License-Identifier: CC-BY-SA-2.0-UK
-
-************************
-Using the Extensible SDK
-************************
-
-This chapter describes the extensible SDK and how to install it.
-Information covers the pieces of the SDK, how to install it, and
-presents a look at using the ``devtool`` functionality. The extensible
-SDK makes it easy to add new applications and libraries to an image,
-modify the source for an existing component, test changes on the target
-hardware, and ease integration into the rest of the
-:term:`OpenEmbedded Build System`.
-
-.. note::
-
- For a side-by-side comparison of main features supported for an
- extensible SDK as compared to a standard SDK, see the "
- Introduction
- " section.
-
-In addition to the functionality available through ``devtool``, you can
-alternatively make use of the toolchain directly, for example from
-Makefile and Autotools. See the "`Using the SDK Toolchain
-Directly <#sdk-working-projects>`__" chapter for more information.
-
-Why use the Extensible SDK and What is in It?
-=============================================
-
-The extensible SDK provides a cross-development toolchain and libraries
-tailored to the contents of a specific image. You would use the
-Extensible SDK if you want a toolchain experience supplemented with the
-powerful set of ``devtool`` commands tailored for the Yocto Project
-environment.
-
-The installed extensible SDK consists of several files and directories.
-Basically, it contains an SDK environment setup script, some
-configuration files, an internal build system, and the ``devtool``
-functionality.
-
-Installing the Extensible SDK
-=============================
-
-The first thing you need to do is install the SDK on your :term:`Build
-Host` by running the ``*.sh`` installation script.
-
-You can download a tarball installer, which includes the pre-built
-toolchain, the ``runqemu`` script, the internal build system,
-``devtool``, and support files from the appropriate
-:yocto_dl:`toolchain </releases/yocto/yocto-3.1.2/toolchain/>` directory within the Index of
-Releases. Toolchains are available for several 32-bit and 64-bit
-architectures with the ``x86_64`` directories, respectively. The
-toolchains the Yocto Project provides are based off the
-``core-image-sato`` and ``core-image-minimal`` images and contain
-libraries appropriate for developing against that image.
-
-The names of the tarball installer scripts are such that a string
-representing the host system appears first in the filename and then is
-immediately followed by a string representing the target architecture.
-An extensible SDK has the string "-ext" as part of the name. Following
-is the general form:
-::
-
- poky-glibc-host_system-image_type-arch-toolchain-ext-release_version.sh
-
- Where:
- host_system is a string representing your development system:
-
- i686 or x86_64.
-
- image_type is the image for which the SDK was built:
-
- core-image-sato or core-image-minimal
-
- arch is a string representing the tuned target architecture:
-
- aarch64, armv5e, core2-64, i586, mips32r2, mips64, ppc7400, or cortexa8hf-neon
-
- release_version is a string representing the release number of the Yocto Project:
-
- 3.1.2, 3.1.2+snapshot
-
-For example, the following SDK installer is for a 64-bit
-development host system and a i586-tuned target architecture based off
-the SDK for ``core-image-sato`` and using the current DISTRO snapshot:
-::
-
- poky-glibc-x86_64-core-image-sato-i586-toolchain-ext-DISTRO.sh
-
-.. note::
-
- As an alternative to downloading an SDK, you can build the SDK
- installer. For information on building the installer, see the "
- Building an SDK Installer
- " section.
-
-The SDK and toolchains are self-contained and by default are installed
-into the ``poky_sdk`` folder in your home directory. You can choose to
-install the extensible SDK in any location when you run the installer.
-However, because files need to be written under that directory during
-the normal course of operation, the location you choose for installation
-must be writable for whichever users need to use the SDK.
-
-The following command shows how to run the installer given a toolchain
-tarball for a 64-bit x86 development host system and a 64-bit x86 target
-architecture. The example assumes the SDK installer is located in
-``~/Downloads/`` and has execution rights.
-
-.. note::
-
- If you do not have write permissions for the directory into which you
- are installing the SDK, the installer notifies you and exits. For
- that case, set up the proper permissions in the directory and run the
- installer again.
-
-::
-
- $ ./Downloads/poky-glibc-x86_64-core-image-minimal-core2-64-toolchain-ext-2.5.sh
- Poky (Yocto Project Reference Distro) Extensible SDK installer version 2.5
- ==========================================================================
- Enter target directory for SDK (default: ~/poky_sdk):
- You are about to install the SDK to "/home/scottrif/poky_sdk". Proceed [Y/n]? Y
- Extracting SDK..............done
- Setting it up...
- Extracting buildtools...
- Preparing build system...
- Parsing recipes: 100% |##################################################################| Time: 0:00:52
- Initialising tasks: 100% |###############################################################| Time: 0:00:00
- Checking sstate mirror object availability: 100% |#######################################| Time: 0:00:00
- Loading cache: 100% |####################################################################| Time: 0:00:00
- Initialising tasks: 100% |###############################################################| Time: 0:00:00
- done
- SDK has been successfully set up and is ready to be used.
- Each time you wish to use the SDK in a new shell session, you need to source the environment setup script e.g.
- $ . /home/scottrif/poky_sdk/environment-setup-core2-64-poky-linux
-
-Running the Extensible SDK Environment Setup Script
-===================================================
-
-Once you have the SDK installed, you must run the SDK environment setup
-script before you can actually use the SDK. This setup script resides in
-the directory you chose when you installed the SDK, which is either the
-default ``poky_sdk`` directory or the directory you chose during
-installation.
-
-Before running the script, be sure it is the one that matches the
-architecture for which you are developing. Environment setup scripts
-begin with the string "``environment-setup``" and include as part of
-their name the tuned target architecture. As an example, the following
-commands set the working directory to where the SDK was installed and
-then source the environment setup script. In this example, the setup
-script is for an IA-based target machine using i586 tuning:
-::
-
- $ cd /home/scottrif/poky_sdk
- $ source environment-setup-core2-64-poky-linux
- SDK environment now set up; additionally you may now run devtool to perform development tasks.
- Run devtool --help for further details.
-
-Running the setup script defines many environment variables needed in
-order to use the SDK (e.g. ``PATH``,
-:term:`CC`,
-:term:`LD`, and so forth). If you want to
-see all the environment variables the script exports, examine the
-installation file itself.
-
-Using ``devtool`` in Your SDK Workflow
-======================================
-
-The cornerstone of the extensible SDK is a command-line tool called
-``devtool``. This tool provides a number of features that help you
-build, test and package software within the extensible SDK, and
-optionally integrate it into an image built by the OpenEmbedded build
-system.
-
-.. note::
-
- The use of
- devtool
- is not limited to the extensible SDK. You can use
- devtool
- to help you easily develop any project whose build output must be
- part of an image built using the build system.
-
-The ``devtool`` command line is organized similarly to
-:ref:`overview-manual/overview-manual-development-environment:git` in that it has a number of
-sub-commands for each function. You can run ``devtool --help`` to see
-all the commands.
-
-.. note::
-
- See the "
- devtool
-  Quick Reference
- " in the Yocto Project Reference Manual for a
- devtool
- quick reference.
-
-Three ``devtool`` subcommands exist that provide entry-points into
-development:
-
-- *devtool add*: Assists in adding new software to be built.
-
-- *devtool modify*: Sets up an environment to enable you to modify
- the source of an existing component.
-
-- *devtool upgrade*: Updates an existing recipe so that you can
- build it for an updated set of source files.
-
-As with the build system, "recipes" represent software packages within
-``devtool``. When you use ``devtool add``, a recipe is automatically
-created. When you use ``devtool modify``, the specified existing recipe
-is used in order to determine where to get the source code and how to
-patch it. In both cases, an environment is set up so that when you build
-the recipe a source tree that is under your control is used in order to
-allow you to make changes to the source as desired. By default, new
-recipes and the source go into a "workspace" directory under the SDK.
-
-The remainder of this section presents the ``devtool add``,
-``devtool modify``, and ``devtool upgrade`` workflows.
-
-Use ``devtool add`` to Add an Application
------------------------------------------
-
-The ``devtool add`` command generates a new recipe based on existing
-source code. This command takes advantage of the
-:ref:`devtool-the-workspace-layer-structure`
-layer that many ``devtool`` commands use. The command is flexible enough
-to allow you to extract source code into both the workspace or a
-separate local Git repository and to use existing code that does not
-need to be extracted.
-
-Depending on your particular scenario, the arguments and options you use
-with ``devtool add`` form different combinations. The following diagram
-shows common development flows you would use with the ``devtool add``
-command:
-
-.. image:: figures/sdk-devtool-add-flow.png
- :align: center
-
-1. *Generating the New Recipe*: The top part of the flow shows three
- scenarios by which you could use ``devtool add`` to generate a recipe
- based on existing source code.
-
- In a shared development environment, it is typical for other
- developers to be responsible for various areas of source code. As a
- developer, you are probably interested in using that source code as
- part of your development within the Yocto Project. All you need is
- access to the code, a recipe, and a controlled area in which to do
- your work.
-
- Within the diagram, three possible scenarios feed into the
- ``devtool add`` workflow:
-
- - *Left*: The left scenario in the figure represents a common
- situation where the source code does not exist locally and needs
- to be extracted. In this situation, the source code is extracted
- to the default workspace - you do not want the files in some
- specific location outside of the workspace. Thus, everything you
- need will be located in the workspace:
- ::
-
- $ devtool add recipe fetchuri
-
- With this command, ``devtool`` extracts the upstream
- source files into a local Git repository within the ``sources``
- folder. The command then creates a recipe named recipe and a
- corresponding append file in the workspace. If you do not provide
- recipe, the command makes an attempt to determine the recipe name.
-
- - *Middle*: The middle scenario in the figure also represents a
- situation where the source code does not exist locally. In this
- case, the code is again upstream and needs to be extracted to some
- local area - this time outside of the default workspace.
-
- .. note::
-
- If required,
- devtool
- always creates a Git repository locally during the extraction.
-
- Furthermore, the first positional argument srctree in this case
- identifies where the ``devtool add`` command will locate the
- extracted code outside of the workspace. You need to specify an
- empty directory:
- ::
-
- $ devtool add recipe srctree fetchuri
-
- In summary,
- the source code is pulled from fetchuri and extracted into the
- location defined by srctree as a local Git repository.
-
- Within workspace, ``devtool`` creates a recipe named recipe along
- with an associated append file.
-
- - *Right*: The right scenario in the figure represents a situation
- where the srctree has been previously prepared outside of the
- ``devtool`` workspace.
-
- The following command provides a new recipe name and identifies
- the existing source tree location:
- ::
-
- $ devtool add recipe srctree
-
- The command examines the source code and creates a recipe named
- recipe for the code and places the recipe into the workspace.
-
- Because the extracted source code already exists, ``devtool`` does
- not try to relocate the source code into the workspace - only the
- new recipe is placed in the workspace.
-
- Aside from a recipe folder, the command also creates an associated
- append folder and places an initial ``*.bbappend`` file within.
-
-2. *Edit the Recipe*: You can use ``devtool edit-recipe`` to open up the
- editor as defined by the ``$EDITOR`` environment variable and modify
- the file:
- ::
-
- $ devtool edit-recipe recipe
-
- From within the editor, you
- can make modifications to the recipe that take affect when you build
- it later.
-
-3. *Build the Recipe or Rebuild the Image*: The next step you take
- depends on what you are going to do with the new code.
-
- If you need to eventually move the build output to the target
- hardware, use the following ``devtool`` command:
- :;
-
- $ devtool build recipe
-
- On the other hand, if you want an image to contain the recipe's
- packages from the workspace for immediate deployment onto a device
- (e.g. for testing purposes), you can use the ``devtool build-image``
- command:
- ::
-
- $ devtool build-image image
-
-4. *Deploy the Build Output*: When you use the ``devtool build`` command
- to build out your recipe, you probably want to see if the resulting
- build output works as expected on the target hardware.
-
- .. note::
-
- This step assumes you have a previously built image that is
- already either running in QEMU or is running on actual hardware.
- Also, it is assumed that for deployment of the image to the
- target, SSH is installed in the image and, if the image is running
- on real hardware, you have network access to and from your
- development machine.
-
- You can deploy your build output to that target hardware by using the
- ``devtool deploy-target`` command: $ devtool deploy-target recipe
- target The target is a live target machine running as an SSH server.
-
- You can, of course, also deploy the image you build to actual
- hardware by using the ``devtool build-image`` command. However,
- ``devtool`` does not provide a specific command that allows you to
- deploy the image to actual hardware.
-
-5. *Finish Your Work With the Recipe*: The ``devtool finish`` command
- creates any patches corresponding to commits in the local Git
- repository, moves the new recipe to a more permanent layer, and then
- resets the recipe so that the recipe is built normally rather than
- from the workspace.
- ::
-
- $ devtool finish recipe layer
-
- .. note::
-
- Any changes you want to turn into patches must be committed to the
- Git repository in the source tree.
-
- As mentioned, the ``devtool finish`` command moves the final recipe
- to its permanent layer.
-
- As a final process of the ``devtool finish`` command, the state of
- the standard layers and the upstream source is restored so that you
- can build the recipe from those areas rather than the workspace.
-
- .. note::
-
- You can use the
- devtool reset
- command to put things back should you decide you do not want to
- proceed with your work. If you do use this command, realize that
- the source tree is preserved.
-
-Use ``devtool modify`` to Modify the Source of an Existing Component
---------------------------------------------------------------------
-
-The ``devtool modify`` command prepares the way to work on existing code
-that already has a local recipe in place that is used to build the
-software. The command is flexible enough to allow you to extract code
-from an upstream source, specify the existing recipe, and keep track of
-and gather any patch files from other developers that are associated
-with the code.
-
-Depending on your particular scenario, the arguments and options you use
-with ``devtool modify`` form different combinations. The following
-diagram shows common development flows for the ``devtool modify``
-command:
-
-.. image:: figures/sdk-devtool-modify-flow.png
- :align: center
-
-1. *Preparing to Modify the Code*: The top part of the flow shows three
- scenarios by which you could use ``devtool modify`` to prepare to
- work on source files. Each scenario assumes the following:
-
- - The recipe exists locally in a layer external to the ``devtool``
- workspace.
-
- - The source files exist either upstream in an un-extracted state or
- locally in a previously extracted state.
-
- The typical situation is where another developer has created a layer
- for use with the Yocto Project and their recipe already resides in
- that layer. Furthermore, their source code is readily available
- either upstream or locally.
-
- - *Left*: The left scenario in the figure represents a common
- situation where the source code does not exist locally and it
- needs to be extracted from an upstream source. In this situation,
- the source is extracted into the default ``devtool`` workspace
- location. The recipe, in this scenario, is in its own layer
- outside the workspace (i.e. ``meta-``\ layername).
-
- The following command identifies the recipe and, by default,
- extracts the source files:
- ::
-
- $ devtool modify recipe
-
- Once
- ``devtool``\ locates the recipe, ``devtool`` uses the recipe's
- :term:`SRC_URI` statements to
- locate the source code and any local patch files from other
- developers.
-
- With this scenario, no srctree argument exists. Consequently, the
- default behavior of the ``devtool modify`` command is to extract
- the source files pointed to by the ``SRC_URI`` statements into a
- local Git structure. Furthermore, the location for the extracted
- source is the default area within the ``devtool`` workspace. The
- result is that the command sets up both the source code and an
- append file within the workspace while the recipe remains in its
- original location.
-
- Additionally, if you have any non-patch local files (i.e. files
- referred to with ``file://`` entries in ``SRC_URI`` statement
- excluding ``*.patch/`` or ``*.diff``), these files are copied to
- an ``oe-local-files`` folder under the newly created source tree.
- Copying the files here gives you a convenient area from which you
- can modify the files. Any changes or additions you make to those
- files are incorporated into the build the next time you build the
- software just as are other changes you might have made to the
- source.
-
- - *Middle*: The middle scenario in the figure represents a situation
- where the source code also does not exist locally. In this case,
- the code is again upstream and needs to be extracted to some local
- area as a Git repository. The recipe, in this scenario, is again
- local and in its own layer outside the workspace.
-
- The following command tells ``devtool`` the recipe with which to
- work and, in this case, identifies a local area for the extracted
- source files that exists outside of the default ``devtool``
- workspace:
- ::
-
- $ devtool modify recipe srctree
-
- .. note::
-
- You cannot provide a URL for
- srctree
- using the
- devtool
- command.
-
- As with all extractions, the command uses the recipe's ``SRC_URI``
- statements to locate the source files and any associated patch
- files. Non-patch files are copied to an ``oe-local-files`` folder
- under the newly created source tree.
-
- Once the files are located, the command by default extracts them
- into srctree.
-
- Within workspace, ``devtool`` creates an append file for the
- recipe. The recipe remains in its original location but the source
- files are extracted to the location you provide with srctree.
-
- - *Right*: The right scenario in the figure represents a situation
- where the source tree (srctree) already exists locally as a
- previously extracted Git structure outside of the ``devtool``
- workspace. In this example, the recipe also exists elsewhere
- locally in its own layer.
-
- The following command tells ``devtool`` the recipe with which to
- work, uses the "-n" option to indicate source does not need to be
- extracted, and uses srctree to point to the previously extracted
- source files:
- ::
-
- $ devtool modify -n recipe srctree
-
- If an ``oe-local-files`` subdirectory happens to exist and it
- contains non-patch files, the files are used. However, if the
- subdirectory does not exist and you run the ``devtool finish``
- command, any non-patch files that might exist next to the recipe
- are removed because it appears to ``devtool`` that you have
- deleted those files.
-
- Once the ``devtool modify`` command finishes, it creates only an
- append file for the recipe in the ``devtool`` workspace. The
- recipe and the source code remain in their original locations.
-
-2. *Edit the Source*: Once you have used the ``devtool modify`` command,
- you are free to make changes to the source files. You can use any
- editor you like to make and save your source code modifications.
-
-3. *Build the Recipe or Rebuild the Image*: The next step you take
- depends on what you are going to do with the new code.
-
- If you need to eventually move the build output to the target
- hardware, use the following ``devtool`` command:
- ::
-
- $ devtool build recipe
-
- On the other hand, if you want an image to contain the recipe's
- packages from the workspace for immediate deployment onto a device
- (e.g. for testing purposes), you can use the ``devtool build-image``
- command: $ devtool build-image image
-
-4. *Deploy the Build Output*: When you use the ``devtool build`` command
- to build out your recipe, you probably want to see if the resulting
- build output works as expected on target hardware.
-
- .. note::
-
- This step assumes you have a previously built image that is
- already either running in QEMU or running on actual hardware.
- Also, it is assumed that for deployment of the image to the
- target, SSH is installed in the image and if the image is running
- on real hardware that you have network access to and from your
- development machine.
-
- You can deploy your build output to that target hardware by using the
- ``devtool deploy-target`` command:
- ::
-
- $ devtool deploy-target recipe target
-
- The target is a live target machine running as an SSH server.
-
- You can, of course, use other methods to deploy the image you built
- using the ``devtool build-image`` command to actual hardware.
- ``devtool`` does not provide a specific command to deploy the image
- to actual hardware.
-
-5. *Finish Your Work With the Recipe*: The ``devtool finish`` command
- creates any patches corresponding to commits in the local Git
- repository, updates the recipe to point to them (or creates a
- ``.bbappend`` file to do so, depending on the specified destination
- layer), and then resets the recipe so that the recipe is built
- normally rather than from the workspace.
- ::
-
- $ devtool finish recipe layer
-
- .. note::
-
- Any changes you want to turn into patches must be staged and
- committed within the local Git repository before you use the
- devtool finish
- command.
-
- Because there is no need to move the recipe, ``devtool finish``
- either updates the original recipe in the original layer or the
- command creates a ``.bbappend`` file in a different layer as provided
- by layer. Any work you did in the ``oe-local-files`` directory is
- preserved in the original files next to the recipe during the
- ``devtool finish`` command.
-
- As a final process of the ``devtool finish`` command, the state of
- the standard layers and the upstream source is restored so that you
- can build the recipe from those areas rather than from the workspace.
-
- .. note::
-
- You can use the
- devtool reset
- command to put things back should you decide you do not want to
- proceed with your work. If you do use this command, realize that
- the source tree is preserved.
-
-Use ``devtool upgrade`` to Create a Version of the Recipe that Supports a Newer Version of the Software
--------------------------------------------------------------------------------------------------------
-
-The ``devtool upgrade`` command upgrades an existing recipe to that of a
-more up-to-date version found upstream. Throughout the life of software,
-recipes continually undergo version upgrades by their upstream
-publishers. You can use the ``devtool upgrade`` workflow to make sure
-your recipes you are using for builds are up-to-date with their upstream
-counterparts.
-
-.. note::
-
- Several methods exist by which you can upgrade recipes -
- devtool upgrade
- happens to be one. You can read about all the methods by which you
- can upgrade recipes in the "
- Upgrading Recipes
- " section of the Yocto Project Development Tasks Manual.
-
-The ``devtool upgrade`` command is flexible enough to allow you to
-specify source code revision and versioning schemes, extract code into
-or out of the ``devtool``
-:ref:`devtool-the-workspace-layer-structure`,
-and work with any source file forms that the
-:ref:`fetchers <bitbake:bb-fetchers>` support.
-
-The following diagram shows the common development flow used with the
-``devtool upgrade`` command:
-
-.. image:: figures/sdk-devtool-upgrade-flow.png
- :align: center
-
-1. *Initiate the Upgrade*: The top part of the flow shows the typical
- scenario by which you use the ``devtool upgrade`` command. The
- following conditions exist:
-
- - The recipe exists in a local layer external to the ``devtool``
- workspace.
-
- - The source files for the new release exist in the same location
- pointed to by :term:`SRC_URI`
- in the recipe (e.g. a tarball with the new version number in the
- name, or as a different revision in the upstream Git repository).
-
- A common situation is where third-party software has undergone a
- revision so that it has been upgraded. The recipe you have access to
- is likely in your own layer. Thus, you need to upgrade the recipe to
- use the newer version of the software:
- ::
-
- $ devtool upgrade -V version recipe
-
- By default, the ``devtool upgrade`` command extracts source
- code into the ``sources`` directory in the
- :ref:`devtool-the-workspace-layer-structure`.
- If you want the code extracted to any other location, you need to
- provide the srctree positional argument with the command as follows:
- $ devtool upgrade -V version recipe srctree
-
- .. note::
-
- In this example, the "-V" option specifies the new version. If you
- don't use "-V", the command upgrades the recipe to the latest
- version.
-
- If the source files pointed to by the ``SRC_URI`` statement in the
- recipe are in a Git repository, you must provide the "-S" option and
- specify a revision for the software.
-
- Once ``devtool`` locates the recipe, it uses the ``SRC_URI`` variable
- to locate the source code and any local patch files from other
- developers. The result is that the command sets up the source code,
- the new version of the recipe, and an append file all within the
- workspace.
-
- Additionally, if you have any non-patch local files (i.e. files
- referred to with ``file://`` entries in ``SRC_URI`` statement
- excluding ``*.patch/`` or ``*.diff``), these files are copied to an
- ``oe-local-files`` folder under the newly created source tree.
- Copying the files here gives you a convenient area from which you can
- modify the files. Any changes or additions you make to those files
- are incorporated into the build the next time you build the software
- just as are other changes you might have made to the source.
-
-2. *Resolve any Conflicts created by the Upgrade*: Conflicts could exist
- due to the software being upgraded to a new version. Conflicts occur
- if your recipe specifies some patch files in ``SRC_URI`` that
- conflict with changes made in the new version of the software. For
- such cases, you need to resolve the conflicts by editing the source
- and following the normal ``git rebase`` conflict resolution process.
-
- Before moving onto the next step, be sure to resolve any such
- conflicts created through use of a newer or different version of the
- software.
-
-3. *Build the Recipe or Rebuild the Image*: The next step you take
- depends on what you are going to do with the new code.
-
- If you need to eventually move the build output to the target
- hardware, use the following ``devtool`` command:
- ::
-
- $ devtool build recipe
-
- On the other hand, if you want an image to contain the recipe's
- packages from the workspace for immediate deployment onto a device
- (e.g. for testing purposes), you can use the ``devtool build-image``
- command:
- ::
-
- $ devtool build-image image
-
-4. *Deploy the Build Output*: When you use the ``devtool build`` command
- or ``bitbake`` to build your recipe, you probably want to see if the
- resulting build output works as expected on target hardware.
-
- .. note::
-
- This step assumes you have a previously built image that is
- already either running in QEMU or running on actual hardware.
- Also, it is assumed that for deployment of the image to the
- target, SSH is installed in the image and if the image is running
- on real hardware that you have network access to and from your
- development machine.
-
- You can deploy your build output to that target hardware by using the
- ``devtool deploy-target`` command: $ devtool deploy-target recipe
- target The target is a live target machine running as an SSH server.
-
- You can, of course, also deploy the image you build using the
- ``devtool build-image`` command to actual hardware. However,
- ``devtool`` does not provide a specific command that allows you to do
- this.
-
-5. *Finish Your Work With the Recipe*: The ``devtool finish`` command
- creates any patches corresponding to commits in the local Git
- repository, moves the new recipe to a more permanent layer, and then
- resets the recipe so that the recipe is built normally rather than
- from the workspace.
-
- Any work you did in the ``oe-local-files`` directory is preserved in
- the original files next to the recipe during the ``devtool finish``
- command.
-
- If you specify a destination layer that is the same as the original
- source, then the old version of the recipe and associated files are
- removed prior to adding the new version.
- ::
-
- $ devtool finish recipe layer
-
- .. note::
-
- Any changes you want to turn into patches must be committed to the
- Git repository in the source tree.
-
- As a final process of the ``devtool finish`` command, the state of
- the standard layers and the upstream source is restored so that you
- can build the recipe from those areas rather than the workspace.
-
- .. note::
-
- You can use the
- devtool reset
- command to put things back should you decide you do not want to
- proceed with your work. If you do use this command, realize that
- the source tree is preserved.
-
-A Closer Look at ``devtool add``
-================================
-
-The ``devtool add`` command automatically creates a recipe based on the
-source tree you provide with the command. Currently, the command has
-support for the following:
-
-- Autotools (``autoconf`` and ``automake``)
-
-- CMake
-
-- Scons
-
-- ``qmake``
-
-- Plain ``Makefile``
-
-- Out-of-tree kernel module
-
-- Binary package (i.e. "-b" option)
-
-- Node.js module
-
-- Python modules that use ``setuptools`` or ``distutils``
-
-Apart from binary packages, the determination of how a source tree
-should be treated is automatic based on the files present within that
-source tree. For example, if a ``CMakeLists.txt`` file is found, then
-the source tree is assumed to be using CMake and is treated accordingly.
-
-.. note::
-
- In most cases, you need to edit the automatically generated recipe in
- order to make it build properly. Typically, you would go through
- several edit and build cycles until the recipe successfully builds.
- Once the recipe builds, you could use possible further iterations to
- test the recipe on the target device.
-
-The remainder of this section covers specifics regarding how parts of
-the recipe are generated.
-
-Name and Version
-----------------
-
-If you do not specify a name and version on the command line,
-``devtool add`` uses various metadata within the source tree in an
-attempt to determine the name and version of the software being built.
-Based on what the tool determines, ``devtool`` sets the name of the
-created recipe file accordingly.
-
-If ``devtool`` cannot determine the name and version, the command prints
-an error. For such cases, you must re-run the command and provide the
-name and version, just the name, or just the version as part of the
-command line.
-
-Sometimes the name or version determined from the source tree might be
-incorrect. For such a case, you must reset the recipe:
-::
-
- $ devtool reset -n recipename
-
-After running the ``devtool reset`` command, you need to
-run ``devtool add`` again and provide the name or the version.
-
-Dependency Detection and Mapping
---------------------------------
-
-The ``devtool add`` command attempts to detect build-time dependencies
-and map them to other recipes in the system. During this mapping, the
-command fills in the names of those recipes as part of the
-:term:`DEPENDS` variable within the
-recipe. If a dependency cannot be mapped, ``devtool`` places a comment
-in the recipe indicating such. The inability to map a dependency can
-result from naming not being recognized or because the dependency simply
-is not available. For cases where the dependency is not available, you
-must use the ``devtool add`` command to add an additional recipe that
-satisfies the dependency. Once you add that recipe, you need to update
-the ``DEPENDS`` variable in the original recipe to include the new
-recipe.
-
-If you need to add runtime dependencies, you can do so by adding the
-following to your recipe:
-::
-
- RDEPENDS_${PN} += "dependency1 dependency2 ..."
-
-.. note::
-
- The
- devtool add
- command often cannot distinguish between mandatory and optional
- dependencies. Consequently, some of the detected dependencies might
- in fact be optional. When in doubt, consult the documentation or the
- configure script for the software the recipe is building for further
- details. In some cases, you might find you can substitute the
- dependency with an option that disables the associated functionality
- passed to the configure script.
-
-License Detection
------------------
-
-The ``devtool add`` command attempts to determine if the software you
-are adding is able to be distributed under a common, open-source
-license. If so, the command sets the
-:term:`LICENSE` value accordingly.
-You should double-check the value added by the command against the
-documentation or source files for the software you are building and, if
-necessary, update that ``LICENSE`` value.
-
-The ``devtool add`` command also sets the
-:term:`LIC_FILES_CHKSUM`
-value to point to all files that appear to be license-related. Realize
-that license statements often appear in comments at the top of source
-files or within the documentation. In such cases, the command does not
-recognize those license statements. Consequently, you might need to
-amend the ``LIC_FILES_CHKSUM`` variable to point to one or more of those
-comments if present. Setting ``LIC_FILES_CHKSUM`` is particularly
-important for third-party software. The mechanism attempts to ensure
-correct licensing should you upgrade the recipe to a newer upstream
-version in future. Any change in licensing is detected and you receive
-an error prompting you to check the license text again.
-
-If the ``devtool add`` command cannot determine licensing information,
-``devtool`` sets the ``LICENSE`` value to "CLOSED" and leaves the
-``LIC_FILES_CHKSUM`` value unset. This behavior allows you to continue
-with development even though the settings are unlikely to be correct in
-all cases. You should check the documentation or source files for the
-software you are building to determine the actual license.
-
-Adding Makefile-Only Software
------------------------------
-
-The use of Make by itself is very common in both proprietary and
-open-source software. Unfortunately, Makefiles are often not written
-with cross-compilation in mind. Thus, ``devtool add`` often cannot do
-very much to ensure that these Makefiles build correctly. It is very
-common, for example, to explicitly call ``gcc`` instead of using the
-:term:`CC` variable. Usually, in a
-cross-compilation environment, ``gcc`` is the compiler for the build
-host and the cross-compiler is named something similar to
-``arm-poky-linux-gnueabi-gcc`` and might require arguments (e.g. to
-point to the associated sysroot for the target machine).
-
-When writing a recipe for Makefile-only software, keep the following in
-mind:
-
-- You probably need to patch the Makefile to use variables instead of
- hardcoding tools within the toolchain such as ``gcc`` and ``g++``.
-
-- The environment in which Make runs is set up with various standard
- variables for compilation (e.g. ``CC``, ``CXX``, and so forth) in a
- similar manner to the environment set up by the SDK's environment
- setup script. One easy way to see these variables is to run the
- ``devtool build`` command on the recipe and then look in
- ``oe-logs/run.do_compile``. Towards the top of this file, a list of
- environment variables exists that are being set. You can take
- advantage of these variables within the Makefile.
-
-- If the Makefile sets a default for a variable using "=", that default
- overrides the value set in the environment, which is usually not
- desirable. For this case, you can either patch the Makefile so it
- sets the default using the "?=" operator, or you can alternatively
- force the value on the ``make`` command line. To force the value on
- the command line, add the variable setting to
- :term:`EXTRA_OEMAKE` or
- :term:`PACKAGECONFIG_CONFARGS`
- within the recipe. Here is an example using ``EXTRA_OEMAKE``:
- ::
-
- EXTRA_OEMAKE += "'CC=${CC}' 'CXX=${CXX}'"
-
- In the above example,
- single quotes are used around the variable settings as the values are
- likely to contain spaces because required default options are passed
- to the compiler.
-
-- Hardcoding paths inside Makefiles is often problematic in a
- cross-compilation environment. This is particularly true because
- those hardcoded paths often point to locations on the build host and
- thus will either be read-only or will introduce contamination into
- the cross-compilation because they are specific to the build host
- rather than the target. Patching the Makefile to use prefix variables
- or other path variables is usually the way to handle this situation.
-
-- Sometimes a Makefile runs target-specific commands such as
- ``ldconfig``. For such cases, you might be able to apply patches that
- remove these commands from the Makefile.
-
-Adding Native Tools
--------------------
-
-Often, you need to build additional tools that run on the :term:`Build
-Host` as opposed to
-the target. You should indicate this requirement by using one of the
-following methods when you run ``devtool add``:
-
-- Specify the name of the recipe such that it ends with "-native".
- Specifying the name like this produces a recipe that only builds for
- the build host.
-
-- Specify the "DASHDASHalso-native" option with the ``devtool add``
- command. Specifying this option creates a recipe file that still
- builds for the target but also creates a variant with a "-native"
- suffix that builds for the build host.
-
-.. note::
-
- If you need to add a tool that is shipped as part of a source tree
- that builds code for the target, you can typically accomplish this by
- building the native and target parts separately rather than within
- the same compilation process. Realize though that with the
- "DASHDASHalso-native" option, you can add the tool using just one
- recipe file.
-
-Adding Node.js Modules
-----------------------
-
-You can use the ``devtool add`` command two different ways to add
-Node.js modules: 1) Through ``npm`` and, 2) from a repository or local
-source.
-
-Use the following form to add Node.js modules through ``npm``:
-::
-
- $ devtool add "npm://registry.npmjs.org;name=forever;version=0.15.1"
-
-The name and
-version parameters are mandatory. Lockdown and shrinkwrap files are
-generated and pointed to by the recipe in order to freeze the version
-that is fetched for the dependencies according to the first time. This
-also saves checksums that are verified on future fetches. Together,
-these behaviors ensure the reproducibility and integrity of the build.
-
-.. note::
-
- - You must use quotes around the URL. The ``devtool add`` does not
- require the quotes, but the shell considers ";" as a splitter
- between multiple commands. Thus, without the quotes,
- ``devtool add`` does not receive the other parts, which results in
- several "command not found" errors.
-
- - In order to support adding Node.js modules, a ``nodejs`` recipe
- must be part of your SDK.
-
-As mentioned earlier, you can also add Node.js modules directly from a
-repository or local source tree. To add modules this way, use
-``devtool add`` in the following form:
-::
-
- $ devtool add https://github.com/diversario/node-ssdp
-
-In this example, ``devtool``
-fetches the specified Git repository, detects the code as Node.js code,
-fetches dependencies using ``npm``, and sets
-:term:`SRC_URI` accordingly.
-
-Working With Recipes
-====================
-
-When building a recipe using the ``devtool build`` command, the typical
-build progresses as follows:
-
-1. Fetch the source
-
-2. Unpack the source
-
-3. Configure the source
-
-4. Compile the source
-
-5. Install the build output
-
-6. Package the installed output
-
-For recipes in the workspace, fetching and unpacking is disabled as the
-source tree has already been prepared and is persistent. Each of these
-build steps is defined as a function (task), usually with a "do\_" prefix
-(e.g. :ref:`ref-tasks-fetch`,
-:ref:`ref-tasks-unpack`, and so
-forth). These functions are typically shell scripts but can instead be
-written in Python.
-
-If you look at the contents of a recipe, you will see that the recipe
-does not include complete instructions for building the software.
-Instead, common functionality is encapsulated in classes inherited with
-the ``inherit`` directive. This technique leaves the recipe to describe
-just the things that are specific to the software being built. A
-:ref:`base <ref-classes-base>` class exists that
-is implicitly inherited by all recipes and provides the functionality
-that most recipes typically need.
-
-The remainder of this section presents information useful when working
-with recipes.
-
-Finding Logs and Work Files
----------------------------
-
-After the first run of the ``devtool build`` command, recipes that were
-previously created using the ``devtool add`` command or whose sources
-were modified using the ``devtool modify`` command contain symbolic
-links created within the source tree:
-
-- ``oe-logs``: This link points to the directory in which log files and
- run scripts for each build step are created.
-
-- ``oe-workdir``: This link points to the temporary work area for the
- recipe. The following locations under ``oe-workdir`` are particularly
- useful:
-
- - ``image/``: Contains all of the files installed during the
- :ref:`ref-tasks-install` stage.
- Within a recipe, this directory is referred to by the expression
- ``${``\ :term:`D`\ ``}``.
-
- - ``sysroot-destdir/``: Contains a subset of files installed within
- ``do_install`` that have been put into the shared sysroot. For
- more information, see the "`Sharing Files Between
- Recipes <#sdk-sharing-files-between-recipes>`__" section.
-
- - ``packages-split/``: Contains subdirectories for each package
- produced by the recipe. For more information, see the
- "`Packaging <#sdk-packaging>`__" section.
-
-You can use these links to get more information on what is happening at
-each build step.
-
-Setting Configure Arguments
----------------------------
-
-If the software your recipe is building uses GNU autoconf, then a fixed
-set of arguments is passed to it to enable cross-compilation plus any
-extras specified by
-:term:`EXTRA_OECONF` or
-:term:`PACKAGECONFIG_CONFARGS`
-set within the recipe. If you wish to pass additional options, add them
-to ``EXTRA_OECONF`` or ``PACKAGECONFIG_CONFARGS``. Other supported build
-tools have similar variables (e.g.
-:term:`EXTRA_OECMAKE` for
-CMake, :term:`EXTRA_OESCONS`
-for Scons, and so forth). If you need to pass anything on the ``make``
-command line, you can use ``EXTRA_OEMAKE`` or the
-:term:`PACKAGECONFIG_CONFARGS`
-variables to do so.
-
-You can use the ``devtool configure-help`` command to help you set the
-arguments listed in the previous paragraph. The command determines the
-exact options being passed, and shows them to you along with any custom
-arguments specified through ``EXTRA_OECONF`` or
-``PACKAGECONFIG_CONFARGS``. If applicable, the command also shows you
-the output of the configure script's "DASHDASHhelp" option as a
-reference.
-
-Sharing Files Between Recipes
------------------------------
-
-Recipes often need to use files provided by other recipes on the
-:term:`Build Host`. For example,
-an application linking to a common library needs access to the library
-itself and its associated headers. The way this access is accomplished
-within the extensible SDK is through the sysroot. One sysroot exists per
-"machine" for which the SDK is being built. In practical terms, this
-means a sysroot exists for the target machine, and a sysroot exists for
-the build host.
-
-Recipes should never write files directly into the sysroot. Instead,
-files should be installed into standard locations during the
-:ref:`ref-tasks-install` task within
-the ``${``\ :term:`D`\ ``}`` directory. A
-subset of these files automatically goes into the sysroot. The reason
-for this limitation is that almost all files that go into the sysroot
-are cataloged in manifests in order to ensure they can be removed later
-when a recipe is modified or removed. Thus, the sysroot is able to
-remain free from stale files.
-
-Packaging
----------
-
-Packaging is not always particularly relevant within the extensible SDK.
-However, if you examine how build output gets into the final image on
-the target device, it is important to understand packaging because the
-contents of the image are expressed in terms of packages and not
-recipes.
-
-During the :ref:`ref-tasks-package`
-task, files installed during the
-:ref:`ref-tasks-install` task are
-split into one main package, which is almost always named the same as
-the recipe, and into several other packages. This separation exists
-because not all of those installed files are useful in every image. For
-example, you probably do not need any of the documentation installed in
-a production image. Consequently, for each recipe the documentation
-files are separated into a ``-doc`` package. Recipes that package
-software containing optional modules or plugins might undergo additional
-package splitting as well.
-
-After building a recipe, you can see where files have gone by looking in
-the ``oe-workdir/packages-split`` directory, which contains a
-subdirectory for each package. Apart from some advanced cases, the
-:term:`PACKAGES` and
-:term:`FILES` variables controls
-splitting. The ``PACKAGES`` variable lists all of the packages to be
-produced, while the ``FILES`` variable specifies which files to include
-in each package by using an override to specify the package. For
-example, ``FILES_${PN}`` specifies the files to go into the main package
-(i.e. the main package has the same name as the recipe and
-``${``\ :term:`PN`\ ``}`` evaluates to the
-recipe name). The order of the ``PACKAGES`` value is significant. For
-each installed file, the first package whose ``FILES`` value matches the
-file is the package into which the file goes. Defaults exist for both
-the ``PACKAGES`` and ``FILES`` variables. Consequently, you might find
-you do not even need to set these variables in your recipe unless the
-software the recipe is building installs files into non-standard
-locations.
-
-Restoring the Target Device to its Original State
-=================================================
-
-If you use the ``devtool deploy-target`` command to write a recipe's
-build output to the target, and you are working on an existing component
-of the system, then you might find yourself in a situation where you
-need to restore the original files that existed prior to running the
-``devtool deploy-target`` command. Because the ``devtool deploy-target``
-command backs up any files it overwrites, you can use the
-``devtool undeploy-target`` command to restore those files and remove
-any other files the recipe deployed. Consider the following example:
-::
-
- $ devtool undeploy-target lighttpd root@192.168.7.2
-
-If you have deployed
-multiple applications, you can remove them all using the "-a" option
-thus restoring the target device to its original state:
-::
-
- $ devtool undeploy-target -a root@192.168.7.2
-
-Information about files deployed to
-the target as well as any backed up files are stored on the target
-itself. This storage, of course, requires some additional space on the
-target machine.
-
-.. note::
-
- The
- devtool deploy-target
- and
- devtool undeploy-target
- commands do not currently interact with any package management system
- on the target device (e.g. RPM or OPKG). Consequently, you should not
- intermingle
- devtool deploy-target
- and package manager operations on the target device. Doing so could
- result in a conflicting set of files.
-
-Installing Additional Items Into the Extensible SDK
-===================================================
-
-Out of the box the extensible SDK typically only comes with a small
-number of tools and libraries. A minimal SDK starts mostly empty and is
-populated on-demand. Sometimes you must explicitly install extra items
-into the SDK. If you need these extra items, you can first search for
-the items using the ``devtool search`` command. For example, suppose you
-need to link to libGL but you are not sure which recipe provides libGL.
-You can use the following command to find out:
-::
-
- $ devtool search libGL mesa
-
-A free implementation of the OpenGL API Once you know the recipe
-(i.e. ``mesa`` in this example), you can install it:
-::
-
- $ devtool sdk-install mesa
-
-By default, the ``devtool sdk-install`` command assumes
-the item is available in pre-built form from your SDK provider. If the
-item is not available and it is acceptable to build the item from
-source, you can add the "-s" option as follows:
-::
-
- $ devtool sdk-install -s mesa
-
-It is important to remember that building the item from source
-takes significantly longer than installing the pre-built artifact. Also,
-if no recipe exists for the item you want to add to the SDK, you must
-instead add the item using the ``devtool add`` command.
-
-Applying Updates to an Installed Extensible SDK
-===============================================
-
-If you are working with an installed extensible SDK that gets
-occasionally updated (e.g. a third-party SDK), then you will need to
-manually "pull down" the updates into the installed SDK.
-
-To update your installed SDK, use ``devtool`` as follows:
-::
-
- $ devtool sdk-update
-
-The previous command assumes your SDK provider has set the
-default update URL for you through the
-:term:`SDK_UPDATE_URL`
-variable as described in the "`Providing Updates to the Extensible SDK
-After
-Installation <#sdk-providing-updates-to-the-extensible-sdk-after-installation>`__"
-section. If the SDK provider has not set that default URL, you need to
-specify it yourself in the command as follows: $ devtool sdk-update
-path_to_update_directory
-
-.. note::
-
- The URL needs to point specifically to a published SDK and not to an
- SDK installer that you would download and install.
-
-Creating a Derivative SDK With Additional Components
-====================================================
-
-You might need to produce an SDK that contains your own custom
-libraries. A good example would be if you were a vendor with customers
-that use your SDK to build their own platform-specific software and
-those customers need an SDK that has custom libraries. In such a case,
-you can produce a derivative SDK based on the currently installed SDK
-fairly easily by following these steps:
-
-1. If necessary, install an extensible SDK that you want to use as a
- base for your derivative SDK.
-
-2. Source the environment script for the SDK.
-
-3. Add the extra libraries or other components you want by using the
- ``devtool add`` command.
-
-4. Run the ``devtool build-sdk`` command.
-
-The previous steps take the recipes added to the workspace and construct
-a new SDK installer that contains those recipes and the resulting binary
-artifacts. The recipes go into their own separate layer in the
-constructed derivative SDK, which leaves the workspace clean and ready
-for users to add their own recipes.