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.