|
|
|
NavigationPersonal tools |
EFL Windows CE
[edit] IntroductionThis 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. [edit] Installation and configuration of CeGCCThe 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 will be used to provide native port of the EFL. So the cegcc support is dropped. [edit] InstallationNow, here is how to install CeGCC. Get the source code from svn, go to cegcc/src directory and launch build-mingw32ce.sh to compile it. You can modify that file to change the prefix directory, by changing the value of PREFIX. By default, mingw32ce will be installed in /opt/mingw32ce. Also, in order to have no problem with the compilation with CeGCC, install autoconf 2.62, automake 1.10.1 and libtool git. Strangely, libstdc++ import library is not built. So you have to modify the file libstdc+ (for that reason and another one). The file is in /path/to/mingw32ce/arm-mingw32ce/lib. Do the following modifications:
[edit] ConfigurationNow, some environment variables must be set, so that everything compiles flawlessly: Create a file named mingw32ce.sh with this content : #! /bin/sh export CEGCC_PATH=$HOME/local/opt/mingw32ce export MINGW32CE_PATH=$HOME/local/opt/mingw32ce 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" Every time you want to work with mingw32ce compiler, juste source this file with this command : ./mingw32ce.sh 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. [edit] Build of EvilEvil 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" LDFLAGS="$LDFLAGS -Wl,-s" ./autogen.sh --host=arm-mingw32ce --prefix=$WINCE_PATH make make install You should now have the evil libraries and binaries installed in $WINCE_PATH. [edit] Build of EinaEina is a library that implement data types in an very optimized way. It includes also a small set of tools that can be used in most of the EFL. Download it from svn (trunk/eina) and go to the eina subdir. Then, CFLAGS="-O3 -pipe" LDFLAGS="$LDFLAGS -Wl,-s" ./autogen.sh --host=arm-mingw32ce --prefix=$WINCE_PATH make make install You should now have the eina libraries and binaries installed in $WINCE_PATH. [edit] Build of EetEet needs Evil (only on Windows, of course), zlib and libjpeg, which can be found on the CEgcc Sourceforge site. [edit] DependenciesThe 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. [edit] Build EetIt is better to get Eet from svn. Follow the instructions on that page. Go to the eet/ subdir, then CFLAGS="-O3 -pipe" LDFLAGS="$LDFLAGS -Wl,-s" ./autogen.sh --host=arm-mingw32ce --prefix=$WINCE_PATH make make install You should now have eet installed in $WINCE_PATH. [edit] Build of EvasEvas 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. [edit] DependenciesGet 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. [edit] Build EvasIt is better to get Evas from svn. Follow the instructions on that page. Go to the evas/ subdir, then CFLAGS="-O3 -pipe" LDFLAGS="$LDFLAGS -Wl,-s" ./autogen.sh --host=arm-mingw32ce --prefix=$WINCE_PATH make make install You should now have evas installed in $WINCE_PATH. [edit] Build of ExpediteNow that you have installed evas, you can try the application that is used to benchmark our favorite canvas library. [edit] Build of ExpediteFollow the instructions on that page to download the source code of expedite. Go to the expedite/ subdir, then CFLAGS="-O3 -pipe" LDFLAGS="$LDFLAGS -Wl,-s" ./autogen.sh --host=arm-mingw32ce --prefix=$WINCE_PATH make make install You should now have expedite installed in $WINCE_PATH. [edit] Build of EcoreEcore needs iconv to compile ecore_txt. Right now, that dependency is not available. It will be soon built. [edit] DependenciesTODO: compile iconv for ecore_txt. [edit] Build EcoreIt is better to get Ecore from svn. Follow the instructions on that page. Go to the ecore/ subdir, then CFLAGS="-O3 -pipe" LDFLAGS="$LDFLAGS -Wl,-s" ./autogen.sh --host=arm-mingw32ce --prefix=$WINCE_PATH make make install You should now have ecore installed in $WINCE_PATH. [edit] Build of EmbryoEmbryo 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" LDFLAGS="$LDFLAGS -Wl,-s" ./autogen.sh --host=arm-mingw32ce --prefix=$WINCE_PATH make make install You should now have embryo installed in $WINCE_PATH. [edit] Build of EdjeEdje 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" LDFLAGS="$LDFLAGS -Wl,-s" ./autogen.sh --host=arm-mingw32ce --prefix=$WINCE_PATH make make install You should now have edje installed in $WINCE_PATH. [edit] Installation in the deviceYou 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 Then go to the $WINCE_PATH and create a script file named efl_zip.sh using that code: #!/bin/sh rm -rf efl/ rm -f efl.zip mkdir -p efl/eina/mp mkdir -p efl/evas/modules/engines/buffer/mingw32ce-arm/ mkdir -p efl/evas/modules/engines/software_16/mingw32ce-arm/ mkdir -p efl/evas/modules/engines/software_16_wince/mingw32ce-arm/ mkdir -p efl/evas/modules/engines/software_generic/mingw32ce-arm/ mkdir -p efl/evas/modules/loaders/eet/mingw32ce-arm/ mkdir -p efl/evas/modules/loaders/jpeg/mingw32ce-arm/ mkdir -p efl/evas/modules/loaders/pmaps/mingw32ce-arm/ mkdir -p efl/evas/modules/loaders/png/mingw32ce-arm/ mkdir -p efl/evas/modules/loaders/xpm/mingw32ce-arm/ mkdir -p efl/evas/modules/savers/eet/mingw32ce-arm/ mkdir -p efl/evas/modules/savers/png/mingw32ce-arm/ cp bin/eet.exe efl/ cp bin/libdl-0.dll efl/ cp bin/libevil-0.dll efl/ cp bin/libeina-0.dll efl/ cp bin/libeet-1.dll efl/ cp bin/libevas-0.dll efl/ cp bin/libecore-0.dll efl/ cp bin/libecore_evas-0.dll efl/ cp bin/libecore_job-0.dll efl/ cp bin/libecore_wince-0.dll efl/ cp bin/libembryo-0.dll efl/ cp bin/libedje-0.dll efl/ arm-mingw32ce-strip efl/libdl-0.dll arm-mingw32ce-strip efl/libevil-0.dll arm-mingw32ce-strip efl/libeina-0.dll arm-mingw32ce-strip efl/libeet-1.dll arm-mingw32ce-strip efl/libevas-0.dll arm-mingw32ce-strip efl/libecore-0.dll arm-mingw32ce-strip efl/libecore_evas-0.dll arm-mingw32ce-strip efl/libecore_job-0.dll arm-mingw32ce-strip efl/libecore_wince-0.dll arm-mingw32ce-strip efl/libembryo-0.dll arm-mingw32ce-strip efl/libedje-0.dll cp lib/eina/mp/eina_chained_mempool.dll efl/eina/mp cp lib/eina/mp/eina_fixed_bitmap.dll efl/eina/mp cp lib/eina/mp/pass_through.dll efl/eina/mp arm-mingw32ce-strip efl/eina/mp/eina_chained_mempool.dll arm-mingw32ce-strip efl/eina/mp/eina_fixed_bitmap.dll arm-mingw32ce-strip efl/eina/mp/pass_through.dll cp lib/evas/modules/engines/buffer/mingw32ce-arm/module.dll efl/evas/modules/engines/buffer/mingw32ce-arm/engine_buffer.dll cp lib/evas/modules/engines/software_16/mingw32ce-arm/module.dll efl/evas/modules/engines/software_16/mingw32ce-arm/engine_software_16.dll cp lib/evas/modules/engines/software_16_wince/mingw32ce-arm/module.dll efl/evas/modules/engines/software_16_wince/mingw32ce-arm/engine_software_16_wince.dll cp lib/evas/modules/engines/software_generic/mingw32ce-arm/module.dll efl/evas/modules/engines/software_generic/mingw32ce-arm/engine_software_generic.dll cp lib/evas/modules/loaders/eet/mingw32ce-arm/module.dll efl/evas/modules/loaders/eet/mingw32ce-arm/loader_eet.dll cp lib/evas/modules/loaders/jpeg/mingw32ce-arm/module.dll efl/evas/modules/loaders/jpeg/mingw32ce-arm/loader_jpeg.dll cp lib/evas/modules/loaders/pmaps/mingw32ce-arm/module.dll efl/evas/modules/loaders/pmaps/mingw32ce-arm/loader_pmaps.dll cp lib/evas/modules/loaders/png/mingw32ce-arm/module.dll efl/evas/modules/loaders/png/mingw32ce-arm/loader_png.dll cp lib/evas/modules/loaders/xpm/mingw32ce-arm/module.dll efl/evas/modules/loaders/xpm/mingw32ce-arm/loader_xpm.dll cp lib/evas/modules/savers/eet/mingw32ce-arm/module.dll efl/evas/modules/savers/eet/mingw32ce-arm/saver_eet.dll cp lib/evas/modules/savers/png/mingw32ce-arm/module.dll efl/evas/modules/savers/png/mingw32ce-arm/saver_png.dll arm-mingw32ce-strip efl/evas/modules/engines/buffer/mingw32ce-arm/engine_buffer.dll arm-mingw32ce-strip efl/evas/modules/engines/software_16/mingw32ce-arm/engine_software_16.dll arm-mingw32ce-strip efl/evas/modules/engines/software_16_wince/mingw32ce-arm/engine_software_16_wince.dll arm-mingw32ce-strip efl/evas/modules/engines/software_generic/mingw32ce-arm/engine_software_generic.dll arm-mingw32ce-strip efl/evas/modules/loaders/eet/mingw32ce-arm/loader_eet.dll arm-mingw32ce-strip efl/evas/modules/loaders/jpeg/mingw32ce-arm/loader_jpeg.dll arm-mingw32ce-strip efl/evas/modules/loaders/pmaps/mingw32ce-arm/loader_pmaps.dll arm-mingw32ce-strip efl/evas/modules/loaders/png/mingw32ce-arm/loader_png.dll arm-mingw32ce-strip efl/evas/modules/loaders/xpm/mingw32ce-arm/loader_xpm.dll arm-mingw32ce-strip efl/evas/modules/savers/eet/mingw32ce-arm/saver_eet.dll arm-mingw32ce-strip efl/evas/modules/savers/png/mingw32ce-arm/saver_png.dll cp bin/libfreetype-6.dll efl/ cp bin/jpeg62.dll efl/ cp bin/libpng12-0.dll efl/ cp bin/libpng-3.dll efl/ cp bin/zlib1.dll efl/ zip -r -9 efl.zip efl/ Go to the $WINCE_PATH and create another script file named expedite_zip.sh using that code: #!/bin/sh rm -rf efl/ mkdir -p efl/expedite/data/ cp bin/expedite.exe efl/ cp share/expedite/data/Kochi.ttf efl/expedite/data/Kochi.ttf cp share/expedite/data/Vera.ttf efl/expedite/data/Vera.ttf cp share/expedite/data/VeraBI.ttf efl/expedite/data/VeraBI.ttf cp share/expedite/data/VeraBd.ttf efl/expedite/data/VeraBd.ttf cp share/expedite/data/VeraIt.ttf efl/expedite/data/VeraIt.ttf cp share/expedite/data/VeraMoBI.ttf efl/expedite/data/VeraMoBI.ttf cp share/expedite/data/VeraMoBd.ttf efl/expedite/data/VeraMoBd.ttf cp share/expedite/data/VeraMoIt.ttf efl/expedite/data/VeraMoIt.ttf cp share/expedite/data/VeraMono.ttf efl/expedite/data/VeraMono.ttf cp share/expedite/data/VeraSe.ttf efl/expedite/data/VeraSe.ttf cp share/expedite/data/VeraSeBd.ttf efl/expedite/data/VeraSeBd.ttf cp share/expedite/data/fonts.alias efl/expedite/data/fonts.alias cp share/expedite/data/fonts.dir efl/expedite/data/fonts.dir cp share/expedite/data/bg.png efl/expedite/data/bg.png cp share/expedite/data/logo.png efl/expedite/data/logo.png cp share/expedite/data/e.png efl/expedite/data/e.png cp share/expedite/data/image.png efl/expedite/data/image.png cp share/expedite/data/bar.png efl/expedite/data/bar.png cp share/expedite/data/frame.png efl/expedite/data/frame.png cp share/expedite/data/pan.png efl/expedite/data/pan.png cp share/expedite/data/tp.png efl/expedite/data/tp.png cp share/expedite/data/tp.yuv efl/expedite/data/tp.yuv cp share/expedite/data/icon_sel.png efl/expedite/data/icon_sel.png cp share/expedite/data/icon_sel2.png efl/expedite/data/icon_sel2.png cp share/expedite/data/text_sel.png efl/expedite/data/text_sel.png cp share/expedite/data/exit.png efl/expedite/data/exit.png cp share/expedite/data/watch.png efl/expedite/data/watch.png cp share/expedite/data/bug.png efl/expedite/data/bug.png cp share/expedite/data/bulb.png efl/expedite/data/bulb.png cp share/expedite/data/camera.png efl/expedite/data/camera.png cp share/expedite/data/colorbox.png efl/expedite/data/colorbox.png cp share/expedite/data/error.png efl/expedite/data/error.png cp share/expedite/data/flower.png efl/expedite/data/flower.png cp share/expedite/data/house.png efl/expedite/data/house.png cp share/expedite/data/mushroom.png efl/expedite/data/mushroom.png cp share/expedite/data/pulse.png efl/expedite/data/pulse.png cp share/expedite/data/typewriter.png efl/expedite/data/typewriter.png cp share/expedite/data/warning.png efl/expedite/data/warning.png cp share/expedite/data/im1.png efl/expedite/data/im1.png cp share/expedite/data/im2.png efl/expedite/data/im2.png zip -r -9 expedite.zip efl/ Put the 2 zip files efl.zip and expedite.zip into your device (using synce, or a SD card, or the wifi), then unzip them in the root directory. It will copy the files to your device in the "\efl" directory. Then execute the short cut file expedite_wince.lnk. It will execute expedite, using the raw framebuffer backend. Use -e wince-gapi to use the gapi backend (modify the short cut). [edit] AcknowledgmentI would like to thank Raoul Hecky (from the Calaos project), Nicolas Aguirre, Lars Munch and Ashikase for their great help. |