# 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 [kernel-team@android.com](mailto:kernel-team@android.com).