Build targets represent the various binary formats which could be used for a build. The ones supported by Symbian OS are listed below.
• ARM4 – 32-bit ARM instruction set
• THUMB – 16-bit ARM instruction set
• ARMI – ARM interchange format
• WINS – Microsoft
• WINSCW – Code Warrior
• WINSB – Borland
When you specify one of these build targets in your build command, the build generates and executes a makefile that invokes the development tools needed to produce the appropriate binary output. The executables are then placed in the /epoc/release directory under the appropriate build target’s name as described previously.
The smartphone build targets use the GNU tools to produce code for the ARM processor – all current Symbian OS smartphones are based on ARM. But why are there multiple ARM build targets, and which one do you use? ARM4, THUMB and ARMI are known as Application Binary Interfaces (ABI) and represent different ARM binary outputs. The ARM processor has two instruction sets: a 32-bit set (ARM4) and a 16-bit set (THUMB). The first is fast, but uses more memory, the latter is compact, but slower. ARMI is the 32-bit instruction set with extra logic to allow it to call THUMB code in addition to other 32-bit code. ARMI is known as ARM interchange format.
Which target should you use
The most commonly used device build target is ARMI – use this one when in doubt. It is the safest for third-party developers since it will interface with code compiled as ARM4, THUMB and other ARMI code, and will work on any available Symbian OS smartphone. If memory size is a significant concern you can use THUMB. Since THUMB uses 16-bit instructions, the executables are somewhat smaller than ARMI, but ARMI is faster. Many popular smartphones support THUMB.
Do not use ARM4 unless you are writing system-level code such as device drivers and board support software. ARM4 is used by phone manufacturers and is not usually supported on the smartphone for userlevel programs.
WINS, WINSCW, and WINSB are emulator targets for Microsoft, Code Warrior, and Borland Windows development tools respectively. The emulator targets generate x86-based Windows binaries; however, you need to use the build target that corresponds to the Windows toolset you have on your PC. This ensures that your Windows development tools are invoked when building. In addition to invoking the correct tools, each emulator build target has its own emulator executable (actually two: a UDEB version and a UREL version).
It’s required that the emulator, system code, and user programs are compiled with the same Windows compiler – this is needed so that they can link together correctly.