diff options
| author | Scott Rifenbark <scott.m.rifenbark@intel.com> | 2011-12-08 10:34:44 -0800 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2011-12-16 16:58:38 +0000 |
| commit | a191e6e04892a67487ace11f5a94ea1c62701c8c (patch) | |
| tree | 2746a0d603ca254fa77879e1b264a16ef78fe797 /documentation | |
| parent | 9a99147c9146463ec2988e6670ed21929dc474ee (diff) | |
| download | poky-a191e6e04892a67487ace11f5a94ea1c62701c8c.tar.gz | |
documentation/poky-ref-manual: New chapter introduced
Long-term strategy for the YP Reference Manual is that it contains
reference material and not "how-to-information". A step in this
direction is to isolate any discussions on components and other
areas of YP that need talked about. So to start with, I have created
a new chapter for now named "Technical Details" that so far has
a discussion of some components and shared state. This is a
step in the direction of making this manual a reference manual and
not a "how to" manual.
Changes included removing redundant material from the 'usingpoky.xml'
chapter and also adding the new chapter 'technical-details' into the
'poky-ref-manual.xml' file used for the make.
(From yocto-docs rev: 567823392d903016d314ae9fcc1b4d7abf59d9ae)
Signed-off-by: Scott Rifenbark <scott.m.rifenbark@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'documentation')
| -rw-r--r-- | documentation/poky-ref-manual/poky-ref-manual.xml | 2 | ||||
| -rw-r--r-- | documentation/poky-ref-manual/technical-details.xml | 229 | ||||
| -rw-r--r-- | documentation/poky-ref-manual/usingpoky.xml | 220 |
3 files changed, 232 insertions, 219 deletions
diff --git a/documentation/poky-ref-manual/poky-ref-manual.xml b/documentation/poky-ref-manual/poky-ref-manual.xml index 8c81d2bee0..01907134c7 100644 --- a/documentation/poky-ref-manual/poky-ref-manual.xml +++ b/documentation/poky-ref-manual/poky-ref-manual.xml | |||
| @@ -92,6 +92,8 @@ | |||
| 92 | 92 | ||
| 93 | <xi:include href="extendpoky.xml"/> | 93 | <xi:include href="extendpoky.xml"/> |
| 94 | 94 | ||
| 95 | <xi:include href="technical-details.xml"/> | ||
| 96 | |||
| 95 | <xi:include href="../bsp-guide/bsp.xml"/> | 97 | <xi:include href="../bsp-guide/bsp.xml"/> |
| 96 | 98 | ||
| 97 | <xi:include href="development.xml"/> | 99 | <xi:include href="development.xml"/> |
diff --git a/documentation/poky-ref-manual/technical-details.xml b/documentation/poky-ref-manual/technical-details.xml new file mode 100644 index 0000000000..8f83ecb3a1 --- /dev/null +++ b/documentation/poky-ref-manual/technical-details.xml | |||
| @@ -0,0 +1,229 @@ | |||
| 1 | <!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" | ||
| 2 | "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> | ||
| 3 | <chapter id='technical-details'> | ||
| 4 | <title>Technical Details</title> | ||
| 5 | |||
| 6 | <para> | ||
| 7 | This chapter provides technical details for various parts of the Yocto Project. | ||
| 8 | Currently, topics include Yocto Project components and shared state (sstate) cache. | ||
| 9 | </para> | ||
| 10 | |||
| 11 | <section id='usingpoky-components'> | ||
| 12 | <title>Yocto Project Components</title> | ||
| 13 | |||
| 14 | <para> | ||
| 15 | The BitBake task executor together with various types of configuration files form the | ||
| 16 | Yocto Project core. | ||
| 17 | This section overviews the BitBake task executor and the | ||
| 18 | configuration files by describing what they are used for and how they interact. | ||
| 19 | </para> | ||
| 20 | |||
| 21 | <para> | ||
| 22 | BitBake handles the parsing and execution of the data files. | ||
| 23 | The data itself is of various types: | ||
| 24 | <itemizedlist> | ||
| 25 | <listitem><para><emphasis>Recipes:</emphasis> Provides details about particular | ||
| 26 | pieces of software</para></listitem> | ||
| 27 | <listitem><para><emphasis>Class Data:</emphasis> An abstraction of common build | ||
| 28 | information (e.g. how to build a Linux kernel).</para></listitem> | ||
| 29 | <listitem><para><emphasis>Configuration Data:</emphasis> Defines machine-specific settings, | ||
| 30 | policy decisions, etc. | ||
| 31 | Configuration data acts as the glue to bind everything together.</para></listitem> | ||
| 32 | </itemizedlist> | ||
| 33 | For more information on data, see the | ||
| 34 | <ulink url='http://www.yoctoproject.org/docs/latest/dev-manual/dev-manual.html#yocto-project-terms'> | ||
| 35 | Yocto Project Terms</ulink> section in | ||
| 36 | <ulink url='http://www.yoctoproject.org/docs/latest/dev-manual/dev-manual.html'> | ||
| 37 | The Yocto Project Development Manual</ulink>. | ||
| 38 | </para> | ||
| 39 | |||
| 40 | <para> | ||
| 41 | BitBake knows how to combine multiple data sources together and refers to each data source | ||
| 42 | as a <link linkend='usingpoky-changes-layers'>'layer'</link>. | ||
| 43 | </para> | ||
| 44 | |||
| 45 | <para> | ||
| 46 | Following are some brief details on these core components. | ||
| 47 | For more detailed information on these components see the | ||
| 48 | <link linkend='ref-structure'>'Reference: Directory Structure'</link> | ||
| 49 | appendix. | ||
| 50 | </para> | ||
| 51 | |||
| 52 | <section id='usingpoky-components-bitbake'> | ||
| 53 | <title>BitBake</title> | ||
| 54 | |||
| 55 | <para> | ||
| 56 | BitBake is the tool at the heart of the Yocto Project and is responsible | ||
| 57 | for parsing the metadata, generating a list of tasks from it, | ||
| 58 | and then executing those tasks. | ||
| 59 | To see a list of the options BitBake supports, use the following help command: | ||
| 60 | <literallayout class='monospaced'> | ||
| 61 | $ bitbake --help | ||
| 62 | </literallayout> | ||
| 63 | </para> | ||
| 64 | |||
| 65 | <para> | ||
| 66 | The most common usage for BitBake is <filename>bitbake <packagename></filename>, where | ||
| 67 | <filename>packagename</filename> is the name of the package you want to build | ||
| 68 | (referred to as the "target" in this manual). | ||
| 69 | The target often equates to the first part of a <filename>.bb</filename> filename. | ||
| 70 | So, to run the <filename>matchbox-desktop_1.2.3.bb</filename> file, you | ||
| 71 | might type the following: | ||
| 72 | <literallayout class='monospaced'> | ||
| 73 | $ bitbake matchbox-desktop | ||
| 74 | </literallayout> | ||
| 75 | Several different versions of <filename>matchbox-desktop</filename> might exist. | ||
| 76 | BitBake chooses the one selected by the distribution configuration. | ||
| 77 | You can get more details about how BitBake chooses between different | ||
| 78 | target versions and providers in the | ||
| 79 | <link linkend='ref-bitbake-providers'>Preferences and Providers</link> section. | ||
| 80 | </para> | ||
| 81 | |||
| 82 | <para> | ||
| 83 | BitBake also tries to execute any dependent tasks first. | ||
| 84 | So for example, before building <filename>matchbox-desktop</filename>, BitBake | ||
| 85 | would build a cross compiler and <filename>eglibc</filename> if they had not already | ||
| 86 | been built. | ||
| 87 | <note>This release of the Yocto Project does not support the <filename>glibc</filename> | ||
| 88 | GNU version of the Unix standard C library. By default, the Yocto Project builds with | ||
| 89 | <filename>eglibc</filename>.</note> | ||
| 90 | </para> | ||
| 91 | |||
| 92 | <para> | ||
| 93 | A useful BitBake option to consider is the <filename>-k</filename> or | ||
| 94 | <filename>--continue</filename> option. | ||
| 95 | This option instructs BitBake to try and continue processing the job as much | ||
| 96 | as possible even after encountering an error. | ||
| 97 | When an error occurs, the target that | ||
| 98 | failed and those that depend on it cannot be remade. | ||
| 99 | However, when you use this option other dependencies can still be processed. | ||
| 100 | </para> | ||
| 101 | </section> | ||
| 102 | |||
| 103 | <section id='usingpoky-components-metadata'> | ||
| 104 | <title>Metadata (Recipes)</title> | ||
| 105 | |||
| 106 | <para> | ||
| 107 | The <filename>.bb</filename> files are usually referred to as "recipes." | ||
| 108 | In general, a recipe contains information about a single piece of software. | ||
| 109 | The information includes the location from which to download the source patches | ||
| 110 | (if any are needed), which special configuration options to apply, | ||
| 111 | how to compile the source files, and how to package the compiled output. | ||
| 112 | </para> | ||
| 113 | |||
| 114 | <para> | ||
| 115 | The term "package" can also be used to describe recipes. | ||
| 116 | However, since the same word is used for the packaged output from the Yocto | ||
| 117 | Project (i.e. <filename>.ipk</filename> or <filename>.deb</filename> files), | ||
| 118 | this document avoids using the term "package" to refer to recipes. | ||
| 119 | </para> | ||
| 120 | </section> | ||
| 121 | |||
| 122 | <section id='usingpoky-components-classes'> | ||
| 123 | <title>Classes</title> | ||
| 124 | |||
| 125 | <para> | ||
| 126 | Class files (<filename>.bbclass</filename>) contain information that is useful to share | ||
| 127 | between metadata files. | ||
| 128 | An example is the Autotools class, which contains | ||
| 129 | common settings for any application that Autotools uses. | ||
| 130 | The <link linkend='ref-classes'>Reference: Classes</link> appendix provides details | ||
| 131 | about common classes and how to use them. | ||
| 132 | </para> | ||
| 133 | </section> | ||
| 134 | |||
| 135 | <section id='usingpoky-components-configuration'> | ||
| 136 | <title>Configuration</title> | ||
| 137 | |||
| 138 | <para> | ||
| 139 | The configuration files (<filename>.conf</filename>) define various configuration variables | ||
| 140 | that govern the Yocto Project build process. | ||
| 141 | These files fall into several areas that define machine configuration options, | ||
| 142 | distribution configuration options, compiler tuning options, general common configuration | ||
| 143 | options and user configuration options (<filename>local.conf</filename>, which is found | ||
| 144 | in the Yocto Project files build directory). | ||
| 145 | </para> | ||
| 146 | </section> | ||
| 147 | </section> | ||
| 148 | |||
| 149 | <section id="considering-shared-state-cache"> | ||
| 150 | <title>Considering Shared State Cache</title> | ||
| 151 | |||
| 152 | <para> | ||
| 153 | By design, the Yocto Project builds everything from scratch unless it can determine that | ||
| 154 | a given task's inputs have not changed. | ||
| 155 | While building from scratch ensures that everything is current, it does also | ||
| 156 | mean that a lot of time could be spent rebuiding things that don't necessarily need built. | ||
| 157 | </para> | ||
| 158 | |||
| 159 | <para> | ||
| 160 | The Yocto Project build process uses a shared state caching scheme to avoid having to | ||
| 161 | rebuild software when it is not necessary. | ||
| 162 | Because the build time for a Yocto image can be significant, it is helpful to try and | ||
| 163 | determine what really needs built and what can be skipped given a particular project's | ||
| 164 | build process. | ||
| 165 | </para> | ||
| 166 | |||
| 167 | <para> | ||
| 168 | The scheme that the Yocto Project uses involves checksum generation and comparison for | ||
| 169 | a task's inputs. | ||
| 170 | The scheme also employs an area of memory called the shared state cache that is | ||
| 171 | pointed to by the <filename>SSTATE_DIR</filename> variable. | ||
| 172 | This area contains task output generated from a previous build. | ||
| 173 | If a given task's checksum matches the checksum of a previous build for the same | ||
| 174 | task, the build process uses the state of the cache rather than rerunning that | ||
| 175 | task. | ||
| 176 | </para> | ||
| 177 | |||
| 178 | <para> | ||
| 179 | The previous paragraph is a simplistic explanation of how the build process | ||
| 180 | uses checksums and shared state memory cache to avoide building tasks that | ||
| 181 | don't need built. | ||
| 182 | If you want a bit more explanation on the topic, | ||
| 183 | see "<ulink url='https://lists.yoctoproject.org/pipermail/yocto/2011-March/003366.html'>Shared | ||
| 184 | State - What does it mean and why should I care?</ulink>" from the Yocto | ||
| 185 | Project discussion archives. | ||
| 186 | </para> | ||
| 187 | |||
| 188 | <para> | ||
| 189 | As with all schemes, this one has some drawbacks. | ||
| 190 | It is possible that you could make implicit changes that are not factored into the checksum | ||
| 191 | calculation, but do affect a task's output. | ||
| 192 | A good example is perhaps when a tool changes its output. | ||
| 193 | Let's say that the output of <filename>rpmdeps</filename> needed to change. | ||
| 194 | The result of the change should be that all the "package", "package_write_rpm", | ||
| 195 | and "package_deploy-rpm" sstate-cache items would become invalid. | ||
| 196 | But, because this is a change that is external to the code and therefore implicit, | ||
| 197 | the associated sstate-cache items do not become invalidated. | ||
| 198 | In this case, the build process would use the cache items rather than running the | ||
| 199 | task again. | ||
| 200 | Obviously, these types of implicit changes can cause problems. | ||
| 201 | </para> | ||
| 202 | |||
| 203 | <para> | ||
| 204 | To avoid these problems during the build, you need to understand the effects of any | ||
| 205 | change you make. | ||
| 206 | Note that any changes you make directly to a function automatically are factored into | ||
| 207 | the checksum calculation and thus, will invalidate the associated area of sstate cache. | ||
| 208 | You need to be aware of any implicit changes that are not obvious changes to the | ||
| 209 | code and could affect the output of a given task. | ||
| 210 | Once you are aware of such a change, you can take steps to invalidate the cache | ||
| 211 | and force the task to run. | ||
| 212 | The step to take is as simple as changing a function's comments in the source code. | ||
| 213 | For example, to invalidate package sstate files, change the comment statments | ||
| 214 | of <filename>do_package</filename> or one of the functions it calls. | ||
| 215 | The change is purely cosmetic, but it causes the checksum to be recalculated and | ||
| 216 | forces the task to be run again. | ||
| 217 | </para> | ||
| 218 | |||
| 219 | <note> | ||
| 220 | For an example of a commit that makes a cosmetic change to invalidate an sstate, | ||
| 221 | see this | ||
| 222 | <ulink url='http://git.yoctoproject.org/cgit.cgi/poky/commit/meta/classes/package.bbclass?id=737f8bbb4f27b4837047cb9b4fbfe01dfde36d54'>commit</ulink>. | ||
| 223 | </note> | ||
| 224 | </section> | ||
| 225 | |||
| 226 | </chapter> | ||
| 227 | <!-- | ||
| 228 | vim: expandtab tw=80 ts=4 | ||
| 229 | --> | ||
diff --git a/documentation/poky-ref-manual/usingpoky.xml b/documentation/poky-ref-manual/usingpoky.xml index 9a338b3c89..ea316595b1 100644 --- a/documentation/poky-ref-manual/usingpoky.xml +++ b/documentation/poky-ref-manual/usingpoky.xml | |||
| @@ -4,150 +4,9 @@ | |||
| 4 | <title>Using the Yocto Project</title> | 4 | <title>Using the Yocto Project</title> |
| 5 | 5 | ||
| 6 | <para> | 6 | <para> |
| 7 | This section gives an overview of the components that make up the Yocto Project | 7 | This section describes the common usage for the Yocto Project. |
| 8 | followed by information about Yocto Project builds and dealing with any | ||
| 9 | problems that might arise. | ||
| 10 | </para> | 8 | </para> |
| 11 | 9 | ||
| 12 | <section id='usingpoky-components'> | ||
| 13 | <title>Yocto Project Components</title> | ||
| 14 | |||
| 15 | <para> | ||
| 16 | The BitBake task executor together with various types of configuration files form the | ||
| 17 | Yocto Project core. | ||
| 18 | This section overviews the BitBake task executor and the | ||
| 19 | configuration files by describing what they are used for and how they interact. | ||
| 20 | </para> | ||
| 21 | |||
| 22 | <para> | ||
| 23 | BitBake handles the parsing and execution of the data files. | ||
| 24 | The data itself is of various types: | ||
| 25 | <itemizedlist> | ||
| 26 | <listitem><para><emphasis>Recipes:</emphasis> Provides details about particular | ||
| 27 | pieces of software</para></listitem> | ||
| 28 | <listitem><para><emphasis>Class Data:</emphasis> An abstraction of common build | ||
| 29 | information (e.g. how to build a Linux kernel).</para></listitem> | ||
| 30 | <listitem><para><emphasis>Configuration Data:</emphasis> Defines machine-specific settings, | ||
| 31 | policy decisions, etc. | ||
| 32 | Configuration data acts as the glue to bind everything together.</para></listitem> | ||
| 33 | </itemizedlist> | ||
| 34 | For more information on data, see the | ||
| 35 | <ulink url='http://www.yoctoproject.org/docs/latest/dev-manual/dev-manual.html#yocto-project-terms'> | ||
| 36 | Yocto Project Terms</ulink> section in | ||
| 37 | <ulink url='http://www.yoctoproject.org/docs/latest/dev-manual/dev-manual.html'> | ||
| 38 | The Yocto Project Development Manual</ulink>. | ||
| 39 | </para> | ||
| 40 | |||
| 41 | <para> | ||
| 42 | BitBake knows how to combine multiple data sources together and refers to each data source | ||
| 43 | as a <link linkend='usingpoky-changes-layers'>'layer'</link>. | ||
| 44 | </para> | ||
| 45 | |||
| 46 | <para> | ||
| 47 | Following are some brief details on these core components. | ||
| 48 | For more detailed information on these components see the | ||
| 49 | <link linkend='ref-structure'>'Reference: Directory Structure'</link> | ||
| 50 | appendix. | ||
| 51 | </para> | ||
| 52 | |||
| 53 | <section id='usingpoky-components-bitbake'> | ||
| 54 | <title>BitBake</title> | ||
| 55 | |||
| 56 | <para> | ||
| 57 | BitBake is the tool at the heart of the Yocto Project and is responsible | ||
| 58 | for parsing the metadata, generating a list of tasks from it, | ||
| 59 | and then executing those tasks. | ||
| 60 | To see a list of the options BitBake supports, use the following help command: | ||
| 61 | <literallayout class='monospaced'> | ||
| 62 | $ bitbake --help | ||
| 63 | </literallayout> | ||
| 64 | </para> | ||
| 65 | |||
| 66 | <para> | ||
| 67 | The most common usage for BitBake is <filename>bitbake <packagename></filename>, where | ||
| 68 | <filename>packagename</filename> is the name of the package you want to build | ||
| 69 | (referred to as the "target" in this manual). | ||
| 70 | The target often equates to the first part of a <filename>.bb</filename> filename. | ||
| 71 | So, to run the <filename>matchbox-desktop_1.2.3.bb</filename> file, you | ||
| 72 | might type the following: | ||
| 73 | <literallayout class='monospaced'> | ||
| 74 | $ bitbake matchbox-desktop | ||
| 75 | </literallayout> | ||
| 76 | Several different versions of <filename>matchbox-desktop</filename> might exist. | ||
| 77 | BitBake chooses the one selected by the distribution configuration. | ||
| 78 | You can get more details about how BitBake chooses between different | ||
| 79 | target versions and providers in the | ||
| 80 | <link linkend='ref-bitbake-providers'>Preferences and Providers</link> section. | ||
| 81 | </para> | ||
| 82 | |||
| 83 | <para> | ||
| 84 | BitBake also tries to execute any dependent tasks first. | ||
| 85 | So for example, before building <filename>matchbox-desktop</filename>, BitBake | ||
| 86 | would build a cross compiler and <filename>eglibc</filename> if they had not already | ||
| 87 | been built. | ||
| 88 | <note>This release of the Yocto Project does not support the <filename>glibc</filename> | ||
| 89 | GNU version of the Unix standard C library. By default, the Yocto Project builds with | ||
| 90 | <filename>eglibc</filename>.</note> | ||
| 91 | </para> | ||
| 92 | |||
| 93 | <para> | ||
| 94 | A useful BitBake option to consider is the <filename>-k</filename> or | ||
| 95 | <filename>--continue</filename> option. | ||
| 96 | This option instructs BitBake to try and continue processing the job as much | ||
| 97 | as possible even after encountering an error. | ||
| 98 | When an error occurs, the target that | ||
| 99 | failed and those that depend on it cannot be remade. | ||
| 100 | However, when you use this option other dependencies can still be processed. | ||
| 101 | </para> | ||
| 102 | </section> | ||
| 103 | |||
| 104 | <section id='usingpoky-components-metadata'> | ||
| 105 | <title>Metadata (Recipes)</title> | ||
| 106 | |||
| 107 | <para> | ||
| 108 | The <filename>.bb</filename> files are usually referred to as "recipes." | ||
| 109 | In general, a recipe contains information about a single piece of software. | ||
| 110 | The information includes the location from which to download the source patches | ||
| 111 | (if any are needed), which special configuration options to apply, | ||
| 112 | how to compile the source files, and how to package the compiled output. | ||
| 113 | </para> | ||
| 114 | |||
| 115 | <para> | ||
| 116 | The term "package" can also be used to describe recipes. | ||
| 117 | However, since the same word is used for the packaged output from the Yocto | ||
| 118 | Project (i.e. <filename>.ipk</filename> or <filename>.deb</filename> files), | ||
| 119 | this document avoids using the term "package" to refer to recipes. | ||
| 120 | </para> | ||
| 121 | </section> | ||
| 122 | |||
| 123 | <section id='usingpoky-components-classes'> | ||
| 124 | <title>Classes</title> | ||
| 125 | |||
| 126 | <para> | ||
| 127 | Class files (<filename>.bbclass</filename>) contain information that is useful to share | ||
| 128 | between metadata files. | ||
| 129 | An example is the Autotools class, which contains | ||
| 130 | common settings for any application that Autotools uses. | ||
| 131 | The <link linkend='ref-classes'>Reference: Classes</link> appendix provides details | ||
| 132 | about common classes and how to use them. | ||
| 133 | </para> | ||
| 134 | </section> | ||
| 135 | |||
| 136 | <section id='usingpoky-components-configuration'> | ||
| 137 | <title>Configuration</title> | ||
| 138 | |||
| 139 | <para> | ||
| 140 | The configuration files (<filename>.conf</filename>) define various configuration variables | ||
| 141 | that govern the Yocto Project build process. | ||
| 142 | These files fall into several areas that define machine configuration options, | ||
| 143 | distribution configuration options, compiler tuning options, general common configuration | ||
| 144 | options and user configuration options (<filename>local.conf</filename>, which is found | ||
| 145 | in the Yocto Project files build directory). | ||
| 146 | </para> | ||
| 147 | </section> | ||
| 148 | </section> | ||
| 149 | |||
| 150 | |||
| 151 | <section id='usingpoky-build'> | 10 | <section id='usingpoky-build'> |
| 152 | <title>Running a Build</title> | 11 | <title>Running a Build</title> |
| 153 | 12 | ||
| @@ -221,83 +80,6 @@ | |||
| 221 | due to some components not being rebuilt. | 80 | due to some components not being rebuilt. |
| 222 | </para> | 81 | </para> |
| 223 | </section> | 82 | </section> |
| 224 | |||
| 225 | <section id="considering-shared-state-cache"> | ||
| 226 | <title>Considering Shared State Cache</title> | ||
| 227 | |||
| 228 | <para> | ||
| 229 | By design, the Yocto Project builds everything from scratch unless it can determine that | ||
| 230 | a given task's inputs have not changed. | ||
| 231 | While building from scratch ensures that everything is current, it does also | ||
| 232 | mean that a lot of time could be spent rebuiding things that don't necessarily need built. | ||
| 233 | </para> | ||
| 234 | |||
| 235 | <para> | ||
| 236 | The Yocto Project build process uses a shared state caching scheme to avoid having to | ||
| 237 | rebuild software when it is not necessary. | ||
| 238 | Because the build time for a Yocto image can be significant, it is helpful to try and | ||
| 239 | determine what really needs built and what can be skipped given a particular project's | ||
| 240 | build process. | ||
| 241 | </para> | ||
| 242 | |||
| 243 | <para> | ||
| 244 | The scheme that the Yocto Project uses involves checksum generation and comparison for | ||
| 245 | a task's inputs. | ||
| 246 | The scheme also employs an area of memory called the shared state cache that is | ||
| 247 | pointed to by the <filename>SSTATE_DIR</filename> variable. | ||
| 248 | This area contains task output generated from a previous build. | ||
| 249 | If a given task's checksum matches the checksum of a previous build for the same | ||
| 250 | task, the build process uses the state of the cache rather than rerunning that | ||
| 251 | task. | ||
| 252 | </para> | ||
| 253 | |||
| 254 | <para> | ||
| 255 | The previous paragraph is a simplistic explanation of how the build process | ||
| 256 | uses checksums and shared state memory cache to avoide building tasks that | ||
| 257 | don't need built. | ||
| 258 | If you want a bit more explanation on the topic, | ||
| 259 | see "<ulink url='https://lists.yoctoproject.org/pipermail/yocto/2011-March/003366.html'>Shared | ||
| 260 | State - What does it mean and why should I care?</ulink>" from the Yocto | ||
| 261 | Project discussion archives. | ||
| 262 | </para> | ||
| 263 | |||
| 264 | <para> | ||
| 265 | As with all schemes, this one has some drawbacks. | ||
| 266 | It is possible that you could make implicit changes that are not factored into the checksum | ||
| 267 | calculation, but do affect a task's output. | ||
| 268 | A good example is perhaps when a tool changes its output. | ||
| 269 | Let's say that the output of <filename>rpmdeps</filename> needed to change. | ||
| 270 | The result of the change should be that all the "package", "package_write_rpm", | ||
| 271 | and "package_deploy-rpm" sstate-cache items would become invalid. | ||
| 272 | But, because this is a change that is external to the code and therefore implicit, | ||
| 273 | the associated sstate-cache items do not become invalidated. | ||
| 274 | In this case, the build process would use the cache items rather than running the | ||
| 275 | task again. | ||
| 276 | Obviously, these types of implicit changes can cause problems. | ||
| 277 | </para> | ||
| 278 | |||
| 279 | <para> | ||
| 280 | To avoid these problems during the build, you need to understand the effects of any | ||
| 281 | change you make. | ||
| 282 | Note that any changes you make directly to a function automatically are factored into | ||
| 283 | the checksum calculation and thus, will invalidate the associated area of sstate cache. | ||
| 284 | You need to be aware of any implicit changes that are not obvious changes to the | ||
| 285 | code and could affect the output of a given task. | ||
| 286 | Once you are aware of such a change, you can take steps to invalidate the cache | ||
| 287 | and force the task to run. | ||
| 288 | The step to take is as simple as changing a function's comments in the source code. | ||
| 289 | For example, to invalidate package sstate files, change the comment statments | ||
| 290 | of <filename>do_package</filename> or one of the functions it calls. | ||
| 291 | The change is purely cosmetic, but it causes the checksum to be recalculated and | ||
| 292 | forces the task to be run again. | ||
| 293 | </para> | ||
| 294 | |||
| 295 | <note> | ||
| 296 | For an example of a commit that makes a cosmetic change to invalidate an sstate, | ||
| 297 | see this | ||
| 298 | <ulink url='http://git.yoctoproject.org/cgit.cgi/poky/commit/meta/classes/package.bbclass?id=737f8bbb4f27b4837047cb9b4fbfe01dfde36d54'>commit</ulink>. | ||
| 299 | </note> | ||
| 300 | </section> | ||
| 301 | </section> | 83 | </section> |
| 302 | 84 | ||
| 303 | <section id='usingpoky-install'> | 85 | <section id='usingpoky-install'> |
