This is how I got GnuPoc working with version 1.0 of the Series 60 SDK on Linux/x86.
1. Download the SDK and install it
Download the 1.0 SDK from Forum Nokia and then install it. It might be possible to install it through wine somehow but I installed it in Windows.
2. Download the GnuPoc patch
It’s available from http://gnupoc.sourceforge.net. As of this writing “gnupoc-s60cpp-patch-0.0.5.tar.gz 24. Jan 2003 (patched against version 0.9 of the SDK)” is the latest version. And because it’s for version 0.9 there will be a need for some tweaking as described later.
Extract the patch somewhere and read the instructions.
3. Download my cl_gcc.pm patch
Find it at http://morrdusk.net/files/20030408/cp_gcc.pm.patch.
4. Download the common scripts and tools
It’s on the gnupoc site. The latest version is called “gnupoc-scripts-2003.01.25.tar.gz”.
Extract it somewhere, e.g. in /home/foo/epoc/scripts
5. Download the cross compiler
It’s also available from the gnupoc site. I was lazy and got the binary package.
Extract the package somewhere or build and install the source package if you chose that. I used the default location /usr/local/er6
6. Copy the files
Copy the files from the installed SDK in windows to some location in your Linux filesystem. Let’s say /home/foo/epoc/epoc32. You need to copy the data, include, localisation, release, tools and wins
You have to lowercase the names. One can for this manually but that’s less than one. Doing it with a shell script might work. As I transfered the directories in .zip archives I used the -L flag for unzip when extracting and got everything in lowercase. You might be able to do something similar.
7. Set environment variables
Set EPOCROOT to the directory containing the epoc32 directory. In this case /home/foo/epoc/ Note it requires a trailing slash. Include the $EPOCROOT/epoc32/tools and the cross compilers bin directory in the PATH.
$ cat "export EPOCROOT=/home/foo/epoc/" >> $HOME/.zshrc
$ cat "export PATH=$PATH:$EPOCROOT/epoc32/tools:/usr/local/er6/bin" >> $HOME/.zshrc
$ . $HOME/.zshrc
Make necessary changes if you use another shell than zsh.
8. Fix the source code
Go to /home/foo/epoc/ and run the fixsrc.pl script, like this.
$ scripts/fixsrc.pl epoc32 epoc32_clean
Then clean up:
$ rm -rf epoc32
$ mv epoc32_clean epoc32
9. Apply the patches
Now it’s time to apply the patches. Go to the /home/foo/epoc/epoc32/tools directory and then patch.
$ cd /home/foo/epoc/epoc32/tools
$ patch -p1 < /path/to/the/gnupoc/patch
You’re going to get a reject for the cp_gcc.pm file. So now patch with my patch.
$ cd /home/foo/epoc/epoc32/tools
$ patch -p1 < /path/to/my/patch
10. Fix permissions
$ cd $EPOCROOT/epoc32/tools
$ chmod a+x *.pl bldmake abld
11. Build your project
You should now be able to build a Symbian executable. Change to the directory containing your project’s Bld.inf file and do the following:
$ mv Bld.inf bld.inf
$ bldmake bldfiles
$ abld makefile thumb
$ abld target thumb urel
Update: The last two steps can actually be combined to one by use doing ‘abld build thumb urel’.
If you’re project is including the e32std.h header file you will most likely have to comment out the DECLARE_ROM_ARRAY define on line 3012. I couldn’t find AName, AData nor AType anywhere in the EPOC include files I have. Commenting out the define solved the compile error and it doesn’t seem to affect anything.
Comments
I took most of this from my memory so it’s very possible that I missed a step or some part of a step. If you do try this out and it doesn’t work please inform me of any changes you had to do. Thanks!