% $Id: introduction.nw 2532 2012-08-03 06:31:47Z jkoshy $ % % The introduction to the build system. \part{The Build System}\label{part.intro} \chapter{Introduction}\label{chap.introduction} \section{Design Goals} \begin{goal} The system should support build and testing our source tree, on the target operating systems and machine architectures of our interest. \end{goal} This is the primary design goal for the tool, its \foreignphrase{raison d'\^etre}. \begin{goal} The system should support building and testing our source tree on non-native architectures (relative to the build host). \end{goal} Builds on non-native machine architectures and operating systems are would involve the use of virtual machines and CPU emulators. The actual build will be done using \tool{make} or equivalent utility. \begin{goal} The system should be easy to use. \end{goal} Defining a build needs to be intuitive, and should utilize pre-existing tools where possible. The number of new notations and file formats that a user needs to learn should be kept to a minimum. Invoking a build should be simple. Sensible defaults should be used to minimize the need for user input at the time of invocation. \begin{goal} The system should be able to run entirely on a relatively power and resource constrained system such as a laptop, i.e., without needing a beefy build box, or architecture-specific hardware. \end{goal} The ability to be able to work using a low power compute platform is a necessity in the project's current development environment The need to be frugal in resource consumption rules out the use of certain convenient but resource hungry implementation options. \begin{goal} The system should work in ``offline'' mode, without requiring external network access to function. \end{goal} The intent is to be able to work in ``standalone'' mode, without needing to contact a master server on the network. \begin{goal} The system should allow a source tree that is in-development to be built and tested, prior to a check-in. \end{goal} This system is primarily a development aid, and not primarily a tool for implementing continuous integration. \begin{goal} The system should be easy to deploy, with the minimum of software dependencies. \end{goal} The fewer dependencies on third party packages, the easier it is to support target operating systems. \begin{goal} The utility should be easy to port to a new operating system. \end{goal} This goal is meant to reduce the effort needed to support new operating systems.