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.
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