summaryrefslogtreecommitdiffstats
path: root/handbook/ref-bitbake.xml
diff options
context:
space:
mode:
authorRichard Purdie <richard@openedhand.com>2008-02-26 11:31:34 +0000
committerRichard Purdie <richard@openedhand.com>2008-02-26 11:31:34 +0000
commit882e9cd2affb773eec8b1d387ab4e3b5cbdc0994 (patch)
treef023b2ce9abf3b894a81986e0a00e23d77b55e66 /handbook/ref-bitbake.xml
parent7197110f46511492a48cd359b3ddf75b60ea47c8 (diff)
downloadpoky-882e9cd2affb773eec8b1d387ab4e3b5cbdc0994.tar.gz
Add Poky handbook
git-svn-id: https://svn.o-hand.com/repos/poky/trunk@3865 311d38ba-8fff-0310-9ca6-ca027cbcb966
Diffstat (limited to 'handbook/ref-bitbake.xml')
-rw-r--r--handbook/ref-bitbake.xml340
1 files changed, 340 insertions, 0 deletions
diff --git a/handbook/ref-bitbake.xml b/handbook/ref-bitbake.xml
new file mode 100644
index 0000000000..8652424466
--- /dev/null
+++ b/handbook/ref-bitbake.xml
@@ -0,0 +1,340 @@
1<!DOCTYPE appendix PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
2"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
3
4<appendix id='ref-bitbake'>
5
6 <title>Reference: Bitbake</title>
7
8 <para>
9 Bitbake a program written in Python which interprets the metadata
10 that makes up Poky. At some point, people wonder what actually happens
11 when you type <command>bitbake poky-image-sato</command>. This section
12 aims to give an overview of what happens behind the scenes from a
13 BitBake perspective.
14 </para>
15
16 <para>
17 It is worth noting that bitbake aims to be a generic "task" executor
18 capable of handling complex dependency relationships. As such it has no
19 real knowledge of what the tasks its executing actually do. It just
20 considers a list of tasks with dependencies and handles metadata
21 consisting of variables in a certain format which get passed to the
22 tasks.
23 </para>
24
25 <section id='ref-bitbake-parsing'>
26 <title>Parsing</title>
27
28 <para>
29 The first thing BitBake does is work out its configuration by
30 looking for a file called <filename>bitbake.conf</filename>.
31 Bitbake searches through the <varname>BBPATH</varname> environment
32 variable looking for a <filename class="directory">conf/</filename>
33 directory containing a <filename>bitbake.conf</filename> file and
34 adds the first <filename>bitbake.conf</filename> file found in
35 <varname>BBPATH</varname> (similar to the PATH environment variable).
36 For Poky, <filename>bitbake.conf</filename> is found in <filename
37 class="directory">meta/conf/</filename>.
38 </para>
39
40 <para>
41 In Poky, <filename>bitbake.conf</filename> lists other configuration
42 files to include from a <filename class="directory">conf/</filename>
43 directory below the directories listed in <varname>BBPATH</varname>.
44 In general the most important configuration file from a user's perspective
45 is <filename>local.conf</filename>, which contains a users customized
46 settings for Poky. Other notable configuration files are the distribution
47 configuration file (set by the <glossterm><link linkend='var-DISTRO'>
48 DISTRO</link></glossterm> variable) and the machine configuration file
49 (set by the <glossterm><link linkend='var-MACHINE'>MACHINE</link>
50 </glossterm> variable). The <glossterm><link linkend='var-DISTRO'>
51 DISTRO</link></glossterm> and <glossterm><link linkend='var-MACHINE'>
52 MACHINE</link></glossterm> environment variables are both usually set in
53 the <filename>local.conf</filename> file. Valid distribution
54 configuration files are available in the <filename class="directory">
55 meta/conf/distro/</filename> directory and valid machine configuration
56 files in the <filename class="directory">meta/conf/machine/</filename>
57 directory. Within the <filename class="directory">
58 meta/conf/machine/include/</filename> directory are various <filename>
59 tune-*.inc</filename> configuration files which provide common
60 "tuning" settings specific to and shared between particular
61 architectures and machines.
62 </para>
63
64 <para>
65 After the parsing of the configuration files some standard classes
66 are included. In particular, <filename>base.bbclass</filename> is
67 always included, as will any other classes
68 specified in the configuration using the <glossterm><link
69 linkend='var-INHERIT'>INHERIT</link></glossterm>
70 variable. Class files are searched for in a classes subdirectory
71 under the paths in <varname>BBPATH</varname> in the same way as
72 configuration files.
73 </para>
74
75 <para>
76 After the parsing of the configuration files is complete, the
77 variable <glossterm><link linkend='var-BBFILES'>BBFILES</link></glossterm>
78 is set, usually in
79 <filename>local.conf</filename>, and defines the list of places to search for
80 <filename class="extension">.bb</filename> files. By
81 default this specifies the <filename class="directory">meta/packages/
82 </filename> directory within Poky, but other directories such as
83 <filename class="directory">meta-extras/</filename> can be included
84 too. If multiple directories are specified a system referred to as
85 <link linkend='usingpoky-changes-collections'>"collections"</link> is used to
86 determine which files have priority.
87 </para>
88
89 <para>
90 Bitbake parses each <filename class="extension">.bb</filename> file in
91 <glossterm><link linkend='var-BBFILES'>BBFILES</link></glossterm> and
92 stores the values of various variables. In summary, for each
93 <filename class="extension">.bb</filename>
94 file the configuration + base class of variables are set, followed
95 by the data in the <filename class="extension">.bb</filename> file
96 itself, followed by any inherit commands that
97 <filename class="extension">.bb</filename> file might contain.
98 </para>
99
100 <para>
101 Parsing <filename class="extension">.bb</filename> files is a time
102 consuming process, so a cache is kept to speed up subsequent parsing.
103 This cache is invalid if the timestamp of the <filename class="extension">.bb</filename>
104 file itself has changed, or if the timestamps of any of the include,
105 configuration or class files the <filename class="extension">.bb</filename>
106 file depends on have changed.
107 </para>
108 </section>
109
110 <section id='ref-bitbake-providers'>
111 <title>Preferences and Providers</title>
112
113 <para>
114 Once all the <filename class="extension">.bb</filename> files have been
115 parsed, BitBake will proceed to build "poky-image-sato" (or whatever was
116 specified on the commandline) and looks for providers of that target.
117 Once a provider is selected, BitBake resolves all the dependencies for
118 the target. In the case of "poky-image-sato", it would lead to
119 <filename>task-oh.bb</filename> and <filename>task-base.bb</filename>
120 which in turn would lead to packages like <application>Contacts</application>,
121 <application>Dates</application>, <application>BusyBox</application>
122 and these in turn depend on glibc and the toolchain.
123 </para>
124
125 <para>
126 Sometimes a target might have multiple providers and a common example
127 is "virtual/kernel" that is provided by each kernel package. Each machine
128 will often elect the best provider of its kernel with a line like the
129 following in the machine configuration file:
130 </para>
131 <programlisting><glossterm><link linkend='var-PREFERRED_PROVIDER'>PREFERRED_PROVIDER</link></glossterm>_virtual/kernel = "linux-rp"</programlisting>
132 <para>
133 The default <glossterm><link linkend='var-PREFERRED_PROVIDER'>
134 PREFERRED_PROVIDER</link></glossterm> is the provider with the same name as
135 the target.
136 </para>
137
138 <para>
139 Understanding how providers are chosen is complicated by the fact
140 multiple versions might be present. Bitbake defaults to the highest
141 version of a provider by default. Version comparisons are made using
142 the same method as Debian. The <glossterm><link
143 linkend='var-PREFERRED_VERSION'>PREFERRED_VERSION</link></glossterm>
144 variable can be used to specify a particular version
145 (usually in the distro configuration) but the order can
146 also be influenced by the <glossterm><link
147 linkend='var-DEFAULT_PREFERENCE'>DEFAULT_PREFERENCE</link></glossterm>
148 variable. By default files
149 have a preference of "0". Setting the
150 <glossterm><link
151 linkend='var-DEFAULT_PREFERENCE'>DEFAULT_PREFERENCE</link></glossterm> to "-1" will
152 make a package unlikely to be used unless it was explicitly referenced and
153 "1" makes it likely the package will be used.
154 <glossterm><link
155 linkend='var-PREFERRED_VERSION'>PREFERRED_VERSION</link></glossterm> overrides
156 any default preference. <glossterm><link
157 linkend='var-DEFAULT_PREFERENCE'>DEFAULT_PREFERENCE</link></glossterm>
158 is often used to mark more
159 experimental new versions of packages until they've undergone sufficient
160 testing to be considered stable.
161 </para>
162
163 <para>
164 The end result is that internally, BitBake has now built a list of
165 providers for each target it needs in order of priority.
166 </para>
167 </section>
168
169 <section id='ref-bitbake-dependencies'>
170 <title>Dependencies</title>
171
172 <para>
173 Each target BitBake builds consists of multiple tasks (e.g. fetch,
174 unpack, patch, configure, compile etc.). For best performance on
175 multi-core systems, BitBake considers each task as an independent
176 entity with a set of dependencies. There are many variables that
177 are used to signify these dependencies and more information can be found
178 found about these in the <ulink url='http://bitbake.berlios.de/manual/'>
179 BitBake manual</ulink>. At a basic level it is sufficient to know
180 that BitBake uses the <glossterm><link
181 linkend='var-DEPENDS'>DEPENDS</link></glossterm> and
182 <glossterm><link linkend='var-RDEPENDS'>RDEPENDS</link></glossterm> variables when
183 calculating dependencies and descriptions of these variables are
184 available through the links.
185 </para>
186
187 </section>
188
189 <section id='ref-bitbake-tasklist'>
190 <title>The Task List</title>
191
192 <para>
193 Based on the generated list of providers and the dependency information,
194 BitBake can now calculate exactly which tasks it needs to run and in what
195 order. The build now starts with BitBake forking off threads up to
196 the limit set in the <glossterm><link
197 linkend='var-BB_NUMBER_THREADS'>BB_NUMBER_THREADS</link></glossterm> variable
198 as long there are tasks ready to run, i.e. tasks with all their
199 dependencies met.
200 </para>
201
202 <para>
203 As each task completes, a timestamp is written to the directory
204 specified by the <glossterm><link
205 linkend='var-STAMPS'>STAMPS</link></glossterm> variable (usually
206 <filename class="directory">build/tmp/stamps/*/</filename>). On
207 subsequent runs, BitBake looks at the <glossterm><link
208 linkend='var-STAMPS'>STAMPS</link></glossterm>
209 directory and will not rerun
210 tasks its already completed unless a timestamp is found to be invalid.
211 Currently, invalid timestamps are only considered on a per <filename
212 class="extension">.bb</filename> file basis so if for example the configure stamp has a timestamp greater than the
213 compile timestamp for a given target the compile task would rerun but this
214 has no effect on other providers depending on that target. This could
215 change or become configurable in future versions of BitBake. Some tasks
216 are marked as "nostamp" tasks which means no timestamp file will be written
217 and the task will always rerun.
218 </para>
219
220 <para>Once all the tasks have been completed BitBake exits.</para>
221
222 </section>
223
224 <section id='ref-bitbake-runtask'>
225 <title>Running a Task</title>
226
227 <para>
228 It's worth noting what BitBake does to run a task. A task can either
229 be a shell task or a python task. For shell tasks, BitBake writes a
230 shell script to <filename>${WORKDIR}/temp/run.do_taskname.pid</filename>
231 and then executes the script. The generated
232 shell script contains all the exported variables, and the shell functions
233 with all variables expanded. Output from the shell script is
234 sent to the file <filename>${WORKDIR}/temp/log.do_taskname.pid</filename>.
235 Looking at the
236 expanded shell functions in the run file and the output in the log files
237 is a useful debugging technique.
238 </para>
239
240 <para>
241 Python functions are executed internally to BitBake itself and
242 logging goes to the controlling terminal. Future versions of BitBake will
243 write the functions to files in a similar way to shell functions and
244 logging will also go to the log files in a similar way.
245 </para>
246 </section>
247
248
249 <section id='ref-bitbake-commandline'>
250 <title>Commandline</title>
251
252 <para>
253 To quote from "bitbake --help":
254 </para>
255
256 <screen>Usage: bitbake [options] [package ...]
257
258Executes the specified task (default is 'build') for a given set of BitBake files.
259It expects that BBFILES is defined, which is a space separated list of files to
260be executed. BBFILES does support wildcards.
261Default BBFILES are the .bb files in the current directory.
262
263Options:
264 --version show program's version number and exit
265 -h, --help show this help message and exit
266 -b BUILDFILE, --buildfile=BUILDFILE
267 execute the task against this .bb file, rather than a
268 package from BBFILES.
269 -k, --continue continue as much as possible after an error. While the
270 target that failed, and those that depend on it,
271 cannot be remade, the other dependencies of these
272 targets can be processed all the same.
273 -f, --force force run of specified cmd, regardless of stamp status
274 -i, --interactive drop into the interactive mode also called the BitBake
275 shell.
276 -c CMD, --cmd=CMD Specify task to execute. Note that this only executes
277 the specified task for the providee and the packages
278 it depends on, i.e. 'compile' does not implicitly call
279 stage for the dependencies (IOW: use only if you know
280 what you are doing). Depending on the base.bbclass a
281 listtasks tasks is defined and will show available
282 tasks
283 -r FILE, --read=FILE read the specified file before bitbake.conf
284 -v, --verbose output more chit-chat to the terminal
285 -D, --debug Increase the debug level. You can specify this more
286 than once.
287 -n, --dry-run don't execute, just go through the motions
288 -p, --parse-only quit after parsing the BB files (developers only)
289 -d, --disable-psyco disable using the psyco just-in-time compiler (not
290 recommended)
291 -s, --show-versions show current and preferred versions of all packages
292 -e, --environment show the global or per-package environment (this is
293 what used to be bbread)
294 -g, --graphviz emit the dependency trees of the specified packages in
295 the dot syntax
296 -I IGNORED_DOT_DEPS, --ignore-deps=IGNORED_DOT_DEPS
297 Stop processing at the given list of dependencies when
298 generating dependency graphs. This can help to make
299 the graph more appealing
300 -l DEBUG_DOMAINS, --log-domains=DEBUG_DOMAINS
301 Show debug logging for the specified logging domains
302 -P, --profile profile the command and print a report</screen>
303
304 </section>
305
306 <section id='ref-bitbake-fetchers'>
307 <title>Fetchers</title>
308
309 <para>
310 As well as the containing the parsing and task/dependency handling
311 code, bitbake also contains a set of "fetcher" modules which allow
312 fetching of source code from various types of sources. Example
313 sources might be from disk with the metadata, from websites, from
314 remote shell accounts or from SCM systems like cvs/subversion/git.
315 </para>
316
317 <para>
318 The fetchers are usually triggered by entries in
319 <glossterm><link linkend='var-SRC_URI'>SRC_URI</link></glossterm>. Information about the
320 options and formats of entries for specific fetchers can be found in the
321 <ulink url='http://bitbake.berlios.de/manual/'>BitBake manual</ulink>.
322 </para>
323
324 <para>
325 One useful feature for certain SCM fetchers is the ability to
326 "auto-update" when the upstream SCM changes version. Since this
327 requires certain functionality from the SCM only certain systems
328 support it, currently Subversion, Bazaar and to a limited extent, Git. It
329 works using the <glossterm><link linkend='var-SRCREV'>SRCREV</link>
330 </glossterm> variable. See the <link linkend='platdev-appdev-srcrev'>
331 developing with an external SCM based project</link> section for more
332 information.
333 </para>
334
335 </section>
336
337</appendix>
338<!--
339vim: expandtab tw=80 ts=4 spell spelllang=en_gb
340-->