blob: 98354d174aafa22061af80a3d36710fca5b36f6b [file] [log] [blame] [view]
# Package bundles
This directory contains top-level bundles of packages.
# Special Handling Required!
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
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`.
## Entry-point Targets
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`
## Existing files don't (yet) follow the rules.
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.
# OWNERS are restricted
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`).
# A map of the new targets
- `//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.