SDK Subtools Builder
The SDK Subtools Builder creates CIPD packages from Portage packages which can be used outside of the SDK. This is useful for a variety of applications, such as pre-upload hooks, distributing developer tools, and specialized workflows like signing.
Currently available subtools packages are visible in the CIPD Web UI.
Adding a package to the subtools builder
You'll need to write a config for the package. The config is in
textproto format and subtools.proto is the schema for it. Here is a
simple example config:
name: "futility"
type: EXPORT_CIPD
max_files: 200
paths: [
{
input: "/usr/bin/futility"
}
]
The config can be placed anywhere that you like, as long as it's accessible
during the ebuild src_install phase (which means, you can even generate the
config with a script, should you need). Common locations are in ${FILESDIR}
of the ebuild, or in your project's source tree.
To install the config, make sure your ebuild inherits cros-subtool, and add to
your src_install:
src_install() {
...
cros-subtool_src_install path/to/subtool.textproto
}
Finally, you need to tell the subtools builder to build your package. List it
in virtual/target-sdk-subtools.
After landing your changes, your package will be available in CIPD after the
next build-chromeos-sdk-subtools run (kicked off every 24 hours).
Running the subtools builder locally
To test your subtools changes, you can run the subtools builder locally. To do so, execute:
(outside) ~/chromiumos $ chromite/bin/build_sdk_subtools --dry-run
This tool will create its own specialized chroot for building in, so it should be run outside the SDK.
The built binaries are put in out/sdk/tmp/cros-subtools.
How it works
Internally, the subtools builder uses lddtree to bundle both your package
and its shared library dependencies (e.g., libc), replacing binaries with
wrapper scripts using the correct ld-linux.so to load your programs. This
creates a portable archive that should work on most any x86_64 linux
distribution without depending on system libraries.