We use tools from three suppliers:
Microsoft
|
Microsoft Visual C++ and associated development environment
Microsoft Visual C++ is a leading C++ development environment, with a good integrated development environment, which is used for 95% of all Symbian software development.
|
Symbian
|
Various tools for resource compilation, bitmap conversion, ROM building, downloading, project control, and organising other tools.
|
Cygnus
|
Cygnus maintains the GNU C++ compiler and associated tools.
These tools support the widest variety of hardware platforms of any single compiler tool set in the industry. GCC is a powerful C++ compiler with a generic front end and optimiser, and back-end code generators for a wide variety of CPUs.
Symbian commissioned Cygnus to bring the GNU tool chain up to industrial strength for ARM development, and uses the Win32-hosted, ARM-targeted, version of the tool chain for all its target machine development.
Aspects of this industrial strength include a full language implementation as found in the C++ Annotated Reference Manual, good support for DLLs, support for templates (including some complexities of the interaction between templates and DLLs), and the production of PE-format executables.
|
|
The following tools are used:
Tool
|
Supplier, language
|
Description
|
bldmake
|
Symbian
|
This tool processes a component description file (bld.inf ), which describes various aspects of the component, and generates a batch file called abld.bat . This batch file is then used to drive the rest of the component build.
It also generates several build batch .make files.
|
abld
|
Symbian
|
Uses the build batch .make files, generated by the bldmake tool. It is used to carry out the various stages of the building of components which have been defined by a bldmake component description file (bld.inf ).
|
makmake
|
Symbian, PERL
|
The makmake tool is used to build makefiles for use in various environments, which are then used for project development.
Takes a .mmp project file which lists the elements of the project, and produces a makefile for the platform specified.
Uses GNU cpp to evaluate dependencies. Generated headers from resource compilation and multi-bitmap compilation, etc., should be available before makmake is run.
|
gcc
|
Cygnus
|
GNU C++ Compiler. Compiles a C++ file (normally .cpp ) and produces an object file (.o ).
|
ar
|
Cygnus
|
GNU archiver. Turns a number of .o object files into an archive, .in
|
ranlib
|
Cygnus
|
Library munger. Turns archive into an ARM PE format.
|
dlltool
|
Cygnus
|
Extracts symbol definitions .def from an archive .in ; also constructs import library .lib from an archive and a .def file
|
ld
|
Cygnus
|
GNU linker. Produces an executable.
|
petran
|
Symbian
|
Strips a PE format file for ARM target of its irrelevant symbol information. This makes DLLs much smaller. As a consequence, EPOC ARM targets only support linking by ordinal.
Petran is also responsible for adding UID information to executables.
|
cl
|
Microsoft
|
MSVC C++ compiler. Compiles C++ source (normally .cpp ) to object .obj .
|
link
|
Microsoft
|
Microsoft linker. Links .obj into an executable.
|
bscmake
|
Microsoft
|
Debug information generator.
|
rcomp
|
Symbian
|
Resource compiler.
|
bmconv
|
Symbian
|
Bitmap converter. Takes one or more Microsoft bitmaps .bmp and generates a single multi-bitmap file .mbm , optimised for efficient runtime loading by the EPOC GDI. Also a header file .h with symbolic definitions for each bitmap in the file.
|
|
More specialised EPOC tools are available for particular types of development, e.g. for generating font and printer driver libraries.
The following file types are involved in the process
.mmp
|
makmake makefile project — specification of a project, input to makmake
|
.dsp
|
Built by makmake for the Microsoft Developer Studio (Visual C++ 6.0) — project file generated by makmake from a .mmp file
|
.dsw
|
Built by makmake for the Microsoft Developer Studio (Visual C++ 6.0) — project workspace file generated by makmake from a .mmp file
|
.wins
|
makefile, for use by command-line compilations for WINS, output from makmake
|
.armi
|
makefile, for use by command-line compilations for ARMI, output from makmake
|
.make
|
build batch makefile, for use by abld for the purposes of building, output from bldmake bldfiles
|
.cpp
|
C++ source file, input to Microsoft cl or GNU cpp
|
.h
|
header file, for inclusion in C++ file
|
.rss
|
resource source file, for input to rcomp
|
.rh
|
resource header, for inclusion in resource file
|
.hrh
|
common C++ or resource header, for inclusion in either type of source file
|
.rsg
|
generated resource header file, output from rcomp
|
.rsc
|
generated resource file, output from rcomp
|
.bmp
|
bitmap file, in Microsoft Windows format, input to bmconv (can also be output)
|
.mbm
|
multi-bitmap file, generated by Symbian bitmap compiler, output from bmconv (can also be input)
|
.obj
|
object code, from MSVC++ cl compiler
|
.o
|
object code, from GNU gcc compiler
|
.def
|
linker definition file, for input to link and dlltool , and can be output by deftool
|
.frz
|
freeze file, really a .def file containing the entry points which must be frozen, for input to deftool
|
.lib
|
static library containing stubs for DLL linking, output from link or dlltool , input to link or ld
|
.map
|
map of entities in an executable, output by link or ld
|
.exe
|
program — a type of executable, output by link or ld
|
.dll
|
dynamic link library or DLL — a type of executable, output by link or ld , dynamically loaded at run-time by the .exe loader, or by other executables under program control
|
.app
|
a GUI application — a DLL which implements the application architecture interface
|
.aif
|
Application information file, as defined by the application architecture, output by aiftool
|
|
Tools for EPOC development are found in two directories, which you should include in your path:
tools developed by Symbian are in epoc32\tools\
in the folder on which you installed the SDK
the gcc
compiler and its supporting programs are in Shared\epoc32\gcc\bin\
in the folder on which you installed the SDK
You should ensure that both of these directories are in your path, whenever doing EPOC development.
The SDK installation process does the path and registry settings for you.
All tools have command line syntax. Some additionally are compilers, with source file syntax. Syntax is described in this book using a modified BNF (Backus Naur Form).
Syntax fragments are given like this:
source-file
:
statement-list
At the top-left of every diagram is the construct that is being explained — in this case, source-file
. The rest of the diagram explains the way a source-file
is constructed.
In this case, a source-file is a statement-list
. Anything followed by -list
means zero or more items: thus, a source-file
can be zero or more statement
s. You need to consult the diagram for statement
to see what a statement
can be:
statement
:
struct-statement
| resource-statement
| name-statement
| offset-statement
| system-statement
This illustrates the use of vertical bar to denote alternatives: a statement
can be one of the five statement types shown.
offset-statement
:
OFFSET
number
When some text is given in heavy monospaced type, it means it should be typed in literally. Thus, the offset-statement
consists of the word OFFSET
, followed by a number.
struct-statement
:
STRUCT
struct-name
[ BYTE
| WORD
] {
struct-member-list
}
This diagram illustrates the use of square brackets to denote something that is optional. Also note the use of the vertical line to denote a choice to be made between mutually exclusive options.
array-initializer
:
{
array-initializer-item-comma-list
}
This shows the meaning of -comma-list
: one or more items separated by commas. Thus, an array-initialiser
could be of the form
{ aii , aii , aii }
Generally, the syntax diagrams do not show punctuation, newlines, whitespace etc. Such details would make the diagrams difficult to read, and introduce little useful information.