6.10. Cross GCC-4.6.4 - 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

[Important]

Important

To build a *-*-musl* target apply the following patch:


patch -p1 < ../gcc-4.6.4-musl-1.diff

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.4/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,c++ \
  --disable-multilib --with-abi=${CLFS_ABI} --with-arch=${CLFS_ARM_ARCH} \
  --with-mode=${CLFS_ARM_MODE} --with-float=${CLFS_FLOAT} --with-fpu=${CLFS_FPU}  

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=${CLFS_ARM_ARCH}

This option sets the ARM architecture selected earlier.

--with-mode=${CLFS_ARM_MODE}

This option sets the ARM mode (arm or thumb) selected earlier.

--with-float=${CLFS_FLOAT}

This option sets the floating point mode selected earlier.

--with-fpu=${CLFS_FPU}

This option sets the hardware floating point (emulation) type selected earlier.

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.