xref: /aosp_15_r20/external/stg/README.md (revision 9e3b08ae94a55201065475453d799e8b1378bea6)
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