7
edits
(Work in progress) |
(common.h patch for Qt creator) |
||
(2 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
Work in progress | Work in progress (Files not yet uploaded, qt gui app section missing) | ||
HOWTO build zimlib for Symbian | HOWTO build zimlib for Symbian | ||
Line 45: | Line 45: | ||
===SVN client=== | ===SVN client=== | ||
Subclipse can be integrated in the Carbide.c++ IDE. For installation instructions have a look at: | |||
:http://wiki.forum.nokia.com/index.php/Using_Subclipse_with_Carbide.c%2B%2B | |||
Alternatively for example tortoisesvn can be used: | |||
:http://tortoisesvn.net/downloads | :http://tortoisesvn.net/downloads | ||
== Patch SDK == | == Patch SDK == | ||
===e32def.h=== | |||
Do the fix described in http://wiki.forum.nokia.com/index.php/KIS001022_-_Open_C:_Initializer_element_is_not_constant_error_on_GCCE_platform to the | Do the fix described in http://wiki.forum.nokia.com/index.php/KIS001022_-_Open_C:_Initializer_element_is_not_constant_error_on_GCCE_platform to the | ||
/Symbian/9.2/S60_3rd_FP1/EPOC32/include/e32def.h file. | /Symbian/9.2/S60_3rd_FP1/EPOC32/include/e32def.h file. | ||
Line 56: | Line 61: | ||
Else libzma won´t compile. (/Symbian/9.2/S60_3rd_FP1/EPOC32/include/e32def.h:2803: error: initializer element is not constant). | Else libzma won´t compile. (/Symbian/9.2/S60_3rd_FP1/EPOC32/include/e32def.h:2803: error: initializer element is not constant). | ||
===Emulator=== | |||
While not strictly necessary, I'd recommend to install the following patch. Without it I had problems running the emulator | |||
for the QT reader application. | |||
http://wiki.forum.nokia.com/index.php/TSS000651_-_NCNList_KERN-EXEC_3_panic_when_starting_the_S60_3rd_Edition,_FP1_emulator | |||
==Install sources== | ==Install sources== | ||
Line 85: | Line 95: | ||
are currently not supported on symbian. (And probably support does not make to much sense anyway). | are currently not supported on symbian. (And probably support does not make to much sense anyway). | ||
===liblzma=== | |||
===liblzma= | |||
Used version: | Used version: | ||
:http://tukaani.org/xz/xz-4.999.9beta.tar.gz | :http://tukaani.org/xz/xz-4.999.9beta.tar.gz | ||
Line 103: | Line 101: | ||
Extract to carbide workspace and rename folder to xz. | Extract to carbide workspace and rename folder to xz. | ||
(Carbide does not like the - in the folder name.) | (Carbide does not like the - in the folder name.) | ||
There is also an embedded, more lightweight, version available, I have not tried that yet but | There is also an embedded, more lightweight, version available, I have not tried that yet but | ||
Line 125: | Line 113: | ||
Extract to carbide workspace bzip2/src. | Extract to carbide workspace bzip2/src. | ||
==Port projects== | ==Port projects== | ||
Main porting effort is that symbian does not support autoconf. | Main porting effort is that symbian does not support autoconf. | ||
===Build configuration=== | |||
===Build configuration and config files=== | |||
Symbian uses group/<projectname>.mmp and group/bld.inf to configure the build process. | Symbian uses group/<projectname>.mmp and group/bld.inf to configure the build process. | ||
Additionally for some of libraries (liblzma) config.h files, for unix builds generated with autoconfs have to be added. | Additionally for some of libraries (liblzma) config.h files, for unix builds generated with autoconfs have to be added. | ||
==== Install buildfiles==== | |||
Close Carbide.c++. | |||
Extract buildandconfig.zip TODO to the workspace containing the libraries. | |||
Open carbide.c++. | |||
Select File/Import | |||
Choose General/Existing Projects into Workspace | |||
Select root directory: The workspace. (default C:SymbianCarbideworkspace) | |||
Finish import. | |||
==== Buildfile settings ==== | |||
The .mmp files defines - amongst others - the source files, include path, libraries, and | |||
target file. | |||
bld.inf mainly serves to select the include files to be exported. | |||
====config.h settings==== | |||
The config.h files have been generate in cygwin with autoconf and have been manually changed until build has been successul. Two changes worth to mention here: | The config.h files have been generate in cygwin with autoconf and have been manually changed until build has been successul. Two changes worth to mention here: | ||
* xz/symbian/config.h | * xz/symbian/config.h | ||
Line 154: | Line 151: | ||
===Source patches=== | |||
Basically you can extract sourcepatches.zip into the workspace and overwrite existing files. However, this will | |||
cause problems if different versions of the library sources are used, therefore it is recommended to do the patches manually as described in the following sections. | |||
===_WIN32 defines === | Note, that the patches (TODO except PID?) should not break other target platforms and it would make sense to integrate them into the repositories. | ||
Some | |||
=====_WIN32 defines ===== | |||
Some of the libs use _WIN32 to define some configurations. While this is not a problem for builds for the device, it causes problems in builds for the emulator, as it defines _WIN32 as well. | |||
Therefore the source files have to be changed so that in case __SYMBIAN32__ is defined _WIN32 is ignored. The following changes have to be done: | Therefore the source files have to be changed so that in case __SYMBIAN32__ is defined _WIN32 is ignored. The following changes have to be done: | ||
====== bzip2====== | |||
:bzip2/src/bzlib.h | |||
Add | Add | ||
<pre> | |||
// Symbian compiler defines _WIN32 in builds for emulator. | // Symbian compiler defines _WIN32 in builds for emulator. | ||
#ifdef __SYMBIAN32__ | #ifdef __SYMBIAN32__ | ||
#undef _WIN32 | #undef _WIN32 | ||
#endif | #endif | ||
</pre> | |||
before line | before line | ||
<pre> | |||
#ifdef _WIN32 | |||
</pre> | |||
:bzip2/src/bzip2.c | |||
add after | add after | ||
<pre> | |||
#define BZ_LCCWIN32 0 | #define BZ_LCCWIN32 0 | ||
</pre> | |||
<pre> | |||
#if defined(_WIN32) && !defined(__CYGWIN__)&& !defined(__SYMBIAN32__) | #if defined(_WIN32) && !defined(__CYGWIN__)&& !defined(__SYMBIAN32__) | ||
</pre> | |||
======liblzma====== | |||
:xzsrcliblzmaapilzma.h | |||
Add | Add | ||
<pre> | |||
// Symbian compiler defines _WIN32 in builds for emulator. | // Symbian compiler defines _WIN32 in builds for emulator. | ||
#ifdef __SYMBIAN32__ | #ifdef __SYMBIAN32__ | ||
#undef _WIN32 | #undef _WIN32 | ||
#endif | #endif | ||
</pre> | |||
before | before | ||
<pre> | |||
#ifndef LZMA_API_IMPORT | #ifndef LZMA_API_IMPORT | ||
</pre> | |||
:xzsrcliblzmacommoncommon.h | |||
Only required if QT creator is used for building. For carbide it appearantly works without this patch: | |||
<pre> | |||
#define lzma_next_strm_init(func, strm, ...) | |||
</pre> | |||
to | |||
<pre> | |||
#define lzma_next_strm_init(func, strm, variableargs...) | |||
</pre> | |||
and | |||
<pre> | |||
(strm)->allocator, __VA_ARGS__); | |||
</pre> | |||
to | |||
<pre> | |||
(strm)->allocator, variableargs); | |||
</pre> | |||
======zimlib====== | |||
:zimlibincludezimzim.h | |||
Add | Add | ||
<pre> | |||
// Symbian compiler defines _WIN32 in builds for emulator. | // Symbian compiler defines _WIN32 in builds for emulator. | ||
#ifdef __SYMBIAN32__ | #ifdef __SYMBIAN32__ | ||
#undef _WIN32 | #undef _WIN32 | ||
#endif | #endif | ||
</pre> | |||
before | before | ||
<pre> | |||
#ifdef _WIN32 | #ifdef _WIN32 | ||
</pre> | |||
=====Other===== | |||
======zimlib====== | |||
:zimlibsrcuuid.cpp | |||
add | |||
<pre> | |||
#include <unistd.h> | |||
</pre> | |||
If this is a problem for other builds a #ifdef __SYMBIAN32__ would have to be added additionally. | |||
==Build== | |||
With Project/Build All Configurations each of the projects can be built. | |||
Build zimlib as last project. | |||
==Use== | |||
To use zimlib in a symbian project the following line have to be included into the projects mmp file: | |||
<pre> | |||
SYSTEMINCLUDE epoc32includestdapis | |||
SYSTEMINCLUDE epoc32include | |||
SYSTEMINCLUDE epoc32includestdapissys | |||
SYSTEMINCLUDE epoc32includestdapisstlport | |||
// Using main() as entry point | |||
STATICLIBRARY libcrt0.lib | |||
LIBRARY libc.lib | |||
LIBRARY euser.lib | |||
LIBRARY libstdcpp.lib | |||
STATICLIBRARY zimlib.lib | |||
STATICLIBRARY bzip2.lib | |||
STATICLIBRARY liblzma.lib | |||
LIBRARY libm.lib | |||
LIBRARY libz.lib | |||
OPTION CW -wchar_t on | |||
</pre> | |||
Additionally the heap and stacksize should be increased, for example by: | |||
<pre> | |||
//Deault heapsize not large enough to decrypt lzma | |||
EPOCSTACKSIZE 0x10000 | |||
EPOCHEAPSIZE 0x5000 0x1000000 | |||
</pre> | |||
==Install on phone== | ==Install on phone== | ||
TODO qt sample app description still missing | |||
Tested on N82. Should work on all S60 3rd edition FP1 (e.g. N95), and later. | Tested on N82. Should work on all S60 3rd edition FP1 (e.g. N95), and later. |
edits