Welcome to GCC Resource Center at IIT Bombay

About GCC

GCC is an acronym for GNU Compiler Collection. It is the de-facto standard compiler generation framework for all distros on GNU/Linux and many other variants of Unix on a wide variety of machines and is one of the most dominant softwares in the free software community. It supports several input languages for a variety of operating systems on more than 30 target processors. More back ends can be added by describing new target processors using the specification mechanism provided by GCC.

Novices may want to see the Wikipedia introduction to GCC. For experts, the GCC page contains a wealth of information including installation instructions, reference manuals (which include users' guides as well as details of GCC internals), a set of frequently asked questions, a wiki page for the developers of GCC, additional reading material, and several mailing lists for more detailed issues and queries.

About GCC Resource Center

This Center has been established at IIT Bombay with the twin goals of (a) spreading the know-how of GCC by building suitable abstractions of GCC internals, and (b) improving GCC by introducing new technologies. It was initiated with a seed grant from IIT Bombay and an IBM Faculty Award for Prof. Uday Khedker. Currently, this center is supported by a generous grant from Department of Information Technology (DIT), Ministry of Communication and Information Technology (MCIT), Govt. of India, under the second phase of the National Resource Centre for Free/Open Source Software (NRCFOSS II).

Interesting Aspects of GCC

Historically, GCC has been one of the first projects of the Free Software Foundation (FSF) to provide a free compiler for its GNU Operating System. It started as C compiler, and was the acronym for "GNU C Compiler" in the early days. Over the years, it has been continuously upgraded to support a number of backend machines. Similarly, on the front end side, it has grown to support a number of front end languages like C++, Objective C, Java, and Fortran to name a few. As a consequence, it has been renamed as "GNU Compiler Collection". The current release can be downloaded from the official GCC website. Although it follows an open development model whereby its source is available for all for inspection and modification, the GCC Steering Committee now guides the development of GCC.

Technically, GCC is a compiler generation framework which generates production quality optimizing compilers from descriptions of target platforms. It supports a wide variety of source languages and target machines (including operating system specific variants) in a ready-to-deploy form. Besides, new machines can be added by describing instruction set architectures and some other information (eg. calling conventions).

Finally, as a free software with significant size and complexity, GCC is a challenge. For example, as of 2008, GCC supports six front end languages, and over 30 backend machines. This results in quite a huge code base, and GCC has become one of the most complex and free/open source software projects. A recent version (4.3.1), contains 2,029,115 lines in the main source and 1,546,826 lines in libraries. It contains 57,825 files which are configured through 52 configuration scripts which in turn use 163 Makefiles or Makefile templates. The number of machine description files is 186. Understanding such a software requires significant documentation of the internals at a sufficiently high level apart from a detailed documentation.

On the one hand, the availability of the source code has encouraged numerous people to contribute to GCC and to produce stable and reliable compilers for a wide variety of machines. On the other hand GCC has become a "hacker's paradise" as a consequence of multifarious influences. We have been working on GCC internals for some time. We share our insights and make our expertise available via this site.