Changeset 981e0c4


Ignore:
Timestamp:
10/28/2022 10:30:10 PM (18 months ago)
Author:
Thomas Trepl (Moody) <thomas@…>
Branches:
multilib
Children:
07fd8bf8
Parents:
f9e8271 (diff), c389124 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Automatic merge of trunk into multilib

Files:
3 edited

Legend:

Unmodified
Added
Removed
  • chapter04/addinguser.xml

    rf9e8271 r981e0c4  
    6363      <term><parameter>lfs</parameter></term>
    6464      <listitem>
    65         <para>This is the actual name for the created user.</para>
     65        <para>This is the name of the new user.</para>
    6666      </listitem>
    6767    </varlistentry>
     
    7272  non-&root; user (as opposed to switching to user &lfs-user;
    7373  when logged in as &root;, which does not require the &lfs-user; user to
    74   have a password), you need to set a password of &lfs-user;.  Issue the
     74  have a password), you need to set a password for &lfs-user;.  Issue the
    7575  following command as the &root; user to set the password:</para>
    7676
  • chapter04/settingenviron.xml

    rf9e8271 r981e0c4  
    2020EOF</userinput></screen>
    2121
    22   <para>When logged on as user <systemitem class="username">lfs</systemitem>
    23   or switched to the &lfs-user; user using a <command>su</command> command
    24   with <quote><parameter>-</parameter></quote> option,
     22  <para>When logged on as user <systemitem class="username">lfs</systemitem>,
     23  or when switched to the &lfs-user; user using an <command>su</command> command
     24  with the <quote><parameter>-</parameter></quote> option,
    2525  the initial shell is a <emphasis>login</emphasis> shell which reads
    2626  the <filename>/etc/profile</filename> of the host (probably containing some
     
    3131  <envar>TERM</envar>, and <envar>PS1</envar> variables. This ensures that no
    3232  unwanted and potentially hazardous environment variables from the host system
    33   leak into the build environment. The technique used here achieves the goal of
    34   ensuring a clean environment.</para>
     33  leak into the build environment.</para>
    3534
    3635  <para>The new instance of the shell is a <emphasis>non-login</emphasis>
     
    115114  Setting <envar>LC_ALL</envar> to <quote>POSIX</quote> or <quote>C</quote>
    116115  (the two are equivalent) ensures that everything will work as expected in
    117   the chroot environment.</para>
     116  the cross-compilation environment.</para>
    118117      </listitem>
    119118    </varlistentry>
     
    123122      <listitem>
    124123  <para>The <envar>LFS_TGT</envar> variable sets a non-default, but compatible machine
    125   description for use when building our cross compiler and linker and when cross
    126   compiling our temporary toolchain. More information is contained in
     124  description for use when building our cross-compiler and linker and when
     125  cross-compiling our temporary toolchain. More information is provided by
    127126  <xref linkend="ch-tools-toolchaintechnotes" role=""/>.</para>
    128127      </listitem>
     
    147146      <listitem>
    148147  <para>If <filename class="directory">/bin</filename> is not a symbolic
    149   link, then it has to be added to the <envar>PATH</envar> variable.</para>
     148  link, it must be added to the <envar>PATH</envar> variable.</para>
    150149      </listitem>
    151150    </varlistentry>
     
    178177      <term><parameter>export ...</parameter></term>
    179178      <listitem>
    180         <para>While the above commands have set some variables, in order
     179        <para>While the preceding commands have set some variables, in order
    181180        to make them visible within any sub-shells, we export them.</para>
    182181      </listitem>
     
    187186  <important>
    188187
    189      <para>Several commercial distributions add a non-documented instantiation
     188     <para>Several commercial distributions add an undocumented instantiation
    190189     of <filename>/etc/bash.bashrc</filename> to the initialization of
    191190     <command>bash</command>. This file has the potential to modify the
     
    200199     <screen role="nodump"><userinput>[ ! -e /etc/bash.bashrc ] || mv -v /etc/bash.bashrc /etc/bash.bashrc.NOUSE</userinput></screen>
    201200
    202      <para>After use of the <systemitem class="username">lfs</systemitem>
    203      user is finished at the beginning of <xref
    204      linkend="chapter-chroot-temporary-tools"/>, you can restore
     201     <para>When the <systemitem class="username">lfs</systemitem>
     202     user is no longer needed (at the beginning of <xref
     203     linkend="chapter-chroot-temporary-tools"/>), you may safely restore
    205204     <filename>/etc/bash.bashrc</filename> (if desired).</para>
    206205
     
    211210  </important>
    212211
    213   <para>Finally, to have the environment fully prepared for building the
     212  <para>Finally, to ensure the environment is fully prepared for building the
    214213  temporary tools, force the <command>bash</command> shell to read
    215214  the new user profile:</para>
  • part3intro/toolchaintechnotes.xml

    rf9e8271 r981e0c4  
    4141      <para>
    4242        The LFS book is not (and does not contain) a general tutorial to
    43         build a cross (or native) toolchain. Don't use the commands in the
    44         book for a cross toolchain for some purpose other
     43        build a cross- (or native) toolchain. Don't use the commands in the
     44        book for a cross-toolchain for some purpose other
    4545        than building LFS, unless you really understand what you are doing.
    4646      </para>
     
    7575
    7676    <para>As an example, let us imagine the following scenario (sometimes
    77     referred to as <quote>Canadian Cross</quote>): we have a
     77    referred to as <quote>Canadian Cross</quote>). We have a
    7878    compiler on a slow machine only, let's call it machine A, and the compiler
    7979    ccA. We also have a fast machine (B), but no compiler for (B), and we
     
    146146
    147147    <note>
    148       <para>All packages involved with cross compilation in the book use an
     148      <para>All the packages involved with cross-compilation use an
    149149      autoconf-based building system.  The autoconf-based building system
    150150      accepts system types in the form cpu-vendor-kernel-os,
    151       referred to as the system triplet.  Since the vendor field is mostly
    152       irrelevant, autoconf allows to omit it. An astute reader may wonder
     151      referred to as the system triplet.  Since the vendor field is often
     152      irrelevant, autoconf lets you omit it.</para>
     153     
     154      <para>An astute reader may wonder
    153155      why a <quote>triplet</quote> refers to a four component name. The
    154       reason is the kernel field and the os field originated from one
     156      kernel field and the os field began as a single
    155157      <quote>system</quote> field.  Such a three-field form is still valid
    156       today for some systems, for example
    157       <literal>x86_64-unknown-freebsd</literal>.  But for other systems,
    158       two systems can share the same kernel but still be too different to
    159       use a same triplet for them.  For example, an Android running on a
     158      today for some systems, for example,
     159      <literal>x86_64-unknown-freebsd</literal>.  But
     160      two systems can share the same kernel and still be too different to
     161      use the same triplet to describe them.  For example, Android running on a
    160162      mobile phone is completely different from Ubuntu running on an ARM64
    161       server, despite they are running on the same type of CPU (ARM64) and
    162       using the same kernel (Linux).
    163       Without an emulation layer, you cannot run an
    164       executable for the server on the mobile phone or vice versa.  So the
    165       <quote>system</quote> field is separated into kernel and os fields to
    166       designate these systems unambiguously.  For our example, the Android
     163      server, even though they are both running on the same type of CPU (ARM64) and
     164      using the same kernel (Linux).</para>
     165     
     166      <para>Without an emulation layer, you cannot run an
     167      executable for a server on a mobile phone or vice versa.  So the
     168      <quote>system</quote> field has been divided into kernel and os fields, to
     169      designate these systems unambiguously.  In our example, the Android
    167170      system is designated <literal>aarch64-unknown-linux-android</literal>,
    168171      and the Ubuntu system is designated
    169       <literal>aarch64-unknown-linux-gnu</literal>.  The word
    170       <quote>triplet</quote> remained. A simple way to determine your
     172      <literal>aarch64-unknown-linux-gnu</literal>.</para>
     173     
     174      <para>The word <quote>triplet</quote> remains embedded in the lexicon. A simple way to determine your
    171175      system triplet is to run the <command>config.guess</command>
    172176      script that comes with the source for many packages. Unpack the binutils
    173       sources and run the script: <userinput>./config.guess</userinput> and note
     177      sources, run the script <userinput>./config.guess</userinput>, and note
    174178      the output. For example, for a 32-bit Intel processor the
    175179      output will be <emphasis>i686-pc-linux-gnu</emphasis>. On a 64-bit
     
    194198    </note>
    195199
    196     <para>In order to fake a cross compilation in LFS, the name of the host triplet
     200    <para>In order to fake a cross-compilation in LFS, the name of the host triplet
    197201    is slightly adjusted by changing the &quot;vendor&quot; field in the
    198202    <envar>LFS_TGT</envar> variable so it says &quot;lfs&quot;. We also use the
    199     <parameter>--with-sysroot</parameter> option when building the cross linker and
    200     cross compiler to tell them where to find the needed host files. This
     203    <parameter>--with-sysroot</parameter> option when building the cross-linker and
     204    cross-compiler to tell them where to find the needed host files. This
    201205    ensures that none of the other programs built in <xref
    202206    linkend="chapter-temporary-tools"/> can link to libraries on the build
     
    238242    just a compiler, but also defines a standard library. In this book, the
    239243    GNU C library, named glibc, is used (there is an alternative, &quot;musl&quot;). This library must
    240     be compiled for the LFS machine; that is, using the cross compiler cc1.
    241     But the compiler itself uses an internal library implementing complex
     244    be compiled for the LFS machine; that is, using the cross-compiler cc1.
     245    But the compiler itself uses an internal library providing complex
    242246    subroutines for functions not available in the assembler instruction set. This
    243247    internal library is named libgcc, and it must be linked to the glibc
    244     library to be fully functional! Furthermore, the standard library for
     248    library to be fully functional. Furthermore, the standard library for
    245249    C++ (libstdc++) must also be linked with glibc. The solution to this
    246250    chicken and egg problem is first to build a degraded cc1-based libgcc,
     
    250254    functionality of libgcc.</para>
    251255
    252     <para>This is not the end of the story: the upshot of the preceding
     256    <para>The upshot of the preceding
    253257    paragraph is that cc1 is unable to build a fully functional libstdc++, but
    254258    this is the only compiler available for building the C/C++ libraries
    255     during stage 2! Of course, the compiler built during stage 2, cc-lfs,
     259    during stage 2. Of course, the compiler built by stage 2, cc-lfs,
    256260    would be able to build those libraries, but (1) the build system of
    257     gcc does not know that it is usable on pc, and (2) using it on pc
     261    gcc does not know cc-lfs can run on pc, and (2) using cc-lfs on pc
    258262    would create a risk of linking to the pc libraries, since cc-lfs is a native
    259263    compiler. So we have to re-build libstdc++ later as a part of
    260264    gcc stage 2.</para>
    261265
    262     <para>In &ch-final; (or <quote>stage 3</quote>), all packages needed for
    263     the LFS system are built. Even if a package is already installed into
    264     the LFS system in a previous chapter, we still rebuild the package
    265     unless we are completely sure it's unnecessary.  The main reason for
    266     rebuilding these packages is to settle them down: if we reinstall a LFS
     266    <para>In &ch-final; (or <quote>stage 3</quote>), all the packages needed for
     267    the LFS system are built. Even if a package has already been installed into
     268    the LFS system in a previous chapter, we still rebuild the package.  The main reason for
     269    rebuilding these packages is to make them stable: if we reinstall a LFS
    267270    package on a complete LFS system, the installed content of the package
    268     should be same as the content of the same package installed in
     271    should be the same as the content of the same package when installed in
    269272    &ch-final;.  The temporary packages installed in &ch-tmp-cross; or
    270     &ch-tmp-chroot; cannot satisfy this expectation because some of them
    271     are built without optional dependencies installed, and autoconf cannot
    272     perform some feature checks in &ch-tmp-cross; because of cross
    273     compilation, causing the temporary packages to lack optional features
     273    &ch-tmp-chroot; cannot satisfy this requirement, because some of them
     274    are built without optional dependencies, and autoconf cannot
     275    perform some feature checks in &ch-tmp-cross; because of cross-compilation,
     276    causing the temporary packages to lack optional features,
    274277    or use suboptimal code routines. Additionally, a minor reason for
    275     rebuilding the packages is allowing to run the testsuite.</para>
     278    rebuilding the packages is to run the test suites.</para>
    276279
    277280  </sect2>
     
    279282  <sect2 id="other-details">
    280283
    281     <title>Other procedural details</title>
     284    <title>Other Procedural Details</title>
    282285
    283286    <para>The cross-compiler will be installed in a separate <filename
     
    301304    <command>ld</command> by passing it the <parameter>--verbose</parameter>
    302305    flag. For example, <command>$LFS_TGT-ld --verbose | grep SEARCH</command>
    303     will illustrate the current search paths and their order. Note that this
    304     example can be run as shown only while being user
     306    will illustrate the current search paths and their order. (Note that this
     307    example can be run as shown only while logged in as user
    305308    <systemitem class="username">lfs</systemitem>. If you come back to this
    306     page later, replace <command>$LFS_TGT-ld</command> with just
    307     <command>ld</command>.</para>
     309    page later, replace <command>$LFS_TGT-ld</command> with
     310    <command>ld</command>).</para>
    308311
    309312    <para>The next package installed is gcc. An example of what can be
     
    318321    operation of <command>gcc</command> itself, the same search paths are not
    319322    necessarily used. To find out which standard linker <command>gcc</command>
    320     will use, run: <command>$LFS_TGT-gcc -print-prog-name=ld</command>. Again,
    321     remove the <command>$LFS_TGT-</command> part if coming back to this
    322     later.</para>
     323    will use, run: <command>$LFS_TGT-gcc -print-prog-name=ld</command>. (Again,
     324    remove the <command>$LFS_TGT-</command> prefix if coming back to this
     325    later.)</para>
    323326
    324327    <para>Detailed information can be obtained from <command>gcc</command> by
     
    326329    a program. For example, <command>$LFS_TGT-gcc -v
    327330    <replaceable>example.c</replaceable></command> (or without <command>
    328     $LFS_TGT-</command> if coming back later to this) will show
     331    $LFS_TGT-</command> if coming back later) will show
    329332    detailed information about the preprocessor, compilation, and assembly
    330333    stages, including <command>gcc</command>'s search paths for included
    331334    headers and their order.</para>
    332335
    333     <para>Next installed are sanitized Linux API headers. These allow the
     336    <para>Next up: sanitized Linux API headers. These allow the
    334337    standard C library (glibc) to interface with features that the Linux
    335338    kernel will provide.</para>
    336339
    337     <para>The next package installed is glibc. The most important
     340    <para>Next comes glibc. The most important
    338341    considerations for building glibc are the compiler, binary tools, and
    339342    kernel headers. The compiler is generally not an issue since glibc will
    340343    always use the compiler relating to the <parameter>--host</parameter>
    341     parameter passed to its configure script; e.g. in our case, the compiler
     344    parameter passed to its configure script; e.g., in our case, the compiler
    342345    will be <command>$LFS_TGT-gcc</command>. The binary tools and kernel
    343346    headers can be a bit more complicated. Therefore, we take no risks and use
     
    351354    <parameter>-isystem</parameter> flags to control the compiler's include
    352355    search path. These items highlight an important aspect of the glibc
    353     package&mdash;it is very self-sufficient in terms of its build machinery
     356    package&mdash;it is very self-sufficient in terms of its build machinery,
    354357    and generally does not rely on toolchain defaults.</para>
    355358
    356359    <para>As mentioned above, the standard C++ library is compiled next, followed in
    357     <xref linkend="chapter-temporary-tools"/> by other programs that need
    358     to be cross compiled for breaking circular dependencies at build time.
     360    <xref linkend="chapter-temporary-tools"/> by other programs that must
     361    be cross-compiled to break circular dependencies at build time.
    359362    The install step of all those packages uses the
    360363    <envar>DESTDIR</envar> variable to force installation
     
    378381    core toolchain is self-contained and self-hosted. In
    379382    <xref linkend="chapter-building-system"/>, final versions of all the
    380     packages needed for a fully functional system are built, tested and
     383    packages needed for a fully functional system are built, tested, and
    381384    installed.</para>
    382385
Note: See TracChangeset for help on using the changeset viewer.