|
@@ -17,13 +17,13 @@
|
|
|
to at any time during the process.</para>
|
|
|
|
|
|
<para>The overall goal of <xref linkend="chapter-temporary-tools"/> is to
|
|
|
- provide a temporary environment that can be chrooted into and from which can be
|
|
|
- produced a clean, trouble-free build of the target LFS system in <xref
|
|
|
- linkend="chapter-building-system"/>. Along the way, we separate the new system
|
|
|
- from the host system as much as possible, and in doing so, build a
|
|
|
- self-contained and self-hosted toolchain. It should be noted that the build
|
|
|
- process has been designed to minimize the risks for new readers and provide
|
|
|
- maximum educational value at the same time.</para>
|
|
|
+ provide a temporary environment that can be chrooted into,
|
|
|
+ where a clean, trouble-free build of the target LFS system in <xref
|
|
|
+ linkend="chapter-building-system"/> can be produced. Along the way, we
|
|
|
+ separate the new system from the host system as much as possible, and in
|
|
|
+ doing so, build a self-contained and self-hosted toolchain.
|
|
|
+ The build process has been designed to minimize the risks for new
|
|
|
+ readers and to provide the most educational value at the same time.</para>
|
|
|
|
|
|
<important>
|
|
|
<para>Before continuing, be aware of the name of the working platform,
|
|
@@ -54,11 +54,13 @@
|
|
|
|
|
|
<itemizedlist>
|
|
|
<listitem>
|
|
|
- <para>Slightly adjusting the name of the working platform ensures that
|
|
|
- the first build of Binutils and GCC produces a compatible cross-linker
|
|
|
- and cross-compiler. Instead of producing binaries for another architecture,
|
|
|
- the cross-linker and cross-compiler will produce binaries compatible with
|
|
|
- the current hardware.</para>
|
|
|
+ <para>Slightly adjusting the name of the working platform, by changing the
|
|
|
+ "vendor" field target triplet by way of the
|
|
|
+ <envar>LFS_TGT</envar> variable, ensures that the first build of Binutils
|
|
|
+ and GCC produces a compatible cross-linker and cross-compiler. Instead of
|
|
|
+ producing binaries for another architecture, the cross-linker and
|
|
|
+ cross-compiler will produce binaries compatible with the current
|
|
|
+ hardware.</para>
|
|
|
</listitem>
|
|
|
<listitem>
|
|
|
<para>The temporary libraries are cross-compiled. This removes all
|
|
@@ -98,9 +100,8 @@
|
|
|
<para>The next package installed is GCC. An example of what can be
|
|
|
seen during its run of <command>configure</command> is:</para>
|
|
|
|
|
|
-<screen><computeroutput>checking what assembler to use...
|
|
|
- /tools/i686-pc-linux-gnu/bin/as
|
|
|
-checking what linker to use... /tools/i686-pc-linux-gnu/bin/ld</computeroutput></screen>
|
|
|
+<screen><computeroutput>checking what assembler to use... /tools/i686-lfs-linux-gnu/bin/as
|
|
|
+checking what linker to use... /tools/i686-lfs-linux-gnu/bin/ld</computeroutput></screen>
|
|
|
|
|
|
<para>This is important for the reasons mentioned above. It also demonstrates
|
|
|
that GCC's configure script does not search the PATH directories to find which
|
|
@@ -117,34 +118,33 @@ checking what linker to use... /tools/i686-pc-linux-gnu/bin/ld</computeroutput><
|
|
|
|
|
|
<para>The next package installed is Glibc. The most important considerations
|
|
|
for building Glibc are the compiler, binary tools, and kernel headers. The
|
|
|
- compiler is generally not an issue since Glibc will always use the
|
|
|
- <command>gcc</command> found in a <envar>PATH</envar> directory. The binary
|
|
|
- tools and kernel headers can be a bit more complicated. Therefore, take no
|
|
|
- risks and use the available configure switches to enforce the correct
|
|
|
- selections. After the run of <command>configure</command>, check the contents
|
|
|
- of the <filename>config.make</filename> file in the <filename
|
|
|
+ compiler is generally not an issue since Glibc will always use the compiler
|
|
|
+ relating to the <parameter>--host</parameter> parameter passed to its
|
|
|
+ configure script, e.g. in our case,
|
|
|
+ <command>i686-lfs-linux-gnu-gcc</command>. The binary tools and kernel
|
|
|
+ headers can be a bit more complicated. Therefore, take no risks and use the
|
|
|
+ available configure switches to enforce the correct selections. After the run
|
|
|
+ of <command>configure</command>, check the contents of the
|
|
|
+ <filename>config.make</filename> file in the <filename
|
|
|
class="directory">glibc-build</filename> directory for all important details.
|
|
|
- Note the use of <parameter>CC="gcc -B/tools/bin/"</parameter> to control which
|
|
|
- binary tools are used and the use of the <parameter>-nostdinc</parameter>
|
|
|
- and <parameter>-isystem</parameter> flags to control the compiler's include
|
|
|
+ Note the use of <parameter>CC="i686-lfs-gnu-gcc"</parameter> to control which
|
|
|
+ binary tools are used and the use of the <parameter>-nostdinc</parameter> and
|
|
|
+ <parameter>-isystem</parameter> flags to control the compiler's include
|
|
|
search path. These items highlight an important aspect of the Glibc
|
|
|
package—it is very self-sufficient in terms of its build machinery and
|
|
|
generally does not rely on toolchain defaults.</para>
|
|
|
|
|
|
- <para>After the Glibc installation, make some adjustments to ensure that
|
|
|
- searching and linking take place only within the <filename
|
|
|
- class="directory">/tools</filename> prefix. Install an adjusted
|
|
|
- <command>ld</command>, which has a hard-wired search path limited to
|
|
|
- <filename class="directory">/tools/lib</filename>. Then amend
|
|
|
- <command>gcc</command>'s specs file to point to the new dynamic linker in
|
|
|
- <filename class="directory">/tools/lib</filename>. This last step is vital
|
|
|
- to the whole process. As mentioned above, a hard-wired path to a dynamic
|
|
|
- linker is embedded into every Executable and Link Format (ELF)-shared
|
|
|
- executable. This can be inspected by running:
|
|
|
+ <para>After the Glibc installation, change <command>gcc</command>'s specs file
|
|
|
+ to point to the new dynamic linker in <filename
|
|
|
+ class="directory">/tools/lib</filename>. This last step is vital in ensuring
|
|
|
+ that searching and linking take place only within the <filename
|
|
|
+ class="directory">/tools</filename> prefix. A hard-wired
|
|
|
+ path to a dynamic linker is embedded into every Executable and Link Format
|
|
|
+ (ELF)-shared executable. This can be inspected by running:
|
|
|
<userinput>readelf -l <name of binary> | grep interpreter</userinput>.
|
|
|
- Amending gcc's specs file ensures that every program compiled from here
|
|
|
- through the end of this chapter will use the new dynamic linker in
|
|
|
- <filename class="directory">/tools/lib</filename>.</para>
|
|
|
+ Amending <command>gcc</command>'s specs file ensures that every program
|
|
|
+ compiled from here through the end of this chapter will use the new dynamic
|
|
|
+ linker in <filename class="directory">/tools/lib</filename>.</para>
|
|
|
|
|
|
<para>For the second pass of GCC, its sources also need to be modified
|
|
|
to tell GCC to use the new dynamic linker. Failure to do
|
|
@@ -164,8 +164,8 @@ checking what linker to use... /tools/i686-pc-linux-gnu/bin/ld</computeroutput><
|
|
|
linkend="chapter-building-system"/>, the first major package to be
|
|
|
installed is Glibc, due to its self-sufficient nature mentioned above.
|
|
|
Once this Glibc is installed into <filename
|
|
|
- class="directory">/usr</filename>, perform a quick changeover of the
|
|
|
- toolchain defaults, then proceed in building the rest of the target
|
|
|
+ class="directory">/usr</filename>, we will perform a quick changeover of the
|
|
|
+ toolchain defaults, and then proceed in building the rest of the target
|
|
|
LFS system.</para>
|
|
|
|
|
|
<!-- FIXME: Removed as part of the fix for bug 1061 - we no longer build pass1
|