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

[Important]

Important

If you set ${CLFS_FLOAT} to "soft" or "softfp", you must apply the gcc-4.6.0-uclibc-arm-softfloat-2.patch. Check what ${CLFS_FLOAT} is set to and if needed, apply the patch:

echo ${CLFS_FLOAT}
patch -Np1 -i ../gcc-4.6.0-uclibc-arm-softfloat-2.patch

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=${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 type selected earlier. If soft floating point was selected, this value is ignored.

Continue with compiling the package:

make all-gcc all-target-libgcc

Install the package:

make install-gcc install-target-libgcc

Details on this package are located in Section 6.12.2, “Contents of GCC.”