64 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
| #!/usr/bin/perl
 | |
| 
 | |
| use Scalar::Util qw(looks_like_number);
 | |
| 
 | |
| $" = "\n"; # change list separator
 | |
| 
 | |
| $keil_size = "Program Size:.+";
 | |
| 
 | |
| %report_patterns = 
 | |
| ( #toolchain, pattern-list
 | |
|   'keil'    => ['Build target \'(.+)\'', '(\d+ Error.+\d+ Warning)', $keil_size . 'Code=(\d+)', $keil_size . 'RO-data=(\d+)', $keil_size . 'RW-data=(\d+)', $keil_size . 'ZI-data=(\d+)'],
 | |
|   'iar'     => ['Building configuration.+ (.+)', 'Total number of (.+)', '((\s+\d+){4})\s+[0-9a-f]+'],
 | |
|   'xpresso' => ['Build of configuration (\S+) ', '(Finished) building target', '((\s+\d+){4})\s+[0-9a-f]+']
 | |
| );
 | |
| 
 | |
| @report_file_list = <build_all_*.txt>;
 | |
| #print "@report_file_list"; die;
 | |
| 
 | |
| open $freport, ">build_report.txt" or die "cannot open build_reprot.txt";
 | |
| 
 | |
| foreach (@report_file_list)
 | |
| {
 | |
|   /build_all_([^_]+)_/;
 | |
|   build_report($_, $1);
 | |
| }
 | |
| 
 | |
| sub build_report 
 | |
| {
 | |
|   my $report_file = $_[0];
 | |
|   my $toolchain   = $_[1];
 | |
|   
 | |
|   my @pattern     = @{$report_patterns{$toolchain}};
 | |
|   
 | |
|   open $report_handle, $report_file or die "cannot open $report_file";
 | |
|   
 | |
|   $report_file =~ /build_all_(.+).txt/;
 | |
|   
 | |
|   print $freport "--------------------------------------------------------------------\n";
 | |
|   printf $freport "%-25s", $1;
 | |
|   printf $freport "%13s", "" if $toolchain eq 'iar';
 | |
|   print $freport "            text	   data	    bss	    dec" if $toolchain eq 'xpresso' or $toolchain eq 'iar';
 | |
|   print $freport "  Code     RO     RW     ZI" if $toolchain eq 'keil';
 | |
|   print $freport "\n--------------------------------------------------------------------";
 | |
| 
 | |
|   while( my $line = <$report_handle> )
 | |
|   {
 | |
|     local $/ = "\r\n";
 | |
|     chomp $line;
 | |
|     
 | |
|     foreach (@pattern)
 | |
|     {
 | |
|       if ($line =~ /$_/)
 | |
|       {
 | |
|         my $fmat = ($_ eq $pattern[0]) ? "\n%-25s" :  "%s ";
 | |
|         $fmat = "%6s " if $toolchain eq 'keil' and looks_like_number($1);
 | |
|         printf $freport $fmat, $1; 
 | |
|       }
 | |
|     }
 | |
|   }
 | |
|   
 | |
|   close $report_handle;
 | |
|   
 | |
|   print $freport "\n\n";
 | |
| } | 
