| ### Packages |
| |
| **Build packages** are defined in JSON files which can be found at: |
| |
| * Garnet Layer Packages: [`//garnet/packages/`][garnet-packages-source]. |
| * Peridot Layer Packages: [`//peridot/packages/`][peridot-packages-source]. |
| * Topaz Layer Packages: [`//topaz/packages/`][topaz-packages-source]. |
| |
| Build packages are a Fuchsia-specific feature built on top of GN to help |
| customize Fuchsia builds. |
| |
| A build package file contains references to other build packages it expands |
| on (`imports`) and the Fuchsia packages it adds to the build (`packages`): |
| ```json |
| { |
| "imports": [ |
| "garnet/packages/prod/network", |
| ], |
| "packages": [ |
| "//garnet/examples/http/wget" |
| ] |
| } |
| ``` |
| |
| Build packages define an aggregation of one or more build labels, either by |
| importing other packages, or by referencing build labels. GN [parses the JSON |
| package definitions][preprocess-build-packages-py] early on in the build |
| (often referenced from [product definitions][products], and those definitions |
| determine what else GN has to do. |
| |
| **Fuchsia packages**, not to be confused with build packages, are artifacts |
| of the Fuchsia build system, generated by the GN targets listed in `packages`. |
| A Fuchsia package includes a manifest of its contents, and zero or more |
| executables and their assets. |
| |
| For example, the above build packages file adds a Fuchsia package called |
| "wget" to the build. This package contains the binaries built |
| from the build target of the same name in `//garnet/examples/http/wget/BUILD.gn`: |
| |
| ```py |
| package("wget") { |
| deps = [ |
| # The path to the dependency that creates the wget binary. |
| ":bin" |
| ], |
| binaries = [{ |
| name = "wget" |
| }] |
| } |
| ``` |
| |
| The `binaries` field in the package definition specifies that this package |
| includes a single binary named `wget`. The `binaries` field does not create |
| the binary--that's the job of the package's dependencies list, specified in |
| `deps`: |
| |
| ```py |
| # Executable defines a c++ binary, the label of the executable target will |
| # be the same as the name of the produced binary file. |
| executable("bin") { |
| output_name = "wget" |
| |
| sources = [ |
| "wget.cc", |
| ] |
| |
| deps = [ |
| # This executable also has its own dependencies. |
| "//garnet/public/lib/app/cpp", |
| "//sdk/lib/fidl/cpp", |
| ] |
| } |
| ``` |
| |
| The `binaries` field in a `package` target lets GN know to deploy the |
| binary within Fuchsia when you boot your Fuchsia OS image, allowing you |
| to run your binary from inside the Fuchsia shell: |
| |
| ```bash |
| $ wget google.com |
| --2018-06-13 17:04:44-- http://google.com/ |
| $ |
| ``` |
| |
| |
| |
| |
| [garnet-packages-source]: /garnet/packages/ |
| [peridot-packages-source]: /peridot/packages/ |
| [topaz-packages-source]: https://fuchsia.googlesource.com/topaz/+/master/packages/ |
| [preprocess-build-packages-py]: /build/gn/prepreprocess_build_packages.py |
| [products]: products.md |