source: chapter06/gcc-pass2.xml@ bdcc868

xry111/arm64
Last change on this file since bdcc868 was bdcc868, checked in by Xi Ruoyao <xry111@…>, 3 months ago

Merge remote-tracking branch 'origin/trunk' into xry111/arm64

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