New packages should use GN, not GYP, to build binaries.
See the official step-by-step introduction for the GN basics. This article discusses platform2 specific stuff.
Example: arc/adbd/BUILD.gn
BUILD.gn
in your package directory, which is determined by PLATFORM_SUBDIR
in your ebuild. Existence of BUILD.gn
indicates to the platform2 build system that GN should be used to build this package."all"
in the BUILD.gn
. It‘s the root target built by the platform2 build system. Typically it’s a group
target depends on all the targets to be built.common-mk/
contains common templates or common settings, which your build files can utilize.pkg_config.gni
defines the pkg_config
rule to generate configs for package dependencies.BUILDCONFIG.gn
defines the default configs for each target type (e.g. executable). You can remove default configs in individual target with configs -=
if needed (example: hammard/BUILD.gn). (TODO(oka): Replace the URL after the CL is submitted)Example: arc-adbd-9999.ebuild
Note we should add .gn
in CROS_WORKON_SUBTREE
so that the platform2 build system can access the file.
Example: hammerd/BUILD.gn (TODO(oka): update the link after the CL is submitted)
In GN files, USE flags can be referred as use.foo
.
Only whitelisted USE flags can be used. If you need to use new USE flags, update the following files:
_IUSE
constant in platform2/common-mk/platform2.py
use.test
flag is set to true on unit testing. Enclose test only targets with if (use.test) {}
to reduce compile time on production. The test targets are typically executables which depend on //common-mk:test
to use gtest and gmock.
How to run unit tests is same as before: In chroot, run cros_workon --board=$BOARD start $package_name
if you haven't. Then run
cros_workon_make --board=$BOARD --test $package_name
.
Prepend VERBOSE=1 to see the commands run by GN (plus other logs).