In this series, we're going to look at clobber builds - what they are, why they're needed, and how we can make them a thing of the past. This is part 1 of the series.
Last time when looking at building mozilla-central with tup, we ran into some issues with converting the various m-c data formats into tup rules. In particular, the time to parse all the data is way slower than necessary, and the feature used to parse the data is not yet supported on Windows. In this post we'll look at an alternate method, and compare the pros & cons. Then we'll look into what is needed to get tup in the m-c tree and supported as an official build backend.
Building mozilla-central with make is slow, and in many cases broken (requiring a clobber build). Recently, there was a blog post discussing how to build parts of mozilla-central with Ninja. Ninja is much faster than make, but in many cases it is still broken (requiring clobber builds). In this post, we'll look at building mozilla-central with tup, which is even faster still, and does not clobber. This is done using the same build configuration that make uses, but without using make at all.
A significant milestone has been reached with using tup to build mozilla-central - libxul.so links! (And when copied into a make-built tree, actually runs :). However, some performance problems are quickly evident. This post looks into the cause, and works out some improvements.
I thought it might be interesting to see an example of what I consider to be a bug in tup, especially since most other build systems would not consider this scenario a bug. While working on building mozilla-central, I had 25 new commits since the day started. After working on each commit, I would run 'tup upd' to bring the system up-to-date. Some commits only needed a single update, others required me to iterate many times until I was satisfied with the new commit. After I was done for the day, I pulled the repo onto another machine and ran a single 'tup upd' there, and that's when I noticed a problem...
Here is a first look at the beginnings of a Tupfile overlay for the mozilla-central source tree. So far it just handles the XPIDLSRCS variable, so it installs .idl files into dist/idl and generates .h files from them in dist/include. This should work in both Linux and OSX, though Windows won't run at the moment because some tup features that are used have not yet been implemented on that platform.comments powered by Disqus