7
edits
m (Work in progress) |
(common.h patch for Qt creator) |
||
(3 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 | ||
== Setup environment (Windows) == | == Setup environment (Windows) == | ||
=== Active Perl === | === Active Perl === | ||
5.6.1 or later, tested with 5.10.1.1007 | 5.6.1 or later, tested with 5.10.1.1007 | ||
Line 10: | Line 10: | ||
http://www.activestate.com/activeperl/downloads/ | http://www.activestate.com/activeperl/downloads/ | ||
=== S60 SDK=== | ===S60 SDK=== | ||
http://forum.nokia.com | http://forum.nokia.com | ||
Line 37: | Line 37: | ||
:http://get.qt.nokia.com/qt/source/qt-symbian-opensource-4.6.2.exe | :http://get.qt.nokia.com/qt/source/qt-symbian-opensource-4.6.2.exe | ||
=== | ===Open C/C++ plug-in=== | ||
http://forum.nokia.com | |||
Used version 1.6 | |||
:http://sw.nokia.com/id/fbe59b85-a621-404b-94d7-94ca818e576a/s60_open_c_cpp_plug_in_v1_6_en.zip | |||
===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 == | |||
===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 | |||
/Symbian/9.2/S60_3rd_FP1/EPOC32/include/e32def.h file. | |||
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 71: | 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). | ||
===TODO=== | ===liblzma=== | ||
Used version: | |||
:http://tukaani.org/xz/xz-4.999.9beta.tar.gz | |||
Extract to carbide workspace and rename folder to xz. | |||
(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 | |||
may make sense to use it. However, also the regular version is running fine on the mobile | |||
phone. | |||
===libbz2=== | |||
Used version: | |||
:http://www.bzip.org/1.0.5/bzip2-1.0.5.tar.gz | |||
Extract to carbide workspace bzip2/src. | |||
==Port projects== | |||
Main porting effort is that symbian does not support autoconf. | |||
===Build configuration and config files=== | |||
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. | |||
==== 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: | |||
* xz/symbian/config.h | |||
Bool type definition changed to int. Should be checked why necessary and whether safe. | |||
* zimlib/symbian/config.h | |||
Change TODO | |||
===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. | |||
Note, that the patches (TODO except PID?) should not break other target platforms and it would make sense to integrate them into the repositories. | |||
=====_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: | |||
====== bzip2====== | |||
:bzip2/src/bzlib.h | |||
Add | |||
<pre> | |||
// Symbian compiler defines _WIN32 in builds for emulator. | |||
#ifdef __SYMBIAN32__ | |||
#undef _WIN32 | |||
#endif | |||
</pre> | |||
before line | |||
<pre> | |||
#ifdef _WIN32 | |||
</pre> | |||
:bzip2/src/bzip2.c | |||
add after | |||
<pre> | |||
#define BZ_LCCWIN32 0 | |||
</pre> | |||
<pre> | |||
#if defined(_WIN32) && !defined(__CYGWIN__)&& !defined(__SYMBIAN32__) | |||
</pre> | |||
======liblzma====== | |||
:xzsrcliblzmaapilzma.h | |||
Add | |||
<pre> | |||
// Symbian compiler defines _WIN32 in builds for emulator. | |||
#ifdef __SYMBIAN32__ | |||
#undef _WIN32 | |||
#endif | |||
</pre> | |||
before | |||
<pre> | |||
#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 | |||
<pre> | |||
// Symbian compiler defines _WIN32 in builds for emulator. | |||
#ifdef __SYMBIAN32__ | |||
#undef _WIN32 | |||
#endif | |||
</pre> | |||
before | |||
<pre> | |||
#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