Support
Contribute
Contact
Tracker
Navigation
Personal tools
 

EFL Windows CE

Contents

Introduction

This document provides some help to build the EFL for the Windows CE platform. The current EFL that are ported are evil, eet, evas, ecore, embryo and edje. The ports are not complete, nor without bugs and work in progress. So any help is welcome.

To compile the EFL for the Windows CE platform, the CeGCC project is used. It provides a set of cross-development tools that generate code for Windows CE devices. The document describes how to set properly the cegcc framework and how to compile the supported EFL.

Installation and configuration of CeGCC

The CeGCC project provides a set of cross-development tools that generate code for Windows CE devices. The installation is quite simple as it is just the decompression of an archive. It can be used on Linux and Windows (with cygwin). It is possible to compile CeGCC with MSYS/MinGW to have native compilers and tools, with some hacks though. Also, using CeGCC on 64 bits Linux distributions might not work, especially for evas.

The CeGCC project provides 2 product:

  • mingw32ce: creates Windows CE native applications.
  • cegcc: ports *nix sources to Windows CE. It is done via a POSIX layer so the compilation is most of the time quite easy. But a DLL is needed for the programs / libraries to be run. Hence the load is a bit slower than with mingw32ce.

Because mingw32ce does not support the errno system, cegcc will be used. Nevertheless, some libraries can be compiled with mingw32ce.

Installation

Now, here is how to install CeGCC. Get the source code from svn, go to cegcc/src directory and launch build-cegcc.sh to compile it. You can modify that file to change the prefix directory, by changing the value of PREFIX. By default, cegcc will be installed in /opt/cegcc

Also, in order to have no problem with the compilation with CeGCC, install autoconf 2.62, automake 1.10.1 and libtool 2.2.6.

Configuration

Now, some environment variables must be set, so that everything compiles flawlessly:

export CEGCC_PATH=$HOME/local/opt/cegcc
export MINGW32CE_PATH=$HOME/local/opt/cegcc
export WINCE_PATH=$HOME/local/wince

export PATH=$CEGCC_PATH/bin:MINGW32CE_PATH/bin:$PATH
export CPPFLAGS="-I$WINCE_PATH/include"
export LDFLAGS="-L$WINCE_PATH/lib -L$CEGCC_PATH/lib"
export LD_LIBRARY_PATH="$WINCE_PATH/bin"
export PKG_CONFIG_PATH="$WINCE_PATH/lib/pkgconfig"

You can add that shell commands to your personal script configuration file. You can also modify the three first variables to suit your needs

With the settings above, all the files will be installed in subdirectories of WINCE_PATH.

Build of Evil

Evil is a library that tries to implement for Windows some Unix function that do not exist on the Microsoft platform. In addition to Windows XP (and maybe below), it tries to support Windows CE platform with the CeGCC framework. There aren't any dependencies. Just download it from svn (trunk/PROTO/evil) and go to the evil subdir. Then,

CFLAGS="-O3 -pipe" ./autogen.sh --host=arm-wince-cegcc --prefix=$WINCE_PATH
make
make install

You should now have the evil libraries and binaries installed in $WINCE_PATH.

Build of Eet

Eet needs Evil (only on Windows, of course), zlib and libjpeg. No Windows CE port of those two last libraries exist, so we must compile them with our little fingers and some approriate patches...

Dependencies

The dependencies are zlib and libjpeg. The Windows CE packages for zlib 1.2.3 and libjpeg 6b are hosted in the CEgcc Sourceforge project. Get the binary and developper zlib packages and the binary and developper libjpeg packages. Unzip all of them (zlib and libjpeg packages) in the $WINCE_PATH directory.

Build Eet

It is better to get Eet from svn. Follow the instructions on that page. Go to the eet/ subdir, then

CFLAGS="-O3 -pipe" ./autogen.sh --host=arm-wince-cegcc --prefix=$WINCE_PATH
make
make install-strip

You should now have eet installed in $WINCE_PATH.

Build of Evas

Evas needs some libraries to be compiled: Freetype and libpng (the latter is needed to load most of the images used in the EFL). Here again these dependencies can be downloaded from the Calaos web site.

Dependencies

Get the binary and developper Freetype packages, and binary and developper libpng packages, and unzip them in the $WINCE_PATH directory. Edit freetype.pc and libpng.pc files that are in $WINCE_PATH/lib/pkgconfig and set the correct $prefix value.

Build Evas

It is better to get Evas from svn. Follow the instructions on that page. Go to the evas/ subdir, then

CFLAGS="-O3 -pipe" ./autogen.sh --host=arm-wince-cegcc --prefix=$WINCE_PATH --disable-fontconfig --disable-image-loader-svg --disable-software-ddraw --disable-software-16-ddraw
make
make install-strip

You should now have evas installed in $WINCE_PATH.

Build of Expedite

Now that you have installed evas, you can try the application that is used to benchmark our favorite canvas library.

Build of Expedite

Follow the instructions on that page to download the source code of expedite. Go to the expedite/ subdir, then

CFLAGS="-O3" ./autogen.sh --host=arm-wince-cegcc --prefix=$WINCE_PATH
make
make install-strip

You should now have expedite installed in $WINCE_PATH.

Installation in the device

You can install the files in your device with synce. Install synce and dccm. Execute:

dccm
synce-serial-start (as root)

create the file expedite_wince.lnk (a text file) in $WINCE_PATH/bin, with, in it:

99#"\program files\efl\expedite.exe" -datadir "\program files\efl\expedite\data" -e wince-fb -p qvga-p

The go to the $WINCE_PATH and create a script file using that code:

#!/bin/sh

pmkdir "\program files\efl"
pmkdir "\program files\efl\evas"
pmkdir "\program files\efl\evas\modules"
pmkdir "\program files\efl\evas\modules\engines"
pmkdir "\program files\efl\evas\modules\engines\buffer"
pmkdir "\program files\efl\evas\modules\engines\buffer\cegcc-arm"
pmkdir "\program files\efl\evas\modules\engines\software_16"
pmkdir "\program files\efl\evas\modules\engines\software_16\cegcc-arm"
pmkdir "\program files\efl\evas\modules\engines\software_16_wince"
pmkdir "\program files\efl\evas\modules\engines\software_16_wince\cegcc-arm"
pmkdir "\program files\efl\evas\modules\loaders"
pmkdir "\program files\efl\evas\modules\loaders\eet"
pmkdir "\program files\efl\evas\modules\loaders\eet\cegcc-arm"
pmkdir "\program files\efl\evas\modules\loaders\jpeg"
pmkdir "\program files\efl\evas\modules\loaders\jpeg\cegcc-arm"
pmkdir "\program files\efl\evas\modules\loaders\pmaps"
pmkdir "\program files\efl\evas\modules\loaders\pmaps\cegcc-arm"
pmkdir "\program files\efl\evas\modules\loaders\png"
pmkdir "\program files\efl\evas\modules\loaders\png\cegcc-arm"
pmkdir "\program files\efl\evas\modules\loaders\xpm"
pmkdir "\program files\efl\evas\modules\loaders\xpm\cegcc-arm"
pmkdir "\program files\efl\evas\modules\savers"
pmkdir "\program files\efl\evas\modules\savers\eet"
pmkdir "\program files\efl\evas\modules\savers\eet\cegcc-arm"
pmkdir "\program files\efl\evas\modules\savers\png"
pmkdir "\program files\efl\evas\modules\savers\png\cegcc-arm"
pmkdir "\program files\efl\expedite"
pmkdir "\program files\efl\expedite\data"

pcp bin/eet.exe ":/program files/efl/eet.exe"
pcp bin/expedite.exe ":/program files/efl/expedite.exe"
pcp bin/expedite_wince.lnk ":/program files/efl/expedite_wince.lnk"
pcp bin/libdl-0.dll ":/program files/efl/libdl-0.dll"
pcp bin/libeet-1.dll ":/program files/efl/libeet-1.dll"
pcp bin/libevas-0.dll ":/program files/efl/libevas-0.dll"
pcp bin/libevil-0.dll ":/program files/efl/libevil-0.dll"
pcp bin/libfreetype-6.dll ":/program files/efl/libfreetype-6.dll"
pcp bin/libjpeg.dll ":/program files/efl/libjpeg.dll"
pcp bin/libmman-0.dll ":/program files/efl/libmman-0.dll"
pcp bin/libpng12-0.dll ":/program files/efl/libpng12-0.dll"
pcp bin/libpng-3.dll ":/program files/efl/libpng-3.dll"
pcp bin/zlib1.dll ":/program files/efl/zlib1.dll"

pcp lib/evas/modules/engines/buffer/cegcc-arm/module.dll ":/program files/efl/evas/modules/engines/buffer/cegcc-arm/engine_buffer.dll"
pcp lib/evas/modules/engines/software_16/cegcc-arm/module.dll ":/program files/efl/evas/modules/engines/software_16/cegcc-arm/engine_software_16.dll"
pcp lib/evas/modules/engines/software_16_wince/cegcc-arm/module.dll ":/program files/efl/evas/modules/engines/software_16_wince/cegcc-arm/engine_software_16_wince.dll"

pcp lib/evas/modules/loaders/eet/cegcc-arm/module.dll ":/program files/efl/evas/modules/loaders/eet/cegcc-arm/loader_eet.dll"
pcp lib/evas/modules/loaders/jpeg/cegcc-arm/module.dll ":/program files/efl/evas/modules/loaders/jpeg/cegcc-arm/loader_jpeg.dll"
pcp lib/evas/modules/loaders/pmaps/cegcc-arm/module.dll ":/program files/efl/evas/modules/loaders/pmaps/cegcc-arm/loader_pmaps.dll"
pcp lib/evas/modules/loaders/png/cegcc-arm/module.dll ":/program files/efl/evas/modules/loaders/png/cegcc-arm/loader_png.dll"
pcp lib/evas/modules/loaders/xpm/cegcc-arm/module.dll ":/program files/efl/evas/modules/loaders/xpm/cegcc-arm/loader_xpm.dll"

pcp lib/evas/modules/savers/eet/cegcc-arm/module.dll ":/program files/efl/evas/modules/savers/eet/cegcc-arm/saver_eet.dll"
pcp lib/evas/modules/savers/png/cegcc-arm/module.dll ":/program files/efl/evas/modules/savers/png/cegcc-arm/saver_png.dll"

pcp share/expedite/data/Kochi.ttf ":/program files/efl/expedite/data/Kochi.ttf"
pcp share/expedite/data/Vera.ttf ":/program files/efl/expedite/data/Vera.ttf"
pcp share/expedite/data/VeraBI.ttf ":/program files/efl/expedite/data/VeraBI.ttf"
pcp share/expedite/data/VeraBd.ttf ":/program files/efl/expedite/data/VeraBd.ttf"
pcp share/expedite/data/VeraIt.ttf ":/program files/efl/expedite/data/VeraIt.ttf"
pcp share/expedite/data/VeraMoBI.ttf ":/program files/efl/expedite/data/VeraMoBI.ttf"
pcp share/expedite/data/VeraMoBd.ttf ":/program files/efl/expedite/data/VeraMoBd.ttf"
pcp share/expedite/data/VeraMoIt.ttf ":/program files/efl/expedite/data/VeraMoIt.ttf"
pcp share/expedite/data/VeraMono.ttf ":/program files/efl/expedite/data/VeraMono.ttf"
pcp share/expedite/data/VeraSe.ttf ":/program files/efl/expedite/data/VeraSe.ttf"
pcp share/expedite/data/VeraSeBd.ttf ":/program files/efl/expedite/data/VeraSeBd.ttf"
pcp share/expedite/data/fonts.alias ":/program files/efl/expedite/data/fonts.alias"
pcp share/expedite/data/fonts.dir ":/program files/efl/expedite/data/fonts.dir"
pcp share/expedite/data/bg.png ":/program files/efl/expedite/data/bg.png"
pcp share/expedite/data/logo.png ":/program files/efl/expedite/data/logo.png"
pcp share/expedite/data/e.png ":/program files/efl/expedite/data/e.png"
pcp share/expedite/data/image.png ":/program files/efl/expedite/data/image.png"
pcp share/expedite/data/bar.png ":/program files/efl/expedite/data/bar.png"
pcp share/expedite/data/frame.png ":/program files/efl/expedite/data/frame.png"
pcp share/expedite/data/pan.png ":/program files/efl/expedite/data/pan.png"
pcp share/expedite/data/tp.png ":/program files/efl/expedite/data/tp.png"
pcp share/expedite/data/tp.yuv ":/program files/efl/expedite/data/tp.yuv"
pcp share/expedite/data/icon_sel.png ":/program files/efl/expedite/data/icon_sel.png"
pcp share/expedite/data/icon_sel2.png ":/program files/efl/expedite/data/icon_sel2.png"
pcp share/expedite/data/text_sel.png ":/program files/efl/expedite/data/text_sel.png"
pcp share/expedite/data/exit.png ":/program files/efl/expedite/data/exit.png"
pcp share/expedite/data/watch.png ":/program files/efl/expedite/data/watch.png"
pcp share/expedite/data/bug.png ":/program files/efl/expedite/data/bug.png"
pcp share/expedite/data/bulb.png ":/program files/efl/expedite/data/bulb.png"
pcp share/expedite/data/camera.png ":/program files/efl/expedite/data/camera.png"
pcp share/expedite/data/colorbox.png ":/program files/efl/expedite/data/colorbox.png"
pcp share/expedite/data/error.png ":/program files/efl/expedite/data/error.png"
pcp share/expedite/data/flower.png ":/program files/efl/expedite/data/flower.png"
pcp share/expedite/data/house.png ":/program files/efl/expedite/data/house.png"
pcp share/expedite/data/mushroom.png ":/program files/efl/expedite/data/mushroom.png"
pcp share/expedite/data/pulse.png ":/program files/efl/expedite/data/pulse.png"
pcp share/expedite/data/typewriter.png ":/program files/efl/expedite/data/typewriter.png"
pcp share/expedite/data/warning.png ":/program files/efl/expedite/data/warning.png"
pcp share/expedite/data/im1.png ":/program files/efl/expedite/data/im1.png"
pcp share/expedite/data/im2.png ":/program files/efl/expedite/data/im2.png"

and execute it. It will copy the files to your device in the "\Program Files\efl" directory.

Then execute the short cut file expedite_winc.lnk. It will execute expedite, using the raw framebuffer backend. Use -e wince-gapi to use the gapi backend (modify the short cut).

Build of Ecore

Ecore needs iconv to compile ecore_txt. Right now, that dependency is not available. It will be soon built.

Dependencies

TODO: compile iconv for ecore_txt.

Build Ecore

It is better to get Ecore from svn. Follow the instructions on that page. Go to the ecore/ subdir, then

CFLAGS="-O3 -pipe" ./autogen.sh --host=arm-wince-cegcc --enable-ecore-wince --prefix=$WINCE_PATH --disable-ecore-con --disable-ecore-x --disable-curl
make
make install-strip

You should now have ecore installed in $WINCE_PATH.

Build of Embryo

Embryo does not need any dependency. Just get it from svn. Follow the instructions on that page. Go to the embryo/ subdir, then

CFLAGS="-O3 -pipe" ./autogen.sh --host=arm-wince-cegcc --prefix=$WINCE_PATH
make
make install-strip

You should now have embryo installed in $WINCE_PATH.

Build of Edje

Edje does not need any dependency. Just get it from svn. Follow the instructions on that page. Go to the edje/ subdir, then

CFLAGS="-O3 -pipe" ./autogen.sh --host=arm-wince-cegcc --prefix=$WINCE_PATH --disable-edje-cc
make
make install-strip

You should now have edje installed in $WINCE_PATH.

Acknowledgment

I would like to thank Raoul Hecky (from the Calaos project) and Ashikase for their great help.