This guide is out of date and is only kept for reference. Many of the links are broken.
This is a guide to setting up a development environment on an Intel based Mac. It's quite easy to do; it's just a question of installing the right files in the right locations.
Here are the installation steps in summary,
Note: When a Linux distribution is installed on Zaurus NAND memory, it is common practice to refer to it as a "ROM" because during normal usage it is mounted read only.
When creating a new application for the Zaurus I usually begin by writing a prototype application on desktop Linux using Qt3. Debugging by gdb and valgrind are much easier than trying to debug on the Zaurus itself. I then port from Qt3 to Qt2 when I target the Zaurus. Some bugs can only be encountered when using the target platform so I have found myself running gdb and strace on the Zaurus.
On a Mac, Qt3 is not available, however, you may wish to target Qt3 for Zubuntu or Debian on Zaurus. If you prototype on a Mac you will have to do it in Qt4. This will make porting to Qt2 for the Sharp ROM more difficult.
On the Sharp ROM, note that QTextEdit is completely absent. You will also notice that QPainter has been compiled without transforms. Config is used instead of QSettings. It's not all bad though, you get QCop that can be used to send messages to other applications. There are some special classes for handling font selection instead of using a dialog. File dialogs are also missing but there are the FileSelector and DocLnk objects in their place, the documentation for this bit is poorly written so I've never used them. But do look for Qtopia specific classes as they make the application more Zaurus-like.
Apart from the cross compiler, we're going to put together all our dev files in a directory I'll call BuildSystem. So first, decide where you want to keep BuildSystem. On my drive it lives at ~/Zaurus/BuildSystem and I keep my Zaurus projects in ~/Zaurus/ProjectName
When you have set up everything and tested it; you can move things around to fit your tastes.
You need a cross compiler to build binaries for ARM on a Mac: Download Xtoolchain from QuantumSTEP. (Direct link to Intel package)
Extract the archive, it will go directly into /Developer/...
tar xvfz i386-apple-darwin_gcc-2.95.3-glibc-2.2.2_arm-quantumstep-linux-gnu.tgz
I was quite surprised that the archive has an absolute path. If you want to change the destination to a local path, you can rewrite it to remove the first slash like this:
gzip -d i386-apple-darwin_gcc-2.95.3-glibc-2.2.2_arm-quantumstep-linux-gnu.tgz
pax -r -s ',^/,,' -f i386-apple-darwin_gcc-2.95.3-glibc-2.2.2_arm-quantumstep-linux-gnu.tar
The Qt files that come with Xtoolchain in /Developer/Xtoolchain/i386-apple-darwin/gcc-2.95.3-glibc-2.2.2/arm-quantumstep-linux-gnu/arm-quantumstep-linux-gnu/opt/Qtopia are built for i386 Linux so aren't much use on a Mac. ARM files are included in the Sharp directory however we also want to install the Sharp libraries so we're going to get the Sharp SDK in the next step and that includes the same files: You can go ahead and delete the Qtopia directory now.
Now we're going to
We're going to download the SDK using curl.
cd ~/Zaurus/BuildSystem
mkdir SharpSDK
cd SharpSDK
curl -O http://support.ezaurus.com/developer/doc/reference/20021227/sharpsdk-pub-20021227.tar.gz
tar xvfz sharpsdk-pub-20021227.tar.gz
It's time to set up Qtopia. Let's make a directory to keep important sources in:
mkdir ~/Zaurus/BuildSystem/Sources
Download qtopia-free-1.6.1.tar.gz and qt-embedded-2.3.2.tar.gz from the Sourceforge Qt Palmtop Environment files page.
Uncompress these archives in the Sources directory:
cd ~/Zaurus/BuildSystem/Sources
tar xvfz qtopia-free-1.6.1.tar.gz
tar xvfz qt-embedded-2.3.2.tar.gz
Now, let's hook up some nice links to QPE:
cd ~/Zaurus/BuildSystem
mkdir QPE
cd QPE
ln -s ../SharpSDK/sharp/lib lib
ln -s ../Sources/qtopia-free-1.6.1/include include
Now we're going set up Qt embedded and the Sharp support libraries.
Make a directory for Qt embedded:
mkdir ~/Zaurus/BuildSystem/QT2
Again we'll set up some nice links:
cd ~/Zaurus/BuildSystem/QT2
ln -s ../SharpSDK/sharp/lib lib
ln -s ../Sources/qt-2.3.2/include include
We also have some Qt2 tools that run on Mac and are needed for the build process. moc is the meta object compiler, uic is the user interface compiler for .ui files and designer is a GUI layout program. Download qt2-mactools.tbz and uncompress here:
cd ~/Zaurus/BuildSystem/QT2
tar xvfj qt2-mactools.tbz
In order to compile for Qt you need to use the tmake system. tmake is a Perl script that will generate a Makefile and all the dependencies for Qt. It is not a good idea to skip tmake and think that you are going to manually write a makefile because you need to use the meta object compiler to process all the macros that make Qt's signals and slots system work. Use tmake, it's easier.
Download the tmake configuration files: tmake-arm.tbz and install as follows:
tar xvfj tmake-arm.tbz
cp -r macx-sharp-g++ ~/Zaurus/BuildSystem/SharpSDK/tmake/lib/qws
When using the dev environment, tmake is quite easy to use. Create a project file, e.g. foobar.pro and then
tmake foobar.pro > Makefile
tmake will be in your path after running the dev script given below. More documentation for tmake can be found online, also look at the documentation for qmake which is very similar.
Copy and paste this code into a file, and save it as dev-arm-mac.sh
#!/bin/bash
ZSDKHOME=/Users/lyndon/Zaurus/BuildSystem
CROSSCOMPILE=/Developer/Xtoolchain/i386-apple-darwin/gcc-2.95.3-glibc-2.2.2/arm-quantumstep-linux-gnu
QPEDIR=$ZSDKHOME/QPE
QTDIR=$ZSDKHOME/QT2
PATH=$QTDIR/bin:$CROSSCOMPILE/bin:$PATH
TMAKEPATH=$ZSDKHOME/SharpSDK/tmake/lib/qws/macx-sharp-g++/
DYLD_LIBRARY_PATH=$QTDIR/maclib:$DYLD_LIBRARY_PATH
PS1='!sharp-dev-arm:\u@\h:\w\$ '
export QPEDIR QTDIR PATH TMAKEPATH DYLD_LIBRARY_PATH PS1 ZSDKHOME
Keep this script in your BuildSystem directory unless you have a better place. Now whenever you want to do some development work, open a terminal and do a
source ~/Zaurus/BuildSystem/dev-arm-mac.sh
All the paths will be set up for tmake, gcc, Qt, etc.
Add the following lines to your project files when you compile for Zaurus:
INCLUDEPATH += $(QPEDIR)/include
LIBS += -lqpe
I assume you'll know when to add libsl etc. to the LIBS line.
We're going to add a couple of directories for future expansion:
mkdir ~/Zaurus/BuildSystem/include
mkdir ~/Zaurus/BuildSystem/lib
Now, when you build a library for your Zaurus, install it into lib and the header files to include. When you are writing a project file using libfoo that you installed this way, add the following lines:
INCLUDEPATH += $(ZSDKHOME)/include
LIBS += -L$(ZSDKHOME)/lib -lfoo
Open your web browser and using the open file menu option, open BuildSystem/Sources/qtopia-free-1.6.1/doc/index.html and bookmark it.
So you've followed the steps above, you can now build an application for your Zaurus. Great, now let's test it.
Transfer the binary to your Zaurus and run the program from the shell. If you do it this way, you won't be able to switch apps using Qtopia because there won't be an icon for your program on the task bar. As soon as you get rid of the basic bugs then set up the .desktop file and an icon. Now when you run it, it will appear in the taskbar even if you start it from the shell.
Finally strip the binary using arm-quantumstep-linux-strip, build an ipkg file using ipkg-build.sh and test the ipk as an installable file.
source ~/Zaurus/BuildSystem/dev-arm-mac.sh
./configure --help
./configure --host arm-quantumstep-linux-gnu --with-shared
STRIP = arm-quantumstep-linux-gnu-strip
.
Other tools to look for are ar, gcc, g++, nm and ranlib