diff options
| author | Scott Rifenbark <srifenbark@gmail.com> | 2018-08-17 12:46:47 -0700 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2018-08-28 10:30:43 +0100 |
| commit | f08a41e9ef681905f4642f59d62d59ade8543450 (patch) | |
| tree | 306a42ab58a03554c2ba1a3b51c447024f46544e /documentation/dev-manual | |
| parent | 48b17b2bfe489d68ffd1bf18e0eda6314bb94019 (diff) | |
| download | poky-f08a41e9ef681905f4642f59d62d59ade8543450.tar.gz | |
dev-manual, Makefile: Created new section on multi-config build deps
Rewrote the section on setting up and executing multi-config builds.
Broke the section into two sub-sections. One is for the standard
information that was there for setting up a multi-config build. A
new section was for the cross-build dependencies in multi-config
builds.
Part of the re-write included creating a new figure that shows
the configuration file hierarchy needed for these types of builds.
So, new figure added to both the dev-manual and the mega-manual
figures directories.
Finally, the Makefile needed updated to account for the new figures.
(From yocto-docs rev: dc158e97c216aa6e7fa3755164409d581f8569c5)
Signed-off-by: Scott Rifenbark <srifenbark@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'documentation/dev-manual')
| -rw-r--r-- | documentation/dev-manual/dev-manual-common-tasks.xml | 274 | ||||
| -rw-r--r-- | documentation/dev-manual/figures/multiconfig_files.png | bin | 0 -> 18611 bytes |
2 files changed, 189 insertions, 85 deletions
diff --git a/documentation/dev-manual/dev-manual-common-tasks.xml b/documentation/dev-manual/dev-manual-common-tasks.xml index ed53fb68a6..2a93ce9c2d 100644 --- a/documentation/dev-manual/dev-manual-common-tasks.xml +++ b/documentation/dev-manual/dev-manual-common-tasks.xml | |||
| @@ -5325,100 +5325,204 @@ | |||
| 5325 | <title>Building Images for Multiple Targets Using Multiple Configurations</title> | 5325 | <title>Building Images for Multiple Targets Using Multiple Configurations</title> |
| 5326 | 5326 | ||
| 5327 | <para> | 5327 | <para> |
| 5328 | Bitbake also has functionality that allows you to build | 5328 | You can use a single <filename>bitbake</filename> command |
| 5329 | multiple targets at the same time, where each target uses | 5329 | to build multiple images for different targets where each |
| 5330 | a different configuration. | 5330 | image requires a different configuration (multiple |
| 5331 | configuration builds). | ||
| 5332 | The builds, in this scenario, are sometimes referred to as | ||
| 5333 | "multiconfigs", and this section uses that term throughout. | ||
| 5331 | </para> | 5334 | </para> |
| 5332 | 5335 | ||
| 5333 | <para> | 5336 | <para> |
| 5334 | In order to accomplish this, you setup each of the configurations | 5337 | This section describes how to set up for multiple |
| 5335 | you need to use in parallel by placing the configuration files in | 5338 | configuration builds and how to account for cross-build |
| 5336 | your current build directory alongside the usual | 5339 | dependencies between the multiconfigs. |
| 5337 | <filename>local.conf</filename> file. | ||
| 5338 | </para> | 5340 | </para> |
| 5339 | 5341 | ||
| 5340 | <para> | 5342 | <section id='dev-setting-up-and-running-a-multiple-configuration-build'> |
| 5341 | Follow these guidelines to create an environment that supports | 5343 | <title>Setting Up and Running a Multiple Configuration Build</title> |
| 5342 | multiple configurations: | ||
| 5343 | <itemizedlist> | ||
| 5344 | <listitem><para> | ||
| 5345 | <emphasis>Create Configuration Files</emphasis>: | ||
| 5346 | You need to create a single configuration file for each | ||
| 5347 | configuration for which you want to add support. | ||
| 5348 | These files would contain lines such as the following: | ||
| 5349 | <literallayout class='monospaced'> | ||
| 5350 | MACHINE = "A" | ||
| 5351 | </literallayout> | ||
| 5352 | The files would contain any other variables that can | ||
| 5353 | be set and built in the same directory. | ||
| 5354 | <note> | ||
| 5355 | You can change the | ||
| 5356 | <ulink url='&YOCTO_DOCS_REF_URL;#var-TMPDIR'><filename>TMPDIR</filename></ulink> | ||
| 5357 | to not conflict. | ||
| 5358 | </note></para> | ||
| 5359 | 5344 | ||
| 5360 | <para> | 5345 | <para> |
| 5361 | Furthermore, the configuration file must be located in the | 5346 | To accomplish a multiple configuration build, you must |
| 5362 | current build directory in a directory named | 5347 | define each target's configuration separately using |
| 5363 | <filename>multiconfig</filename> under the build's | 5348 | a parallel configuration file in the |
| 5364 | <filename>conf</filename> directory where | 5349 | <ulink url='&YOCTO_DOCS_REF_URL;#build-directory'>Build Directory</ulink>, |
| 5365 | <filename>local.conf</filename> resides. | 5350 | and you must follow a required file hierarchy. |
| 5366 | The reason for this restriction is because the | 5351 | Additionally, you must enable the multiple configuration |
| 5367 | <filename>BBPATH</filename> variable is not constructed | 5352 | builds in your <filename>local.conf</filename> file. |
| 5368 | until the layers are parsed. | 5353 | </para> |
| 5369 | Consequently, using the configuration file as a | ||
| 5370 | pre-configuration file is not possible unless it is | ||
| 5371 | located in the current working directory. | ||
| 5372 | </para></listitem> | ||
| 5373 | <listitem><para> | ||
| 5374 | <emphasis>Add the BitBake Multi-Config Variable to you Local Configuration File</emphasis>: | ||
| 5375 | Use the | ||
| 5376 | <filename>BBMULTICONFIG</filename> | ||
| 5377 | variable in your <filename>conf/local.conf</filename> | ||
| 5378 | configuration file to specify each separate configuration. | ||
| 5379 | For example, the following line tells BitBake it should load | ||
| 5380 | <filename>conf/multiconfig/configA.conf</filename>, | ||
| 5381 | <filename>conf/multiconfig/configB.conf</filename>, and | ||
| 5382 | <filename>conf/multiconfig/configC.conf</filename>. | ||
| 5383 | <literallayout class='monospaced'> | ||
| 5384 | BBMULTICONFIG = "configA configB configC" | ||
| 5385 | </literallayout> | ||
| 5386 | </para></listitem> | ||
| 5387 | <listitem><para> | ||
| 5388 | <emphasis>Launch BitBake</emphasis>: | ||
| 5389 | Use the following BitBake command form to launch the | ||
| 5390 | build: | ||
| 5391 | <literallayout class='monospaced'> | ||
| 5392 | $ bitbake [multiconfig:<replaceable>multiconfigname</replaceable>:]<replaceable>target</replaceable> [[[multiconfig:<replaceable>multiconfigname</replaceable>:]<replaceable>target</replaceable>] ... ] | ||
| 5393 | </literallayout> | ||
| 5394 | Following is an example that supports building a minimal | ||
| 5395 | image for configuration A alongside a standard | ||
| 5396 | <filename>core-image-sato</filename>, which takes its | ||
| 5397 | configuration from <filename>local.conf</filename>: | ||
| 5398 | <literallayout class='monospaced'> | ||
| 5399 | $ bitbake multiconfig:configA:core-image-minimal core-image-sato | ||
| 5400 | </literallayout> | ||
| 5401 | </para></listitem> | ||
| 5402 | </itemizedlist> | ||
| 5403 | </para> | ||
| 5404 | 5354 | ||
| 5405 | <para> | 5355 | <para> |
| 5406 | Support for multiple configurations in this current release of | 5356 | Follow these steps to set up and execute multiple |
| 5407 | the Yocto Project (&DISTRO_NAME; &DISTRO;) has some known issues: | 5357 | configuration builds: |
| 5408 | <itemizedlist> | 5358 | <itemizedlist> |
| 5409 | <listitem><para> | 5359 | <listitem><para> |
| 5410 | No inter-multi-configuration dependencies exist. | 5360 | <emphasis>Create Separate Configuration Files</emphasis>: |
| 5411 | </para></listitem> | 5361 | You need to create a single configuration file for |
| 5412 | <listitem><para> | 5362 | each build target (each multiconfig). |
| 5413 | Shared State (sstate) optimizations do not exist. | 5363 | Minimally, each configuration file must define the |
| 5414 | Consequently, if the build uses the same object twice | 5364 | machine and the temporary directory BitBake uses |
| 5365 | for the build. | ||
| 5366 | You must not overlap the temporary directories | ||
| 5367 | used during the build.</para> | ||
| 5368 | |||
| 5369 | <para>Here is an example showing the minimal | ||
| 5370 | statements needed in a configuration file for | ||
| 5371 | a "qemux86" target whose temporary build directory | ||
| 5372 | is <filename>tmpmultix86</filename>: | ||
| 5373 | <literallayout class='monospaced'> | ||
| 5374 | MACHINE="qemux86" | ||
| 5375 | TMPDIR="${TOPDIR}/tmpmultix86" | ||
| 5376 | </literallayout></para> | ||
| 5377 | |||
| 5378 | <para>The location for these multiconfig | ||
| 5379 | configuration files is specific. | ||
| 5380 | They must reside in the current build directory in | ||
| 5381 | a sub-directory of <filename>conf</filename> named | ||
| 5382 | <filename>multiconfig</filename>. | ||
| 5383 | Following is an example that defines two | ||
| 5384 | configuration files for the "x86" and "arm" | ||
| 5385 | multiconfigs: | ||
| 5386 | <imagedata fileref="figures/multiconfig_files.png" align="center" width="4in" depth="3in" /> | ||
| 5387 | </para> | ||
| 5388 | |||
| 5389 | <para>The reason for this required file hierarchy | ||
| 5390 | is because the <filename>BBPATH</filename> variable | ||
| 5391 | is not constructed until the layers are parsed. | ||
| 5392 | Consequently, using the configuration file as a | ||
| 5393 | pre-configuration file is not possible unless it is | ||
| 5394 | located in the current working directory. | ||
| 5395 | </para></listitem> | ||
| 5396 | <listitem><para> | ||
| 5397 | <emphasis>Add the BitBake Multi-configuration Variable to the Local Configuration File</emphasis>: | ||
| 5398 | Use the | ||
| 5399 | <ulink url='&YOCTO_DOCS_REF_URL;#var-BBMULTICONFIG'><filename>BBMULTICONFIG</filename></ulink> | ||
| 5400 | variable in your | ||
| 5401 | <filename>conf/local.conf</filename> configuration | ||
| 5402 | file to specify each multiconfig. | ||
| 5403 | Continuing with the example from the previous | ||
| 5404 | figure, the <filename>BBMULTICONFIG</filename> | ||
| 5405 | variable needs to enable two multiconfigs: "x86" | ||
| 5406 | and "arm" by specifying each configuration file: | ||
| 5407 | <literallayout class='monospaced'> | ||
| 5408 | BBMULTICONFIG = "x86 arm" | ||
| 5409 | </literallayout> | ||
| 5410 | </para></listitem> | ||
| 5411 | <listitem><para> | ||
| 5412 | <emphasis>Launch BitBake</emphasis>: | ||
| 5413 | Use the following BitBake command form to launch the | ||
| 5414 | multiple configuration build: | ||
| 5415 | <literallayout class='monospaced'> | ||
| 5416 | $ bitbake [multiconfig:<replaceable>multiconfigname</replaceable>:]<replaceable>target</replaceable> [[[multiconfig:<replaceable>multiconfigname</replaceable>:]<replaceable>target</replaceable>] ... ] | ||
| 5417 | </literallayout> | ||
| 5418 | For the example in this section, the following | ||
| 5419 | command applies: | ||
| 5420 | <literallayout class='monospaced'> | ||
| 5421 | $ bitbake multiconfig:x86:core-image-minimal multiconfig:arm:core-image-sato | ||
| 5422 | </literallayout> | ||
| 5423 | The previous BitBake command builds a | ||
| 5424 | <filename>core-image-minimal</filename> image that | ||
| 5425 | is configured through the | ||
| 5426 | <filename>x86.conf</filename> configuration file | ||
| 5427 | and builds a <filename>core-image-sato</filename> | ||
| 5428 | image that is configured through the | ||
| 5429 | <filename>arm.conf</filename> configuration file. | ||
| 5430 | </para></listitem> | ||
| 5431 | </itemizedlist> | ||
| 5432 | <note> | ||
| 5433 | Support for multiple configuration builds in the | ||
| 5434 | Yocto Project &DISTRO; (&DISTRO_NAME;) Release does | ||
| 5435 | not include Shared State (sstate) optimizations. | ||
| 5436 | Consequently, if a build uses the same object twice | ||
| 5415 | in, for example, two different | 5437 | in, for example, two different |
| 5416 | <filename>TMPDIR</filename> directories, the build | 5438 | <filename>TMPDIR</filename> directories, the build |
| 5417 | will either load from an existing sstate cache at the | 5439 | either loads from an existing sstate cache for that |
| 5418 | start or build the object twice. | 5440 | build at the start or builds the object fresh. |
| 5419 | </para></listitem> | 5441 | </note> |
| 5420 | </itemizedlist> | 5442 | </para> |
| 5421 | </para> | 5443 | </section> |
| 5444 | |||
| 5445 | <section id='dev-enabling-multiple-configuration-build-dependencies'> | ||
| 5446 | <title>Enabling Multiple Configuration Build Dependencies</title> | ||
| 5447 | |||
| 5448 | <para> | ||
| 5449 | Sometimes dependencies can exist between targets | ||
| 5450 | (multiconfigs) in a multiple configuration build. | ||
| 5451 | For example, suppose that in order to build a | ||
| 5452 | <filename>core-image-sato</filename> image for an "x86" | ||
| 5453 | multiconfig, the root filesystem of an "arm" | ||
| 5454 | multiconfig must exist. | ||
| 5455 | This dependency is essentially that the | ||
| 5456 | <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-image'><filename>do_image</filename></ulink> | ||
| 5457 | task in the <filename>core-image-sato</filename> recipe | ||
| 5458 | depends on the completion of the | ||
| 5459 | <ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-rootfs'><filename>do_rootfs</filename></ulink> | ||
| 5460 | task of the <filename>core-image-minimal</filename> | ||
| 5461 | recipe. | ||
| 5462 | </para> | ||
| 5463 | |||
| 5464 | <para> | ||
| 5465 | To enable dependencies in a multiple configuration | ||
| 5466 | build, you must declare the dependencies in the recipe | ||
| 5467 | using the following statement form: | ||
| 5468 | <literallayout class='monospaced'> | ||
| 5469 | <replaceable>task_or_package</replaceable>[mcdepends] = "multiconfig:<replaceable>from_multiconfig</replaceable>:<replaceable>to_multiconfig</replaceable>:<replaceable>recipe_name</replaceable>:<replaceable>task_or_package_on_which_to_depend</replaceable>" | ||
| 5470 | </literallayout> | ||
| 5471 | <note> | ||
| 5472 | Dependencies can be on tasks or packages. | ||
| 5473 | </note> | ||
| 5474 | To better show how to use this statement, consider the | ||
| 5475 | example scenario from the first paragraph of this section. | ||
| 5476 | The following statement needs to be added to the recipe | ||
| 5477 | that builds the <filename>core-image-sato</filename> | ||
| 5478 | image: | ||
| 5479 | <literallayout class='monospaced'> | ||
| 5480 | do_image[mcdepends] = "multiconfig:x86:arm:core-image-minimal:do_rootfs" | ||
| 5481 | </literallayout> | ||
| 5482 | In this example, the | ||
| 5483 | <replaceable>from_multiconfig</replaceable> is "x86". | ||
| 5484 | The <replaceable>to_multiconfig</replaceable> is "arm". | ||
| 5485 | The task on which the <filename>do_image</filename> task | ||
| 5486 | in the recipe depends is the <filename>do_rootfs</filename> | ||
| 5487 | task from the <filename>core-image-minimal</filename> | ||
| 5488 | recipe associated with the "arm" multiconfig. | ||
| 5489 | </para> | ||
| 5490 | |||
| 5491 | <para> | ||
| 5492 | Once you set up this dependency, you can build the | ||
| 5493 | "x86" multiconfig using a BitBake command as follows: | ||
| 5494 | <literallayout class='monospaced'> | ||
| 5495 | $ bitbake multiconfig:x86:core-image-sato | ||
| 5496 | </literallayout> | ||
| 5497 | This command executes all the tasks needed to create | ||
| 5498 | the <filename>core-image-sato</filename> image for the | ||
| 5499 | "x86" multiconfig. | ||
| 5500 | Because of the dependency, BitBake also executes through | ||
| 5501 | the <filename>do_rootfs</filename> task for the "arm" | ||
| 5502 | multiconfig build. | ||
| 5503 | </para> | ||
| 5504 | |||
| 5505 | <para> | ||
| 5506 | Having a recipe depend on the root filesystem of another | ||
| 5507 | build might not seem that useful. | ||
| 5508 | Consider this change to the statement in the | ||
| 5509 | <filename>core-image-sato</filename> recipe: | ||
| 5510 | <literallayout class='monospaced'> | ||
| 5511 | do_image[mcdepends] = "multiconfig:x86:arm:core-image-minimal:do_image" | ||
| 5512 | </literallayout> | ||
| 5513 | In this case, BitBake must create the | ||
| 5514 | <filename>core-image-minimal</filename> image for the | ||
| 5515 | "arm" build since the "x86" build depends on it. | ||
| 5516 | </para> | ||
| 5517 | |||
| 5518 | <para> | ||
| 5519 | Because "x86" and "arm" are enabled for multiple | ||
| 5520 | configuration builds and have separate configuration | ||
| 5521 | files, BitBake places the artifacts for each build in the | ||
| 5522 | respective temporary build directories (i.e. | ||
| 5523 | <ulink url='&YOCTO_DOCS_REF_URL;#var-TMPDIR'><filename>TMPDIR</filename></ulink>. | ||
| 5524 | </para> | ||
| 5525 | </section> | ||
| 5422 | </section> | 5526 | </section> |
| 5423 | 5527 | ||
| 5424 | <section id='building-an-initramfs-image'> | 5528 | <section id='building-an-initramfs-image'> |
diff --git a/documentation/dev-manual/figures/multiconfig_files.png b/documentation/dev-manual/figures/multiconfig_files.png new file mode 100644 index 0000000000..0b59338b3a --- /dev/null +++ b/documentation/dev-manual/figures/multiconfig_files.png | |||
| Binary files differ | |||
