Difference between revisions of "GCC"

From CBLFS
Jump to navigationJump to search
(I added the "Contents" section.)
Line 4: Line 4:
 
{| style="text-align: left; background-color: AliceBlue;"
 
{| style="text-align: left; background-color: AliceBlue;"
 
|-
 
|-
!Download Source:
+
!Downcload Source:
 
| http://ftp.gnu.org/gnu/gcc/gcc-{{GCC-Version}}/gcc-{{GCC-Version}}.tar.bz2
 
| http://ftp.gnu.org/gnu/gcc/gcc-{{GCC-Version}}/gcc-{{GCC-Version}}.tar.bz2
 
|-
 
|-
Line 17: Line 17:
 
== Introduction to GCC ==
 
== Introduction to GCC ==
  
The GCC package contains GNU compilers. This package is useful for compiling programs written in C, C++, Fortran, Java, Objective C and Ada. Also included is GNU Treelang. Treelang is a sample language, useful only to help people understand how to implement a new language front end to GCC. It is not a useful language in itself other than as an example or basis for building a new language. Therefore only language developers are likely to have an interest in it.
+
The GCC package contains GNU compilers. This package is useful for compiling programs written in C, C++, Fortran, Java, and Objective C. Also included is GNU Treelang. Treelang is a sample language, useful only to help people understand how to implement a new language front end to GCC. It is not a useful language in itself other than as an example or basis for building a new language. Therefore only language developers are likely to have an interest in it.
  
 
  '''Note:'''
 
  '''Note:'''
  The Fortran compiler included with the GCC-4.x package now aims to be conformant with the Fortran 95
+
  As of GCC 4, GCC aims to be compatible with the Fortran 95 standard
  standard, not the Fortran 77 standard as all previous versions of GCC have been. Please note the
+
  instead of the Fortran 77 standard which previous versions of GCC
  following paragraph copied directly from the GCC-4.0.3 gfortran man page.<br>
+
  aimed for. Here's what GCC's man page has to say on the matter:<br>
  “Gfortran is not yet a fully conformant Fortran 95 compiler. It can generate code for most constructs
+
  “Gfortran is not yet a fully conformant Fortran 95 compiler. It can
and expressions, but work remains to be done. In particular, there are known deficiencies with ENTRY,
+
generate code for most constructs and expressions, but work remains to
  NAMELIST, and sophisticated use of MODULES, POINTERS and DERIVED TYPES. For those whose Fortran codes
+
be done. In particular, there are known deficiencies with ENTRY,
conform to either the Fortran 77 standard or the GNU Fortran 77 language, we recommend to use g77
+
  NAMELIST, and sophisticated use of MODULES, POINTERS and DERIVED TYPES.
from GCC 3.4.x”<br>
+
For those whose Fortran codes conform to either the Fortran 77 standard
  (Non-Multilib) Instructions to install the 3.4.6 version of the Fortran compiler can be found on
+
or the GNU Fortran 77 language, we recommend to use g77 from GCC 3.4.x”<br>
the [http://wiki.linuxfromscratch.org/blfs/wiki/gcc3 BLFS Wiki].
+
  (Non-Multilib) Instructions to install the 3.4.6 version of the Fortran
 +
compiler can be found on the [http://wiki.linuxfromscratch.org/blfs/wiki/gcc3 BLFS Wiki].
  
 
== Dependencies ==
 
== Dependencies ==
Line 154: Line 155:
  
 
  ln -sfv `find /usr/lib64/gcc -name ffitarget.h` /usr/include
 
  ln -sfv `find /usr/lib64/gcc -name ffitarget.h` /usr/include
 +
 +
= Contents =
 +
 +
{| style="text-align: left;"
 +
|-valign="top"
 +
! Installed Programs:
 +
| addr2name.awk, fastjar, gcj, gcj-dbtool,gcjh, gfortran, gij, gjnih, grepjar, grmic, grmiregistry, gtreelang, jcf-dump, jv-convert, jv-scan and architecture specific names for gcj and gcjh
 +
|-valign="top"
 +
! Installed Libraries:
 +
| libffi.{so,a}, libgcj.{so,a}, libgfortran.{so,a}, libgfortranbegin.a, libgij.{so,a}, libobjc.{so,a} and numerous other run-time libraries and executables in /usr/lib/gcc
 +
|-valign="top"
 +
! Installed Directories:
 +
| /usr/include/c++/4.0.3/{gcj,gnu,java,javax,org}, /usr/lib/gcj-4.0.3, /usr/lib/security and /usr/share/java
 +
|}
 +
 +
=== Short Descriptions ===
 +
 +
{| style="text-align: left;"
 +
|-valign="top"
 +
! addr2name.awk
 +
| emulates some of the functionality of addr2line for those systems that don't have it.
 +
|-valign="top"
 +
! fastjar
 +
| an attempt at creating a feature-for-feature copy of Sun's JDK's '''jar''' command . It's 50-100 times faster than '''jar'''.
 +
|-valign="top"
 +
! gcj
 +
| is a portable, optimizing, ahead-of-time compiler for the Java Programming Language. It can compile Java source code to Java bytecode (class files) or directly to native machine code, and Java bytecode to native machine code.
 +
|-valign="top"
 +
! gcj-dbtool
 +
| is a tool for creating and manipulating class file mapping databases.
 +
|-valign="top"
 +
! gcjh
 +
| generates header files from Java class files.
 +
|-valign="top"
 +
! gfortran
 +
| is a Fortran 95 front end to GCC.
 +
|-valign="top"
 +
! gij
 +
| is the GNU interpreter for Java bytecode.
 +
|-valign="top"
 +
! gjnij
 +
| is used to generate JNI header files from class files. Running it is equivalent to running gcjh -jni.
 +
|-valign="top"
 +
! grepjar
 +
| searches jar files for a pattern.
 +
|-valign="top"
 +
! grmic
 +
| is a utility included with libgcj which generates stubs for remote objects.
 +
|-valign="top"
 +
! grmiregistry
 +
| starts a remote object registry on the current host.
 +
|-valign="top"
 +
! gtreelang
 +
| is Treelang front end for GCC. Treelang is a sample language, useful only to help people understand how to implement a new language front end to GCC. It is not a useful language in itself other than as an example or basis for building a new language. Therefore only language developers are likely to have an interest in it.
 +
|-valign="top"
 +
! jcf-dump
 +
| is a class file examiner, similar to '''javap.''' It will print information about a number of classes, which are specified by class name or file name.
 +
|-valign="top"
 +
! jv-convert
 +
| is a utility included with "libgcj" which converts a file from one encoding to another.  It is similar to the Unix iconv utility.
 +
|-valign="top"
 +
! jv-scan
 +
| can be used to print information about a Java source file.
 +
|}

Revision as of 00:30, 18 December 2006

BIG FAT WARNING!


You are about to over-write your currently installed GCC. If you have ANY doubts that this may fail. Do not continue. Also, Do not continue with make install unless you are 100% confident that your build was successful!

Downcload Source: http://ftp.gnu.org/gnu/gcc/gcc-4.2.2/gcc-4.2.2.tar.bz2
Download Patch: http://svn.cross-lfs.org/svn/repos/cross-lfs/trunk/patches/gcc-4.2.2-PR20425-1.patch

An Ada compiler is not built on this page.

Introduction to GCC

The GCC package contains GNU compilers. This package is useful for compiling programs written in C, C++, Fortran, Java, and Objective C. Also included is GNU Treelang. Treelang is a sample language, useful only to help people understand how to implement a new language front end to GCC. It is not a useful language in itself other than as an example or basis for building a new language. Therefore only language developers are likely to have an interest in it.

Note:
As of GCC 4, GCC aims to be compatible with the Fortran 95 standard
instead of the Fortran 77 standard which previous versions of GCC
aimed for. Here's what GCC's man page has to say on the matter:
“Gfortran is not yet a fully conformant Fortran 95 compiler. It can generate code for most constructs and expressions, but work remains to be done. In particular, there are known deficiencies with ENTRY, NAMELIST, and sophisticated use of MODULES, POINTERS and DERIVED TYPES. For those whose Fortran codes conform to either the Fortran 77 standard or the GNU Fortran 77 language, we recommend to use g77 from GCC 3.4.x”
(Non-Multilib) Instructions to install the 3.4.6 version of the Fortran compiler can be found on the BLFS Wiki.

Dependencies

Recommended

Optional (Required to Build the Fortran Compiler)

Optional (Java's Classpath Library Can Use)

Non-Multilib

The following patch fixes the searching of multilib dirs for specs file. The patch standardizes the gcc drivers path iteration functions, ensuring multilib directories are searched in the correct order. This fixes various issues, most noticably with libtool on multilib systems:

 patch -Np1 -i ../gcc-4.2.2-PR20425-1.patch

On a Pure64 system, apply the following patch:

 patch -Np1 -i ../gcc-4.2.2-pure64-1.patch

Apply a sed substitution that will suppress the installation of libiberty.a. The version of libiberty.a that was provided by Binutils during the initial CLFS build will be retained:

 sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in

The GCC documentation recommends building GCC outside of the source directory in a dedicated build directory:

 mkdir -v ../gcc-build &&
 cd ../gcc-build

Configure gcc, adding the additional language support you require to the --enable-languages= switch. Note: This configuration does not include all supported languages.

 ../gcc-4.2.2/configure --prefix=/usr --libdir=/usr/lib \
   --libexecdir=/usr/lib --enable-shared --enable-threads=posix \
   --enable-__cxa_atexit --enable-c99 --enable-long-long \
   --enable-clocale=gnu --disable-libstdcxx-pch --disable-multilib \
   --enable-languages=c,c++,objc,f95,java

Compile gcc:

 make bootstrap

The gcc test suite is vitally, critically important. Do not skip it under any circumstances. The GCC test suite is very comprehensive and is almost guaranteed to generate a few failures. Test the results, but don't stop at errors:

 make -k check

To see the results of the the test suite, issue the following command:

 ../gcc-4.2.2/contrib/test_summary
  • For only the summaries, pipe the output through grep -A7 Summ.

At this time only proceed if you are 100% positive that you have built a sane compiler.

As the root user, install the collection of compilers:

 make install &&
 ln -sfv ../usr/bin/cpp /lib &&
 ln -sfv gcc /usr/bin/cc &&
 chown -Rv root:root /usr/lib/gcc/$(gcc -dumpmachine)/4.2.2/include &&

If you included Java as one of the languages, create the following symlink:

 ln -sfv `find /usr/lib/gcc -name ffitarget.h` /usr/include

Multilib

The following patch fixes the searching of multilib dirs for specs file. The patch standardizes the gcc drivers path iteration functions, ensuring multilib directories are searched in the correct order. This fixes various issues, most noticably with libtool on multilib systems:

patch -Np1 -i ../gcc-4.2.2-PR20425-1.patch

Suppress the installation of libiberty.a. The version of libiberty.a provided by Binutils will be used instead:

sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in

Create the Build Directory:

mkdir -v ../gcc-build &&
cd ../gcc-build

Configure GCC:

export PKG_CONFIG_PATH="${PKG_CONFIG_PATH64}" &&
../gcc-4.2.2/configure --prefix=/usr --libdir=/usr/lib64 \
    --libexecdir=/usr/lib64 --enable-shraed --enable-threads=posix \
    --enable-__cxa_atexit --enable-c99 --enable-long-long \
    --enable-clocale=gnu --disable-libstdcxx-pch --enable-multilib \
    --enable-languages=c,c++,objc,f95,java,treelang

Compile GCC:

make bootstrap &&
unset PKG_CONFIG_PATH

Test the results, but do not stop at errors:

make -k check

The -k flag is used to make the test suite run through to completion and not stop at the first failure. The GCC test suite is very comprehensive and is almost guaranteed to generate a few failures. To receive a summary of the test suite results, run:

../gcc-4.2.2/contrib/test_summary
  • For only the summaries, pipe the output through grep -A7 Summ.

At this time only proceed if you are 100% positive that you have built a sane compiler.

Install GCC:

make install &&
ln -sfv ../usr/bin/cpp /lib &&
ln -sfv gcc /usr/bin/cc &&
chown -Rv root:root /usr/lib64/gcc/$(gcc -dumpmachine)/4.2.2/include &&
chown -Rv root:root /usr/lib64/gcc/$(gcc -dumpmachine)/4.2.2/ada{lib,include}

The libffi interface header is installed in a location where other packages will not be able to find it. If you included Java as one of the installed languages, create a symbolic link in /usr/include to remedy this:

ln -sfv `find /usr/lib64/gcc -name ffitarget.h` /usr/include

Contents

Installed Programs: addr2name.awk, fastjar, gcj, gcj-dbtool,gcjh, gfortran, gij, gjnih, grepjar, grmic, grmiregistry, gtreelang, jcf-dump, jv-convert, jv-scan and architecture specific names for gcj and gcjh
Installed Libraries: libffi.{so,a}, libgcj.{so,a}, libgfortran.{so,a}, libgfortranbegin.a, libgij.{so,a}, libobjc.{so,a} and numerous other run-time libraries and executables in /usr/lib/gcc
Installed Directories: /usr/include/c++/4.0.3/{gcj,gnu,java,javax,org}, /usr/lib/gcj-4.0.3, /usr/lib/security and /usr/share/java

Short Descriptions

addr2name.awk emulates some of the functionality of addr2line for those systems that don't have it.
fastjar an attempt at creating a feature-for-feature copy of Sun's JDK's jar command . It's 50-100 times faster than jar.
gcj is a portable, optimizing, ahead-of-time compiler for the Java Programming Language. It can compile Java source code to Java bytecode (class files) or directly to native machine code, and Java bytecode to native machine code.
gcj-dbtool is a tool for creating and manipulating class file mapping databases.
gcjh generates header files from Java class files.
gfortran is a Fortran 95 front end to GCC.
gij is the GNU interpreter for Java bytecode.
gjnij is used to generate JNI header files from class files. Running it is equivalent to running gcjh -jni.
grepjar searches jar files for a pattern.
grmic is a utility included with libgcj which generates stubs for remote objects.
grmiregistry starts a remote object registry on the current host.
gtreelang is Treelang front end for GCC. Treelang is a sample language, useful only to help people understand how to implement a new language front end to GCC. It is not a useful language in itself other than as an example or basis for building a new language. Therefore only language developers are likely to have an interest in it.
jcf-dump is a class file examiner, similar to javap. It will print information about a number of classes, which are specified by class name or file name.
jv-convert is a utility included with "libgcj" which converts a file from one encoding to another. It is similar to the Unix iconv utility.
jv-scan can be used to print information about a Java source file.