source: chapter05/gcc-pass1.xml@ 4759793f

Last change on this file since 4759793f was 4759793f, checked in by Jeremy Huntwork <jhuntwork@…>, 17 years ago

Remove the -m64 sections from binutils and gcc pass 1. Tests show the 32-bit binaries produce the wanted 64-bit code.

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

  • Property mode set to 100644
File size: 6.6 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-gcc-pass1" role="wrap">
9 <?dbhtml filename="gcc-pass1.html"?>
10
11 <title>GCC-&gcc-version; - Pass 1</title>
12
13 <indexterm zone="ch-tools-gcc-pass1">
14 <primary sortas="a-GCC">GCC</primary>
15 <secondary>tools, pass 1</secondary>
16 </indexterm>
17
18 <sect2 role="package">
19 <title/>
20
21 <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
22 href="../chapter06/gcc.xml"
23 xpointer="xpointer(/sect1/sect2[1]/para[1])"/>
24
25 <segmentedlist>
26 <segtitle>&buildtime;</segtitle>
27 <segtitle>&diskspace;</segtitle>
28
29 <seglistitem>
30 <seg>&gcc-ch5p1-sbu;</seg>
31 <seg>&gcc-ch5p1-du;</seg>
32 </seglistitem>
33 </segmentedlist>
34
35 </sect2>
36
37 <sect2 role="installation">
38 <title>Installation of GCC</title>
39
40 <para>The GCC documentation recommends building GCC outside of the
41 source directory in a dedicated build directory:</para>
42
43<screen><userinput>mkdir -v ../gcc-build
44cd ../gcc-build</userinput></screen>
45
46 <para>Set the --with-arch flag if the machine is x86:</para>
47
48<screen><userinput>test $(uname -m | grep i?86) &amp;&amp; WITHARCH="--with-arch=i486"</userinput></screen>
49
50 <para>Prepare GCC for compilation:</para>
51
52<screen><userinput>CC="gcc -B/usr/bin/" ../gcc-&gcc-version;/configure --prefix=/tools \
53 --with-local-prefix=/tools --disable-nls --disable-shared \
54 --enable-languages=c --disable-multilib \
55 $WITHARCH
56unset WITHARCH</userinput></screen>
57
58 <variablelist>
59 <title>The meaning of the configure options:</title>
60
61 <varlistentry>
62 <term><envar>CC="gcc -B/usr/bin/"</envar></term>
63 <listitem>
64 <para>This forces <command>gcc</command> to prefer the linker from
65 the host in <filename class="directory">/usr/bin</filename>. This
66 is necessary on some hosts where the new <command>ld</command>
67 built in the previous section is not compatible with the host's
68 <command>gcc</command>.</para>
69 </listitem>
70 </varlistentry>
71
72 <varlistentry>
73 <term><parameter>--with-local-prefix=/tools</parameter></term>
74 <listitem>
75 <para>The purpose of this switch is to remove <filename
76 class="directory">/usr/local/include</filename> from
77 <command>gcc</command>'s include search path. This is not
78 absolutely essential, however, it helps to minimize the
79 influence of the host system.</para>
80 </listitem>
81 </varlistentry>
82
83 <varlistentry>
84 <term><parameter>--disable-shared</parameter></term>
85 <listitem>
86 <para>This forces gcc to link its internal libraries statically. We do this
87 to avoid possible issues with the host system.</para>
88 </listitem>
89 </varlistentry>
90
91 <varlistentry>
92 <term><parameter>--enable-languages=c</parameter></term>
93 <listitem>
94 <para>This option ensures that only the C compiler is built.</para>
95 </listitem>
96 </varlistentry>
97
98 <varlistentry>
99 <term><parameter>--disable-multilib</parameter></term>
100 <listitem>
101 <para>We currently only want to build support for 64-bit libraries.</para>
102 </listitem>
103 </varlistentry>
104
105 <varlistentry>
106 <term><parameter>--with-arch=i486</parameter></term>
107 <listitem>
108 <para>On x86 machines Glibc-&glibc-version; needs to be built for a
109 minimum architecture of <quote>i486</quote>. In fact, Glibc developers suggest
110 setting the compiler flag <parameter>-march=i486</parameter> when compiling it.
111 However, by using the above parameter for the GCC build, we can set a default
112 value for <parameter>-march</parameter> at the compiler level, ensuring that
113 the entire system is built consistently, i.e., for the same cpu-type.
114 Of course, values greater or more specific than <quote>i486</quote> could be
115 used. See <command>man gcc</command> for other acceptable cpu-types.
116 Keep in mind that using an incompatible cpu-type for the machine will result
117 in breakage. The advantage of <quote>i486</quote> is that it is a generic
118 option and will work for all modern x86 machines.</para>
119 </listitem>
120 </varlistentry>
121
122 </variablelist>
123
124 <para>The following command will compile GCC not once, but several times. It
125 uses the programs compiled in a first round to compile itself a second time,
126 and then again a third time. It then compares these second and third compiles
127 to make sure it can reproduce itself flawlessly. This is called
128 <quote>bootstrapping</quote>. Building GCC in this way ensures that it was
129 compiled correctly and is now the default configuration for the released
130 package. Continue with compiling by running:</para>
131
132<screen><userinput>make</userinput></screen>
133
134 <para>Compilation is now complete. At this point, the test suite would
135 normally be run, but, as mentioned before, the test suite framework is
136 not in place yet. The benefits of running the tests at this point
137 are minimal since the programs from this first pass will soon be
138 replaced.</para>
139
140 <para>Install the package:</para>
141
142<screen><userinput>make install</userinput></screen>
143
144 <para>Using <command>--disable-shared</command> means that the file
145 <filename class="libraryfile">libgcc_eh.a</filename>
146 isn't created and installed. The next package, Glibc, depends on this
147 library as it uses <command>-lgcc_eh</command> within its build system.
148 We can satisfy that dependency by creating a symlink to
149 <filename class="libraryfile">libgcc.a</filename>, since that file will
150 end up containing the objects normally contained in
151 <filename class="libraryfile">libgcc_eh.a</filename>.</para>
152
153<screen><userinput>ln -vs libgcc.a `gcc -print-libgcc-file-name | \
154 sed 's/libgcc/&amp;_eh/'`</userinput></screen>
155
156 <para>As a finishing touch, create a symlink. Many programs and scripts
157 run <command>cc</command> instead of <command>gcc</command>, which is
158 used to keep programs generic and therefore usable on all kinds of UNIX
159 systems where the GNU C compiler is not always installed. Running
160 <command>cc</command> leaves the system administrator free to decide
161 which C compiler to install:</para>
162
163<screen><userinput>ln -vs gcc /tools/bin/cc</userinput></screen>
164
165 </sect2>
166
167 <sect2 role="content">
168 <title/>
169
170 <para>Details on this package are located in
171 <xref linkend="contents-gcc" role="."/></para>
172
173 </sect2>
174
175</sect1>
Note: See TracBrowser for help on using the repository browser.