ANNOUNCE: rubuild -- a new build system written in Ruby for C/C++ projects

Hi,

I’d like to announce the availability of “Rubuild” – a new build
system written in Ruby from scratch. Currently it is targeted at C/C++
projects. You can clone the git repo with:

git clone https://github.com/amberarrow/rubuild.git

It is meant to be “programmer friendly” allowing programmatic
intervention in all parts of the build process, so some knowledge of
Ruby is necessary to use the tool well. There are no declarative
configuration files i.e. no Makefiles, no properties files, no XML
files. Everything is Ruby.

The README file has a great deal of information on rationale and usage.
Here is a brief summary of the features:

  • All build files are Ruby programs so arbitrary customization and
    tweaking of the build process should, in theory, be easy.
  • Fine-grained control over compiler and linker options used on
    individual files.
  • Location of build files is decoupled from the location of the sources
    and both are decoupled from the directory where generated objects are
    placed.
  • Uses a thread pool for parallel builds.
  • Fast – in our informal time trials, Rubuild is as fast as and often
    faster than Make with the same parallel build factor.
  • Supports 3 build types: debug, optimized, release. The last is the
    same as the penultimate but it strips symbols from the object files.
  • Supports 2 link types: dynamic and static.
  • Objects of each build and link type use different file extensions so
    they can all simultaneously coexist; hence, when you switch from one
    type to another, you don’t have to rebuild the entire project.
  • Has detailed knowledge of GCC options and checks the option set for
    errors or inconsistencies.
  • Uses standard Ruby logging.
  • Prints histogram of build times to log file
  • Prints histogram of dependency counts to log file.
  • Shows a command line progress indicator with the number of remaining
    targets to build.
  • Uses a “NoSQL” database (Tokyo Cabinet) for persistence, so targets
    will be rebuilt if there is any change to the options used to build
    them.
  • Tested on Linux and Mac/OSX.

Enjoy, and thanks for any feedback!

Ram