A Language for Software Subsystem Composition

A software system often consists of thousands of source files, which must be translated into thousands of intermediate files, which eventually must be translated into some small number of library and executable files. Collectively, these steps compose its build process.

A large software system can be difficult to build. The steps can be numerous and complex. Of course, there are a variety of tools to assist us (e.g., Make), but their languages emphasize the specification of low-level details (e.g., compiler names and options), rather than high-level attributes (e.g., host/target platforms and required subsystems).

This paper describes a new domain-specific language for specifying the composition and construction of a software system, where the emphasis is on high-level attributes. A specification is processed by a pipeline of fairly simple tools to produce a set of makefiles, which are then processed by Make in the usual way.