david/ipxe
Archived
1
0
This repository has been archived on 2020-12-06. You can view files and clone it, but cannot push or open issues or pull requests.
ipxe/src/util/diffsize.pl
Michael Brown 8406115834 [build] Rename gPXE to iPXE
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>
2010-04-19 23:43:39 +01:00

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;