source: chapter06/gcc-pass2.xml@ 2ef64c4

xry111/clfs-ng
Last change on this file since 2ef64c4 was 2ef64c4, checked in by Xi Ruoyao <xry111@…>, 17 months ago

Merge remote-tracking branch 'origin/trunk' into xry111/clfs-ng

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