mirror of
https://github.com/RPCSX/llvm.git
synced 2025-01-31 09:22:31 +00:00
1. Make sure that "dot" can be found in the path
2. Fix a bug where the lib directory specified also had to be cwd 3. Weight the output so archive->archive edges are shorter 4. Generate two different graphs: one for libraries, one for objects. 5. Adjust the properties of the graphs till it looks nice. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@19293 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
33a12184ba
commit
6234582764
@ -12,6 +12,10 @@
|
||||
# Give first option a name.
|
||||
my $Directory = $ARGV[0];
|
||||
|
||||
# Find the "dot" program
|
||||
chomp(my $DotPath = `which dot`);
|
||||
die "Can't find 'dot'" if (! -x "$DotPath");
|
||||
|
||||
# Open the directory and read its contents, sorting by name and differentiating
|
||||
# by whether its a library (.a) or an object file (.o)
|
||||
opendir DIR,$Directory;
|
||||
@ -28,7 +32,7 @@ my %objdefs;
|
||||
# Gather definitions from the libraries
|
||||
foreach $lib (@libs ) {
|
||||
open DEFS,
|
||||
"nm -g --defined-only $lib | grep ' [ABCDGRST] ' | sed -e 's/^[0-9A-Fa-f]* [ABCDGRST] //' | sort | uniq |";
|
||||
"nm -g --defined-only $Directory/$lib | grep ' [ABCDGRST] ' | sed -e 's/^[0-9A-Fa-f]* [ABCDGRST] //' | sort | uniq |";
|
||||
while (<DEFS>) {
|
||||
chomp($_);
|
||||
$libdefs{$_} = $lib;
|
||||
@ -39,7 +43,7 @@ foreach $lib (@libs ) {
|
||||
# Gather definitions from the object files.
|
||||
foreach $obj (@objs ) {
|
||||
open DEFS,
|
||||
"nm -g --defined-only $obj | grep ' [ABCDGRST] ' | sed -e 's/^[0-9A-Fa-f]* [ABCDGRST] //' | sort | uniq |";
|
||||
"nm -g --defined-only $Directory/$obj | grep ' [ABCDGRST] ' | sed -e 's/^[0-9A-Fa-f]* [ABCDGRST] //' | sort | uniq |";
|
||||
while (<DEFS>) {
|
||||
chomp($_);
|
||||
$objdefs{$_} = $obj;
|
||||
@ -52,9 +56,11 @@ foreach $obj (@objs ) {
|
||||
# object. The <dd> provides a list of the libraries/objects it depends on.
|
||||
sub gen_one_entry {
|
||||
my $lib = $_[0];
|
||||
my $lib_ns = $lib;
|
||||
$lib_ns =~ s/(.*)\.[oa]/$1/;
|
||||
print " <dt><b>$lib</b</dt><dd><ul>\n";
|
||||
open UNDEFS,
|
||||
"nm -u $lib | grep ' U ' | sed -e 's/ U //' | sort | uniq |";
|
||||
"nm -u $Directory/$lib | grep ' U ' | sed -e 's/ U //' | sort | uniq |";
|
||||
open DEPENDS,
|
||||
"| sort | uniq > GenLibDeps.out";
|
||||
while (<UNDEFS>) {
|
||||
@ -75,6 +81,13 @@ sub gen_one_entry {
|
||||
while (<DF>) {
|
||||
chomp;
|
||||
print " <li>$_</li>\n";
|
||||
$suffix = substr($_,length($_)-1,1);
|
||||
$_ =~ s/(.*)\.[oa]/$1/;
|
||||
if ($suffix eq "a") {
|
||||
print DOT "$lib_ns -> $_ [ weight=0 ];\n";
|
||||
} else {
|
||||
print DOT "$lib_ns -> $_ [ weight=10];\n";
|
||||
}
|
||||
}
|
||||
close DF;
|
||||
print " </ul></dd>\n";
|
||||
@ -87,15 +100,29 @@ $| = 1;
|
||||
# Print the definition list tag
|
||||
print "<dl>\n";
|
||||
|
||||
open DOT, "| $DotPath -Tgif > libdeps.gif";
|
||||
|
||||
print DOT "digraph LibDeps {size=\"40,15\"; ratio=\"1.33333\"; margin=\"0.25\"; rankdir=\"LR\"; mclimit=\"50.0\"; ordering=\"out\"; center=\"1\";\n";
|
||||
print DOT "node [shape=\"box\",color=\"#000088\",fillcolor=\"#FFFACD\",fontcolor=\"#5577DD\",style=\"filled\",fontsize=\"24\"];\n";
|
||||
print DOT "edge [style=\"solid\",color=\"#000088\"];\n";
|
||||
# Print libraries first
|
||||
foreach $lib (@libs) {
|
||||
gen_one_entry($lib);
|
||||
}
|
||||
print DOT "}\n";
|
||||
close DOT;
|
||||
open DOT, "| $DotPath -Tgif > objdeps.gif";
|
||||
print DOT "digraph ObjDeps {size=\"40,15\"; ratio=\"1.33333\"; margin=\"0.25\"; rankdir=\"LR\"; mclimit=\"50.0\"; ordering=\"out\"; center=\"1\";\n";
|
||||
print DOT "node [shape=\"box\",color=\"#000088\",fillcolor=\"#FFFACD\",fontcolor=\"#5577DD\",style=\"filled\",fontsize=\"24\"];\n";
|
||||
print DOT "edge [style=\"solid\",color=\"#000088\"];\n";
|
||||
|
||||
# Print objects second
|
||||
foreach $obj (@objs) {
|
||||
gen_one_entry($obj);
|
||||
}
|
||||
|
||||
print DOT "}\n";
|
||||
close DOT;
|
||||
|
||||
# Print end tag of definition list element
|
||||
print "</dl>\n";
|
||||
|
Loading…
x
Reference in New Issue
Block a user