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";
							 | 
						||
| 
								 | 
							
								}
							 |