Bob is a declarative build system intended to build C/C++ software for both Linux and Android.
Bob has a configuration system that works in a similar way to the Linux Kernel's Kconfig.
Build definitions use a JSON-like syntax to describe the modules to build.
Bob uses Google's Blueprint to do the heavy lifting. As such it has similarities with Soong.
To use Bob you will need:
- golang (>=1.10)
- ninja-build (>=1.8)
- python
- python-ply
The software is provided under the Apache 2.0 license. Contributions to this project are accepted under the same license.
Refer to the documentation for instructions on how to setup a project to use Bob.
The config file format is simplified Kconfig, with bool
, int
and
string
types.
config USE_LOCALES
bool "Use Locales"
default y
config DEFAULT_LOCALE
string "Default Locale"
depends on USE_LOCALES
default "sv_SE"
For more information see the documentation.
The build files are very simple. There are no conditional or control flow statements.
bob_defaults {
name: "common_libs",
ldlibs: ["-lncurses"],
}
bob_binary {
name: "less",
defaults: ["common_libs"],
srcs: ["src/less.c"],
// use_locales is a feature. When enabled in the configuration
// src/locales.c will be compiled and linked.
use_locales: {
srcs: ["src/locales.c"],
cflags: ["-DDEFAULT_LOCALE={{.default_locale}}"],
}
}
For more information see the documentation.
blueprint
- this is a git submodule containing the required version of Blueprint
config_system
- contains the Python-based configuration system
docs
- project documentation
example
- example files for project setup
scripts
- miscellaneous scripts
tests
- contains build tests
cmd
- contains the Go code for command line tools
core
- contains the core Go code
internal
- contains Go packages for internal use
plugins
- contains plugins for Soong
To load Bob code in a Go-aware IDE, create a workspace directory outside the Bob tree and run:
apt-get install bindfs
export GOPATH=<workspace>
bob/scripts/setup_workspace_for_bob.bash
Detailed documentation is in the docs directory of the repository.