One day I was sitting at my computer, waiting for my build of S60 to finish. I had run my usual round of build commands and custom scripts to speed up the build if but a little, and was expecting to wait for at least 10-12 min. At this point it occurred to me (well, it had occurred to me before): The Symbian build system is really overkill. What could it be doing that’s taking so long, for something that should be relatively simple: compile and link?
So I thought to myself that this can definitely be improved, and that’s how I started the work on a Symbian make specification that is based entirely on qmake and make (no Symbian build chain stuff, although it uses the tools from there), and runs on Linux.
Then you might say “What about the Raptor build system that is supposed to improve things?”. It is true that Raptor improves a lot of the deficiencies of good ol’ abld, but I still felt that the huge Raptor build system is sooo overkill for something really simple. I like to obey the KISS principle. Call it a personal itch!
With this in mind I have two design goals:
- Ditch all unnecessary file types. This includes bld.inf and MMP files.
- Be fast!
Whether I’ll be able to fulfill them in the end, time will show, but that’s what I’m aiming for at least.
But let’s get into the gory details. Be reminded that the build system is still in the very early stages, and is not ready for for the end user yet, but if you like to tinker with the latest and greatest, read on. Here’s what works currently:
- Running configure.
- Building QtCore.dll with RVCT.
- Running QtCore.dll
- Building user applications with RVCT.
- Running user applications.
Here’s a few things that don’t work yet, but I plan to get them working:
- Building the host tools automatically (this needs to be done manually ATM).
- Building QtCore.dll with GCCE (this doesn’t work with the official port either, but as soon as it works there, it should work here as well).
- Other Qt dlls. QtGui.dll should probably be easy to get compiling, but it needs a few header fixes first.
- Building user applications with GCCE.
- Making the process of building a package automatic.
Here’s one thing that will probably never work:
- Building for the emulator. The emulator won’t run under Wine, so there’s no point in building for it. If the build system gets ported to Windows maybe it’ll be supported, but not before then.
The procedure for getting the system up and running is subject to change as the project goes forward, so instead of posting it here, I have put it in the README.s60-mkspec in the Git repository. To get it, go to http://qt.gitorious.org/+qt-developers/qt/s60-linux-mkspec, and clone the repository from there. Then check out the “working” branch. This branch is often rebased based on the latest work in the topic branches. “master” should not ever be rebased, but many things are missing from there at the time of writing.
Here’s a few short term goals for the project in the following weeks:
- Get the other modules compiling.
- Get the process to be more streamlined (e.g. more like the other platforms)
- Move from ABIv1 to ABIv2. The former is the old way of linking binaries on Symbian. Since this is being superseded by ABIv2, which is binary compatible at run time, but not compile time, it makes sense to only support that.