Command explanations
patch -Np1 -i ../gcc-&gcc-patch-version;.patch:
This new patch deals with incorrect handling of weak symbols, the
over-optimization of calls to those weak symbols, an atexit issue and
the __dso_handle symbol required for atexit's proper function.
make BOOT_LDFLAGS=-static:
This is the equivalent to make LDFLAGS=-static as we use with other
packages to compile them statically.
--prefix=/usr: This is NOT a typo. GCC hard
codes some paths while compiling and so we need to pass /usr as the
prefix during ./configure. We pass the real install prefix during the
make install command later.
--enable-languages=c,c++: This only builds the C
and C++ compilers and not the other available compilers as they are, on
the average, not often used. If those other compilers are needed,
the --enable-languages parameter can be omitted.
--enable-threads=posix: This enables C++
exception handling for multithreaded code.
ln -sf ../usr/bin/cpp: This
creates the $LFS/lib/cpp symlink. Some packages explicitly try to find
cpp in /lib.
ln -sf ../bin/cpp: This
creates the $LFS/usr/lib/cpp symlink as there are packages that expect
cpp to be in /usr/lib.
rmdir $LFS/usr/*-gnu/include and
rmdir $LFS/usr/*-gnu: These directories are created
as empty directories by GCC and serve absolutely no purpose whatsoever.
It's related to cross-compilers but that doesn't apply to us and it's
considered a bug in GCC that you can't turn that off, especially since they
end up being empty directories. So we remove them manually.