Visual Report Walkthrough¶
antel analyze (or report: true in the config) produces a self-contained report.html for your project — every style inline, no external dependencies, open it in any browser. Below, demos/resdemo is used as a live example: the full report is embedded, and each block is explained column by column.
View online vs. generate locally
The embedded window below is resdemo's real report (copied after a build). Generate an identical one in your own project:
The report in full (resdemo instance)¶
If the embedded window is cut off, open the original file: resdemo-report.html.
The ten blocks, one by one¶
resdemo is a GTK4/libadwaita executable configured with pkg_config, data_files, gresource and embed — which lights up every feature of the report. Blocks in page order:
| # | Block | What resdemo shows | How to use it |
|---|---|---|---|
| 1 | Artifacts | target .antel/build/resdemo_antel/resdemo, 50.3 KB, probed by file as an ELF executable |
at a glance: is the artifact built, is the size sane |
| 2 | Incremental status | hash baseline exists (✓), changed files this run, stale list | "I changed it but it didn't rebuild": check log/hashes_diff and log/stale_files first |
| 3 | Compile flag statistics | -O2×2, -Wall×2, plus the long -I/usr/include/libadwaita-1 ... chain |
confirm optimization level, macros and warning switches match expectations |
| 4 | Resources | 10 resource files expanded to file level: data_files 3 items (banner.txt/logo.png/payload.bin), gresource 6 items (XML + 4 referenced files + generated gresource.c at 142.3 KB), embed 1 item (payload.bin + _binary_assets_payload_bin symbol), each with ✓ copied/compiled-in/embedded status |
verify resources were packaged as expected; the gresource.c size is the real cost of single-file distribution |
| 5 | Symbol table | 98 symbols classified by nm kind (functions/data/BSS/undefined), each symbol in its own chip | see what a source file exposes, hunt undefined references |
| 6 | Header dependencies | which headers src/main.c includes, derived from obj/main.o.d |
understand "changing which header triggers what rebuild" |
| 7 | Object size distribution | gresource.o 34.5 KB, main.o 12.1 KB, unit-annotated bar chart |
find abnormally large compile units |
| 8 | Dynamic dependencies | NEEDED: libadwaita-1.so.0 libgtk-4.so.1 libgio-2.0.so.0 ...; full ldd resolution (address and path per entry) |
check which libraries an executable actually links, whether any is not found |
| 9 | Compile commands | verbatim commands from compile_commands.json (all -I/-D included) |
reproduce the exact compile, verify flag injection |
| 10 | Log inventory | 7 files in log/ with sizes |
know where each log file lives and how big it is |
Where the data comes from¶
No number in the report is fabricated — every value is produced by a real tool and can be verified directly:
| Report data | Source |
|---|---|
| artifact size / type | file / stat |
| symbol classification & names | nm |
| dynamic dependencies | readelf -d / ldd |
| header dependencies | the obj/*.o.d files emitted by -MMD |
| compile flag frequency | compile_commands.json (generated by antel itself) |
| resource type / size | file / os.path.getsize |
| incremental status | log/hashes, log/hashes_diff, log/stale_files (maintained by antel) |
| log inventory | a scan of the log/ directory |
The Resources block only appears when resources are configured; plain code projects don't show it. Every other block is generated for any project.
More¶
- How to trigger: config field
report(auto-generate after build) or theantel analyzecommand - How report fields relate to the build directory: build directory layout
- Other example:
demos/antelstatsalso ships.antel/build/app_app/report.html(the consumer-side report of a versioned shared library)