diff options
Diffstat (limited to 'documentation/ref-manual/technical-details.xml')
-rw-r--r-- | documentation/ref-manual/technical-details.xml | 174 |
1 files changed, 174 insertions, 0 deletions
diff --git a/documentation/ref-manual/technical-details.xml b/documentation/ref-manual/technical-details.xml index 0634f57..f17291f 100644 --- a/documentation/ref-manual/technical-details.xml +++ b/documentation/ref-manual/technical-details.xml @@ -153,6 +153,180 @@ </section> </section> +<section id="cross-development-toolchain-generation"> + <title>Cross-Development Toolchain Generation</title> + + <para> + The Yocto Project does most of the work for you when it comes to + creating + <ulink url='&YOCTO_DOCS_DEV_URL;#cross-development-toolchain'>cross-development toolchains</ulink>. + This section provides some technical background information on how + cross-development toolchains are created and used. + For more information on these toolchain, you can also see the + <ulink url='&YOCTO_DOCS_ADT_URL;'>the Yocto Project Application Developer's Guide</ulink>. + </para> + + <para> + In the Yocto Project development environment, cross-development + toolchains are used to build the image and applications that run on the + target hardware. + With just a few commands, the OpenEmbedded build system creates + these necessary toolchains for you. + </para> + + <para> + The following figure shows a high-level build environment regarding + toolchain construction and use. + </para> + + <para> + <imagedata fileref="figures/cross-development-toolchains.png" width="8in" depth="6in" align="center" /> + </para> + + <para> + Most of the work occurs on the Build Host. + This is the machine used to build images and generally work within the + the Yocto Project environment. + When you run BitBake to create an image, the OpenEmbedded build system + uses the host <filename>gcc</filename> compiler to bootstrap a + cross-compiler named <filename>gcc-cross</filename>. + The <filename>gcc-cross</filename> compiler is what BitBake uses to + compile source files when creating the target image. + You can think of <filename>gcc-cross</filename> simply as an + automatically generated cross-compiler that is used internally within + BitBake only. + </para> + + <para> + The chain of events that occurs when <filename>gcc-cross</filename> is + bootstrapped is as follows: + <literallayout class='monospaced'> + gcc -> binutils-cross -> gcc-cross-initial -> linux_libc-headers -> eglibc-initial -> eglibc -> gcc-cross -> gcc-runtime + </literallayout> + <itemizedlist> + <listitem><para><filename>gcc</filename>: + The build host's GNU Compiler Collection (GCC). + </para></listitem> + <listitem><para><filename>binutils-cross</filename>: + The bare minimum binary utilities needed in order to run + the <filename>gcc-cross-initial</filename> phase of the + bootstrap operation. + </para></listitem> + <listitem><para><filename>gcc-cross-initial</filename>: + An early stage of the bootstrap process for creating + the cross-compiler. + This stage builds enough of the <filename>gcc-cross</filename>, + the C library, and other pieces needed to finish building the + final cross-compiler in later stages. + This tool is a "native" package (i.e. it is designed to run on + the build host). + </para></listitem> + <listitem><para><filename>linux_libc-headers</filename>: + Headers needed for the cross-compiler. + </para></listitem> + <listitem><para><filename>eglibc-initial</filename>: + An initial version of the Embedded GLIBC needed to bootstrap + <filename>eglibc</filename>. + </para></listitem> + <listitem><para><filename>gcc-cross</filename>: + The final stage of the bootstrap process for the + cross-compiler. + This stage results in the actual cross-compiler that + BitBake uses when it builds an image for a targeted + device. + <note> + If you are replacing this cross compiler toolchain + with a custom version, you must replace + <filename>gcc-cross</filename>. + </note> + This tool is also a "native" package (i.e. it is + designed to run on the build host). + </para></listitem> + <listitem><para><filename>gcc-runtime</filename>: + Runtime libraries resulting from the toolchain bootstrapping + process. + This tool produces a binary that consists of the + runtime libraries need for the targeted device. + </para></listitem> + </itemizedlist> + </para> + + <para> + You can use the OpenEmbedded build system to build an installer for + the relocatable SDK used to develop applications. + When you run the installer, it installs the toolchain, which contains + the development tools (e.g., the + <filename>gcc-cross-canadian</filename>), + <filename>binutils-cross-canadian</filename>, and other + <filename>nativesdk-*</filename> tools you need to cross-compile and + test your software. + The figure shows the commands you use to easily build out this + toolchain. + This cross-development toolchain is built to execute on the + <filename>SDKMACHINE</filename>, which might or might not be the same + machine as the Build Host. + <note> + If your target architecture is supported by the Yocto Project, + you can take advantage of pre-built images that ship with the + Yocto Project and already contain cross-development toolchain + installers. + </note> + </para> + + <para> + Here is the bootstrap process for the relocatable toolchain: + <literallayout class='monospaced'> + gcc -> binutils-crosssdk -> gcc-crosssdk-initial -> linux_libc-headers -> eglibc-initial -> nativesdk-eglibc -> gcc-crosssdk -> gcc-cross-canadian + </literallayout> + <itemizedlist> + <listitem><para><filename>gcc</filename>: + The build host's GNU Compiler Collection (GCC). + </para></listitem> + <listitem><para><filename>binutils-crosssdk</filename>: + The bare minimum binary utilities needed in order to run + the <filename>gcc-crosssdk-initial</filename> phase of the + bootstrap operation. + </para></listitem> + <listitem><para><filename>gcc-crosssdk-initial</filename>: + An early stage of the bootstrap process for creating + the cross-compiler. + This stage builds enough of the + <filename>gcc-crosssdk</filename> and supporting pieces so that + the final stage of the bootstrap process can produce the + finished cross-compiler. + This tool is a "native" binary that runs on the build host. + </para></listitem> + <listitem><para><filename>linux_libc-headers</filename>: + Headers needed for the cross-compiler. + </para></listitem> + <listitem><para><filename>eglibc-initial</filename>: + An initial version of the Embedded GLIBC needed to bootstrap + <filename>nativesdk-eglibc</filename>. + </para></listitem> + <listitem><para><filename>nativesdk-eglibc</filename>: + The Embedded GLIBC needed to bootstrap the + <filename>gcc-crosssdk</filename>. + </para></listitem> + <listitem><para><filename>gcc-crosssdk</filename>: + The final stage of the bootstrap process for the + relocatable cross-compiler. + The <filename>gcc-crosssdk</filename> is a transitory compiler + and never leaves the build host. + Its purpose is to help in the bootstrap process to create the + eventual relocatable <filename>gcc-cross-canadian</filename> + compiler, which is relocatable. + This tool is also a "native" package (i.e. it is + designed to run on the build host). + </para></listitem> + <listitem><para><filename>gcc-cross-canadian</filename>: + The final relocatable cross-compiler. + When run on the <filename>SDKMACHINE</filename>, this tool + produces executable code that runs on the target device. + </para></listitem> + </itemizedlist> + </para> +</section> + <section id="shared-state-cache"> <title>Shared State Cache</title> |