commit | fdeb724f74406592726eae2135e8a9db90996eb6 | [log] [tgz] |
---|---|---|
author | Dan Willemsen <dwillemsen@google.com> | Fri Jul 24 16:53:27 2015 -0700 |
committer | Dan Willemsen <dwillemsen@google.com> | Mon Sep 14 15:35:12 2015 -0700 |
tree | 080e0e3889836c07b7589ef8cd04c135062cc839 | |
parent | 9cdb70b93bcbb6e1e1575537546cb7f2cc6a4641 [diff] |
Implement plugins for bootstrap go modules Now that we have multi-stage bootstrapping, we can make the primary builder build more dynamic. Add the concept of plugins that will be linked and loaded into bootstrap_go_binary or bootstrap_go_package modules. It's expected that the plugin's init() functions will do whatever registration is necessary. Example Blueprint definition: bootstrap_go_binary { name: "builder", ... } bootstrap_go_package { name: "plugin1", pluginFor: ["builder"], } A package may specify more than one plugin if it will be inserted into more than one go module. Change-Id: I109835f444196b66fc4018c3fa36ba0875823184
Blueprint is a meta-build system that reads in Blueprints files that describe modules that need to be built, and produces a Ninja manifest describing the commands that need to be run and their dependencies. Where most build systems use built-in rules or a domain-specific language to describe the logic for converting module descriptions to build rules, Blueprint delegates this to per-project build logic written in Go. For large, heterogenous projects this allows the inherent complexity of the build logic to be maintained in a high-level language, while still allowing simple changes to individual modules by modifying easy to understand Blueprints files.