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
- Computer OS
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
- Computer OS
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
BoxFactoryunderstands.
- An instructions file describes the processes the project needs to
build in a way that
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.