The GCC package contains the GNU compiler collection, which includes the C and C++ compilers.
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.
Apply only the No-Fixincludes patch (not the Specs patch) also used in the previous chapter:
patch -Np1 -i ../gcc-3.4.3-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.3-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.3/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
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.11, “GCC-3.4.3 - 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
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.