Contents
Some program and library names and descriptions are not listed here, but can be found at LFS section for GCC as they were initially installed during the building of LFS.
The GCC package contains the GNU Compiler Collection. This page describes the installation of compilers for the following languages: C, C++, Fortran, Objective C, Objective C++, and Go. Since C and C++ are installed in LFS, this page is either for upgrading C and C++, or for installing additional compilers.
Additional languages, among which D and ADA, are available in the
collection. D and ADA have a binary bootstrap requirement for the first
installation, so their installation is not described here. To install
them, you can proceed along the same lines as below after installing
the corresponding compiler from a binary package, adding
ada
or d
to the
--enable-languages
line.
This package is known to build and work properly using an LFS 11.3 platform.
If you are upgrading GCC from any other version prior to 12.2.0, then you must be careful compiling 3rd party kernel modules. You should ensure that the kernel and all its native modules are also compiled using the same version of GCC that you use to build the 3rd party module. This issue does not affect native kernel (and kernel modules) updates, as the instructions below are a complete reinstallation of GCC. If you have existing 3rd party modules installed, ensure they are recompiled using the updated version of GCC. As always, never update the kernel headers from the ones used when Glibc was compiled during LFS.
Some system headers need to be fixed to be used with GCC. This is done
during the installation of GCC, and the “fixed” headers
are installed in
/usr/lib/gcc/<machine triplet>/<GCC version>/include-fixed
. This is harmless if GCC is built during the LFS stage. But
if you reinstall GCC in BLFS, some of the BLFS packages may be
“fixed”. If one of those packages is reinstalled
afterwards, the “fixed” headers are not updated, which may
lead to version mismatches. In case that happens, the
“fixed” headers must be updated by running (as
root
):
/usr/libexec/gcc/x86_64-pc-linux-gnu/12.2.0/install-tools/mkheaders
. The machine triplet may be different on a 32-bit system.
Download (HTTP): https://ftp.gnu.org/gnu/gcc/gcc-12.2.0/gcc-12.2.0.tar.xz
Download (FTP): ftp://ftp.gnu.org/gnu/gcc/gcc-12.2.0/gcc-12.2.0.tar.xz
Download MD5 sum: 73bafd0af874439dcdb9fc063b6fb069
Download size: 81 MB
Estimated disk space required: 10.5 GB (2.4 GB installed with all listed languages; add 1.3 GB for tests)
Estimated build time: 32 SBU (add 66 SBU for tests; both with parallelism=4)
GDB-13.1, Valgrind-3.20.0 (for tests), and ISL (to enable graphite optimization)
User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/gcc
Even if you specify only languages other than C and C++ to the ./configure command below, the installation process will overwrite your existing GCC C and C++ compilers and libraries. Running the full suite of tests is recommended.
Do not continue with the make install command until you are confident the build was successful. You can compare your test results with those found at https://gcc.gnu.org/ml/gcc-testresults/. You may also want to refer to the information found in the GCC section of Chapter 8 in the LFS book (../../../../lfs/view/development/chapter08/gcc.html).
The instructions below are intentionally performing a
“bootstrap” process. Bootstrapping is needed for robustness
and is highly recommended when upgrading the compilers version. To disable
bootstrap anyway, add --disable-bootstrap
to the
./configure options below.
Install GCC by running the following commands:
case $(uname -m) in x86_64) sed -i.orig '/m64=/s/lib64/lib/' gcc/config/i386/t-linux64 ;; esac mkdir build && cd build && ../configure \ --prefix=/usr \ --disable-multilib \ --with-system-zlib \ --enable-default-pie \ --enable-default-ssp \ --enable-languages=c,c++,fortran,go,objc,obj-c++ && make
If you have installed additional packages such as Valgrind and GDB, the GCC part of the test suite will run more tests than in LFS. Some of those will report FAIL and others XPASS (pass when expected to FAIL). As of gcc-12.2.0, about 60 FAIL occur in the “guality” suite, as well as miscellaneous failures throughout the rest of the test suite, fifteen of which are already present in the GCC tests of LFS. If all the compilers above are built, there will be around 80 unexpected failures out of over 482,000 tests. To run the tests, issue:
ulimit -s 32768 && make -k check
The tests are very long, and the results may be hard to find in the logs, specially if you use parallel jobs with make. You can get a summary of the tests with:
../contrib/test_summary
Now, as the root
user:
make install && mkdir -pv /usr/share/gdb/auto-load/usr/lib && mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib && chown -v -R root:root \ /usr/lib/gcc/*linux-gnu/12.2.0/include{,-fixed}
Some packages expect to find the C preprocessor in
/lib
or may refer to the C compiler
under the name cc. The following symbolic links are not
needed if you have followed the LFS instructions, since they
have been already created. If you do not have them on your system, issue
as the root
user:
ln -v -sf ../usr/bin/cpp /lib && ln -v -sf gcc /usr/bin/cc && install -v -dm755 /usr/lib/bfd-plugins && ln -sfv ../../libexec/gcc/$(gcc -dumpmachine)/12.2.0/liblto_plugin.so /usr/lib/bfd-plugins/
mkdir build; cd build: The GCC documentation recommends building the package in a dedicated build directory.
--disable-multilib
: This parameter ensures
that files are created for the specific architecture of your computer.
--with-system-zlib
: Uses the system
zlib instead of the bundled one.
zlib is used for compressing
and decompressing GCC's intermediate
language in LTO (Link Time Optimization) object files.
--enable-default-pie
: Makes the
-fpie
option the default when compiling programs.
Together with the
ASLR
feature enabled in the kernel,
this defeats some kind of attacks based on known memory layouts.
--enable-default-ssp
: Makes the
-fstack-protector-strong
option the default when
compiling programs.
SSP
is a technique preventing
alteration of the program flow by corrupting the parameter stack.
--enable-languages=c,c++,fortran,go,objc,obj-c++
:
This command identifies which languages to build. You may modify
this command to remove undesired languages. Other languages can be
added, including ADA, D, BRIG (add
brig
to the list of enabled languages), a binary
format for HSAIL (Heterogeneous System Architecture Intermediate
Language), and JIT (add jit
to the list of enabled
languages), a library which can be linked into interpreters that want to
generate machine code “on the fly” at run-time. They have not
been tested by the BLFS developers.
ulimit -s 32768: This command prevents several tests from running out of stack space.
make -k check: This command runs the test suite without stopping if any errors are encountered.
../contrib/test_summary: This command will produce a summary of the test suite results. You can append | grep -A7 Summ to the command to produce an even more condensed version of the summary. You may also wish to redirect the output to a file for review and comparison later on.
mv -v /usr/lib/*gdb.py ...: The installation
stage puts some files used by gdb under the
/usr/lib
directory. This generates
spurious error messages when performing ldconfig. This
command moves the files to another location.
chown -v -R root:root /usr/lib/gcc/*linux-gnu/...:
If the package is built by a user other than root, the ownership of the
installed include
directory (and
its content) will be incorrect. This command changes the ownership to the
root
user and group.
Some program and library names and descriptions are not listed here, but can be found at LFS section for GCC as they were initially installed during the building of LFS.