source: chapter06/gcc-pass2.xml@ 1aeba8d

xry111/loongarch xry111/loongarch-12.0 xry111/loongarch-12.1
Last change on this file since 1aeba8d was af800c8, checked in by Xi Ruoyao <xry111@…>, 11 months ago

loongarch: gcc: Remove GMP workaround in GCC pass 1 & 2

The workaround is not needed with GMP 6.3.0.

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