source: chapter06/gcc-pass2.xml@ f0cbef54

multilib
Last change on this file since f0cbef54 was f0cbef54, checked in by Thomas Trepl <thomas@…>, 17 months ago

Merge & fix conflicts

  • Property mode set to 100644
File size: 8.2 KB
RevLine 
[6dfcfecc]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>
[f2af13d]45<!--
[1b11115]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>
[f2af13d]49-->
[6dfcfecc]50 <para>As in the first build of GCC, the GMP, MPFR, and MPC packages are
[6dff9ef]51 required. Unpack the tarballs and move them into the required directories:</para>
[6dfcfecc]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
[c4595c3]58mv -v mpc-&mpc-version; mpc</userinput></screen>
[6dfcfecc]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>
[d7e0db5]69
[d9bec1e]70 <para arch="ml_32,ml_x32,ml_all">Change the default directory name for the
[6dfcfecc]71 libraries:</para>
72
73<screen arch="ml_32,ml_x32,ml_all"><userinput remap="pre">sed -e '/m64=/s/lib64/lib/' \
[0ebda11]74 -e '/m32=/s/m32=.*/m32=..\/lib32$(call if_multiarch,:i386-linux-gnu)/' \
[6dfcfecc]75 -i.orig gcc/config/i386/t-linux64</userinput></screen>
[d9bec1e]76
[459d493]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
[6dfcfecc]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 \
[8e0f8a9]96 --target=$LFS_TGT \
[459d493]97 LDFLAGS_FOR_TARGET=-L$PWD/$LFS_TGT/libgcc \
[6dfcfecc]98 --prefix=/usr \
99 --with-build-sysroot=$LFS \
[0611f706]100 --enable-default-pie \
101 --enable-default-ssp \
[6dfcfecc]102 --disable-nls \
103 --disable-multilib \
104 --disable-libatomic \
105 --disable-libgomp \
106 --disable-libquadmath \
107 --disable-libssp \
108 --disable-libvtv \
109 --enable-languages=c,c++</userinput></screen>
110<screen arch="ml_32,ml_x32,ml_all"><userinput remap="configure"
111 arch="ml_32">mlist=m64,m32</userinput><userinput remap="configure"
112 arch="ml_x32">mlist=m64,mx32</userinput><userinput remap="configure"
113 arch="ml_all">mlist=m64,m32,mx32</userinput>
114<userinput remap="configure">../configure \
115 --build=$(../config.guess) \
116 --host=$LFS_TGT \
[85acfcb0]117 --target=$LFS_TGT \
118 LDFLAGS_FOR_TARGET=-L$PWD/$LFS_TGT/libgcc \
[6dfcfecc]119 --prefix=/usr \
120 --with-build-sysroot=$LFS \
[1835fca]121 --enable-default-pie \
122 --enable-default-ssp \
[6dfcfecc]123 --enable-initfini-array \
124 --disable-nls \
125 --enable-multilib --with-multilib-list=$mlist \
126 --disable-decimal-float \
127 --disable-libatomic \
128 --disable-libgomp \
129 --disable-libquadmath \
130 --disable-libssp \
131 --disable-libvtv \
[8acfbf67]132 --enable-languages=c,c++</userinput></screen>
[85acfcb0]133<!--
134 LDFLAGS_FOR_TARGET="-L$PWD/$LFS_TGT/libgcc -L$PWD/$LFS_TGT/32/libgcc -L$PWD/$LFS_TGT/x32/libgcc" \
135-->
[6dfcfecc]136 <variablelist>
137 <title>The meaning of the new configure options:</title><!-- WIP -->
138
139 <varlistentry>
[3bb463d]140 <term><parameter>--with-build-sysroot=$LFS</parameter></term>
[6dfcfecc]141 <listitem>
142 <para>Normally, using <parameter>--host</parameter> ensures that
143 a cross-compiler is used for building GCC, and that compiler knows
144 that it has to look for headers and libraries in <filename
[6dff9ef]145 class="directory">$LFS</filename>. But the build system for GCC uses
[6dfcfecc]146 other tools, which are not aware of this location. This switch is
[6dff9ef]147 needed so those tools will find the needed files in <filename
[6dfcfecc]148 class="directory">$LFS</filename>, and not on the host.</para>
149 </listitem>
150 </varlistentry>
151
[3bb463d]152 <varlistentry>
153 <term><parameter>--target=$LFS_TGT</parameter></term>
154 <listitem>
[6dff9ef]155 <para>We are cross-compiling GCC, so it's impossible to build
[3bb463d]156 target libraries (<filename class="libraryfile">libgcc</filename>
157 and <filename class="libraryfile">libstdc++</filename>) with the
[6dff9ef]158 previously compiled GCC binaries&mdash;those binaries won't run on the
159 host. The GCC build system will attempt to use the host's
160 C and C++ compilers as a workaround by default.
161 Building the GCC target libraries with a different
162 version of GCC is not supported, so using the host's compilers may cause
163 the build to fail. This parameter ensures the libraries are built by GCC
164 pass 1.</para>
[3bb463d]165 </listitem>
166 </varlistentry>
167
168 <varlistentry>
169 <term><parameter>LDFLAGS_FOR_TARGET=...</parameter></term>
170 <listitem>
171 <para>Allow <filename class="libraryfile">libstdc++</filename> to
[6dff9ef]172 use the shared <filename class="libraryfile">libgcc</filename> being
173 built in this pass, instead of the static version that was built in GCC
174 pass 1. This is necessary to support C++ exception
[3bb463d]175 handling.</para>
176 </listitem>
177 </varlistentry>
178
[6dfcfecc]179 </variablelist>
180
181 <para>Compile the package:</para>
182
183<screen><userinput remap="make">make</userinput></screen>
184
185 <para>Install the package:</para>
186
187<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen>
188
189 <para>As a finishing touch, create a utility symlink. Many programs and scripts
190 run <command>cc</command> instead of <command>gcc</command>, which is
191 used to keep programs generic and therefore usable on all kinds of UNIX
192 systems where the GNU C compiler is not always installed. Running
193 <command>cc</command> leaves the system administrator free to decide
194 which C compiler to install:</para>
195
196<screen><userinput remap="install">ln -sv gcc $LFS/usr/bin/cc</userinput></screen>
197
198 </sect2>
199
200 <sect2 role="content">
201 <title/>
202
203 <para>Details on this package are located in
204 <xref linkend="contents-gcc" role="."/></para>
205
206 </sect2>
207
208</sect1>
Note: See TracBrowser for help on using the repository browser.