%general-entities; ]> Cross GCC-&gcc-version; - Static GCC cross tools, static <para>The GCC package contains the GNU compiler collection, which includes the C and C++ compilers.</para> </sect2> <sect2 role="installation"> <title>Installation of Cross GCC Compiler with Static libgcc and no Threads 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-&gcc-version;/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 \ --with-abi=${CLFS_ABI} 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. --with-abi=${CLFS_ABI} This option sets the ABI selected earlier. Continue with compiling the package: make all-gcc all-target-libgcc Install the package: make install-gcc install-target-libgcc <para>Details on this package are located in <xref linkend="contents-gcc" role="."/></para> </sect2> </sect1>