blob: 969c4cabd4daafbc442cfb0de497ecc1e9e8daf7 [file] [log] [blame] [view]
# Symbol-Type Graph (STG)
The STG (symbol-type graph) is an ABI representation and this
project contains tools for the creation and comparison of such
representations.
The ABI extraction tool, `stg`, emits a native ABI format. Parsers exist for
libabigail's XML format, BTF and ELF / DWARF.
The ABI diff tool, `stgdiff`, supports multiple reporting options.
STG has a versioned native file format. Older formats can be read and
rewritten as the latest.
NOTE: STG is under active developement. Tool arguments and behaviour are
subject to change.
## Getting STG
### Distributions
We intend to package STG for major distributions. Currently we have
packages as follows:
| *Distribution* | *Package* |
| ---------------- | ----------------------------------------------------- |
| Arch Linux (AUR) | [stg-git](https://aur.archlinux.org/packages/stg-git) |
### Source Code
This source code is available at
https://android.googlesource.com/platform/external/stg/.
## Building from Source
Instructions are included for local and Docker builds.
### Dependencies
STG is written in C++20. It is known to compile with GCC 11, Clang 15 or
later versions. Mininum requirements for a local build are:
| *Dependency* | *Debian* | *RedHat* | *Version* |
| ------------- | ----------------- | ----------------- | --------- |
| build | cmake | cmake | 3.14 |
| ELF, BTF | libelf-dev | elfutils-devel | 0.189 |
| DWARF | libdw-dev | elfutils-devel | 0.189 |
| XML | libxml2-dev | libxml2-devel | 2.9 |
| BTF | linux-libc-dev | kernel-headers | 5.19 |
| native format | libprotobuf-dev | protobuf-devel | 3.19 |
| native format | protobuf-compiler | protobuf-compiler | 3.19 |
| allocator[^1] | libjemalloc-dev | jemalloc-devel | 5 |
| catch2[^2] | catch2 | catch2-devel | 2 (only) |
[^1]: jemalloc is optional, but will likely improve performance.
[^2]: catch2 is optional, but required to build the test suite.
### Local Build
Build STG using CMake as follows:
```bash
$ mkdir build && cd build
$ cmake ..
$ cmake --build . --parallel
```
Run the STG unit test suite:
```bash
$ ctest
```
### Docker Build
A [Dockerfile](Dockerfile) is provided to build a container with the
STG tools:
```bash
$ docker build -t stg .
```
And then enter the container:
```bash
$ docker run -it stg
```
Note that the Dockerfile provides only a production image. To use
Docker as a development environment, you can comment out everything
after the line `# second stage`.
After that you may bind your development code to the container:
```bash
$ docker run -it $PWD:/src -it stg
```
The source code is added to `/src`, so when your code is bound you can
edit on your host and re-compile in the container.
## Contributions
See [CONTRIBUTING.md](CONTRIBUTING.md) for details.
## Contact Information
Please send feedback, questions and bug reports to
[[email protected]](mailto:[email protected]).