source: chapter06/gcc.xml@ d02c56d

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 7.5 7.6 7.7 7.8 7.9 8.0 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 d02c56d was d02c56d, checked in by Bruce Dubbs <bdubbs@…>, 10 years ago

Update to man-pages-3.5.9.

Incorporate beta FHS.

Add /usr/share/ppd, /usr/libexec, /usr/share/color,
/usr/local/share/color, /var/lib/color, and /usr/share/dict.


Remove overrides for /usr/libexec: coreutils, findutils, gawk,
gcc, glibc, inetutils, man-db, and tar.


Move grub sbin executables from /usr/sbin to /sbin.

Document two new glibc errors in the regression tests.

Move man-db after util-linux to satisfy a test dependency
in /tools and to speed the test up.

Restore building the flex static library.

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

  • Property mode set to 100644
File size: 20.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>As in <xref linkend="ch-tools-gcc-pass2"/>, apply the following
45 <command>sed</command> to force the build to use the
46 <option>-fomit-frame-pointer</option> compiler flag in order to ensure
47 consistent compiler builds:</para>
48
49<screen><userinput remap="pre">case `uname -m` in
50 i?86) sed -i 's/^T_CFLAGS =$/&amp; -fomit-frame-pointer/' gcc/Makefile.in ;;
51esac</userinput></screen>
52<!--
53 <para>Workaround a bug so that GCC doesn't install
54 <filename class="libraryfile">libiberty.a</filename>, which is already
55 provided by Binutils:</para>
56
57<screen><userinput remap="pre">sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in</userinput></screen>
58-->
59 <para>Also fix an error in one of the check Makefiles and disable one test in
60 the g++ libmudflap test suite:</para>
61
62<screen><userinput remap="pre">sed -i -e /autogen/d -e /check.sh/d fixincludes/Makefile.in
63mv -v libmudflap/testsuite/libmudflap.c++/pass41-frag.cxx{,.disable}</userinput></screen>
64
65 <para>The GCC documentation recommends building GCC outside of the source
66 directory in a dedicated build directory:</para>
67
68<screen><userinput remap="pre">mkdir -v ../gcc-build
69cd ../gcc-build</userinput></screen>
70
71 <para>Prepare GCC for compilation:</para>
72
73<screen><userinput remap="configure">SED=sed \
74../gcc-&gcc-version;/configure --prefix=/usr \
75 --enable-shared \
76 --enable-threads=posix \
77 --enable-__cxa_atexit \
78 --enable-clocale=gnu \
79 --enable-languages=c,c++ \
80 --disable-multilib \
81 --disable-bootstrap \
82 --with-system-zlib</userinput></screen>
83
84 <para>Note that for other languages, there are some prerequisites that
85 are not available. See the BLFS Book for instructions on how to
86 build all the GCC supported languages.</para>
87
88 <variablelist>
89 <title>The meaning of the new configure option:</title>
90
91 <varlistentry>
92 <term><envar>SED=sed</envar></term>
93 <listitem>
94 <para>Setting this environment variable prevents a hard-coded
95 path to /tools/bin/sed.</para>
96 </listitem>
97 </varlistentry>
98
99 <varlistentry>
100 <term><parameter>--with-system-zlib</parameter></term>
101 <listitem>
102 <para>This switch tells GCC to link to the system installed copy of
103 the Zlib library, rather than its own internal copy.</para>
104 </listitem>
105 </varlistentry>
106 </variablelist>
107
108 <para>Compile the package:</para>
109
110<screen><userinput remap="make">make</userinput></screen>
111
112 <important>
113 <para>In this section, the test suite for GCC is considered
114 critical. Do not skip it under any circumstance.</para>
115 </important>
116
117 <para>One set of tests in the GCC test suite is known to exhaust the stack,
118 so increase the stack size prior to running the tests:</para>
119
120<screen><userinput remap="test">ulimit -s 32768</userinput></screen>
121
122 <para>Test the results, but do not stop at errors:</para>
123
124<screen><userinput remap="test">make -k check</userinput></screen>
125
126 <para>To receive a summary of the test suite results, run:</para>
127
128<screen><userinput remap="test">../gcc-&gcc-version;/contrib/test_summary</userinput></screen>
129
130 <para>For only the summaries, pipe the output through
131 <userinput>grep -A7 Summ</userinput>.</para>
132
133 <para>Results can be compared with those located at <ulink
134 url="&test-results;"/> and <ulink url="http://gcc.gnu.org/ml/gcc-testresults/"/>.</para>
135
136 <para>A few unexpected failures cannot always be avoided. The GCC developers
137 are usually aware of these issues, but have not resolved them yet. In
138 particular, the <filename class="libraryfile">libmudflap</filename> tests
139 are known to be particularly problematic as a result of a bug in GCC
140 (<ulink url="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20003"/>).
141 Unless the test results are vastly different from those at the above URL,
142 it is safe to continue.</para>
143
144 <para>Install the package:</para>
145
146<screen><userinput remap="install">make install</userinput></screen>
147
148 <para>Some packages expect the C preprocessor to be installed in the
149 <filename class="directory">/lib</filename> directory.
150 To support those packages, create this symlink:</para>
151
152<screen><userinput remap="install">ln -sv ../usr/bin/cpp /lib</userinput></screen>
153
154 <para>Many packages use the name <command>cc</command> to call the C
155 compiler. To satisfy those packages, create a symlink:</para>
156
157<screen><userinput remap="install">ln -sv gcc /usr/bin/cc</userinput></screen>
158
159 <para>Now that our final toolchain is in place, it is important to again ensure
160 that compiling and linking will work as expected. We do this by performing
161 the same sanity checks as we did earlier in the chapter:</para>
162
163 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
164 href="adjusting.xml"
165 xpointer="xpointer(//*[@os='a'])"/>
166
167 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
168 href="adjusting.xml"
169 xpointer="xpointer(//*[@os='b'])"/>
170
171 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
172 href="adjusting.xml"
173 xpointer="xpointer(//*[@os='c'])"/>
174
175 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
176 href="adjusting.xml"
177 xpointer="xpointer(//*[@os='d'])"/>
178
179 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
180 href="adjusting.xml"
181 xpointer="xpointer(//*[@os='e'])"/>
182
183 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
184 href="adjusting.xml"
185 xpointer="xpointer(//*[@os='f'])"/>
186
187<screen><computeroutput>/usr/lib/gcc/i686-pc-linux-gnu/&gcc-version;/../../../crt1.o succeeded
188/usr/lib/gcc/i686-pc-linux-gnu/&gcc-version;/../../../crti.o succeeded
189/usr/lib/gcc/i686-pc-linux-gnu/&gcc-version;/../../../crtn.o succeeded</computeroutput></screen>
190
191 <para>Depending on your machine architecture, the above may differ slightly,
192 the difference usually being the name of the directory
193 after <filename class="directory">/usr/lib/gcc</filename>. If your machine is
194 a 64-bit system, you may also see a directory named <filename class="directory">lib64</filename>
195 towards the end of the string. The important thing to
196 look for here is that <command>gcc</command> has found all three
197 <filename>crt*.o</filename> files under the
198 <filename class="directory">/usr/lib</filename> directory.</para>
199
200 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
201 href="adjusting.xml"
202 xpointer="xpointer(//*[@os='g'])"/>
203
204<screen><userinput>grep -B4 '^ /usr/include' dummy.log</userinput></screen>
205
206 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
207 href="adjusting.xml"
208 xpointer="xpointer(//*[@os='h'])"/>
209
210<screen><computeroutput>#include &lt;...&gt; search starts here:
211 /usr/lib/gcc/i686-pc-linux-gnu/&gcc-version;/include
212 /usr/local/include
213 /usr/lib/gcc/i686-pc-linux-gnu/&gcc-version;/include-fixed
214 /usr/include</computeroutput></screen>
215
216 <para>Again, note that the directory named after your target triplet may be
217 different than the above, depending on your architecture.</para>
218
219 <note><para>As of version 4.3.0, GCC now unconditionally installs the
220 <filename>limits.h</filename> file into the private
221 <filename class="directory">include-fixed</filename> directory, and that
222 directory is required to be in place.</para></note>
223
224 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
225 href="adjusting.xml"
226 xpointer="xpointer(//*[@os='i'])"/>
227
228 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
229 href="adjusting.xml"
230 xpointer="xpointer(//*[@os='j'])"/>
231
232 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
233 href="adjusting.xml"
234 xpointer="xpointer(//*[@os='k'])"/>
235
236<screen><computeroutput>SEARCH_DIR("/usr/i686-pc-linux-gnu/lib")
237SEARCH_DIR("/usr/local/lib")
238SEARCH_DIR("/lib")
239SEARCH_DIR("/usr/lib");</computeroutput></screen>
240
241 <para>A 64-bit system may see a few more directories. For example, here
242 is the output from an x86_64 machine:</para>
243
244<screen><computeroutput>SEARCH_DIR("/usr/x86_64-unknown-linux-gnu/lib64")
245SEARCH_DIR("/usr/local/lib64")
246SEARCH_DIR("/lib64")
247SEARCH_DIR("/usr/lib64")
248SEARCH_DIR("/usr/x86_64-unknown-linux-gnu/lib")
249SEARCH_DIR("/usr/local/lib")
250SEARCH_DIR("/lib")
251SEARCH_DIR("/usr/lib");</computeroutput></screen>
252
253 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
254 href="adjusting.xml"
255 xpointer="xpointer(//*[@os='l'])"/>
256
257 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
258 href="adjusting.xml"
259 xpointer="xpointer(//*[@os='m'])"/>
260
261 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
262 href="adjusting.xml"
263 xpointer="xpointer(//*[@os='n'])"/>
264
265 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
266 href="adjusting.xml"
267 xpointer="xpointer(//*[@os='o'])"/>
268
269 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
270 href="adjusting.xml"
271 xpointer="xpointer(//*[@os='p'])"/>
272
273 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
274 href="adjusting.xml"
275 xpointer="xpointer(//*[@os='q'])"/>
276
277 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
278 href="adjusting.xml"
279 xpointer="xpointer(//*[@os='r'])"/>
280
281 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
282 href="adjusting.xml"
283 xpointer="xpointer(//*[@os='s'])"/>
284
285 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
286 href="adjusting.xml"
287 xpointer="xpointer(//*[@os='t'])"/>
288
289 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
290 href="adjusting.xml"
291 xpointer="xpointer(//*[@os='u'])"/>
292
293 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
294 href="adjusting.xml"
295 xpointer="xpointer(//*[@os='v'])"/>
296
297 <para>Finally, move a misplaced file:</para>
298
299<screen><userinput remap="install">mkdir -pv /usr/share/gdb/auto-load/usr/lib
300mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib</userinput></screen>
301
302 </sect2>
303
304 <sect2 id="contents-gcc" role="content">
305 <title>Contents of GCC</title>
306
307 <segmentedlist>
308 <segtitle>Installed programs</segtitle>
309 <segtitle>Installed libraries</segtitle>
310 <segtitle>Installed directories</segtitle>
311
312 <seglistitem>
313 <seg>c++, cc (link to gcc), cpp, g++, gcc,
314 gcc-ar, gcc-nm, gcc-ranlib, and gcov</seg>
315
316 <seg>libasan.{a,so}, libatomic.{a,so}, libgcc.a, libgcc_eh.a,
317 libgcc_s.so, libgcov.a, libgomp.{a,so}, libiberty.a, libitm.{a,so},
318 liblto_plugin.so, libmudflap.{a,so}, libmudflapth.{a,so},
319 libquadmath.{a,so}, libssp.{a,so},
320 libssp_nonshared.a, libstdc++.{a,so}, libsupc++.a and libtsan.{a,so}</seg>
321
322 <seg>/usr/include/c++, /usr/lib/gcc, /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 optization" 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 optization" 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 optization" 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="libmudflap">
499 <term><filename class="libraryfile">libmudflap</filename></term>
500 <listitem>
501 <para>Contains routines that support GCC's bounds checking
502 functionality</para>
503 <indexterm zone="ch-system-gcc libmudflap">
504 <primary sortas="c-libmudflap*">libmudflap*</primary>
505 </indexterm>
506 </listitem>
507 </varlistentry>
508
509 <varlistentry id="libquadmath">
510 <term><filename class="libraryfile">libquadmath</filename></term>
511 <listitem>
512 <para>GCC Quad Precision Math Library API</para>
513 <indexterm zone="ch-system-gcc libquadmath">
514 <primary sortas="c-libquadmath*">libquadmath*</primary>
515 </indexterm>
516 </listitem>
517 </varlistentry>
518
519 <varlistentry id="libssp">
520 <term><filename class="libraryfile">libssp</filename></term>
521 <listitem>
522 <para>Contains routines supporting GCC's stack-smashing protection
523 functionality</para>
524 <indexterm zone="ch-system-gcc libssp">
525 <primary sortas="c-libssp*">libssp*</primary>
526 </indexterm>
527 </listitem>
528 </varlistentry>
529
530 <varlistentry id="libstdc">
531 <term><filename class="libraryfile">libstdc++</filename></term>
532 <listitem>
533 <para>The standard C++ library</para>
534 <indexterm zone="ch-system-gcc libstdc">
535 <primary sortas="c-libstdc++">libstdc++</primary>
536 </indexterm>
537 </listitem>
538 </varlistentry>
539
540 <varlistentry id="libsupc">
541 <term><filename class="libraryfile">libsupc++</filename></term>
542 <listitem>
543 <para>Provides supporting routines for the C++ programming
544 language</para>
545 <indexterm zone="ch-system-gcc libsupc">
546 <primary sortas="c-libsupc++">libsupc++</primary>
547 </indexterm>
548 </listitem>
549 </varlistentry>
550
551 <varlistentry id="libtsan">
552 <term><filename class="libraryfile">libtsan</filename></term>
553 <listitem>
554 <para>The Thread Sanitizer runtime library</para>
555 <indexterm zone="ch-system-gcc libtsan">
556 <primary sortas="c-libtsan">libtsan</primary>
557 </indexterm>
558 </listitem>
559 </varlistentry>
560
561 </variablelist>
562
563 </sect2>
564
565</sect1>
Note: See TracBrowser for help on using the repository browser.