# User:CCRDude

Lazarus and WinCE using Win64, from the start

# Introduction

## Existing tutorials

This is not to say that the existing tutorials are bad, just that they did not help in my special case. I gave up following them because of a bunch of things I couldn't follow, including PocketCMD, which doesn't run on my iPAQ H3870, the Microsoft Emulator which doesn't network on 64-bit Windows XP, unit paths in the tutorial that were not correct, and some other troubles. So I thought I'ld better understand what's done and write down my steps that way (because the next FPC + Lazarus version is surely to come...).

## Prerequisites

I want to build simple GUI applications for a HP iPAQ H3870 running Pocket PC 2002 Version 3.0.11171 on an ARM SA1110 processor.

This tutorial is intended to show an installation of Lazarus to compile WinCE applications on a clean system running Windows (in this special case Windows XP 64-bit edition, but since all tools are 32-bit tools, it should run on standard Windows XP as well). Instructions are based on these Lazarus wiki pages:

### Lazarus daily snapshot success

• Lazarus-0.9.17-20060608-win32.exe: did not work on Win64 (linker problems)
• Lazarus-0.9.17-20060610-win32.exe: works fine on Win32
• Lazarus-0.9.17-20060612-win32.exe: did not work on Win32 (FCL does not compile)
• Lazarus-0.9.17-20060615-win32.exe: works fine on Win64 (linker problem solved!)

# Installation

Note: there's a batch file that does all the steps after downloading and extracting at the end of this file!

## Cleanup

Completely remove old FPC and Lazarus installations. This includes opening the System Properties, Advanced tab, button Environment Variables, and removing all previous references to FPC and Arm in the PATH environment.

## ARM-Utilities

• Test the path by opening a new terminal (Start -> Run -> 'cmd') and typing arm-wince-ar. If you see a compiler message, everything is fine.

## Lazarus

• Add C:\Apps\Lazarus\pp\bin\i386-win32 and C:\apps\Lazarus\pp\bin\arm-wince to the PATH environment.
• Test the path by opening a new terminal (Start -> Run -> 'cmd') and typing 'fpc'. If you see a compiler message, everything is fine.
• The installation should be tested by compiling a simple existing Lazarus project.

## FreePascal

By using a daily snapshot, we already have a 2.1.x version of FreePascal that is needed. But we still need some more FreePascal stuff. The other tutorials mentions Subversion; it's a bit simpler to get a daily snapshot of the development tree though, or directly via ftp. Open this archive and extract the folders from the fpc subfolder into C:\Apps\Lazarus\pp\. Make sure you don't have an additional fpc subfolder, but the compiler, fcl, etc. folder directly in pp.

# Compiling for ARM

## Create cross compiler

• Open a new command prompt and switch to C:\Apps\Lazarus\pp\compiler.
• Type make --help and check if you've got the right version (Delphi users will probably see the Borland version, in which case you should type set path=C:\Apps\arm;C:\Apps\Lazarus\pp\bin\i386-win32;C:\Apps\Lazarus\pp\bin\arm-wince).
• Then just type make cycle CPU_TARGET=arm OS_TARGET=wince and let it compile. There'll be a bunch of warnings, hints and notes, but it should finish.
 C:
cd \Apps\Lazarus\pp\compiler
set path=C:\Apps\arm;C:\Apps\Lazarus\pp\bin\i386-win32;C:\Apps\Lazarus\pp\bin\arm-wince
make cycle CPU_TARGET=arm OS_TARGET=wince


## Files

• Create the folder C:\Apps\Lazarus\pp\bin\arm-wince, and copy C:\Apps\Lazarus\pp\compiler\ppcrossarm.exe into it.
• Create C:\Apps\Lazarus\pp\units\arm-wince\rtl, and copy C:\Apps\Lazarus\pp\rtl\units\arm-wince\*.* into it.
 mkdir C:\Apps\Lazarus\pp\bin\arm-wince
copy C:\Apps\Lazarus\pp\compiler\ppcrossarm.exe C:\Apps\Lazarus\pp\bin\arm-wince\
mkdir C:\Apps\Lazarus\pp\units\arm-wince\rtl
copy C:\Apps\Lazarus\pp\rtl\units\arm-wince\*.* C:\Apps\Lazarus\pp\units\arm-wince\rtl\


## Configuration

Go back to C:\Apps\Lazarus\pp\bin\arm-wince and create a fpc.cfg in there:

 -Twince
-FuC:\Apps\Lazarus\pp\units\arm-wince
-FuC:\Apps\Lazarus\pp\units\arm-wince\*
-FuC:\Apps\Lazarus\pp\units\arm-wince\rtl
-XParm-wince-
-FDC:\Apps\arm
-FDC:\Apps\Lazarus\pp\bin\arm-wince



## FCL

• Go to C:\Apps\Lazarus\pp\fcl and compile there.
• Create C:\Apps\Lazarus\pp\units\arm-wince\fcl, and copy C:\Apps\Lazarus\pp\fcl\units\arm-wince\*.* into it.
 C:
cd \Apps\Lazarus\pp\fcl
make CPU_TARGET=arm OS_TARGET=wince PP=ppcrossarm.exe
mkdir C:\Apps\Lazarus\pp\units\arm-wince\fcl
copy C:\Apps\Lazarus\pp\fcl\units\arm-wince\*.* C:\Apps\Lazarus\pp\units\arm-wince\fcl\


## LCL

Go to C:\Apps\Lazarus and rebuild the lcl.

 C:
cd \Apps\Lazarus
make lcl LCL_PLATFORM=wince PP=ppcrossarm.exe CPU_TARGET=arm OS_TARGET=wince


## Batch file

@echo off

 set x_lazdir=C:\Apps\Lazarus
set x_armdir=C:\Apps\arm
set x_fpcsvnrelease=-r 3873
cls
echo ------------------------------------------------------------------------
echo ------------------------------------------------------------------------
echo You need to prepare the following:
echo 1. Install the arm-binutils into %x_armdir%
echo    ftp://ftp.freepascal.org/pub/fpc/contrib/cross/arm-wince-binutils.zip
echo 2. Install the latest Lazarus daily into %x_lazdir
echo    http://www.hu.freepascal.org/lazarus/
echo 3. Install the latest FreePascal snapshot into %x_lazdir%\pp
echo    (NOT inside another fpc subfolder as the archive structure suggests)
echo    ftp://ftp.freepascal.org/pub/fpc/snapshot/v21/source/fpc.zip
echo OR you need to have svn installed and available.
echo ------------------------------------------------------------------------
if NOT EXIST %x_armdir%\arm-wince-ld.exe goto errorarmmissing
if NOT EXIST %x_lazdir%\startlazarus.exe goto errorlazarusmissing
if DEFINED APR_ICONV_PATH GOTO nosourcenecessary
if NOT EXIST %x_lazdir%\pp\compiler\cclasses.pas goto errorfpcmissing
:nosourcenecessary
echo ------------------------------------------------------------------------
echo Going to download FPC from SVN now... if this version does not work,
echo please edit this file and change x_fpcsvnrelease accordingly.
echo ------------------------------------------------------------------------
cd %x_lazdir%
svn checkout %x_fpcsvnrelease% http://svn.freepascal.org/svn/fpc/trunk pp
; svn update .
pause
echo The necessary files were found, you may now continue.
pause
echo ------------------------------------------------------------------------
echo The cross compiler will now be created...
echo ------------------------------------------------------------------------
C:
cd %x_lazdir%\pp\compiler
set path=%x_armdir%;%x_lazdir%\pp\bin\i386-win32;%x_lazdir%\pp\bin\arm-wince;%APR_ICONV_PATH%
make cycle CPU_TARGET=arm OS_TARGET=wince
echo ------------------------------------------------------------------------
echo If you don't see any error messages, you may now continue.
echo ------------------------------------------------------------------------
pause
echo Creating the folder %x_lazdir%\pp\bin\arm-wince ...
mkdir %x_lazdir%\pp\bin\arm-wince
echo Copying %x_lazdir%\pp\compiler\ppcrossarm.exe
echo      to %x_lazdir%\pp\bin\arm-wince\ ...
copy %x_lazdir%\pp\compiler\ppcrossarm.exe %x_lazdir%\pp\bin\arm-wince\
echo Creating the folder %x_lazdir%\pp\units\arm-wince\rtl ...
mkdir %x_lazdir%\pp\units\arm-wince\rtl
echo Copying %x_lazdir%\pp\rtl\units\arm-wince\*.*
echo      to %x_lazdir%\pp\units\arm-wince\rtl\ ...
copy %x_lazdir%\pp\rtl\units\arm-wince\*.* %x_lazdir%\pp\units\arm-wince\rtl\
echo Creating %x_lazdir%\pp\bin\arm-wince\fpc.cfg ...
echo -Twince > %x_lazdir%\pp\bin\arm-wince\fpc.cfg
echo -Fu%x_lazdir%\pp\units\arm-wince >> %x_lazdir%\pp\bin\arm-wince\fpc.cfg
echo -Fu%x_lazdir%\pp\units\arm-wince\* >> %x_lazdir%\pp\bin\arm-wince\fpc.cfg
echo -Fu%x_lazdir%\pp\units\arm-wince\rtl >> %x_lazdir%\pp\bin\arm-wince\fpc.cfg
echo -XParm-wince- >> %x_lazdir%\pp\bin\arm-wince\fpc.cfg
echo -FD%x_armdir% >> %x_lazdir%\pp\bin\arm-wince\fpc.cfg
echo -FD%x_lazdir%\pp\bin\arm-wince >> %x_lazdir%\pp\bin\arm-wince\fpc.cfg
echo ------------------------------------------------------------------------
echo The FCL will now be compiled...
echo ------------------------------------------------------------------------
pause
cd %x_lazdir%\pp\fcl
make CPU_TARGET=arm OS_TARGET=wince PP=ppcrossarm.exe
echo Creating the folder %x_lazdir%\pp\units\arm-wince\fcl ...
echo Copying %x_lazdir%\pp\fcl\units\arm-wince\*.*
echo      to %x_lazdir%\pp\units\arm-wince\fcl\ ...
mkdir %x_lazdir%\pp\units\arm-wince\fcl
copy %x_lazdir%\pp\fcl\units\arm-wince\*.* %x_lazdir%\pp\units\arm-wince\fcl\
echo ------------------------------------------------------------------------
echo The LCL will now be compiled...
echo ------------------------------------------------------------------------
pause
cd %x_lazdir%
make lcl LCL_PLATFORM=wince PP=ppcrossarm.exe CPU_TARGET=arm OS_TARGET=wince
echo ------------------------------------------------------------------------
echo Congratulations!
echo ------------------------------------------------------------------------
goto EOF
;
:errorarmmissing
echo ------------------------------------------------------------------------
echo The ARM files are missing in %x_armdir%!
echo Please install them, then restart this batch file.
echo .
echo ftp://ftp.freepascal.org/pub/fpc/contrib/cross/arm-wince-binutils.zip
echo .
echo If you want to use different paths, please open this file in notepad
echo and change the second and third line according to your wishes.
echo ------------------------------------------------------------------------
goto :EOF
;
:errorlazarusmissing
echo ------------------------------------------------------------------------
echo The Lazarus installation is missing in %x_lazdir%!
echo Please install a Lazarus daily, then restart this batch file.
echo .
echo http://www.hu.freepascal.org/lazarus/
echo .
echo If you want to use different paths, please open this file in notepad
echo and change the second and third line according to your wishes.
echo ------------------------------------------------------------------------
goto :EOF
;
:errorfpcmissing
echo ------------------------------------------------------------------------
echo The FPC files are missing in %x_lazdir%\pp\!
echo Please install them, then restart this batch file.
echo Make sure you don't have them in the subfolder fpc, but directly in pp!
echo .
echo ftp://ftp.freepascal.org/pub/fpc/snapshot/v21/source/fpc.zip
echo .
echo If you want to use different paths, please open this file in notepad
echo and change the second and third line according to your wishes.
echo ------------------------------------------------------------------------
goto :EOF
;
:EOF
cd %x_lazdir%
set x_lazdir=
set x_armdir=
set x_fpcsvnrelease=


# Using Lazarus

• Create a new application
• Open the compile options,
• change widgetset to wince,
• target OS to WinCE,
• and target processor to arm.
• Change the compiler path in environment settings to C:\Apps\Lazarus\pp\bin\arm-wince\ppcrossarm.exe.