source: chapter06/gcc-pass2.xml

trunk
Last change on this file was 7152faa, checked in by Pierre Labastie <pierre.labastie@…>, 3 months ago

Change all xml files to utf-8 encoding

  • Property mode set to 100644
File size: 7.1 KB
Line 
1<?xml version="1.0" encoding="UTF-8"?>
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 <para>If building on x86_64, change the default directory name for 64-bit
61 libraries to <quote>lib</quote>:</para>
62
63<screen><userinput remap="pre">case $(uname -m) in
64 x86_64)
65 sed -e '/m64=/s/lib64/lib/' \
66 -i.orig gcc/config/i386/t-linux64
67 ;;
68esac</userinput></screen>
69
70 <para>Override the building rule of libgcc and libstdc++ headers, to
71 allow building these libraries with POSIX threads support:</para>
72
73<screen><userinput remap="pre">sed '/thread_header =/s/@.*@/gthr-posix.h/' \
74 -i libgcc/Makefile.in libstdc++-v3/include/Makefile.in</userinput></screen>
75
76 <para>Create a separate build directory again:</para>
77
78<screen><userinput remap="pre">mkdir -v build
79cd build</userinput></screen>
80
81 <para>Before starting to build GCC, remember to unset any environment
82 variables that override the default optimization flags.</para>
83
84 <para>Now prepare GCC for compilation:</para>
85
86<screen><userinput remap="configure">../configure \
87 --build=$(../config.guess) \
88 --host=$LFS_TGT \
89 --target=$LFS_TGT \
90 LDFLAGS_FOR_TARGET=-L$PWD/$LFS_TGT/libgcc \
91 --prefix=/usr \
92 --with-build-sysroot=$LFS \
93 --enable-default-pie \
94 --enable-default-ssp \
95 --disable-nls \
96 --disable-multilib \
97 --disable-libatomic \
98 --disable-libgomp \
99 --disable-libquadmath \
100 --disable-libsanitizer \
101 --disable-libssp \
102 --disable-libvtv \
103 --enable-languages=c,c++</userinput></screen>
104
105 <variablelist>
106 <title>The meaning of the new configure options:</title><!-- WIP -->
107
108 <varlistentry>
109 <term><parameter>--with-build-sysroot=$LFS</parameter></term>
110 <listitem>
111 <para>Normally, using <parameter>--host</parameter> ensures that
112 a cross-compiler is used for building GCC, and that compiler knows
113 that it has to look for headers and libraries in <filename
114 class="directory">$LFS</filename>. But the build system for GCC uses
115 other tools, which are not aware of this location. This switch is
116 needed so those tools will find the needed files in <filename
117 class="directory">$LFS</filename>, and not on the host.</para>
118 </listitem>
119 </varlistentry>
120
121 <varlistentry>
122 <term><parameter>--target=$LFS_TGT</parameter></term>
123 <listitem>
124 <para>We are cross-compiling GCC, so it's impossible to build
125 target libraries (<filename class="libraryfile">libgcc</filename>
126 and <filename class="libraryfile">libstdc++</filename>) with the
127 previously compiled GCC binaries&mdash;those binaries won't run on the
128 host. The GCC build system will attempt to use the host's
129 C and C++ compilers as a workaround by default.
130 Building the GCC target libraries with a different
131 version of GCC is not supported, so using the host's compilers may cause
132 the build to fail. This parameter ensures the libraries are built by GCC
133 pass 1.</para>
134 </listitem>
135 </varlistentry>
136
137 <varlistentry>
138 <term><parameter>LDFLAGS_FOR_TARGET=...</parameter></term>
139 <listitem>
140 <para>Allow <filename class="libraryfile">libstdc++</filename> to
141 use the shared <filename class="libraryfile">libgcc</filename> being
142 built in this pass, instead of the static version that was built in GCC
143 pass 1. This is necessary to support C++ exception
144 handling.</para>
145 </listitem>
146 </varlistentry>
147
148 <varlistentry>
149 <term><parameter>--disable-libsanitizer</parameter></term>
150 <listitem>
151 <para>Disable GCC sanitizer runtime libraries. They are not
152 needed for the temporary installation. This switch is necessary
153 to build GCC without
154 <systemitem class='library'>libcrypt</systemitem> installed for
155 the target. In <xref linkend='ch-tools-gcc-pass1'/> it was
156 implied by <parameter>--disable-libstdcxx</parameter>, but now we
157 have to explicitly pass it.</para>
158 </listitem>
159 </varlistentry>
160
161 </variablelist>
162
163 <para>Compile the package:</para>
164
165<screen><userinput remap="make">make</userinput></screen>
166
167 <para>Install the package:</para>
168
169<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen>
170
171 <para>As a finishing touch, create a utility symlink. Many programs and scripts
172 run <command>cc</command> instead of <command>gcc</command>, which is
173 used to keep programs generic and therefore usable on all kinds of UNIX
174 systems where the GNU C compiler is not always installed. Running
175 <command>cc</command> leaves the system administrator free to decide
176 which C compiler to install:</para>
177
178<screen><userinput remap="install">ln -sv gcc $LFS/usr/bin/cc</userinput></screen>
179
180 </sect2>
181
182 <sect2 role="content">
183 <title/>
184
185 <para>Details on this package are located in
186 <xref linkend="contents-gcc" role="."/></para>
187
188 </sect2>
189
190</sect1>
Note: See TracBrowser for help on using the repository browser.