87 if '--build' in sys.argv:
88 build = sys.argv[sys.argv.index(
'--build') + 1]
89 owner, undef, n =
collect(build)
90 per_edge =
edges(owner, undef)
91 print(
'%d objects, %d exported symbols, %d cross-module edges\n' % (n, len(owner), len(per_edge)))
93 if '--edge' in sys.argv:
94 i = sys.argv.index(
'--edge')
95 a, b = sys.argv[i + 1], sys.argv[i + 2]
96 syms = sorted(per_edge.get((a, b), ()))
97 print(
'%s -> %s : %d symbols' % (a, b, len(syms)))
103 for (a, b), syms
in per_edge.items():
104 la, lb = LAYER.get(a), LAYER.get(b)
105 inverted = la
is not None and lb
is not None and lb > la
106 if '--inversions' in sys.argv
and not inverted:
108 rows.append((len(syms), a, b, inverted))
109 rows.sort(reverse=
True)
111 print(
'%-14s %-14s %8s' % (
'from',
'to',
'symbols'))
112 for cnt, a, b, inverted
in rows[:30]:
113 print(
'%-14s %-14s %8d %s' % (a, b, cnt,
' <-- LAYER INVERSION' if inverted
else ''))
115 inv = [r
for r
in rows
if r[3]]
116 if inv
and '--inversions' not in sys.argv:
117 print(
'\n%d inverted edges carrying %d symbols in total.' % (len(inv), sum(r[0]
for r
in inv)))
118 print(
'Run --edge <from> <to> to list the functions behind one of them.')