Some notes on the great GraphViz package
Visualize a build dependency tree
maketograph.py
#! /usr/bin/python
import sys
import re
sys.stdout.write("digraph Makefile {\n")
regex = re.compile("^([^:]+): (.+)$")
for line in sys.stdin.read().split('\n'):
    mo = regex.match(line)
    if mo:
        origin = mo.group(1)
        targets = mo.group(2).split()
        for target in targets:
            sys.stdout.write('\t"%s" -> "%s";\n' % (target, origin))
sys.stdout.write("}")
the Makefile
all: main main2
main: main.c libhello.so
    gcc -o $@ $< -L. -lhello
main2: main2.c libhello.so
    gcc -o $@ $< -ldl
hello.o: hello.c hello.h
    gcc -c -fPIC $<
libhello.so: hello.o
    gcc -shared -o $@ $<
clean:
    rm -fr libhello.so main *.o
creating the graph
$ ./maketograph.py < Makefile > Makefile.dot $ dot -Tpng Makefile.dot >| Makefile.png
The result:
further
- egypt - create call graph from gcc RTL dump

 
No comments:
Post a Comment