This directory contains top-level bundles of packages.
Note: These files require special handling, or GN will attempt to define all targets (for all products/configurations) in the generated rules for Ninja.
This slows down both GN and Ninja, including the cost of Ninja starting for every build.
Before these rules were introduced, the //bundles files contained targets from multiple product configurations, resulting in all product configurations being roughly as slow to generate as a maximal build configuration.
The tables below lay out how much extra work is done by GN and Ninja when extra targets are being defined by GN.
Before:
Configuration | Targets Created | GN Files Read | GN (s) | ninja (s) | Rust crates |
---|---|---|---|---|---|
bringup.x64 (developer) | 229,977 | 6089 | 22 | 8888 | |
bringup.x64 (buildbot) | 231,762 | 6116 | 22 | 8888 | |
core.x64 (developer) | 230,329 | 6097 | 21 | 8923 | |
core.x64 (buildbot) | 232,166 | 6127 | 23 | 6.5 | 8924 |
After:
Configuration | Targets Created | GN Files Read | GN time (s) | ninja (s) | Rust crates |
---|---|---|---|---|---|
bringup.x64 (developer) | 165,270 | 4905 | 17 | 6874 | |
bringup.x64 (buildbot) | 165,412 | 4939 | 19 | 6874 | |
core.x64 (developer) | 185,195 | 5383 | 21 | 7493 | |
core.x64 (buildbot) | 230,763 | 6116 | 23 | 8920 |
The rules for adding targets within these files is:
There MUST be only one “entry-point” target in each BUILD.gn
file, named as the folder it's in.
This is the only target with “public” visibility in that file (ie visibility = []
)
All deps that are not in the default_toolchain
MUST be qualified with the expected toolchain, UNLESS the BUILD.gn file has an assert(is_host)
or similar guard to ensure that its own targets are only ever defined in the appropriate toolchain other than default_toolchain
.
An “entry-point” target is target with public visibility, and is named after the folder that the BUILD.gn
file is in (e.g. //bundles/buildbot/core:core).
When referencing targets under //bundles
from fx set
or infra recipes, only “entry_point” targets may be used.
Example: fx set core.x64 --with //bundles/buildbot/core
All new changes to these files MUST follow the above rules.
Where files don't follow the above rules, this should be treated as pre-existing tech debt and should be cleaned up.
The OWNERS for this area is now VERY tightly restricted to those will have read, acknowledged, and agree to help make sure that these guidelines are followed for future changes to these files.
Global OWNERS are not automatically owners here (through the use of noparent
).
//bundles/buildbot/<product>/BUILD.gn
- Infra entry-point for adding tests to <product>
.
//bundles/buildbot/dfv2/<product>/BUILD.gn
- Infra entry-point for adding tests to product
with DFv2 enabled (transitional, will be removed when all products switch to DFv2).
//bundles/infra/build
- Infra entry-point added to all build-only or test- running builders (these are host tools).
//bundles/infra/test
- Infra entry-point added to all test-running builders (these are host tools, but the group MUST be defined in the default_toolchain).
//bundles/tools
- A number of tools added to by some products (ie, core
), and used by developers to add a bunch of miscellaneous tools to their build.
//bundles/kitchen_sink
- Even more tools than //bundles/tools
(which it includes), and miscellaneous other stuff. This needs to be sorted through and subdivided.
//bundles/platform
- new groups of targets, relocated from places such as //bundles/packages/prod:*
that are only to be added by product definitions, not by buildbot groups adding tests and tools.