1*9e3b08aeSAndroid Build Coastguard Worker# Symbol-Type Graph (STG) 2*9e3b08aeSAndroid Build Coastguard Worker 3*9e3b08aeSAndroid Build Coastguard WorkerThe STG (symbol-type graph) is an ABI representation and this 4*9e3b08aeSAndroid Build Coastguard Workerproject contains tools for the creation and comparison of such 5*9e3b08aeSAndroid Build Coastguard Workerrepresentations. 6*9e3b08aeSAndroid Build Coastguard Worker 7*9e3b08aeSAndroid Build Coastguard WorkerThe ABI extraction tool, `stg`, emits a native ABI format. Parsers exist for 8*9e3b08aeSAndroid Build Coastguard Workerlibabigail's XML format, BTF and ELF / DWARF. 9*9e3b08aeSAndroid Build Coastguard Worker 10*9e3b08aeSAndroid Build Coastguard WorkerThe ABI diff tool, `stgdiff`, supports multiple reporting options. 11*9e3b08aeSAndroid Build Coastguard Worker 12*9e3b08aeSAndroid Build Coastguard WorkerSTG has a versioned native file format. Older formats can be read and 13*9e3b08aeSAndroid Build Coastguard Workerrewritten as the latest. 14*9e3b08aeSAndroid Build Coastguard Worker 15*9e3b08aeSAndroid Build Coastguard WorkerNOTE: STG is under active developement. Tool arguments and behaviour are 16*9e3b08aeSAndroid Build Coastguard Workersubject to change. 17*9e3b08aeSAndroid Build Coastguard Worker 18*9e3b08aeSAndroid Build Coastguard Worker## Getting STG 19*9e3b08aeSAndroid Build Coastguard Worker 20*9e3b08aeSAndroid Build Coastguard Worker### Distributions 21*9e3b08aeSAndroid Build Coastguard Worker 22*9e3b08aeSAndroid Build Coastguard WorkerWe intend to package STG for major distributions. Currently we have 23*9e3b08aeSAndroid Build Coastguard Workerpackages as follows: 24*9e3b08aeSAndroid Build Coastguard Worker 25*9e3b08aeSAndroid Build Coastguard Worker| *Distribution* | *Package* | 26*9e3b08aeSAndroid Build Coastguard Worker| ---------------- | ----------------------------------------------------- | 27*9e3b08aeSAndroid Build Coastguard Worker| Arch Linux (AUR) | [stg-git](https://aur.archlinux.org/packages/stg-git) | 28*9e3b08aeSAndroid Build Coastguard Worker 29*9e3b08aeSAndroid Build Coastguard Worker### Source Code 30*9e3b08aeSAndroid Build Coastguard Worker 31*9e3b08aeSAndroid Build Coastguard WorkerThis source code is available at 32*9e3b08aeSAndroid Build Coastguard Workerhttps://android.googlesource.com/platform/external/stg/. 33*9e3b08aeSAndroid Build Coastguard Worker 34*9e3b08aeSAndroid Build Coastguard Worker## Building from Source 35*9e3b08aeSAndroid Build Coastguard Worker 36*9e3b08aeSAndroid Build Coastguard WorkerInstructions are included for local and Docker builds. 37*9e3b08aeSAndroid Build Coastguard Worker 38*9e3b08aeSAndroid Build Coastguard Worker### Dependencies 39*9e3b08aeSAndroid Build Coastguard Worker 40*9e3b08aeSAndroid Build Coastguard WorkerSTG is written in C++20. It is known to compile with GCC 11, Clang 15 or 41*9e3b08aeSAndroid Build Coastguard Workerlater versions. Mininum requirements for a local build are: 42*9e3b08aeSAndroid Build Coastguard Worker 43*9e3b08aeSAndroid Build Coastguard Worker| *Dependency* | *Debian* | *RedHat* | *Version* | 44*9e3b08aeSAndroid Build Coastguard Worker| ------------- | ----------------- | ----------------- | --------- | 45*9e3b08aeSAndroid Build Coastguard Worker| build | cmake | cmake | 3.14 | 46*9e3b08aeSAndroid Build Coastguard Worker| ELF, BTF | libelf-dev | elfutils-devel | 0.189 | 47*9e3b08aeSAndroid Build Coastguard Worker| DWARF | libdw-dev | elfutils-devel | 0.189 | 48*9e3b08aeSAndroid Build Coastguard Worker| XML | libxml2-dev | libxml2-devel | 2.9 | 49*9e3b08aeSAndroid Build Coastguard Worker| BTF | linux-libc-dev | kernel-headers | 5.19 | 50*9e3b08aeSAndroid Build Coastguard Worker| native format | libprotobuf-dev | protobuf-devel | 3.19 | 51*9e3b08aeSAndroid Build Coastguard Worker| native format | protobuf-compiler | protobuf-compiler | 3.19 | 52*9e3b08aeSAndroid Build Coastguard Worker| allocator[^1] | libjemalloc-dev | jemalloc-devel | 5 | 53*9e3b08aeSAndroid Build Coastguard Worker| catch2[^2] | catch2 | catch2-devel | 2 (only) | 54*9e3b08aeSAndroid Build Coastguard Worker 55*9e3b08aeSAndroid Build Coastguard Worker[^1]: jemalloc is optional, but will likely improve performance. 56*9e3b08aeSAndroid Build Coastguard Worker[^2]: catch2 is optional, but required to build the test suite. 57*9e3b08aeSAndroid Build Coastguard Worker 58*9e3b08aeSAndroid Build Coastguard Worker### Local Build 59*9e3b08aeSAndroid Build Coastguard Worker 60*9e3b08aeSAndroid Build Coastguard WorkerBuild STG using CMake as follows: 61*9e3b08aeSAndroid Build Coastguard Worker 62*9e3b08aeSAndroid Build Coastguard Worker```bash 63*9e3b08aeSAndroid Build Coastguard Worker$ mkdir build && cd build 64*9e3b08aeSAndroid Build Coastguard Worker$ cmake .. 65*9e3b08aeSAndroid Build Coastguard Worker$ cmake --build . --parallel 66*9e3b08aeSAndroid Build Coastguard Worker``` 67*9e3b08aeSAndroid Build Coastguard Worker 68*9e3b08aeSAndroid Build Coastguard WorkerRun the STG unit test suite: 69*9e3b08aeSAndroid Build Coastguard Worker 70*9e3b08aeSAndroid Build Coastguard Worker```bash 71*9e3b08aeSAndroid Build Coastguard Worker$ ctest 72*9e3b08aeSAndroid Build Coastguard Worker``` 73*9e3b08aeSAndroid Build Coastguard Worker 74*9e3b08aeSAndroid Build Coastguard Worker### Docker Build 75*9e3b08aeSAndroid Build Coastguard Worker 76*9e3b08aeSAndroid Build Coastguard WorkerA [Dockerfile](Dockerfile) is provided to build a container with the 77*9e3b08aeSAndroid Build Coastguard WorkerSTG tools: 78*9e3b08aeSAndroid Build Coastguard Worker 79*9e3b08aeSAndroid Build Coastguard Worker```bash 80*9e3b08aeSAndroid Build Coastguard Worker$ docker build -t stg . 81*9e3b08aeSAndroid Build Coastguard Worker``` 82*9e3b08aeSAndroid Build Coastguard Worker 83*9e3b08aeSAndroid Build Coastguard WorkerAnd then enter the container: 84*9e3b08aeSAndroid Build Coastguard Worker 85*9e3b08aeSAndroid Build Coastguard Worker```bash 86*9e3b08aeSAndroid Build Coastguard Worker$ docker run -it stg 87*9e3b08aeSAndroid Build Coastguard Worker``` 88*9e3b08aeSAndroid Build Coastguard Worker 89*9e3b08aeSAndroid Build Coastguard WorkerNote that the Dockerfile provides only a production image. To use 90*9e3b08aeSAndroid Build Coastguard WorkerDocker as a development environment, you can comment out everything 91*9e3b08aeSAndroid Build Coastguard Workerafter the line `# second stage`. 92*9e3b08aeSAndroid Build Coastguard Worker 93*9e3b08aeSAndroid Build Coastguard WorkerAfter that you may bind your development code to the container: 94*9e3b08aeSAndroid Build Coastguard Worker 95*9e3b08aeSAndroid Build Coastguard Worker```bash 96*9e3b08aeSAndroid Build Coastguard Worker$ docker run -it $PWD:/src -it stg 97*9e3b08aeSAndroid Build Coastguard Worker``` 98*9e3b08aeSAndroid Build Coastguard Worker 99*9e3b08aeSAndroid Build Coastguard WorkerThe source code is added to `/src`, so when your code is bound you can 100*9e3b08aeSAndroid Build Coastguard Workeredit on your host and re-compile in the container. 101*9e3b08aeSAndroid Build Coastguard Worker 102*9e3b08aeSAndroid Build Coastguard Worker## Contributions 103*9e3b08aeSAndroid Build Coastguard Worker 104*9e3b08aeSAndroid Build Coastguard WorkerSee [CONTRIBUTING.md](CONTRIBUTING.md) for details. 105*9e3b08aeSAndroid Build Coastguard Worker 106*9e3b08aeSAndroid Build Coastguard Worker## Contact Information 107*9e3b08aeSAndroid Build Coastguard Worker 108*9e3b08aeSAndroid Build Coastguard WorkerPlease send feedback, questions and bug reports to 109*9e3b08aeSAndroid Build Coastguard Worker[[email protected]](mailto:[email protected]). 110