3 # [somebody@somewhere ~/gpxe/src]$ ./util/diffsize.pl [<old rev> [<new rev>]]
4 # by default <old rev> is HEAD and <new rev> is the working tree
8 -d
"bin" or die "Please run me in the gPXE src directory\n";
12 my($oldname, $newname);
23 $newrev = "tree" . time();
26 $oldrev = `git rev-parse $oldname`;
29 unless (defined $newrev) {
30 $newrev = `git rev-parse $newname`;
41 return if -e
".sizes/$rev.sizes";
44 $output = `git stash`;
45 $stashed = 1 unless $output =~ /No local changes to save/;
46 $lastrev = `git name-rev --name-only HEAD`;
47 system("git checkout $name >/dev/null"); $res ||= $?
;
50 system("make -j4 bin/gpxe.lkrn >/dev/null"); $res ||= $?
;
51 system("make bin/gpxe.lkrn.sizes > .sizes/$rev.sizes"); $res ||= $?
;
54 system("git checkout $lastrev >/dev/null"); $res ||= $?
;
55 system("git stash pop >/dev/null") if $stashed; $res ||= $?
;
59 unlink(".sizes/$rev.sizes");
60 die "Error making sizes file\n";
68 my $file = ".sizes/$rev.sizes";
70 open SIZES
, $file or die "opening $file: $!\n";
72 my($text, $data, $bss, $total, $hex, $name) = split;
73 $name =~ s
|bin
/||; $name =~ s
|\
.o
$||;
75 # Skip the header and totals lines
76 next if $total =~ /[a-z]/ or $name =~ /TOTALS/;
78 # Skip files named with dash, due to old Makefile bug
81 $Sizes{$name} = {old
=> 0, new
=> 0} unless exists $Sizes{$name};
82 $Sizes{$name}{$id} = $total;
86 calc_sizes
($oldname, $oldrev);
87 calc_sizes
($newname, $newrev);
89 save_sizes
('old', $oldrev);
90 save_sizes
('new', $newrev);
94 for (sort keys %Sizes) {
95 my $diff = $Sizes{$_}{new
} - $Sizes{$_}{old
};
96 if (abs($diff) >= 16) {
97 printf "%12s %+d\n", substr($_, 0, 12), $Sizes{$_}{new
} - $Sizes{$_}{old
};
101 printf " TOTAL: %+d\n", $total;