Skip to content

ARM-software/bob-build

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

⚠ Deprecation Notice ⚠

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 Build System

CI

Introduction

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.

Requirements

To use Bob you will need:

  • golang (>=1.18)
  • ninja-build (>=1.8)
  • python3 (>=3.6)
  • python3-ply

License

The software is provided under the Apache 2.0 license. Contributions to this project are accepted under the same license.

Usage

Setting up a project

Refer to the documentation for instructions on how to setup a project to use Bob.

Config file format

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.

Build file format

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.

Development

Directory structure

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

Go code directories

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

Developing for Bob

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

Bazel

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

Generating Coverage

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"

Documentation

Detailed documentation is in the docs directory of the repository.