source: chapter06/gcc-pass2.xml@ 7f440a6

multilib xry111/multilib
Last change on this file since 7f440a6 was b870799, checked in by Thomas Trepl <thomas@…>, 14 months ago

Automatic merge of trunk into multilib

  • Property mode set to 100644
File size: 8.8 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-pass2" role="wrap" xreflabel="gcc-pass2">
9 <?dbhtml filename="gcc-pass2.html"?>
10
11 <sect1info condition="script">
12 <productname>gcc-pass2</productname>
13 <productnumber>&gcc-version;</productnumber>
14 <address>&gcc-url;</address>
15 </sect1info>
16
17 <title>GCC-&gcc-version; - Pass 2</title>
18
19 <indexterm zone="ch-tools-gcc-pass2">
20 <primary sortas="a-GCC">GCC</primary>
21 <secondary>tools, pass 2</secondary>
22 </indexterm>
23
24 <sect2 role="package">
25 <title/>
26
27 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
28 href="../chapter08/gcc.xml"
29 xpointer="xpointer(/sect1/sect2[1]/para[1])"/>
30
31 <segmentedlist>
32 <segtitle>&buildtime;</segtitle>
33 <segtitle>&diskspace;</segtitle>
34
35 <seglistitem>
36 <seg>&gcc-tmpp2-sbu;</seg>
37 <seg>&gcc-tmpp2-du;</seg>
38 </seglistitem>
39 </segmentedlist>
40
41 </sect2>
42
43 <sect2 role="installation">
44 <title>Installation of GCC</title>
45<!--
46 <para>First fix a problem with the latest version of glibc:</para>
47
48 <screen><userinput remap="pre">patch -Np1 -i ../&gcc-upstream-fixes-patch;</userinput></screen>
49-->
50 <para>As in the first build of GCC, the GMP, MPFR, and MPC packages are
51 required. Unpack the tarballs and move them into the required directories:</para>
52
53<screen><userinput remap="pre">tar -xf ../mpfr-&mpfr-version;.tar.xz
54mv -v mpfr-&mpfr-version; mpfr
55tar -xf ../gmp-&gmp-version;.tar.xz
56mv -v gmp-&gmp-version; gmp
57tar -xf ../mpc-&mpc-version;.tar.gz
58mv -v mpc-&mpc-version; mpc</userinput></screen>
59
60
61 <para arch="default">If building on x86_64, change the default directory name for 64-bit
62 libraries to <quote>lib</quote>:</para>
63
64<screen arch="default"><userinput remap="pre">case $(uname -m) in
65 x86_64)
66 sed -e '/m64=/s/lib64/lib/' -i.orig gcc/config/i386/t-linux64
67 ;;
68esac</userinput></screen>
69
70 <para arch="ml_32,ml_x32,ml_all">Change the default directory name for the
71 libraries:</para>
72
73<screen arch="ml_32,ml_x32,ml_all"><userinput remap="pre">sed -e '/m64=/s/lib64/lib/' \
74 -e '/m32=/s/m32=.*/m32=..\/lib32$(call if_multiarch,:i386-linux-gnu)/' \
75 -i.orig gcc/config/i386/t-linux64</userinput></screen>
76
77 <para>Override the building rule of libgcc and libstdc++ headers, to
78 allow building these libraries with POSIX threads support:</para>
79
80<screen><userinput remap="pre">sed '/thread_header =/s/@.*@/gthr-posix.h/' \
81 -i libgcc/Makefile.in libstdc++-v3/include/Makefile.in</userinput></screen>
82
83 <para>Create a separate build directory again:</para>
84
85<screen><userinput remap="pre">mkdir -v build
86cd build</userinput></screen>
87
88 <para>Before starting to build GCC, remember to unset any environment
89 variables that override the default optimization flags.</para>
90
91 <para>Now prepare GCC for compilation:</para>
92
93<screen arch="default"><userinput remap="configure">../configure \
94 --build=$(../config.guess) \
95 --host=$LFS_TGT \
96 --target=$LFS_TGT \
97 LDFLAGS_FOR_TARGET=-L$PWD/$LFS_TGT/libgcc \
98 --prefix=/usr \
99 --with-build-sysroot=$LFS \
100 --enable-default-pie \
101 --enable-default-ssp \
102 --disable-nls \
103 --disable-multilib \
104 --disable-libatomic \
105 --disable-libgomp \
106 --disable-libquadmath \
107 --disable-libsanitizer \
108 --disable-libssp \
109 --disable-libvtv \
110 --enable-languages=c,c++</userinput></screen>
111<screen arch="ml_32,ml_x32,ml_all"><userinput remap="configure"
112 arch="ml_32">mlist=m64,m32</userinput><userinput remap="configure"
113 arch="ml_x32">mlist=m64,mx32</userinput><userinput remap="configure"
114 arch="ml_all">mlist=m64,m32,mx32</userinput>
115<userinput remap="configure">../configure \
116 --build=$(../config.guess) \
117 --host=$LFS_TGT \
118 --target=$LFS_TGT \
119 LDFLAGS_FOR_TARGET=-L$PWD/$LFS_TGT/libgcc \
120 --prefix=/usr \
121 --with-build-sysroot=$LFS \
122 --enable-default-pie \
123 --enable-default-ssp \
124 --enable-initfini-array \
125 --disable-nls \
126 --enable-multilib --with-multilib-list=$mlist \
127 --disable-decimal-float \
128 --disable-libatomic \
129 --disable-libgomp \
130 --disable-libquadmath \
131 --disable-libssp \
132 --disable-libvtv \
133 --enable-languages=c,c++</userinput></screen>
134<!--
135 LDFLAGS_FOR_TARGET="-L$PWD/$LFS_TGT/libgcc -L$PWD/$LFS_TGT/32/libgcc -L$PWD/$LFS_TGT/x32/libgcc" \
136-->
137 <variablelist>
138 <title>The meaning of the new configure options:</title><!-- WIP -->
139
140 <varlistentry>
141 <term><parameter>--with-build-sysroot=$LFS</parameter></term>
142 <listitem>
143 <para>Normally, using <parameter>--host</parameter> ensures that
144 a cross-compiler is used for building GCC, and that compiler knows
145 that it has to look for headers and libraries in <filename
146 class="directory">$LFS</filename>. But the build system for GCC uses
147 other tools, which are not aware of this location. This switch is
148 needed so those tools will find the needed files in <filename
149 class="directory">$LFS</filename>, and not on the host.</para>
150 </listitem>
151 </varlistentry>
152
153 <varlistentry>
154 <term><parameter>--target=$LFS_TGT</parameter></term>
155 <listitem>
156 <para>We are cross-compiling GCC, so it's impossible to build
157 target libraries (<filename class="libraryfile">libgcc</filename>
158 and <filename class="libraryfile">libstdc++</filename>) with the
159 previously compiled GCC binaries&mdash;those binaries won't run on the
160 host. The GCC build system will attempt to use the host's
161 C and C++ compilers as a workaround by default.
162 Building the GCC target libraries with a different
163 version of GCC is not supported, so using the host's compilers may cause
164 the build to fail. This parameter ensures the libraries are built by GCC
165 pass 1.</para>
166 </listitem>
167 </varlistentry>
168
169 <varlistentry>
170 <term><parameter>LDFLAGS_FOR_TARGET=...</parameter></term>
171 <listitem>
172 <para>Allow <filename class="libraryfile">libstdc++</filename> to
173 use the shared <filename class="libraryfile">libgcc</filename> being
174 built in this pass, instead of the static version that was built in GCC
175 pass 1. This is necessary to support C++ exception
176 handling.</para>
177 </listitem>
178 </varlistentry>
179
180 <varlistentry>
181 <term><parameter>--disable-libsanitizer</parameter></term>
182 <listitem>
183 <para>Disable GCC sanitizer runtime libraries. They are not
184 needed for the temporary installation. This switch is necessary
185 to build GCC without
186 <systemitem class='library'>libcrypt</systemitem> installed for
187 the target. In <xref linkend='ch-tools-gcc-pass1'/> it was
188 implied by <parameter>--disable-libstdcxx</parameter>, but now we
189 have to explicitly pass it.</para>
190 </listitem>
191 </varlistentry>
192
193 </variablelist>
194
195 <para>Compile the package:</para>
196
197<screen><userinput remap="make">make</userinput></screen>
198
199 <para>Install the package:</para>
200
201<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen>
202
203 <para>As a finishing touch, create a utility symlink. Many programs and scripts
204 run <command>cc</command> instead of <command>gcc</command>, which is
205 used to keep programs generic and therefore usable on all kinds of UNIX
206 systems where the GNU C compiler is not always installed. Running
207 <command>cc</command> leaves the system administrator free to decide
208 which C compiler to install:</para>
209
210<screen><userinput remap="install">ln -sv gcc $LFS/usr/bin/cc</userinput></screen>
211
212 </sect2>
213
214 <sect2 role="content">
215 <title/>
216
217 <para>Details on this package are located in
218 <xref linkend="contents-gcc" role="."/></para>
219
220 </sect2>
221
222</sect1>
Note: See TracBrowser for help on using the repository browser.