Difference between revisions of "User:Cip"

Jump to navigation Jump to search
5,739 bytes added ,  16:07, 29 August 2010
common.h patch for Qt creator
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++ plugin or included in qt?)===
===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===
Used tortoise svn
 
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:


==Port Projects==
<pre>
Main porting effort is that symbian does not support autoconf
//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.  
7

edits

Navigation menu