source: chapter06/gcc.xml@ 26a1b33

10.0 10.0-rc1 10.1 10.1-rc1 11.0 11.0-rc1 11.0-rc2 11.0-rc3 11.1 11.1-rc1 11.2 11.2-rc1 11.3 11.3-rc1 12.0 12.0-rc1 12.1 12.1-rc1 8.1 8.2 8.3 8.4 9.0 9.1 arm bdubbs/gcc13 ml-11.0 multilib renodr/libudev-from-systemd s6-init trunk xry111/arm64 xry111/arm64-12.0 xry111/clfs-ng xry111/lfs-next xry111/loongarch xry111/loongarch-12.0 xry111/loongarch-12.1 xry111/mips64el xry111/pip3 xry111/rust-wip-20221008 xry111/update-glibc
Last change on this file since 26a1b33 was 0967c90, checked in by DJ Lucas <dj@…>, 7 years ago

Introduce -isystem to use the final system location of gcc's internel headers in the GlibC build.

git-svn-id: http://svn.linuxfromscratch.org/LFS/trunk/BOOK@11250 4aa44e1e-78dd-0310-a6d2-fbcd4c07a689

  • Property mode set to 100644
File size: 19.2 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-system-gcc" role="wrap">
9 <?dbhtml filename="gcc.html"?>
10
11 <sect1info condition="script">
12 <productname>gcc</productname>
13 <productnumber>&gcc-version;</productnumber>
14 <address>&gcc-url;</address>
15 </sect1info>
16
17 <title>GCC-&gcc-version;</title>
18
19 <indexterm zone="ch-system-gcc">
20 <primary sortas="a-GCC">GCC</primary>
21 </indexterm>
22
23 <sect2 role="package">
24 <title/>
25
26 <para>The GCC package contains the GNU compiler collection, which includes
27 the C and C++ compilers.</para>
28
29 <segmentedlist>
30 <segtitle>&buildtime;</segtitle>
31 <segtitle>&diskspace;</segtitle>
32
33 <seglistitem>
34 <seg>&gcc-ch6-sbu;</seg>
35 <seg>&gcc-ch6-du;</seg>
36 </seglistitem>
37 </segmentedlist>
38
39 </sect2>
40
41 <sect2 role="installation">
42 <title>Installation of GCC</title>
43
44 <para>If building on x86_64, change the default directory name for 64-bit
45 libraries to <quote>lib</quote>:</para>
46
47<screen><userinput remap="pre">case $(uname -m) in
48 x86_64)
49 sed -e '/m64=/s/lib64/lib/' \
50 -i.orig gcc/config/i386/t-linux64
51 ;;
52esac</userinput></screen>
53
54 <para>Remove the symlink created earlier as the final gcc includes will be
55 installed here:</para>
56
57<screen><userinput remap="pre">rm -f /usr/lib/gcc</userinput></screen>
58
59 <para>The GCC documentation recommends building GCC in a dedicated build directory:</para>
60
61<screen><userinput remap="pre">mkdir -v build
62cd build</userinput></screen>
63
64 <para>Prepare GCC for compilation:</para>
65
66<screen><userinput remap="configure">SED=sed \
67../configure --prefix=/usr \
68 --enable-languages=c,c++ \
69 --disable-multilib \
70 --disable-bootstrap \
71 --with-system-zlib</userinput></screen>
72
73 <para>Note that for other languages, there are some prerequisites that
74 are not yet available. See the
75 <ulink url="&blfs-book;general/gcc.html">BLFS Book</ulink>
76 for instructions on how to build all of GCC's supported languages.</para>
77
78 <variablelist>
79 <title>The meaning of the new configure parameters:</title>
80
81 <varlistentry>
82 <term><envar>SED=sed</envar></term>
83 <listitem>
84 <para>Setting this environment variable prevents a hard-coded
85 path to /tools/bin/sed.</para>
86 </listitem>
87 </varlistentry>
88
89 <varlistentry>
90 <term><parameter>--with-system-zlib</parameter></term>
91 <listitem>
92 <para>This switch tells GCC to link to the system installed copy of
93 the Zlib library, rather than its own internal copy.</para>
94 </listitem>
95 </varlistentry>
96 </variablelist>
97
98 <para>Compile the package:</para>
99
100<screen><userinput remap="make">make</userinput></screen>
101
102 <important>
103 <para>In this section, the test suite for GCC is considered
104 critical. Do not skip it under any circumstance.</para>
105 </important>
106
107 <para>One set of tests in the GCC test suite is known to exhaust the stack,
108 so increase the stack size prior to running the tests:</para>
109
110<screen><userinput remap="test">ulimit -s 32768</userinput></screen>
111
112 <para>Test the results, but do not stop at errors:</para>
113
114<screen><userinput remap="test">make -k check</userinput></screen>
115
116 <para>To receive a summary of the test suite results, run:</para>
117
118<screen><userinput remap="test">../contrib/test_summary</userinput></screen>
119
120 <para>For only the summaries, pipe the output through
121 <userinput>grep -A7 Summ</userinput>.</para>
122
123 <para>Results can be compared with those located at <ulink
124 url="&test-results;"/> and
125 <ulink url="http://gcc.gnu.org/ml/gcc-testresults/"/>.</para>
126
127 <para>A few unexpected failures cannot always be avoided. The GCC developers
128 are usually aware of these issues, but have not resolved them yet.
129 In particular, five tests in the libstdc++ test suite are known to fail
130 when running as the root user as we do here.
131 Unless the test results are vastly different from those at the above URL,
132 it is safe to continue.</para>
133
134 <para>Install the package:</para>
135
136<screen><userinput remap="install">make install</userinput></screen>
137
138 <para>Create a symlink required by the <ulink
139 url="http://refspecs.linuxfoundation.org/FHS_3.0/fhs/ch03s09.html">FHS</ulink>
140 for "historical" reasons.</para>
141
142<screen><userinput remap="install">ln -sv ../usr/bin/cpp /lib</userinput></screen>
143
144 <para>Many packages use the name <command>cc</command> to call the C
145 compiler. To satisfy those packages, create a symlink:</para>
146
147<screen><userinput remap="install">ln -sv gcc /usr/bin/cc</userinput></screen>
148
149 <para>Add a compatibility symlink to enable building programs with
150 Link Time Optimization (LTO):</para>
151
152<screen><userinput remap="install">install -v -dm755 /usr/lib/bfd-plugins
153ln -sfv ../../libexec/gcc/$(gcc -dumpmachine)/&gcc-version;/liblto_plugin.so \
154 /usr/lib/bfd-plugins/</userinput></screen>
155
156 <para>Now that our final toolchain is in place, it is important to again ensure
157 that compiling and linking will work as expected. We do this by performing
158 the same sanity checks as we did earlier in the chapter:</para>
159
160 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
161 href="adjusting.xml"
162 xpointer="xpointer(//*[@os='a'])"/>
163
164 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
165 href="adjusting.xml"
166 xpointer="xpointer(//*[@os='b'])"/>
167
168 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
169 href="adjusting.xml"
170 xpointer="xpointer(//*[@os='c'])"/>
171
172 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
173 href="adjusting.xml"
174 xpointer="xpointer(//*[@os='d'])"/>
175
176 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
177 href="adjusting.xml"
178 xpointer="xpointer(//*[@os='e'])"/>
179
180 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
181 href="adjusting.xml"
182 xpointer="xpointer(//*[@os='f'])"/>
183
184<screen><computeroutput>/usr/lib/gcc/x86_64-pc-linux-gnu/&gcc-version;/../../../../lib/crt1.o succeeded
185/usr/lib/gcc/x86_64-pc-linux-gnu/&gcc-version;/../../../../lib/crti.o succeeded
186/usr/lib/gcc/x86_64-pc-linux-gnu/&gcc-version;/../../../../lib/crtn.o succeeded</computeroutput></screen>
187
188 <para>Depending on your machine architecture, the above may differ slightly,
189 the difference usually being the name of the directory
190 after <filename class="directory">/usr/lib/gcc</filename>. The important
191 thing to look for here is that <command>gcc</command> has found all three
192 <filename>crt*.o</filename> files under the
193 <filename class="directory">/usr/lib</filename> directory.</para>
194
195 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
196 href="adjusting.xml"
197 xpointer="xpointer(//*[@os='g'])"/>
198
199<screen><userinput>grep -B4 '^ /usr/include' dummy.log</userinput></screen>
200
201 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
202 href="adjusting.xml"
203 xpointer="xpointer(//*[@os='h'])"/>
204
205<screen><computeroutput>#include &lt;...&gt; search starts here:
206 /usr/lib/gcc/x86_64-pc-linux-gnu/&gcc-version;/include
207 /usr/local/include
208 /usr/lib/gcc/x86_64-pc-linux-gnu/&gcc-version;/include-fixed
209 /usr/include</computeroutput></screen>
210
211 <para>Again, note that the directory named after your target triplet may be
212 different than the above, depending on your architecture.</para>
213
214 <note><para>As of version 4.3.0, GCC now unconditionally installs the
215 <filename>limits.h</filename> file into the private
216 <filename class="directory">include-fixed</filename> directory, and that
217 directory is required to be in place.</para></note>
218
219 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
220 href="adjusting.xml"
221 xpointer="xpointer(//*[@os='i'])"/>
222
223 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
224 href="adjusting.xml"
225 xpointer="xpointer(//*[@os='j'])"/>
226
227 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
228 href="adjusting.xml"
229 xpointer="xpointer(//*[@os='k'])"/>
230
231<screen><computeroutput>SEARCH_DIR("/usr/x86_64-pc-linux-gnu/lib64")
232SEARCH_DIR("/usr/local/lib64")
233SEARCH_DIR("/lib64")
234SEARCH_DIR("/usr/lib64")
235SEARCH_DIR("/usr/x86_64-pc-linux-gnu/lib")
236SEARCH_DIR("/usr/local/lib")
237SEARCH_DIR("/lib")
238SEARCH_DIR("/usr/lib");</computeroutput></screen>
239
240 <para>A 32-bit system may see a few different directories. For example, here
241 is the output from an i686 machine:</para>
242
243<screen><computeroutput>SEARCH_DIR("/usr/i686-pc-linux-gnu/lib32")
244SEARCH_DIR("/usr/local/lib32")
245SEARCH_DIR("/lib32")
246SEARCH_DIR("/usr/lib32")
247SEARCH_DIR("/usr/i686-pc-linux-gnu/lib")
248SEARCH_DIR("/usr/local/lib")
249SEARCH_DIR("/lib")
250SEARCH_DIR("/usr/lib");</computeroutput></screen>
251
252 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
253 href="adjusting.xml"
254 xpointer="xpointer(//*[@os='l'])"/>
255
256 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
257 href="adjusting.xml"
258 xpointer="xpointer(//*[@os='m'])"/>
259
260 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
261 href="adjusting.xml"
262 xpointer="xpointer(//*[@os='n'])"/>
263
264 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
265 href="adjusting.xml"
266 xpointer="xpointer(//*[@os='o'])"/>
267
268 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
269 href="adjusting.xml"
270 xpointer="xpointer(//*[@os='p'])"/>
271
272 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
273 href="adjusting.xml"
274 xpointer="xpointer(//*[@os='q'])"/>
275
276 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
277 href="adjusting.xml"
278 xpointer="xpointer(//*[@os='r'])"/>
279
280 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
281 href="adjusting.xml"
282 xpointer="xpointer(//*[@os='s'])"/>
283
284 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
285 href="adjusting.xml"
286 xpointer="xpointer(//*[@os='t'])"/>
287
288 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
289 href="adjusting.xml"
290 xpointer="xpointer(//*[@os='u'])"/>
291
292 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
293 href="adjusting.xml"
294 xpointer="xpointer(//*[@os='v'])"/>
295
296 <para>Finally, move a misplaced file:</para>
297
298<screen><userinput remap="install">mkdir -pv /usr/share/gdb/auto-load/usr/lib
299mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib</userinput></screen>
300
301 </sect2>
302
303 <sect2 id="contents-gcc" role="content">
304 <title>Contents of GCC</title>
305
306 <segmentedlist>
307 <segtitle>Installed programs</segtitle>
308 <segtitle>Installed libraries</segtitle>
309 <segtitle>Installed directories</segtitle>
310
311 <seglistitem>
312 <seg>c++, cc (link to gcc), cpp, g++, gcc,
313 gcc-ar, gcc-nm, gcc-ranlib, and gcov</seg>
314
315 <seg>libasan.{a,so}, libatomic.{a,so}, libgcc.a, libgcc_eh.a,
316 libgcc_s.so, libgcov.a, libgomp.{a,so}, libiberty.a, libitm.{a,so},
317 liblto_plugin.so,
318 libquadmath.{a,so}, libssp.{a,so},
319 libssp_nonshared.a, libstdc++.{a,so}, libsupc++.a, and libtsan.{a,so}</seg>
320
321 <seg>/usr/include/c++, /usr/lib/gcc, /usr/libexec/gcc, and
322 /usr/share/gcc-&gcc-version;</seg>
323 </seglistitem>
324 </segmentedlist>
325
326 <variablelist>
327 <bridgehead renderas="sect3">Short Descriptions</bridgehead>
328 <?dbfo list-presentation="list"?>
329 <?dbhtml list-presentation="table"?>
330
331 <varlistentry id="c">
332 <term><command>c++</command></term>
333 <listitem>
334 <para>The C++ compiler</para>
335 <indexterm zone="ch-system-gcc c">
336 <primary sortas="b-c++">c++</primary>
337 </indexterm>
338 </listitem>
339 </varlistentry>
340
341 <varlistentry id="cc">
342 <term><command>cc</command></term>
343 <listitem>
344 <para>The C compiler</para>
345 <indexterm zone="ch-system-gcc cc">
346 <primary sortas="b-cc">cc</primary>
347 </indexterm>
348 </listitem>
349 </varlistentry>
350
351 <varlistentry id="cpp">
352 <term><command>cpp</command></term>
353 <listitem>
354 <para>The C preprocessor; it is used by the compiler to expand the
355 #include, #define, and similar statements in the source files</para>
356 <indexterm zone="ch-system-gcc cpp">
357 <primary sortas="b-cpp">cpp</primary>
358 </indexterm>
359 </listitem>
360 </varlistentry>
361
362 <varlistentry id="g">
363 <term><command>g++</command></term>
364 <listitem>
365 <para>The C++ compiler</para>
366 <indexterm zone="ch-system-gcc g">
367 <primary sortas="b-g++">g++</primary>
368 </indexterm>
369 </listitem>
370 </varlistentry>
371
372 <varlistentry id="gcc">
373 <term><command>gcc</command></term>
374 <listitem>
375 <para>The C compiler</para>
376 <indexterm zone="ch-system-gcc gcc">
377 <primary sortas="b-gcc">gcc</primary>
378 </indexterm>
379 </listitem>
380 </varlistentry>
381
382 <varlistentry id="gcc-ar">
383 <term><command>gcc-ar</command></term>
384 <listitem>
385 <para>A wrapper around <command>ar</command> that adds a
386 plugin to the command line. This program is only used
387 to add "link time optimization" and is not useful with the
388 default build options</para>
389 <indexterm zone="ch-system-gcc gcc-ar">
390 <primary sortas="b-gcc-ar">gc-ar</primary>
391 </indexterm>
392 </listitem>
393 </varlistentry>
394
395 <varlistentry id="gcc-nm">
396 <term><command>gcc-nm</command></term>
397 <listitem>
398 <para>A wrapper around <command>nm</command> that adds a
399 plugin to the command line. This program is only used
400 to add "link time optimization" and is not useful with the
401 default build options</para>
402 <indexterm zone="ch-system-gcc gcc-nm">
403 <primary sortas="b-gcc-nm">gc-nm</primary>
404 </indexterm>
405 </listitem>
406 </varlistentry>
407
408 <varlistentry id="gcc-ranlib">
409 <term><command>gcc-ranlib</command></term>
410 <listitem>
411 <para>A wrapper around <command>ranlib</command> that adds a
412 plugin to the command line. This program is only used
413 to add "link time optimization" and is not useful with the
414 default build options</para>
415 <indexterm zone="ch-system-gcc gcc-ranlib">
416 <primary sortas="b-gcc-ranlib">gc-ranlib</primary>
417 </indexterm>
418 </listitem>
419 </varlistentry>
420
421 <varlistentry id="gcov">
422 <term><command>gcov</command></term>
423 <listitem>
424 <para>A coverage testing tool; it is used to analyze programs to
425 determine where optimizations will have the most effect</para>
426 <indexterm zone="ch-system-gcc gcov">
427 <primary sortas="b-gcov">gcov</primary>
428 </indexterm>
429 </listitem>
430 </varlistentry>
431
432 <varlistentry id="libasan">
433 <term><command>libasan</command></term>
434 <listitem>
435 <para>The Address Sanitizer runtime library</para>
436 <indexterm zone="ch-system-gcc libasan">
437 <primary sortas="b-libasan">libasan</primary>
438 </indexterm>
439 </listitem>
440 </varlistentry>
441
442 <varlistentry id="libgcc">
443 <term><filename class="libraryfile">libgcc</filename></term>
444 <listitem>
445 <para>Contains run-time support for <command>gcc</command></para>
446 <indexterm zone="ch-system-gcc libgcc">
447 <primary sortas="c-libgcc">libgcc</primary>
448 </indexterm>
449 </listitem>
450 </varlistentry>
451
452 <varlistentry id="libgcov">
453 <term><filename class="libraryfile">libgcov</filename></term>
454 <listitem>
455 <para>This library is linked in to a program when GCC is instructed
456 to enable profiling</para>
457 <indexterm zone="ch-system-gcc libgcov">
458 <primary sortas="c-libgcov">libgcov</primary>
459 </indexterm>
460 </listitem>
461 </varlistentry>
462
463 <varlistentry id="libgomp">
464 <term><filename class="libraryfile">libgomp</filename></term>
465 <listitem>
466 <para>GNU implementation of the OpenMP API for multi-platform
467 shared-memory parallel programming in C/C++ and Fortran</para>
468 <indexterm zone="ch-system-gcc libgomp">
469 <primary sortas="c-libgomp">libgomp</primary>
470 </indexterm>
471 </listitem>
472 </varlistentry>
473
474 <varlistentry id="libiberty">
475 <term><filename class="libraryfile">libiberty</filename></term>
476 <listitem>
477 <para>Contains routines used by various GNU programs, including
478 <command>getopt</command>, <command>obstack</command>,
479 <command>strerror</command>, <command>strtol</command>, and
480 <command>strtoul</command></para>
481 <indexterm zone="ch-system-gcc libiberty">
482 <primary sortas="c-libiberty">libiberty</primary>
483 </indexterm>
484 </listitem>
485 </varlistentry>
486
487 <varlistentry id="liblto_plugin">
488 <term><filename class="libraryfile">liblto_plugin</filename></term>
489 <listitem>
490 <para>GCC's Link Time Optimization (LTO) plugin allows GCC to perform
491 optimizations across compilation units</para>
492 <indexterm zone="ch-system-gcc liblto_plugin">
493 <primary sortas="c-liblto_plugin">liblto_plugin</primary>
494 </indexterm>
495 </listitem>
496 </varlistentry>
497
498 <varlistentry id="libquadmath">
499 <term><filename class="libraryfile">libquadmath</filename></term>
500 <listitem>
501 <para>GCC Quad Precision Math Library API</para>
502 <indexterm zone="ch-system-gcc libquadmath">
503 <primary sortas="c-libquadmath">libquadmath</primary>
504 </indexterm>
505 </listitem>
506 </varlistentry>
507
508 <varlistentry id="libssp">
509 <term><filename class="libraryfile">libssp</filename></term>
510 <listitem>
511 <para>Contains routines supporting GCC's stack-smashing protection
512 functionality</para>
513 <indexterm zone="ch-system-gcc libssp">
514 <primary sortas="c-libssp">libssp</primary>
515 </indexterm>
516 </listitem>
517 </varlistentry>
518
519 <varlistentry id="libstdc">
520 <term><filename class="libraryfile">libstdc++</filename></term>
521 <listitem>
522 <para>The standard C++ library</para>
523 <indexterm zone="ch-system-gcc libstdc">
524 <primary sortas="c-libstdc++">libstdc++</primary>
525 </indexterm>
526 </listitem>
527 </varlistentry>
528
529 <varlistentry id="libsupc">
530 <term><filename class="libraryfile">libsupc++</filename></term>
531 <listitem>
532 <para>Provides supporting routines for the C++ programming
533 language</para>
534 <indexterm zone="ch-system-gcc libsupc">
535 <primary sortas="c-libsupc++">libsupc++</primary>
536 </indexterm>
537 </listitem>
538 </varlistentry>
539
540 <varlistentry id="libtsan">
541 <term><filename class="libraryfile">libtsan</filename></term>
542 <listitem>
543 <para>The Thread Sanitizer runtime library</para>
544 <indexterm zone="ch-system-gcc libtsan">
545 <primary sortas="c-libtsan">libtsan</primary>
546 </indexterm>
547 </listitem>
548 </varlistentry>
549
550 </variablelist>
551
552 </sect2>
553
554</sect1>
Note: See TracBrowser for help on using the repository browser.