Using newer version of GCC and binutils with the FreeBSD Ports Collection
Prev |  | Next

# 3 Configuring ports for custom version of GCC

Additional system configuration is required in order to use custom version of GCC installed from the FreeBSD ports tree.

## 3.1 Adjusting `make.conf`

Add the following lines to the `/etc/make.conf` file (or modify appropriately):

    .if !empty(.CURDIR:M/usr/ports/*) && exists(/usr/local/bin/gcc44)
    CC=gcc44
    CXX=g++44
    CPP=cpp44
    .endif

Alternatively, it is possible to specify the `${CC}` and `${CPP}` variables manually.

> Note: The examples above are for GCC version 4.4. To use `gcc43`, replace `"gcc44"` with `"gcc43"` and `"4.4"` with `"4.3"` and so on.

## 3.2 Adjusting `libmap.conf`

Many of the ports' binaries and libraries link to libgcc_s or libstdc++. The base system already includes these libraries, but from an earlier version of GCC (version 4.2.1). To supply rtld (and ldd) with correct versions, add the following lines to the `/etc/libmap.conf` file (or modify appropriately):

    libgcc_s.so.1   gcc44/libgcc_s.so.1
    libgomp.so.1    gcc44/libgomp.so.1
    libobjc.so.3    gcc44/libobjc.so.2
    libssp.so.0     gcc44/libssp.so.0
    libstdc++.so.6  gcc44/libstdc++.so.6

> Note: The examples above are for GCC version 4.4. To use `gcc43`, replace `"gcc44"` with `"gcc43"` and so on. Note also that all of these libraries are fully backwards compatible with base system libraries.

> Warning: Some C++ programs may refuse to work if these libraries are not mapped correctly. If it is not feasible to map them all, it is recommended to map at least libstdc++.so.

## 3.3 Custom `CFLAGS` for the ports tree

To add custom `CFLAGS` for the ports tree which are unsupported by the base system, adjust the `/etc/make.conf` according to the following example:

    .if !empty(.CURDIR:M/usr/ports/*) && exists(/usr/local/bin/gcc44)
    CC=gcc44
    CXX=g++44
    CPP=cpp44
    CFLAGS+=-mssse3
    .endif

It is possible to completely replace `CFLAGS` and/or define custom `CPUTYPE` as well. We recommend setting `CPUTYPE` because many ports decide their optimizations flags based on this variable.

## 3.4 Excluding ports that do not build with new version of GCC

To exclude ports that have problems with custom version of GCC, adjust the `/etc/make.conf` according to the following example:

    .if !empty(.CURDIR:M/usr/ports/*) && exists(/usr/local/bin/gcc44)
    .if empty(.CURDIR:M/usr/ports/net/openldap*)
    CC=gcc44
    CXX=g++44
    CPP=cpp44
    .endif
    .endif

The example above excludes the forced use of `gcc` 4.4 for the `net/openldap`* ports. It is also possible to specify more ports on a single line:

    .if empty(.CURDIR:M/usr/ports/net/openldap*) && empty(.CURDIR:M/usr/ports/xxx/yyy) && ...

Prev | Home | Next
Prerequisites |  | Impact on the binary performance