source: chapter05/adjusting.xml@ feaa22c

10.0 10.0-rc1 10.1 10.1-rc1 11.0 11.0-rc1 11.0-rc2 11.0-rc3 11.1 11.1-rc1 11.2 11.2-rc1 11.3 11.3-rc1 12.0 12.0-rc1 12.1 12.1-rc1 6.3 6.4 6.5 6.6 6.7 6.8 7.0 7.1 7.2 7.3 7.4 7.5 7.5-systemd 7.6 7.6-systemd 7.7 7.7-systemd 7.8 7.8-systemd 7.9 7.9-systemd 8.0 8.1 8.2 8.3 8.4 9.0 9.1 arm bdubbs/gcc13 ml-11.0 multilib renodr/libudev-from-systemd s6-init trunk xry111/arm64 xry111/arm64-12.0 xry111/clfs-ng xry111/lfs-next xry111/loongarch xry111/loongarch-12.0 xry111/loongarch-12.1 xry111/mips64el xry111/pip3 xry111/rust-wip-20221008 xry111/update-glibc
Last change on this file since feaa22c was feaa22c, checked in by Jeremy Huntwork <jhuntwork@…>, 19 years ago

Made the removal of the GCC_INCLUDEDIR files more verbose. Thanks to Mike Hernandez.

git-svn-id: http://svn.linuxfromscratch.org/LFS/trunk/BOOK@7153 4aa44e1e-78dd-0310-a6d2-fbcd4c07a689

  • Property mode set to 100644
File size: 6.2 KB
Line 
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
3 <!ENTITY % general-entities SYSTEM "../general.ent">
4 %general-entities;
5]>
6<sect1 id="ch-tools-adjusting">
7<title>Adjusting the Toolchain</title>
8<?dbhtml filename="adjusting.html"?>
9
10<para>Now that the temporary C libraries have been installed, all
11tools compiled in the rest of this chapter should be linked against
12these libraries. In order to accomplish this, the linker and the
13compiler's specs file need to be adjusted.</para>
14
15<para>The linker, adjusted at the end of the first pass of Binutils,
16is installed by running the following command from within the
17<filename class="directory">binutils-build</filename> directory:</para>
18
19<screen><userinput>make -C ld install</userinput></screen>
20
21<para>From this point onwards, everything will link only
22against the libraries in <filename class="directory">/tools/lib</filename>.</para>
23
24<note><para>If the earlier warning to retain the Binutils source and
25build directories from the first pass was missed, ignore the above
26command. This results in a small chance that the subsequent testing
27programs will link against libraries on the host. This is not ideal,
28but it is not a major problem. The situation is corrected when the
29second pass of Binutils is installed later.</para></note>
30
31<para>Now that the adjusted linker is installed, the Binutils build and source
32directories should be removed.</para>
33
34<para>The next task is to point GCC to the new dynamic linker. This is done by
35dumping GCC's <quote>specs</quote> file to a location where GCC will look for it
36by default. A simple <command>sed</command> substitution then alters the
37dynamic linker that GCC will use:</para>
38
39<!-- Ampersands are needed to allow copy and paste -->
40
41<screen><userinput>SPECFILE=`dirname $(gcc -print-libgcc-file-name)`/specs &amp;&amp;
42gcc -dumpspecs > $SPECFILE &amp;&amp;
43sed 's@^/lib/ld-linux.so.2@/tools&amp;@g' $SPECFILE &gt; tempspecfile &amp;&amp;
44mv -vf tempspecfile $SPECFILE &amp;&amp;
45unset SPECFILE</userinput></screen>
46
47<para>It is recommended that the above
48command be copy-and-pasted in order to ensure accuracy.
49Alternatively, the specs file can be edited by hand. This is done by
50replacing every occurrence of <quote>/lib/ld-linux.so.2</quote> with
51<quote>/tools/lib/ld-linux.so.2</quote></para>
52
53<para>Be sure to visually inspect the specs file in order to verify the
54intended changes have been made.</para>
55
56<important><para>If working on a platform where the name of the
57dynamic linker is something other than
58<filename class="libraryfile">ld-linux.so.2</filename>, replace
59<quote>ld-linux.so.2</quote> with the name of the platform's
60dynamic linker in the above commands. Refer back to <xref
61linkend="ch-tools-toolchaintechnotes" role=","/> if
62necessary.</para></important>
63
64<para>During the build process, GCC runs a script
65(<command>fixincludes</command>) that scans the system for header files that may
66need to be fixed (they might contain syntax errors, for example), and installs
67the fixed versions in a private include directory. There is a possibility that,
68as a result of this process, some header files from the host system have found
69their way into GCC's private include directory. As the rest of this chapter only
70requires the headers from GCC and Glibc, which have both been installed at this
71point, any &quot;fixed&quot; headers can safely be removed. This helps to avoid
72any host headers polluting the build environment. Run the following commands to
73remove the header files in GCC's private include directory (you may find it
74easier to copy and paste these commands, rather than typing them by hand, due to
75their length):</para>
76
77<!-- && used to ease copy and pasting -->
78<screen><userinput>GCC_INCLUDEDIR=`dirname $(gcc -print-libgcc-file-name)`/include &amp;&amp;
79find ${GCC_INCLUDEDIR}/* -maxdepth 0 -xtype d -exec rm -rvf '{}' \; &amp;&amp;
80rm -vf `grep -l "DO NOT EDIT THIS FILE" ${GCC_INCLUDEDIR}/*` &amp;&amp;
81unset GCC_INCLUDEDIR</userinput></screen>
82
83<caution><para>At this point, it is imperative to stop and ensure that
84the basic functions (compiling and linking) of the new toolchain are
85working as expected. To perform a sanity check, run the following
86commands:</para>
87
88<screen><userinput>echo 'main(){}' &gt; dummy.c
89cc dummy.c
90readelf -l a.out | grep ': /tools'</userinput></screen>
91
92<para>If everything is working correctly, there should be no errors,
93and the output of the last command will be of the form:</para>
94
95<screen><computeroutput>[Requesting program interpreter:
96 /tools/lib/ld-linux.so.2]</computeroutput></screen>
97
98<para>Note that <filename class="directory">/tools/lib</filename>
99appears as the prefix of the dynamic linker.</para>
100
101<para>If the output is not shown as above or there was no output at
102all, then something is wrong. Investigate and retrace the steps to
103find out where the problem is and correct it. This issue must be
104resolved before continuing on. First, perform the sanity check again,
105using <command>gcc</command> instead of <command>cc</command>. If this
106works, then the <filename class="symlink">/tools/bin/cc</filename> symlink is missing.
107Revisit <xref linkend="ch-tools-gcc-pass1" role=","/> and install the symlink.
108Next, ensure that the <envar>PATH</envar> is correct. This can be checked by running
109<command>echo $PATH</command> and verifying that <filename
110class="directory">/tools/bin</filename> is at the head of the list. If
111the <envar>PATH</envar> is wrong it could mean that you are not logged in as user
112<emphasis>lfs</emphasis> or that something went wrong back in <xref
113linkend="ch-tools-settingenviron" role="."/> Another option is that something
114may have gone wrong with the specs file amendment above. In this case,
115redo the specs file amendment, being careful to copy-and-paste the
116commands.</para>
117
118<para>Once all is well, clean up the test files:</para>
119
120<screen><userinput>rm -v dummy.c a.out</userinput></screen>
121
122<para>Building TCL in the next section will serve as an additional check that
123the toolchain has been built properly. If TCL fails to build, it is an
124indication that something has gone wrong with the Binutils, GCC, or Glibc
125installation, but not with TCL itself.</para>
126
127</caution>
128
129</sect1>
Note: See TracBrowser for help on using the repository browser.