blob: 6d3bf895e70ae1a0c78524e6d30e46cf4d64a770 [file] [log] [blame] [view]
# `package()` migration
## Goal & motivation
In 2020 we introduced [new build templates][building-components] for defining
packages, components, and their tests. The new templates more closely reflect
the project's architectural goals and direction. They replace old templates from
2016, mainly `package()`, `test_package()`, and `unittest_package()`.
Some of the benefits of the new templates include:
* Less repetition and a more succinct syntax. From experience with migrating
old targets to the new templates, the new definitions span 30%-50% fewer
lines.
* Components can be defined once, and then used in multiple packages. For
instance reuse the same component in the definition of the production
package that participates in a product definition, and the package
containing an integration test between your component and other components.
* Since components and packages can be defined separately, the build system
knows which dependencies belong in which component, and can therefore
perform more sophisticated build-time validation for you, detecting errors
automatically and providing clearer feedback.
* More use cases are supported natively rather than requiring special syntax.
For instance, packages that contain drivers, additional data files, or
shared libraries don't require special syntax - just add `deps` on the build
targets that define what you want your component to use or your package to
contain.
* It's easier to define simple tests that don't require manually writing a
component manifest (`.cml` or `.cmx` file).
* Better documentation is available, covering more languages and use cases.
Migrating to the new templates makes our build definitions more readable and
more useful, and helps clean underlying tech debt related to packaging that is
kept alive only in service of the legacy `package()` template. Please help us
replace all uses of the old templates with the new ones so we can move forward.
## Technical background
Please review the guide on [building components][building-components].
General experience in working with `BUILD.gn` files is recommended but not
entirely necessary.
Please consult the [GN reference][gn-reference]{:.external} guide.
## How to help
### Picking a task
The best place to start is the list in
[`//build/BUILD.gn`](/build/BUILD.gn)
under the group `"deprecated_package"`.
Find a directory that you're familiar with, or pick one at random.
In this directory's `BUILD.gn` file you will likely see build targets with the
old templates, for instance:
```gn
package("foo") {
...
}
```
Follow the [migration guide][migration-guide] or the examples below to convert
to the new templates.
### Doing a task
In your directory of choice, remove all uses in the `BUILD.gn` file of the
templates `package()`, `test_package()`, or `unittest_package()`. Note that
there may be other templates used in the file that wrap these templates. Make
sure you got them all by deleting the associated line in
[`//build/BUILD.gn`](/build/BUILD.gn)
and seeing that you're still able to generate the build (run `fx gen` and see
that GN successfully generated the Ninja file without errors).
### Completing a task
When preparing your change, make sure to remove any lines from
[`//build/BUILD.gn`](/build/BUILD.gn)
listing the directories that you cleaned up.
Send code reviews to owners of the directories with the build definitions that
you're changing, or to people listed below who volunteered to help with these
migrations:
* shayba@google.com
* xbhatnag@google.com
New volunteer? Please add yourself to the list!
## Examples
* [464409: [time] Migrate all packages + tests to new build rules](https://fuchsia-review.googlesource.com/c/fuchsia/+/464409)
* [464407: [build] Migrate tests in //src/sys/lib to new build rules](https://fuchsia-review.googlesource.com/c/fuchsia/+/464407)
* [464410: [build] migrate packages in //src/sys to new build rules](https://fuchsia-review.googlesource.com/c/fuchsia/+/464410)
* [473597: [session] Migrate all packages and tests to new build rules] (https://fuchsia-review.googlesource.com/c/fuchsia/+/473597)
## Sponsors
Reach out for questions or for status updates:
* <shayba@google.com>
* <xbhatnag@google.com>
[building-components]: /docs/development/components/build.md
[gn-reference]: https://gn.googlesource.com/gn/+/master/docs/reference.md
[migration-guide]: /docs/development/components/build.md#legacy-package-migration