source: chapter05/adjusting.xml@ d55da0a

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.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 d55da0a was 1129dbd, checked in by Matthew Burgess <matthew@…>, 17 years ago

Fix incorrect capitalisation of Tcl. Fixes #2096.

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

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