6.10.1. Installation of Cross GCC Compiler with Static libgcc and
no Threads
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