OpenSBE – A software building framework
OpenSBE is a universal software building framework based on Autoconf, GNU Make, Perl, and sh. The framework provides a build environment that is platform, language, and compiler independent. OpenSBE simplifies creation of makefiles without sacrificing flexibility, yet introduces a minimum of new concepts into the existing build process.
OpenSBE integrates seamlessly into various stages of the standard Autoconf/Make build process. The basic idea of OpenSBE is to provide a higher level of abstraction for Autoconf and Make by defining appropriate macros, variables, and targets.
At the heart of OpenSBE is the use of recursion instead of manual maintenance. Traditional use of Autoconf requires the project directory structure to be traced in fileÂ configure.ac. The responsibility to keep the trace current is developer’s.
OpenSBE uses recursion instead. In every directory (subdirectory) of the project, starting from the root project directory, the developer creates aÂ dir.ac file that lists the subdirectories and files that must be included in the build. OpenSBE recursively processes theÂ dir.ac hierarchy and builds the directory trace automatically.
The same method is used to distribute Autoconf macros throughout the project directory structure: every project module (subdirectory on any level) contains an autoconf included file with macros specific to that module. (Macros specific to a module still affect the whole project.)
The net effect of the definitions hierarchy is simplification of project build system maintenance.
OpenSBE is not a black box; rather, it is a framework that specifies interfaces for plugging in arbitrary subsystems such as programming language compilers, documentation publishing tools, middleware, and so on. Currently, OpenSBE includes out-of-box support for C/C++ and CORBA builds.
OpenSBE uses Autoconf as the foundation. The important components of OpenSBE are:
- a set of M4 macro definitions in AC-files;
- Makefile templates (rule files) containing target definitions ready for inclusion into makefiles of specific projects;
- utilities used for updating the targets;
- shell scripts for computing default settings for embedded subsystems.