This page describes the basic toolchain, for C, C++, ObjC, ObjC++ and Fortran development. It does not cover development tools for other languages like Java, Python, Perl, etc.

Toolchain Components

GCC

GCC is packaged by major/minor version. The source packages are called gcc-4.8, gcc-4.9, etc. Some language frontends are built from a separate "source" package to reduce the build and test time of these packages (gnat-4.9).

The default (recommended) GCC version is packaged as the gcc-defaults package, building binary packages gcc, g++, gfortran, etc.

A development snapshot of GCC is available in the gcc-snapshot package.

Starting with the Ubuntu 11.10 (maverick) release, the GCC packages are based on the Linaro-GCC branch. The branch is used to build the packages on all architectures.

Starting with the Ubuntu 14.04 LTS (trusty) release, the GCC packages are based on the Linaro branch for the armhf and arm64 architectures.

Ubuntu sets some compiler flags differently compared to the GCC upstream releases. These changed flags are described in ToolChain/CompilerFlags.

Binutils

binutils is built from upstream sources. The package is either built from an upstream release, or from the upstream development trunk.

Glibc

Glibc is built from the GNU C Library (glibc) project. The source package in Ubuntu is called glibc.

kernel headers for user space packages

Kernel headers for user space packages (linux-libc-dev) are built from the linux source package.

Multiarch and multilib configurations

GCC is configured to build more than one variant for its runtime libraries on various architectures. Each multilib variant is mapped to a multiarch configuration.

Starting with Ubuntu 11.10, the multiarch name can be queried using gcc --print-multiarch (integrated upstream in GCC 4.7).

Compiler search paths

Some configuration systems assume fixed paths for libraries and include files, which may not work with the new multiarch locations. Instead of directly searching a set of known directories, it's better to let the compiler search for these.

Toolchain Sources

The toolchain packages are built from upstream releases and include support to build from vendor branches as found in the upstream repositories.

Toolchain Updates

The binutils and GCC packages are rarely updated in stable release updates. Newer versions of the toolchain packages can be found in PPAs instead.

Distribution Packages

Planning and decisions for updating binutils and GCC are usually made six months before a new release cycle starts. Initial uploads are done as part of the NewReleaseCycleProcess. GCC and binutils are updated during the release cycle.

A new glibc version is usually packaged after the upstream release, which currently happens to be about two months after the start of an Ubuntu release cycle.

New patches to any of these packages should go upstream first, either to the FSF, or to a vendor branch.

PPA packages

Updated toolchain packages can be found in two PPAs.

Issue Tracking

The following tags are used for toolchain related bug reports:

Cross development toolchain

Cross toolchain packages are built from the very same sources as native versions, and the same patches like the native toolchain packages.

Cross toolchain packages are available on i386 and amd64 starting with the Ubuntu 10.10 release (maverick), targeting armel (-mfloat-abi=softfp). Starting with Ubuntu 11.10 (oneiric) armhf (-mfloat-abi=hard) is also provided.

Starting with Ubuntu 13.04, cross toolchain packages are provided on amd64 and i386 targeting armel, armhf, arm64 and powerpc.

Starting with Ubuntu 14.04, cross toolchain packages are provided on amd64 and i386 targeting armel, armhf, arm64, ppc64el and powerpc; on ppc64el a cross toolchain is provided for powerpc, on arm64 a cross toolchain is provided for armhf.

GCC

GCC is packaged by major/minor version. The source packages are called gcc-4.9-armel-cross, gcc-4.9-armel-cross, etc.

The default (recommended) GCC version is packaged as the gcc-defaults-armel-cross package, building binary packages gcc-arm-linux-gnueabi, g++-arm-linux-gnueabi, gfortran-arm-linux-gnueabi, etc.

Binutils

binutils-arm-linux-gnueabi is built from upstream sources. The package is either built from an upstream release, or from the upstream development trunk.

kernel headers for user space packages

Kernel headers for user space packages (linux-libc-dev-armel-cross) are built from the linux source package.

ToolChain (last edited 2020-10-01 09:29:05 by rbalint)