smartmake redux: harder, better, faster, stronger

Do you get frustrated about how long it takes to build Firefox after you’ve only made a small change to a single file? Have you heard the words “incremental build”, or tried to only build one or two directories but can’t figure out why your changes aren’t showing up?

You are not alone.

I released my smartmake tool last year to allow people to specify then directories they’ve changed, and in return the tool would perform a correct incremental build. No hassle, no sweat. The name was deceptive; it was a pretty dumb tool, but it got the job done with a little help from the user. However, there is a rule that any build system tool eventually reimplements the functionality of make, and so I am proud to release smartmake v2, which requires less work than ever before to produce correct incremental builds.

Thanks to the hard work of the illustrious Till Schneidereit (till on IRC), smartmake now finds every source file modified since the last time you performed an incremental build, and performs a (mostly) minimal rebuild. It will also complain if it comes across any modified files for which it doesn’t have any dependency information, and suggest you perform a full build instead.

Go ahead, give it a shot! Tell me (or Till) what goes wrong so that we can fix it. I recommend doing a full build, then making a small change and running '5 minutes ago' to kick it off and get the timestamp caching happening.

4 Responses to “smartmake redux: harder, better, faster, stronger”

  1. This is absolutely kickass. Nice work.

  2. I’ve never bothered to build in accessible when making changes in layout… what am I missing?

  3. The usage message says:

    Usage: [-f] [‘find’ parseable timestamp (optional)]
    Must have a .smartmake config file present in .hg/ containing
    objdir: your-objdir/
    cmd: make -C (or equivalent make command)

    Does this mean it’s difficult to use if you have more than one objdir?

  4. It’s not documented, but first checks MOZ_OBJDIR before looking at the config file.

Leave a Reply