Tag Archives: build

Build Thunderbird Faster on Windows

There’s no denying it: the vast majority of Thunderbird users are using some flavour of Windows.

So it’s a bit strange that I do most of my development on Linux, and use Thunderbird most regularly on Mac OSX.

Therefore, I’ve recently gotten a hold of a new, super-powerful Windows 7 box.  Furthermore, in an effort to better understand what my users go through and experience, I’ll also be using Thunderbird on Windows as my primary mechanism for reading my mail.

So that’s all good, but there’s one problem:  building Thunderbird on Windows takes forever.

But it doesn’t have to.

So the Simple Build Instructions for Thunderbird instructs developers to get the MozillaBuild package, which includes a bunch of the tools you need to get Mozilla stuff up and building on Windows.  One of those tools is “make“, which is a tool that originates from the world of UNIX and Linux.

The problem with the make included with MozillaBuild is that it doesn’t take advantage of multiple processor cores on Windows.  So even if you have a crazy-powerful 8-core machine, when you just use the vanilla “make -f client.mk” command, you’re only going to be using one of your cores.

Enter pymake.  Pymake is a Mozilla-maintained mostly-compatible implementation of make in Python.  The advantage?  On Windows, we can finally use all of our cores.

So here’s how to set that up.

  1. I assume you’ve followed the instructions for setting up your Windows build environment, laid out here.
  2. I also assume you’ve checked out a copy of comm-central, have set up your .mozconfig, and have run “python client.py checkout” to grab Gecko, etc.
  3. If your Windows username has a space in it, like “Mike Conley”, you might want to create a new Windows account for the stuff we’re about to do.  I use “mconley”.
  4. You’re going to want to alias pymake – open up an editor, and create a file called .profile under C:/Users/[username]/  (I assume you’re on the C drive anyhow, and are using Windows 7)
  5. In that .profile file, put in the following line:   alias pymake=/c/Users/[username]/[path to comm-central]/mozilla/build/pymake/make.py
  6. Restart your shell, and ensure there are no errors in the first couple of lines that spring up at the top.  If you type pymake, it should say towards the bottom “No makefile found”.
  7. Go to the parent of your comm-central directory, and create a new directory for your obj-dir (where your binaries and executable will eventually end up).\
  8. In that directory, run the command:  “../comm-central/configure” – so we’re invoking the configure within the comm-central directory, but within the obj-dir folder we created
  9. The configure might fail while looking for the compiler.  Just try it again until it works.  *sigh*.
  10. Once the configure command is done, within your obj-dir folder, type:   pymake -sj4 (or 8, if you have 8 cores)

And blam, now you’re cookin’!

I can get a debug build done, from scratch, in about 22 minutes.  Woo!


You can also replace steps 8 – 10 with the following:

  1. In your objdir, type:  MOZCONFIG=../srcdir/.mozconfig pymake -sj6 -f ../srcdir/client.mk
  2. Eat sandwich while build completes

Adventure Games

I wouldn’t consider myself a “gamer” by any stretch of the imagination.

Just watch me try to play Halo – I’ll run around in circles, button-jamming before somebody mercifully puts me out of my misery.

And that’s common across games that involve me running around with a gun.  With the exception of Portal (which was incredible), the whole first person shooter genre kind of bores me.  I’m not really impressed by amazing 3d graphics, or physics/particle engines.  I just…don’t care.  I just don’t get the same pleasure out of blowing up and shooting enemies that other people seem to.

I like something a bit more cerebral.  I like story (which is why Portal is an exception).  I like puzzle solving.  I like thinking for a character, not just running around, pulling the trigger for a character.

And this is the way it’s always been for me.

But ever since I was a kid, I’ve had a real passion for adventure games. I used to play all of the old Sierra stuff…Kings Quest I-VI (before it turned lame – VII onward), the Space Quest series (5 being my favourite, but I have a soft spot for the original), the Gabriel Knight series…

And that’s just Sierra.  LucasArts brought about Sam and Max, Day of the Tentacle (a masterpiece), The Monkey Island Series (also brilliant), The Dig (my personal favourite), Full Throttle, Grim Fandango

There was Myst, and Riven. So good.  And can’t forget Zork.

Simon The Sorcerer 1, 2, and 3…

I loved these games.  I still love these games.  I love being integrated so deeply into an interesting story, and having to rely on my wits and intelligence to solve problems.  I get a cerebral kick out of solving the various puzzles that the game designers throw at me.

And what these games all compel me to do, without fail….is:  to make one.  Make an adventure game.  Tell a good story.  Suck the player in, and throw puzzles, deep character, and thick story/plot at them.  After I finish one of these games, I usually end up Googling “how to make an adventure game”, and spending the rest of my night reading up on it.  And anytime I’m on a holiday break, and have nothing to do…I always gravitate to the subject.

I’ve read all about LucasArts SCUMM and GrimE engines…Sierra’s AGI and SCI engines… Adventure Soft’s AGOS engine…  and I’m grateful for the ScummVM and FreeSCI folk who share my passion, and have allowed me to play all of these old games on my Linux box.  Reading about these engines just makes me want to use them to build my own game.

I could try to use a number of closed-source adventure game engines out there – I hear the Wintermute engine is pretty good.  So is Adventure Game Studio.

But somehow…they never satisfy me.

The MAD adventure game engine is open source, and has some good ideas…but the code is also a bit of a mess, and hasn’t been maintained since 2003.

So I’ve always wanted to build my own adventure game engine, and solve all of the problems that one would have to in order to make it work:  path finding, graphics, animation, scripting, layering/masking, fonts…  Lots of neat sub-problems.   It’d be hard, but I also think it’d be a lot of fun.

So just watch me…it’ll happen someday.