I want to build a better build system. In my 30 years of software development, I’ve heard programmers repeatedly refer to their build system as “the evil you know” in various forms.
Be it ‘make’, ‘ant’, ‘jam’, eclipse PDE, whatever it is, it seems like that is to some degree a universal dislike towards these tools.
They serve an important purpose though! No big software project can go along for a long time without some forms of build scripts.
So I decided to build a new one, called ‘jigger’.
Some basic premisses:
- at the root of the project, keep the ‘.jig’ directory, which contains all the data. (Sounds like .git? No kidding…)
- all data is stored in text files.
- you can edit the text files, but the preferred API to modifying build environment is via ‘jig’ command line utility, which basically modifies text files under ‘.jig’ directory.
- support basic commands, such as ‘jig run’, ‘jig test’, ‘jig add ‘, etc.
- put all build artifacts under .jig/build/. ‘jig clean’ simply deletes that
- auto-detect standard source files.
- support generation scripts which can be anything they want to be, but can be executed via ‘jig generate XXX’. So a uniform API to running generation scripts.
- Have full visibility via ‘jig show’ command.
- Support multiple target platforms, both PC and embedded.