|
|
|
The ARMV5 build target builds to the ARMv5 architecture. It is built to conform to a binary standard developed by ARM (the ABI for the ARM architecture). Details of the standard are published at http://www.arm.com/products/DevTools/ABI.html.
The situation is complicated by there existing two versions of the ARM ABI, referred to as v1 and v2 respectively, both of which are supported by the toolchain. This page explains the build target to use in each case. For more information on the differences in the toolchain used for each version of the ABI, see ABIv1 to ABIv2 toolchain changes.
The page's sections are:
The ARMV5 build targets are built using ARM's own RealView Compiler Tools (RVCT) (http://www.arm.com/products/DevTools/RealViewDevSuite.html). For v9.1, version 2.2 of RVCT, build 435 or later, is required.
Note that RVCT 2.2 build 349 is not fully compatible with GCC-E and will not be supported by Symbian. Customers needing to upgrade from RVCT 2.2 build 349 to RVCT 2.2 build 435 should contact ARM support directly.
RVCT 2.1, used with Symbian OS v8.1b, is not supported from v9.1. The following topics discuss issues concerned with:
having both RVCT 2.1 and 2.2 installed on a single PC, so as to enable development on both v8.1 and v9.1
migrating from RVCT 2.1 to 2.2
If you need to develop for both v8.1 and v9.1 on the same PC, you can
have both the RVCT 2.1 and 2.2 tools installed. The build tools will use the
version that appears first in the environment path variable. You
will need to modify this setting yourself when moving between development kits.
Assuming the tools are installed to C:\apps\:
When working with v8.1b, put the 2.1 version of the tools first in the path:
> set
PATH=C:\apps\ARM\RVCT\Programs\2.1\416\win_32-pentium;%path%
When working with v9.1, put the 2.2 version of the tools first in the path:
> set
PATH=C:\apps\ARM\RVCT\Programs\2.2\435\win_32-pentium;%path%
To test which version is currently on the path, use the command:
> armcc --vsn
This reports the compiler version and build number.
This section discusses errors and warnings that can occur as a result of moving from RVCT 2.1 to 2.2.
Problem:
A build produces errors of the type:
"Error: Unresolved symbol: _ZN15TX509KeyFactoryC1Ev"
Solution:
The RVCT 2.2 compiler does not accept empty imported constructor
definitions. It requires that the exported function prototype is marked with
IMPORT_C in the class declaration, and that the function
implementation is marked with the EXPORT_C keyword.
For example, code such as this is not allowed in RVCT 2.2:
#ifdef __EABI__
public:
/** Cause the vtable and typeinfo to be exported */
IMPORT_C TX509KeyFactory() {};
#endif
The fix is to remove the function if it is not adding any value to
the class definition. Alternatively, add a function implementation marked with
EXPORT_C, and add the symbol to the correspoding .def
file.
Problem:
A build produces errors of the type:
make[1]: *** No rule to make target `..\..\..\..\..\..\9.1Clean
\EPOC32\RELEASE\ARMV5\UREL\usrt2_1.lib', needed by `..\..\..\..\..\..\
9.1Clean\EPOC32\RELEASE\ARMV5\UREL\RCTestServer.exe'. Stop.
Solution:
This shows that you are attempting to use RVCT 2.1 on a build of
Symbian OS that requires RVCT 2.2. (Libraries named xxx2_1.lib are
compiler-specific Symbian OS static libraries that are only supplied with
Symbian OS versions that support RVCT 2.1).
Problem:
This can occur if the component is built with its own custom build
files, and not with the standard Symbian OS tool chain using .mmp
files.
Solution:
The custom build files must be updated to support RVCT 2.2.
The following additional warnings can be seen when building Symbian OS code with RVCT2.2. These are marked as remarks (i.e. permitted warnings) in system builds:
#66-D: enumeration value is out of "int" range
#1446-D: non-POD class type passed through ellipsis
A1608W: MOV pc,
Use this target to create binaries conforming to the ABIv1.
To build for ARMV5 (ABIv1) with abld use:
> abld build armv5 [udeb | urel]
Binaries are generated in the udeb and/or
urel sub-directories of the epoc32\release\armv5\
directory.
Library export (.lib) files are generated in the
epoc32\release\armv5\lib\ directory.
Use this target to create binaries conforming to the ABI v2. This
target is named armv5_abiv2, to distinguish it from the ARMV5
using ABIv1.
To build for ARMV5 (ABIv2) with abld use:
> abld build armv5_abiv2 [udeb | urel]
Binaries are generated in the udeb and/or
urel sub-directories of the
epoc32\release\armv5_abiv2\ directory.
Library export (.dso) files are generated in the
epoc32\release\armv5\lib\ directory. The ABIv2 toolchain needs to
support multiple ABIv2 compatible compilers so the import library files are put
in a common directory.
In v9.1, armv5_abiv2 is not a default platform (so is not
built from a simple abld build command). It can be made a default
platform for a component by adding it to the bld.inf file as
follows:
PRJ_PLATFORMS
DEFAULT ARMV5_ABIV2