Home bb-depends-dot is a Replacement for Yocto/Poky's oe-depends-dot
Post
Cancel

bb-depends-dot is a Replacement for Yocto/Poky's oe-depends-dot

Yocto/Poky ships the script oe-depends-dot which has stopped working some years ago when the output of bitbake -g changed. The same is true for oe-depends-dot from openembedded-core.

So I wrote a tool called bb-depends-dot to inspect recipes from BitBake’s task-depends.dot and the dependencies between these recipes.

Jump to github.com/thomastrapp/bb-depends-dot for the source code and binary release.

Examples using bb-depends-dot

List all the direct dependencies of recipe curl:

1
2
3
4
5
6
$ bb-depends-dot task-depends.dot curl
nghttp2
brotli
openssl
libpsl
...

Or, list all the reverse dependencies:

1
2
3
4
$ bb-depends-dot task-depends.dot -r curl
my-image
libmicrohttpd
elfutils

Adding the argument -t prints all transitive dependencies.

This allows me to quickly figure out why certain packages are included in my image, or which packages can be removed to reduce the size of my image.

The Yocto Project

Building your own custom Linux distribution sounds like a mountainous task, but it’s a breeze with Yocto:

The Yocto Project (YP) is an open source collaboration project that helps developers create custom Linux-based systems regardless of the hardware architecture.

BitBake Dependency Graph

Yocto comes with a build tool called BitBake. A Linux distribution is basically a heap of different packages lumped together. BitBake builds these packages according to recipes.

A recipe contains all the information required to obtain the source code, build the componenents and package them. Recipes may depend on other recipes. For example, curl depends on nghttp2 for its HTTP/2 support. The relationships between packages form a dependency graph. BitBake will save this graph in the DOT format when run with the argument -g, i.e. bitbake -g.
Example: curl's dependencies

bb-depends-dot does not contain a complete DOT parser (see dot-machine.rl), only the output of bitbake -g is supported. A recipe’s tasks are ignored completely. No distinction is made between build and runtime dependencies, as of yet.