GCCE build targets

Introduction

The GCCE build target builds ARM code using a version of the freely available GNU Compiler Collection (GCC) tools. The GCC compiler is intended only for building applications, and cannot be used to compile the complete Symbian platform.

The GCC binaries conform to ABIv2 for the ARM architecture. Details about the ABI standard are published at http://www.arm.com/products/DevTools/ABI.html.

The following table lists the GCC build targets available for various ARM architectures that use Thumb or Thumb2 instruction sets:

Build target ARM architecture Instruction set

GCCE

V5

Thumb

GCCEV6

V6

Thumb

GCCEV6t2

V6

Thumb-2

GCCEV7

V7

Thumb-2

Note: Code built for the targets listed in the earlier table can interoperate with code built by other compilers for ARM targets.

Prerequisite

To build for the GCC targets, you must install the GCC CSL ARM toolchain. The installer, arm-none-symbianelf-2005-q1c.exe, is supplied in kits, and is located at epoc32\tools\distrib\. Run this program to start the installation wizard. By default, the compiler is installed to C:\Program Files\CSL Arm Toolchain\.

The installation wizard does not modify the Windows PATH environment variable. You must manually add the bin sub-directory of the installed tools to the PATH variable. For example, if the compiler is installed to C:\gcce, then C:\gcce\bin must be added to the PATH environment variable.

Building for GCC targets

GCC targets are not the default build targets. To build a program for any GCC target, you must explicitly specify the targets as supported platforms in the component's BLD.INF file, using prj_platforms statement.

For example:

PRJ_PLATFORMS
WINSCW GCCE GCCEV6 GCCEV6t2 GCCEV7

allows the component to be built for WINSCW, GCCE, GCCEV6, GCCEV6t2, and GCCEV7.

You can build component for the GCC targets using the following bldmake and abld commands:

bldmake bldfiles

abld build gcce | gccev6 | gccev6t2 | gccev7 [udeb | urel]

Note: To build for GCCEV6t2 and GCCEV7, you need GCCE v4.2 that supports building ARM code for Thumb-2.

Binaries are generated in the udeb and urel sub-directories of the epoc32\release\<GCC platform>\ directory.

Import library (.dso) files are generated in the epoc32\release\ARMV5\lib\ directory. This directory is used, as the library file format has not changed since ARMV5.

Note: These are the same directories that are used for import libraries generated by RVCT for different build targets, such as ARMV5, ARMV6, and so on. This allows other applications to link to any library, regardless of the build target for which they are generated.

ROM building

The compiler setting allows the Symbian base components to include the correct compiler-specific run-time libraries in the ROM image.

The default compiler used to build is ARM RVCT. This compiler is indicated to buildrom using the argument -DRVCT.

The toolchain from Symbian OS v9.1 also supports binaries built with the GCCE compiler. Binaries built with this compiler can be combined in ROM with binaries built with RVCT to the ABIv2. To do this, use the -D_GCCE macro:

buildrom -D_EABI=ARMV5 -D_GCCE -otechview.img h2 techview

By default, if the binaries are not available in GCCE, they are taken from the ARMV5_ABIV2 directory, and if not in there also, they are be taken from the ARMV5 directory. (ARMV5 is necessary as some of the runtime DLLs will be present only in that directory.)

The order in which buildrom searches directories to get binaries to put into ROM can also be specified explicitly using a BINARY_SELECTION_ORDER command in an oby file. For example:

BINARY_SELECTION_ORDER = GCCE, ARMV5_ABIv2, ARMV5

The preceding command specifies explicitly that binaries should taken from GCCE, then ARMV5_ABIv2, and then ARMV5.

Source issues

The GCCE build target uses the same DEF file format as the ARMV5 target. By default, the GCC toolchian looks for the DEF files in the project's EABI directory.

Note: The GCC compiler is very strict in checking that the source code conforms to the ANSI C++ standard. Therefore, source code that previously compiled with less strict compilers, such as RVCT 2.1, may no longer compile.