02 July 2014

Finally, 64-bit Firestorm for OS X

One of the requests we get a lot from folks is for a 64-bit version of Firestorm for Mac users. There have been a few Firestorm releases in 64-bit versions for Windows, and a couple for Linux, but OS X has been a tougher nut to crack. The big problem has been the stack of libraries that needed to be rebuilt for the Mac.

Cinder Roxley took up that challenge about a month ago. There were some universal (64- and 32-bit combined) libraries already, but she went through and redid the rest, and published the results. She also made the necessary changes to Firestorm itself. That was a pile of work, and I'm thankful she did it.

This past week or so, I went through and reproduced her results. The goal here was to make sure everything would build and run on OS X 10.7, the Lion release. In several cases, I had to redo how the libraries were built. There were a couple where the programmer who wrote the library was just too damned smart and checked at the time the library was used in an application that the library was built for the same architecture as the source code used in the application. (Yes, curl and c-ares, I'm looking at you.) That broke rather badly for a universal library.

The biggest headache was in the apr (Apache Portable Runtime) library. I spent two days trying to figure out why it would simply hang at login time, with no error messages or any other indication of a problem. It turns out that, while the library is supposed to work when built as a universal binary, it's subtly broken. I wound up using the same trick I'd used on curl to make that work.

I had to rearrange a couple of things. curl also required a copy of libidn, so I sucked that down, made an autobuild package out of it, and built it. There's also a change in how the colladaom library is packaged: it used to include a binary blob of libminizip, but LL has recently changed the package to build it as part of zlib, instead. I tracked that change.

Many libraries would not build as universal easily. For those, I built 32- and 64-bit versions separately, and used the lipo tool to glue them together. If you want to see how that worked, check out my Bitbucket repositories; everything I did for the libraries is there.

With all that done, I went through, looked over the changes to Firestorm itself, and then pushed them to the master repository. The result builds properly in either 32- or 64-bit versions. (To build a 64-bit binary, you need to use Nicky Dasmijn's version of the autobuild tool and specify the -m64 switch; nothing else changes.) If you're switching from building a 32-bit Firestorm to building a 64-bit version, you should probably specify --clean to make sure you start fresh with everything at 64 bits. You also need to do a --clean when building for OS X from repository revisions after the change (revision 42327 or higher) if you've previously built for revisions before the change (42298 and lower).

It should be noted that with this change, Firestorm no longer supports OS X 10.6 (the Snow Leopard release). LL dropped support for that back in April, and we're following suit. There will be no SL-specific version of this package, like there is no SL-specific version of Firestorm for Linux and Windows. The reason is the same: the SL-specific version includes the Havok library we get from LL, and they have not provided a 64-bit version of that. When they do, we will think hard about dropping the 32-bit OS X version entirely, since any machine that can run Lion can run a 64-bit program.

Unless something breaks badly, this will be part of the next release of Firestorm. We have no plans to release anything before then. There's still a whole lotta debugging goin' on.

Still, i'm happy to have that chore out of the way. it will be interesting to see what difference it makes for users.