BoxFactory

BoxFactory has been explored in better parts in the BoxFactory Development Log series of posts.

Here is a copy of the README file, last updated on 2011-10-14.

You can check a list of miletones I have made.

README

        ____             ______           __                  
       / __ )____  _  __/ ____/___ ______/ /_____  _______  __
      / __  / __ \| |/_/ /_  / __ `/ ___/ __/ __ \/ ___/ / / /
     / /_/ / /_/ />  </ __/ / /_/ / /__/ /_/ /_/ / /  / /_/ / 
    /_____/\____/_/|_/_/    \__,_/\___/\__/\____/_/   \__, /  
                                                     /____/   
                   The BoxFactory project

What is it?

The BoxFactory is a build system entirely written in bash.

The goal is to have only the bash executable as a dependency. The compilers are too a dependency, but they are not a hard requirement, any compiler should do just fine.

The BoxFactory aims to be entirely project-type-agnostic. This was created to compile C++ files for our projects, but we want to support any kind of projects through a module architecture.

Development

Before the 1.0 release, compatibility and "public" API might change. We will have a private API which you should not use.

Requirements

A POSIX-ish environment with bash 3.1 or newer.

For windows, we recommend using the MinGW environment for bash or use of our distribution of MinGW which is configured especially for BoxFactory.

State

The Box Factory is currently UNFINISHED and only works for some of our projects. Though this is the case currently, we hope to make it work with more things soon!

Caveats

Temporary caveats

  • Only compiles static libraries, no support for dynamic libraries.
  • Is still a bit monolithic

By-design caveats

  • Uses bash 3.1+

What it can do

  • Out of tree builds
  • C++
    • application building
    • static library building
      • Bundling other static libraries inside another one (TODO)
  • Multiple platforms support
    • Computer OS
      • Linux
    • Mobile platforms

Wish list

  • Non POSIX-ish cc/c++-ish compilers support
    • Have Visual Studio's compiler working
  • Many more project types
    • C#
    • Java
  • Many more platforms
    • Computer OS
      • Mac OS X
      • Windows
      • Haiku
      • *BSD (even though each will need special care)
    • Mobile platforms
      • iOS
      • Android
    • Library detection and configuration

Glossary

This glossary defines what some words will mean in BoxFactory's project scope.

  • Build
    • A build is the finished product of a project.
    • The build step is the one in which the project is processed.
  • Instructions file
    • An instructions file describes the processes the project needs to build in a way that BoxFactory understands.
  • Platform

    • A platform is defined by an environment on which the finished product is ran.

      A build for a platform can be made directly from a platform or on a cross-compiling toolchain.

      A platform is identified by a generic name. Then, more details can be accessed according to platform-defined data.

      Examples of platforms:

      • Windows/7/x86
      • Linux/Ubuntu/10.04/i686
      • Linux/Archlinux/i686 (Archlinux doesn't have a version)
      • Mac OS X/10.7/x64
      • iOS/4.1/i386
      • iOS/3.0/armv7
      • Android/3.2/arm
      • Flash/11
      • JavaScript

      On a more technical standpoint, element 0 of the platform array will always be the generic platform name (Windows, iOS, etc...) and the other elements will always depend on rules defined by the generic platform.

  • Project

    • A project is the files and processes needed to have a product.
  • Project type

    • A project type defines a general process for a set of input files to build and have a finished product. A project type is generally defined by the language it uses and the type of process you want to apply.

      Examples of project types could be: C, C++, Java, Doxygen, etc...

  • Static big library / Static big lib
    • A static library (lib*.a) in which object code files (*.o) from other libraries are included to facilitate distribution.
  • Step
    • A step is a set of rules and commands used to process a project to give a product. A succession of steps is used to have a finished product.