14.5. GCC-4.6.4 - Cross Compiler Final

In this section we build the c++ cross compiler and libstdc++ library that will be needed by a number of packages that are beyond the ELFS build.

14.5.1. Installation of GCC Cross Compiler

[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} --target=${CLFS_TARGET} --host=${CLFS_HOST} \
  --with-sysroot=${CLFS} --disable-nls --enable-shared \
  --enable-languages=c,c++ --enable-c99 --enable-long-long \
  --disable-libmudflap \
  --with-mpfr=${CLFS}/cross-tools --with-gmp=${CLFS}/cross-tools \
  --with-mpc=${CLFS}/cross-tools --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.

Continue with compiling the package:

make 

Install the package:

make install