rockbox/tools/mkinfo.pl
Daniel Stenberg bebce6a74e oops, close the handle after use as a good citizen
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@14367 a1c6a512-1295-4272-9138-f99709370657
2007-08-16 08:14:03 +00:00

80 lines
2.4 KiB
Perl
Executable file

#!/usr/bin/perl
# __________ __ ___.
# Open \______ \ ____ ____ | | _\_ |__ _______ ___
# Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
# \/ \/ \/ \/ \/
# $Id: configure 13215 2007-04-20 11:58:39Z bagder $
#
# 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 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);
}
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{'ARCHOS'});
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\n", $ENV{'VERSION'});
printf O ("Binary: %s\n", $ENV{'BINARY'});
printf O ("Binary size: %s\n", filesize($ENV{'BINARY'}));
printf O ("Actual size: %s\n", filesize("apps/rockbox.bin"));
printf O ("RAM usage: %s\n", mapscan("apps/rockbox.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);