Please note that as of October 24, 2014, the Nokia Developer Wiki will no longer be accepting user contributions, including new entries, edits and comments, as we begin transitioning to our new home, in the Windows Phone Development Wiki. We plan to move over the majority of the existing entries. Thanks for all your past and future contributions.

Build Targets

From Wiki
Jump to: navigation, search
Article Metadata
Created: vasant21 (26 May 2007)
Last edited: hamishwillee (19 Jul 2012)

Needs-update.pngThis article needs to be updated: If you found this article useful, please fix the problems below then delete the {{ArticleNeedsUpdate}} template from the article to remove this warning.

Accurate prior to Symbian OS v9. Needs an up Symbian OS 9.x+

Build targets represent the various binary formats which could be used for a build. The ones supported by Symbian OS are listed below.


Smartphone devices

ARM4 – 32-bit ARM instruction set

THUMB – 16-bit ARM instruction set

ARMI – ARM interchange format


WINS – Microsoft

WINSCW – Code Warrior

WINSB – Borland

The process

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.

This page was last modified on 19 July 2012, at 05:26.
28 page views in the last 30 days.