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