8406115834
Access to the gpxe.org and etherboot.org domains and associated resources has been revoked by the registrant of the domain. Work around this problem by renaming project from gPXE to iPXE, and updating URLs to match. Also update README, LOG and COPYRIGHTS to remove obsolete information. Signed-off-by: Michael Brown <mcb30@ipxe.org>
102 lines
2.2 KiB
Perl
Executable File
102 lines
2.2 KiB
Perl
Executable File
#!/usr/bin/perl -w
|
|
# usage:
|
|
# [somebody@somewhere ~/ipxe/src]$ ./util/diffsize.pl [<old rev> [<new rev>]]
|
|
# by default <old rev> is HEAD and <new rev> is the working tree
|
|
|
|
use strict;
|
|
|
|
-d "bin" or die "Please run me in the iPXE src directory\n";
|
|
mkdir ".sizes";
|
|
|
|
my($oldrev, $newrev);
|
|
my($oldname, $newname);
|
|
|
|
if (@ARGV) {
|
|
$oldname = shift;
|
|
} else {
|
|
$oldname = "HEAD";
|
|
}
|
|
|
|
if (@ARGV) {
|
|
$newname = shift;
|
|
} else {
|
|
$newrev = "tree" . time();
|
|
}
|
|
|
|
$oldrev = `git rev-parse $oldname`;
|
|
chomp $oldrev;
|
|
|
|
unless (defined $newrev) {
|
|
$newrev = `git rev-parse $newname`;
|
|
chomp $newrev;
|
|
}
|
|
|
|
sub calc_sizes($$) {
|
|
my($name, $rev) = @_;
|
|
my $output;
|
|
my $lastrev;
|
|
my $stashed = 0;
|
|
my $res = 0;
|
|
|
|
return if -e ".sizes/$rev.sizes";
|
|
|
|
if (defined $name) {
|
|
$output = `git stash`;
|
|
$stashed = 1 unless $output =~ /No local changes to save/;
|
|
$lastrev = `git name-rev --name-only HEAD`;
|
|
system("git checkout $name >/dev/null"); $res ||= $?;
|
|
}
|
|
|
|
system("make -j4 bin/ipxe.lkrn >/dev/null"); $res ||= $?;
|
|
system("make bin/ipxe.lkrn.sizes > .sizes/$rev.sizes"); $res ||= $?;
|
|
|
|
if (defined $name) {
|
|
system("git checkout $lastrev >/dev/null"); $res ||= $?;
|
|
system("git stash pop >/dev/null") if $stashed; $res ||= $?;
|
|
}
|
|
|
|
if ($res) {
|
|
unlink(".sizes/$rev.sizes");
|
|
die "Error making sizes file\n";
|
|
}
|
|
}
|
|
|
|
our %Sizes;
|
|
|
|
sub save_sizes($$) {
|
|
my($id, $rev) = @_;
|
|
my $file = ".sizes/$rev.sizes";
|
|
|
|
open SIZES, $file or die "opening $file: $!\n";
|
|
while (<SIZES>) {
|
|
my($text, $data, $bss, $total, $hex, $name) = split;
|
|
$name =~ s|bin/||; $name =~ s|\.o$||;
|
|
|
|
# Skip the header and totals lines
|
|
next if $total =~ /[a-z]/ or $name =~ /TOTALS/;
|
|
|
|
# Skip files named with dash, due to old Makefile bug
|
|
next if $name =~ /-/;
|
|
|
|
$Sizes{$name} = {old => 0, new => 0} unless exists $Sizes{$name};
|
|
$Sizes{$name}{$id} = $total;
|
|
}
|
|
}
|
|
|
|
calc_sizes($oldname, $oldrev);
|
|
calc_sizes($newname, $newrev);
|
|
|
|
save_sizes('old', $oldrev);
|
|
save_sizes('new', $newrev);
|
|
|
|
my $total = 0;
|
|
|
|
for (sort keys %Sizes) {
|
|
my $diff = $Sizes{$_}{new} - $Sizes{$_}{old};
|
|
if (abs($diff) >= 16) {
|
|
printf "%12s %+d\n", substr($_, 0, 12), $Sizes{$_}{new} - $Sizes{$_}{old};
|
|
}
|
|
$total += $diff;
|
|
}
|
|
printf " TOTAL: %+d\n", $total;
|