Details on this package are located in Section 10.9.2, “Contents of GCC.”
The GCC package contains the GNU compiler collection, which includes the C and C++ compilers.
The following patch fixes the searching of multilib dirs for specs file:
patch -Np1 -i ../gcc-4.1.1-PR20425-1.patch
The following patches fixes an TLS build issue. For More details go to http://gcc.gnu.org/ml/gcc-patches/2006-02/msg00177.html:
patch -Np1 -i ../gcc-4.1.1-sparc_tls-1.patch
Make a couple of essential adjustments to the specs file to ensure GCC uses our build environment:
patch -Np1 -i ../gcc-4.1.1-pure64_specs-1.patch
To make sure that a couple of tools use the proper syntax, apply the following patch:
patch -Np1 -i ../gcc-4.1.1-posix-1.patch
The following patch ensures that gcc does not search the /usr directory for libgcc_s.so when cross-compiling:
patch -Np1 -i ../gcc-4.1.1-cross_search_paths-1.patch
Change the StartFile Spec to point to the correct library location:
echo " #undef STARTFILE_PREFIX_SPEC #define STARTFILE_PREFIX_SPEC \"/tools/lib/\"" >> gcc/config/sparc/linux.h echo " #undef STARTFILE_PREFIX_SPEC #define STARTFILE_PREFIX_SPEC \"/tools/lib/\"" >> gcc/config/sparc/linux64.h
Now alter gcc's c preprocessor's default include search path to use /tools only:
cp -v gcc/Makefile.in{,.orig} sed -e "s@\(^CROSS_SYSTEM_HEADER_DIR =\).*@\1 /tools/include@g" \ gcc/Makefile.in.orig > gcc/Makefile.in
The above patches and sed's are critical in ensuring a successful overall build. Do not forget to apply them.
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:
../gcc-4.1.1/configure --prefix=/cross-tools \ --target=${LFS_TARGET} --host=${LFS_HOST} --disable-multilib \ --with-local-prefix=/tools --disable-nls --enable-shared \ --enable-languages=c,c++ --enable-__cxa_atexit \ --enable-c99 --enable-long-long --enable-threads=posix
The meaning of the new configure options:
This option ensures that only the C and C++ compilers are built.
This option allows use of __cxa_atexit, rather than atexit, to register C++ destructors for local statics and global objects and is essential for fully standards-compliant handling of destructors. It also affects the C++ ABI and therefore results in C++ shared libraries and C++ programs that are interoperable with other Linux distributions.
Enable C99 support for C programs.
Enables long long support in the compiler.
This enables C++ exception handling for multi-threaded code.
Continue with compiling the package:
make AS_FOR_TARGET="${LFS_TARGET}-as" \ LD_FOR_TARGET="${LFS_TARGET}-ld"
Install the package:
make install
Details on this package are located in Section 10.9.2, “Contents of GCC.”