6.14. GCC-3.4.1

The GCC package contains the GNU compiler collection, which includes the C and C++ compilers.

Approximate build time: 11.7 SBU

Required disk space: 294 MB

GCC installation depends on: Bash, Binutils, Coreutils, Diffutils, Findutils, Gawk, Gettext, Glibc, Grep, Make, Perl, Sed, and Texinfo

6.14.1. Installation of GCC

This package is known to have issues when its default optimization flags (including the -march and -mcpu options) are changed. If any environment variables that override default optimizations have been defined, such as CFLAGS and CXXFLAGS, unset them when building GCC.

Unpack both the gcc-core and the gcc-g++ tarballs—they will unpack into the same directory. Likewise, extract the gcc-testsuite package. The full GCC package contains additional compilers. Instructions for building these can be found at http://www.linuxfromscratch.org/blfs/view/svn/general/gcc.html.

Apply only the No-Fixincludes patch (not the Specs patch) also used in the previous chapter:

patch -Np1 -i ../gcc-3.4.1-no_fixincludes-1.patch

GCC fails to compile some packages outside of a base Linux From Scratch install (e.g., Mozilla and kdegraphics) when used in conjunction with newer versions of Binutils. Apply the following patch to fix this issue:

patch -Np1 -i ../gcc-3.4.1-linkonce-1.patch

Apply a sed substitution that will suppress the installation of libiberty.a. The version of libiberty.a provided by Binutils will be used instead:

sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in

The GCC documentation recommends building GCC outside of the source directory in a dedicated build directory:

mkdir ../gcc-build
cd ../gcc-build

Prepare GCC for compilation:

../gcc-3.4.1/configure --prefix=/usr \
    --libexecdir=/usr/lib --enable-shared \
    --enable-threads=posix --enable-__cxa_atexit \
    --enable-clocale=gnu --enable-languages=c,c++

Compile the package:

make
[Important]

Important

In this section, the test suite for GCC is considered critical. Do not skip it under any circumstance.

Test the results, but do not stop at errors:

make -k check

Some of the errors are known issues and were noted in the previous chapter. The test suite notes from Section 5.13, “GCC-3.4.1 - Pass 2,” are still relevant here. Be sure to refer back to them as necessary.

Install the package:

make install

Some packages expect the C PreProcessor to be installed in the /lib directory. To support those packages, create this symlink:

ln -s ../usr/bin/cpp /lib

Many packages use the name cc to call the C compiler. To satisfy those packages, create a symlink:

ln -s gcc /usr/bin/cc
[Note]

Note

At this point, it is strongly recommended to repeat the sanity check performed earlier in this chapter. Refer back to Section 6.12, “Re-adjusting the Toolchain,” and repeat the check. If the results are in error, then the most likely reason is that the GCC Specs patch from Chapter 5 was erroneously applied here.

6.14.2. Contents of GCC

Installed programs: c++, cc (link to gcc), cpp, g++, gcc, gccbug, and gcov

Installed libraries: libgcc.a, libgcc_eh.a, libgcc_s.so, libstdc++.[a,so], and libsupc++.a

Short Descriptions

cc

The C compiler

cpp

The C preprocessor; it is used by the compiler to expand the #include, #define, and similar statements in the source files

c++

The C++ compiler

g++

The C++ compiler

gcc

The C compiler

gccbug

A shell script used to help create useful bug reports

gcov

A coverage testing tool; it is used to analyze programs to determine where optimizations will have the most effect

libgcc

Contains run-time support for gcc

libstdc++

The standard C++ library

libsupc++

Provides supporting routines for the C++ programming language