6.11.2. Installation of GCC
The following patch contains a number of updates to the 4.4.1
branch by the GCC developers:
patch -Np1 -i ../gcc-4.4.1-branch_update-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:
cp libiberty/Makefile.in{,.orig}
sed 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in.orig > \
libiberty/Makefile.in
GCC provides a gccbug
script which detects at compile time whether mktemp is present, and hardcodes
the result in a test. If mktemp is not found, the script
will fall back to using less random names for temporary files.
mktemp will be
installed as part of Coreutils later, so the following sed will simulate its presence:
cp gcc/gccbug.in{,.orig}
sed 's/@have_mktemp_command@/yes/' gcc/gccbug.in.orig > gcc/gccbug.in
The fixincludes
script attempts to "fix" the system headers installed so far. Since
GCC is cross-compiled expecting the system headers to be in
/usr/include
, the script will be
looking at the host system's headers. The following sed prevents
fixincludes from
running:
cp gcc/Makefile.in{,.orig}
sed 's@\./fixinc\.sh@-c true@' gcc/Makefile.in.orig > gcc/Makefile.in
The GCC documentation recommends building GCC outside of the source
directory in a dedicated build directory:
mkdir -v ../gcc-build
cd ../gcc-build
Prepare GCC for compilation:
LDFLAGS="-Wl,-rpath-link,${CLFS}/cross-tools/${CLFS_TARGET}/lib" \
../gcc-4.4.1/configure --prefix=/usr --libexecdir=/usr/lib \
--build=${CLFS_HOST} --host=${CLFS_TARGET} --target=${CLFS_TARGET} \
--enable-shared --enable-threads=posix --enable-__cxa_atexit \
--enable-c99 --enable-long-long --enable-clocale=gnu \
--enable-languages=c,c++ --disable-libstdcxx-pch
The following will prevent GCC from looking in the wrong
directories for headers and libraries:
cp Makefile{,.orig}
sed "/^HOST_\(GMP\|PPL\|CLOOG\)\(LIBS\|INC\)/s:-[IL]/\(lib\|include\)::" \
Makefile.orig > Makefile
Compile the package:
make
Install the package:
make DESTDIR=${CLFS} install
Some packages expect the C preprocessor to be installed in the
/lib
directory. To support those
packages, create this symlink:
ln -sfv ../usr/bin/cpp ${CLFS}/lib
Many packages use the name cc to call the C compiler. To
satisfy those packages, create a symlink:
ln -sfv gcc ${CLFS}/usr/bin/cc