93fcd569ab
Change-Id: Ia22743f3cab18fb1285bcec6429bb198525f37f8
125 lines
3.4 KiB
Perl
Executable file
125 lines
3.4 KiB
Perl
Executable file
#!/usr/bin/perl
|
|
# __________ __ ___.
|
|
# Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
# Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
# \/ \/ \/ \/ \/
|
|
#
|
|
# Purpose: extract and gather info from a build and put that in a standard
|
|
# way in the output file. Meant to be put in rockbox zip package to help and
|
|
# aid machine installers and more.
|
|
#
|
|
|
|
my $output = $ARGV[0];
|
|
|
|
sub filesize {
|
|
my ($f)=@_;
|
|
my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
|
|
$atime,$mtime,$ctime,$blksize,$blocks)
|
|
= stat($f);
|
|
return $size;
|
|
}
|
|
|
|
sub cmd1line {
|
|
my ($c)=@_;
|
|
my @out=`$c 2>/dev/null`;
|
|
chomp $out[0];
|
|
return $out[0];
|
|
}
|
|
|
|
sub definescan {
|
|
my ($f, $d)=($_[0], $_[1]);
|
|
my $v;
|
|
open(M, "<$f");
|
|
while(<M>) {
|
|
if($_ =~ /\#define\s+$d\s+([^\s]+)\s?/) {
|
|
$v = $1;
|
|
last;
|
|
}
|
|
}
|
|
close(M);
|
|
|
|
return $v;
|
|
}
|
|
|
|
sub mapscan {
|
|
my ($f)=@_;
|
|
my $start, $end;
|
|
open(M, "<$f");
|
|
while(<M>) {
|
|
if($_ =~ / +0x([0-9a-f]+) *_end = \./) {
|
|
$end = $1;
|
|
last;
|
|
}
|
|
elsif($_ =~ / +0x([0-9a-f]+) *_loadaddress = \./) {
|
|
$start = $1;
|
|
}
|
|
}
|
|
close(M);
|
|
|
|
# return number of bytes
|
|
return hex($end) - hex($start);
|
|
}
|
|
|
|
sub features {
|
|
my ($f)=@_;
|
|
my $feat;
|
|
open(M, "<$f");
|
|
while(<M>) {
|
|
chomp;
|
|
if($feat) {
|
|
$feat.=":";
|
|
}
|
|
$feat.=$_;
|
|
}
|
|
close(M);
|
|
return $feat;
|
|
}
|
|
|
|
if(!$output) {
|
|
print "Usage: mkinfo.pl <filename>\n";
|
|
exit;
|
|
}
|
|
open(O, ">$output") || die "couldn't open $output for writing";
|
|
|
|
# Variables identifying the target, that should remain the same as long
|
|
# as the hardware is unmodified
|
|
printf O ("Target: %s\n", $ENV{'MODELNAME'});
|
|
printf O ("Target id: %d\n", $ENV{'TARGET_ID'});
|
|
printf O ("Target define: %s\n", $ENV{'TARGET'});
|
|
printf O ("Memory: %d\n", $ENV{'MEMORYSIZE'});
|
|
printf O ("CPU: %s\n", $ENV{'CPU'});
|
|
printf O ("Manufacturer: %s\n", $ENV{'MANUFACTURER'});
|
|
|
|
# Variables identifying Rockbox and bootloader properties. Possibly changing
|
|
# every software upgrade.
|
|
printf O ("Version: %s", `$ENV{TOOLSDIR}/version.sh $ENV{ROOTDIR}`);
|
|
printf O ("Binary: %s\n", $ENV{'BINARY'});
|
|
printf O ("Binary size: %s\n", filesize($ENV{'BINARY'}));
|
|
printf O ("Voice format: %s\n", definescan("$ENV{APPSDIR}/talk.h", "VOICE_VERSION"));
|
|
|
|
if ($ENV{'APPSDIR'} =~ /\/apps$/) {
|
|
if (-f "rockbox.bin") {
|
|
printf O ("Actual size: %s\n", filesize("rockbox.bin"));
|
|
} else {
|
|
printf O ("Actual size: %s\n", filesize($ENV{'BINARY'}));
|
|
}
|
|
printf O ("RAM usage: %s\n", mapscan("rockbox.map"));
|
|
printf O ("Features: %s\n", features("apps/features"));
|
|
} elsif ($ENV{'APPSDIR'} =~ /\/bootloader$/) {
|
|
if (-f "bootloader.bin") {
|
|
printf O ("Actual size: %s\n", filesize("bootloader.bin"));
|
|
} else {
|
|
printf O ("Actual size: %s\n", filesize($ENV{'BINARY'}));
|
|
}
|
|
printf O ("RAM usage: %s\n", mapscan("bootloader.map"));
|
|
}
|
|
|
|
# Variables identifying tool and build environment details
|
|
printf O ("gcc: %s\n", cmd1line("$ENV{'CC'} --version"));
|
|
printf O ("ld: %s\n", cmd1line("$ENV{'LD'} --version"));
|
|
printf O ("Host gcc: %s\n", cmd1line("$ENV{'HOSTCC'} --version"));
|
|
printf O ("Host system: %s\n", $ENV{'UNAME'});
|
|
|
|
close(O);
|