Bob will be deprecated when Android moves to Bazel.
We recommend that new projects use Bazel instead.
We will be introducing stricter build rules in Bob to improve Bazel alignment.
This may cause existing builds to break.
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.18)
- ninja-build (>=1.8)
- python3 (>=3.6)
- python3-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
Bob has the minimal support for building with Bazel via Gazelle.
To build Bob:
bazelisk build //...
To run the Go unit tests:
bazelisk test //...
To update build files:
bazelisk run //:gazelle
To update deps.bzl
:
bazelisk run //:gazelle-update-repos
Generate the LCOV files:
bazelisk coverage --instrument_test_targets --@io_bazel_rules_go//go/config:cover_format=lcov --combined_report=lcov //...
Generate a html report:
genhtml --output genhtml "$(bazelisk info output_path)/_coverage/_coverage_report.dat"
Detailed documentation is in the docs directory of the repository.