GCC-4.9.2
Introduction to GCC
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. Two additional languages , Ada and Java
are available in the collection. They have specific requirements,
so they are described in separate pages (GCC-Ada-4.9.2 and
GCC-Java-4.9.2). Since C and C++ are installed
in LFS, this page is either for upgrading C and C++, or for
installing additional compilers.
This package is known to build and work properly using an LFS-7.7
platform.
Caution
If you are upgrading GCC from
any other version prior to 4.9.2, 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.
Package Information
Additional Downloads
GCC Dependencies
Recommended
DejaGnu-1.5.2, for tests
User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/gcc
Installation of GCC
Important
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. Having the Tcl,
Expect and DejaGnu packages installed before beginning
the build is highly recommended so you can run the full suite of
tests.
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 http://gcc.gnu.org/ml/gcc-testresults/.
You may also want to refer to the information found in the
GCC section of Chapter 6 in the
LFS book (../../../../lfs-multilib/chapter06/gcc.html).
If you downloaded the optional D language compiler, add it to
GCC by running the following
commands:
tar -xf ../gdc-4.9-20150308.tar.xz &&
cd gdc-4.9-20150308 &&
./setup-gcc.sh .. &&
cd ..
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 anyways,
add --disable-bootstrap
to
the ./configure
options below.
Install GCC by running the
following commands:
sed -i -e 's@/libx32/ld-linux-x32.so.2@/tools/libx32/ld-linux-x32.so.2@g' gcc/config/i386/linux64.h
sed -i -e 's@/lib/ld-linux.so.2@/lib32/ld-linux.so.2@g' gcc/config/i386/linux64.h
sed -i -e '/MULTILIB_OSDIRNAMES/d' gcc/config/i386/t-linux64
echo "MULTILIB_OSDIRNAMES = m64=../lib m32=../lib32 mx32=../libx32" >> gcc/config/i386/t-linux64
mkdir ../gcc-build &&
cd ../gcc-build &&
../gcc-4.9.2/configure \
--prefix=/usr \
--libdir=/usr/lib \
--enable-shared \
--enable-threads=posix \
--enable-__cxa_atexit \
--with-multilib-list=m32,m64,mx32 \
--enable-clocale=gnu \
--with-system-zlib \
--enable-cloog-backend=isl \
--enable-languages=c,c++,fortran,go,objc,obj-c++,d &&
make
If you have installed additional packages such as Valgrind and GDB, the GCC
part of the testsuite will run more tests than in LFS. Some of
those will report FAIL and others XPASS (pass when expected to
FAIL). 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:
../gcc-4.9.2/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/4.9.2/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
Command Explanations
mkdir ../gcc-build; cd
../gcc-build: The GCC documentation recommends building the
package in a dedicated build directory.
--enable-shared --enable-threads=posix
--enable-__cxa_atexit
: These parameters are required to
build the C++ libraries to
published standards.
--enable-clocale=gnu
: This
parameter is a failsafe for incomplete locale data.
--with-multilib-list=m32,m64,mx32
:
This parameter adds support for multilib compilation in 32-bit,
64-bit, and x32 ABI formats.
--with-system-zlib
: Uses
the system zlib instead of the
bundled one. zlib is used for
compressing and uncompressing GCC's intermediate language in LTO (Link Time
Optimization) object files.
--enable-cloog-backend=isl
:
This parameter enables the CLooG-ISL backend for Graphite Loop
Optimizations.
--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. Omit d
if you did not add the D language
compiler.
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.
../gcc-4.9.2/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.
Contents
Some program and library names and descriptions are not listed
here, but can be found at ../../../../lfs-multilib/chapter06/gcc.html#contents-gcc
as they were initially installed during the building of LFS.
Installed Programs:
gccgo and gfortran, hard-linked to
architecture specific names
Installed Libraries:
libgfortran.{so,a}, libgo.{so,a},
libgobegin.a, libobjc.{so,a}, and numerous other run-time
libraries and executables in /usr/lib/gcc
, /usr/libexec/gcc
, and /usr/lib/go
Installed Directories:
/usr/lib/gcc/<arch-triplet>/4.9.2/include/objc
and /usr/lib/go
Short Descriptions
gccgo
|
is a GCC-based compiler for the Go language.
|
gfortran
|
is a GCC-based compiler for the Fortran language.
|
Last updated on 2015-02-23 16:51:12 -0500