# arm-wince

The easiest way to start development for WinCE is to download the latest release version of FPC for Win32 and arm-wince cross compiler for Win32.

First install FPC for Win32, then install arm-wince cross compiler as add-on package.

## The hard way: building WinCE cross compiler from sources

This tutorial demonstrates how to build the arm-wince crosscompiler on Windows which allows you to compile Windows CE programs from your Windows desktop.

Note: During the tutorial some paths will be used to demonstrate the build process. Just substitute those paths with the ones on your system.

We will suppose that:

• your FPC compiler is located here: c:\fpc\bin\i386-win32\fpc.exe
• your Free Pascal source code is located here: c:\fpc

### Step 1: Cross binutils

Binutils are the basic tools necessary to create executables, such as: linker (ld), assembler (as), archiver (ar), strip and some others.

You need cross binutils for arm-wince (i.e. they run on your desktop but produce output suitable for arm-wince). Get them from ftp://ftp.freepascal.org/pub/fpc/contrib/cross/arm-wince-binutils.zip.

Extract them to some dir in the path on your machine. We will suppose that you extracted the cross binutils to: C:\cross\arm

### Step 2: Building the cross compiler

Now you need to build the FPC cross compiler for the ARM processor. To do that, you need:

• FPC sources
• a working installation of FPC
• the cross binutils mentioned above

You can get the latest FPC source repository from Subversion: http://www.freepascal.org/develop.html#svn

In order to build the cross compiler it is necessary to have a correct PATH environment variable. On Windows it is very easy to get a PATH crowded with information put by installers. To ensure that your path is correct, create a batch file called c:\fpc\compiler\create_cross_arm_wince.cmd with the following code:

PATH=c:\fpc\bin\i386-win32;C:\cross\arm
make cycle CPU_TARGET=arm OS_TARGET=wince

Now open the Windows command line, and run the batch file:

cd /d c:\fpc\compiler
create_cross_arm_wince.cmd

The compile should run without any errors.

You should now have a ppccrossarm.exe in c:\fpc\compiler and some .o and .ppu files in c:\fpc\rtl\units\arm-wince

Now copy those files to your Free Pascal installation.

• Copy the cross compiler ppccrossarm.exe to c:\fpc\bin\i386-win32\
• Copy the units in c:\fpc\rtl\units\arm-wince to c:\fpc\units\arm-wince

### Step 3: Configuration file

Now you need to edit your FPC configuration file in c:\fpc\bin\i386-win32\fpc.cfg in order to use ppccrossarm.exe easily.

#IFDEF CPUARM
#IFDEF WINCE
# Settings specific to cross compilation to wince on ARM.
-FuC:\fpc\units\arm-wince
-XParm-wince-
-FDC:\cross\arm
#ENDIF
#ENDIF


Now when you want to compile for WinCE you just have to specify the OS and Arch targets to FPC or Lazarus:

fpc -Twince -Parm yourfile.pas

Note: When using Lazarus, make sure the compiler path/file in Lazarus options is set to "fpc.exe", not "ppc386.exe"

## Building FPC libraries

If you want to build libraries available with FPC just go to the library folder and execute:

PATH=c:\fpc\bin\i386-win32;c:\fpc\compiler;C:\cross\arm
make OS_TARGET=wince CPU_TARGET=arm PP=ppcrossarm.exe

## Compiling a Test Project

You compiled the compiler! Now, what can I do with it? This is a tutorial to create a hello world like software with your new compiler.

### Step 1: Installing and Configuring the Emulator

You will need a Windows CE Emulator configured for ActiveSync. The ActiveSync is necessary to install PocketCMD, a command line tool to run our hello world software.

There is a tutorial on how to set up the Emulator for ActiveSync here.

### Step 2: Installing the command line

Download and install PocketCMD by SymbolicTools. Get it here (this site seems to be gone) but try here [1]

To enable the console on newer devices (I needed it in my 6.1CE pro), you may to set the following registry value link

HKEY_LOCAL_MACHINE\Drivers\Console\OutputTo -> 0


Check WinCE_port_Hints for more details on programming under Windows CE platform.

### Step 3: Compiling

An example file to compile:

program test;

{\$apptype console}

var
Str: string;
begin
WriteLn('Software Developed with:');
WriteLn('The Free Pascal Compiler');
WriteLn('');
end.
fpc -Twince -Parm test.pas