2013-01-11 17:45:15 +00:00
|
|
|
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
|
|
|
|
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
|
2014-01-17 15:00:48 +00:00
|
|
|
|
|
|
|
<chapter id="user-manual-intro">
|
2014-01-17 14:58:20 +00:00
|
|
|
<title>BitBake User Manual</title>
|
|
|
|
|
|
|
|
<section id="intro">
|
2013-01-11 17:45:15 +00:00
|
|
|
<title>Introduction</title>
|
2014-01-17 15:00:48 +00:00
|
|
|
|
|
|
|
<para>
|
2014-01-17 14:58:20 +00:00
|
|
|
BitBake is a tool for executing tasks commonly performed by software
|
|
|
|
developers when building systems on a daily basis.
|
|
|
|
BitBake can build Systems consisting of numerous individual pieces
|
|
|
|
of software, or can be used to build a single application.
|
|
|
|
Example tasks that BitBake can execute are fetching source code,
|
|
|
|
applying patches to source code, configuring, compiling, and
|
|
|
|
packaging applications into a complete system, and managing metadata.
|
|
|
|
BitBake abstracts the information for completing individual tasks
|
|
|
|
into files known as recipes.
|
|
|
|
Recipes contain all of the relevant information required by BitBake
|
|
|
|
to complete a given task including dependencies, source file
|
|
|
|
locations, etc.
|
|
|
|
BitBake is similar to
|
|
|
|
<ulink url='http://www.gnu.org/software/make/'>GNU Make</ulink>
|
|
|
|
and other build tools.
|
|
|
|
</para>
|
|
|
|
</section>
|
2014-01-17 15:00:48 +00:00
|
|
|
|
|
|
|
<section id="history-and-goals">
|
|
|
|
<title>History and Goals</title>
|
|
|
|
|
2014-01-17 14:58:20 +00:00
|
|
|
<para>
|
|
|
|
BitBake was originally a part of the OpenEmbedded project.
|
|
|
|
It was inspired by the Portage package management system
|
|
|
|
used by the Gentoo Linux distribution.
|
|
|
|
On December 7, 2004, OpenEmbedded project team member,
|
|
|
|
Chris Larson split the project into two distinct pieces:
|
|
|
|
<itemizedlist>
|
|
|
|
<listitem><para>BitBake, a generic task executor</para></listitem>
|
|
|
|
<listitem><para>OpenEmbedded, a metadata set utilized by
|
|
|
|
BitBake.</para></listitem>
|
|
|
|
</itemizedlist>
|
|
|
|
Today, BitBake is the primary basis of the
|
|
|
|
<ulink url="http://www.openembedded.org/">OpenEmbedded</ulink>
|
|
|
|
project, which is being used to build and maintain a
|
|
|
|
number of projects and embedded Linux distributions
|
|
|
|
such as the Angstrom Distribution and the Yocto
|
|
|
|
Project.
|
|
|
|
</para>
|
2014-01-17 15:00:48 +00:00
|
|
|
|
|
|
|
<para>
|
|
|
|
Prior to BitBake, no other build tool adequately met the needs of
|
|
|
|
an aspiring embedded Linux distribution.
|
|
|
|
All of the build systems used by traditional desktop Linux
|
|
|
|
distributions lacked important functionality, and none of the
|
|
|
|
ad-hoc <emphasis>buildroot</emphasis> systems, prevalent in the
|
|
|
|
embedded space, were scalable or maintainable.
|
|
|
|
</para>
|
|
|
|
|
|
|
|
<para>
|
|
|
|
Some important original goals for BitBake were:
|
2013-01-11 17:45:15 +00:00
|
|
|
<itemizedlist>
|
2014-01-17 15:00:48 +00:00
|
|
|
<listitem><para>
|
|
|
|
Handle cross-compilation.
|
|
|
|
</para></listitem>
|
|
|
|
<listitem><para>
|
|
|
|
Handle inter-package dependencies (build time on
|
|
|
|
target architecture, build time on native
|
|
|
|
architecture, and runtime).
|
|
|
|
</para></listitem>
|
|
|
|
<listitem><para>
|
|
|
|
Support running any number of tasks within a given
|
|
|
|
package, including, but not limited to, fetching
|
|
|
|
upstream sources, unpacking them, patching them,
|
|
|
|
configuring them, etc.
|
|
|
|
</para></listitem>
|
|
|
|
<listitem><para>
|
|
|
|
Must be Linux distribution agnostic (both build and
|
|
|
|
target).
|
|
|
|
</para></listitem>
|
|
|
|
<listitem><para>
|
|
|
|
Must be architecture agnostic
|
|
|
|
</para></listitem>
|
|
|
|
<listitem><para>
|
|
|
|
Must support multiple build and target operating systems
|
|
|
|
(including Cygwin, the BSDs, etc).
|
|
|
|
</para></listitem>
|
|
|
|
<listitem><para>
|
|
|
|
Must be able to be self contained, rather than tightly
|
|
|
|
integrated into the build machine's root
|
|
|
|
filesystem.
|
|
|
|
</para></listitem>
|
|
|
|
<listitem><para>
|
|
|
|
There must be a way to handle conditional metadata
|
|
|
|
(on target architecture, operating system,
|
|
|
|
distribution, machine).
|
|
|
|
</para></listitem>
|
|
|
|
<listitem><para>
|
|
|
|
It must be easy for the person using the tools to
|
|
|
|
supply their own local metadata and packages
|
|
|
|
to operate against.
|
|
|
|
</para></listitem>
|
|
|
|
<listitem><para>
|
|
|
|
Must make it easy to collaborate between multiple
|
|
|
|
projects using BitBake for their builds.
|
|
|
|
</para></listitem>
|
|
|
|
<listitem><para>
|
|
|
|
Should provide an inheritance mechanism to share
|
|
|
|
common metadata between many packages.
|
|
|
|
</para></listitem>
|
2013-01-11 17:45:15 +00:00
|
|
|
</itemizedlist>
|
|
|
|
</para>
|
2014-01-17 15:00:48 +00:00
|
|
|
|
|
|
|
<para>
|
|
|
|
Over time it has become apparent that some further requirements
|
|
|
|
were necessary:
|
2013-01-11 17:45:15 +00:00
|
|
|
<itemizedlist>
|
2014-01-17 15:00:48 +00:00
|
|
|
<listitem><para>
|
|
|
|
Handle variants of a base recipe (native, sdk, multilib).
|
|
|
|
</para></listitem>
|
|
|
|
<listitem><para>
|
|
|
|
Able to split metadata into layers and allow layers
|
|
|
|
to override each other.
|
|
|
|
</para></listitem>
|
|
|
|
<listitem><para>
|
|
|
|
Allow representation of a given set of input variables
|
|
|
|
to a task as a checksum.
|
|
|
|
Based on that checksum, allow acceleration of builds
|
|
|
|
with prebuilt components.
|
|
|
|
</para></listitem>
|
2013-01-11 17:45:15 +00:00
|
|
|
</itemizedlist>
|
|
|
|
</para>
|
|
|
|
|
2014-01-17 15:00:48 +00:00
|
|
|
<para>
|
|
|
|
BitBake satisfies all the original requirements and many more
|
|
|
|
with extensions being made to the basic functionality to
|
|
|
|
reflect the additional requirements.
|
|
|
|
Flexibility and power have always been the priorities.
|
|
|
|
It is highly extensible, supporting embedded Python code and
|
|
|
|
execution of any arbitrary tasks.
|
|
|
|
</para>
|
|
|
|
</section>
|
|
|
|
</chapter>
|