6.10. Cross GCC-4.6.0 - Static

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

6.10.1. Installation of Cross GCC Compiler with Static libgcc and no Threads

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:

AR=ar LDFLAGS="-Wl,-rpath,${CLFS}/cross-tools/lib" \
  ../gcc-4.6.0/configure --prefix=${CLFS}/cross-tools \
  --build=${CLFS_HOST} --host=${CLFS_HOST} --target=${CLFS_TARGET} \
  --with-sysroot=${CLFS} --disable-nls  --disable-shared \
  --with-mpfr=${CLFS}/cross-tools --with-gmp=${CLFS}/cross-tools \
  --with-mpc=${CLFS}/cross-tools --without-headers --with-newlib \
  --disable-decimal-float --disable-libgomp --disable-libmudflap \
  --disable-libssp --disable-threads --enable-languages=c \
  --disable-multilib --with-abi=${CLFS_ABI} --with-arch=mips${CLFS_MIPS_LEVEL} \
  --with-float=${CLFS_FLOAT} --with-endian=${CLFS_ENDIAN}

The meaning of the configure options:

--prefix=${CLFS}/cross-tools

This tells the configure script to prepare to install the package in the ${CLFS}/cross-tools directory.

--build=${CLFS_HOST}

This tells the configure script the triplet to use to build GCC. It will use ${CLFS_HOST} as that's where it's being built.

--host=${CLFS_HOST}

This tells the configure script the triplet of the machine GCC will be executed on when actually cross compiling. It will use ${CLFS_HOST} as that's where GCC will execute when cross compiling software later.

--target=${CLFS_TARGET}

This tells the configure script the triplet of the machine GCC will build executables for. It will use ${CLFS_TARGET} so that software compiled with this version of GCC can be executed on the embedded machine target.

--with-sysroot=${CLFS}

This tells configure that ${CLFS} is going to be the root of our system. It will now use the specified sysroot, ${CLFS}, as a prefix of the default search paths.

--disable-nls

This disables internationalization as i18n is not needed for the cross-compile tools.

--disable-shared

Disables the creation of the shared libraries.

--with-mpfr=${CLFS}/cross-tools

Tells configure where to find the lib and include directories that contain MPFR which was built earlier.

--with-gmp=${CLFS}/cross-tools

Tells configure where to find the lib and include directories that contain GMP which was built earlier.

--with-mpc=${CLFS}/cross-tools

Tells configure where to find the lib and include directories that contain MPC which was built earlier.

--without-headers

Tells configure to not use any headers from any C libraries. This is needed as we haven't yet built the C library and to prevent influence from the host environment.

--with-newlib

Tells configure to build libgcc without needing any C libraries.

--disable-decimal-float

Tells configure to disable IEEE 754-2008 decimal floating point support. Decimal floating point support isn't needed yet.

--disable-libgomp

Tells configure to not build the GOMP run-time libraries. GOMP is the GNU implementation of OpenMP, a API for shared-memory parallel programming.

--disable-libmudflap

Tells configure to not build libmudflap. Mudflap is a library that can be used to help check for proper pointer usage.

--disable-libssp

Tells configure not to build run-time libraries for stack smashing detection.

--disable-threads

This will prevent GCC from looking for the multi-thread include files, since they haven't been created for this architecture yet. GCC will be able to find the multi-thread information after the glib headers are created.

--enable-languages=c

This option ensures that only the C compiler is built.

--disable-multilib

This option specifies that multiple target libraries should not be built.

--with-abi=${CLFS_ABI}

This option sets the ABI selected earlier.

--with-arch=mips${CLFS_MIPS_LEVEL}

This option sets the MIPS architecture ISA. Generic options that apply to this book are of the form "mips${CLFS_MIPS_LEVEL}". For example, "mips1" or "mips3". For a more expanded list of choices, please see the GCC documentation at http://gcc.gnu.org/onlinedocs/gcc/MIPS-Options.html

--with-float=${CLFS_FLOAT}

This option sets the floating point mode selected earlier.

--with-endian=${CLFS_ENDIAN}

This option sets the endianess of the CPU selected earlier. GCC's configure scripts may not be able to determine the endianess based only on the target triplet (as other architectures do).

Continue with compiling the package:

make all-gcc all-target-libgcc

Install the package:

make install-gcc install-target-libgcc

6.10.2. Contents of GCC

Installed programs: cc (link to gcc), gcc, gccbug, and gcov
Installed libraries: libgcc.a, libgcc_eh.a, libgcc_s.so, libmudflap.[a,so], and libmudflapth.[a,so]

Short Descriptions

cc

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

libmudflap

The libmudflap libraries are used by GCC for instrumenting pointer and array dereferencing operations.