blob: 0d32a0e44b089726af0646e6fbcb8fc98d515e60 [file] [log] [blame]
rjw6c1fd8f2022-11-30 14:33:01 +08001#!/usr/bin/perl
2#
3# Copyright Statement:
4# --------------------
5# This software is protected by Copyright and the information contained
6# herein is confidential. The software may not be copied and the information
7# contained herein may not be used or disclosed except with the written
8# permission of MediaTek Inc. (C) 2005
9#
10# BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
11# THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
12# RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
13# AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
14# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
15# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
16# NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
17# SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
18# SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
19# THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
20# NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
21# SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
22#
23# BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
24# LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
25# AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
26# OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
27# MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
28#
29# THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
30# WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
31# LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
32# RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
33# THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
34#
35#
36#*****************************************************************************
37#*
38#* Filename:
39#* ---------
40#* ckImgSize.pl
41#*
42#* Project:
43#* --------
44#*
45#*
46#* Description:
47#* ------------
48#*
49#*
50#* Author:
51#* -------
52#* Amber Su (mtk03389)
53#*
54#*============================================================================
55#* HISTORY
56#* Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
57#*------------------------------------------------------------------------------
58#* $Revision$
59#* $Modtime$
60#* $Log$
61#*
62#* 05 22 2014 tafang.chen
63#* [MOLY00062786] [UMOLY][SM]
64#* Initial MoDIS build env - fix path problem.
65#*
66#*------------------------------------------------------------------------------
67#* Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
68#*============================================================================
69#*****************************************************************************
70
71#*****************************************************************************
72# Included Modules
73#*****************************************************************************
74BEGIN { push @INC, "pcore/" , '.\\pcore\\tools\\' } # add additional library path
75use vivaHelper; #for viva
76use File::stat;
77use FileInfoParser;
78use LISInfo;
79
80#*************************************************************************************************
81# Input and Parameters Initialization
82#*************************************************************************************************
83my ($makefile, $bin_folder, $lisfile, $flash_cfg_c) = @ARGV;
84my %MAKEFILE_OPTIONS;
85
86my $VIVA_FILE = "$bin_folder\\VIVA";
87my $fs_base_addr;
88my $actual_size;
89my $debug = 0;
90my $sperate_line = "============================================================\n";
91#*************************************************************************************************
92# Main Flow
93#*************************************************************************************************
94&error_handler("$makefile: NOT exist!", __FILE__, __LINE__) if (!-e $makefile);
95if(!&vivaHelper::IsVIEnabled_NI($makefile)) {
96 print "skip check memory size without enable VIVA\n";
97 exit 0;
98}
99
100#parse makefile for LISInfo::CheckROMSize
101if(1!=&FileInfo::Parse_MAKEFILE($makefile, \%MAKEFILE_OPTIONS)){
102 &error_handler("Parse MakeFile failed");
103}
104
105if (exists $MAKEFILE_OPTIONS{'DUMMY_SCATTER_ENABLE'} and $MAKEFILE_OPTIONS{'DUMMY_SCATTER_ENABLE'} eq 'TRUE'){
106 print "skip check memory size with DUMMY_SCATTER_ENABLE=TRUE\n";
107 exit 0;
108}
109
110&error_handler("$VIVA_FILE: NOT exist!", __FILE__, __LINE__) if (!-e $VIVA_FILE);
111my $VIVA_BIN_SIZE = stat("$VIVA_FILE")->size;
112print "The VIVA bin size = $VIVA_BIN_SIZE\n";
113#parse lis for LISInfo::CheckROMSize
114&LISInfo::ParseLIS($lisfile);
115
116my ($load_end,$check_fsbase) = &LISInfo::CheckROMSize(\%MAKEFILE_OPTIONS,$VIVA_BIN_SIZE);
117
118if($check_fsbase eq undef) {
119 &error_handler("Call getFlashBaseAdd Failed!", __FILE__, __LINE__) if(1!=&getFlashBaseAdd);
120 &checkSize($fs_base_addr,$load_end);
121} else {
122 &checkSize($check_fsbase,$load_end);
123}
124
125exit 0;
126
127#**************************************************************************************************
128# Check Whether Total Image Files Size Overlap Limit or not
129#**************************************************************************************************
130sub checkSize {
131 my($max_compressed,$total_size )= @_;
132 $left = $max_compressed-$total_size;
133 print "[Check VIVA bin size]\n";
134 my $limit_str,$actual_str;
135
136 $limit_str= "The Boundary of VIVA bin";
137 $actual_str = "Actual VIVA End Address";
138
139 print sprintf ("%-40s %-10s %s\n","$limit_str","= $max_compressed","bytes");
140 print sprintf ("%-40s %-10s %s\n","$actual_str","= $total_size","bytes");
141 print "$sperate_line\Check VIVA Compressed ROM Size:";
142 if ($left < 0)
143 {
144 # Note: The error pattern will be parsed by tools\auto_adjust_mem.pl
145 # Pattern /Check .+ Compressed ROM Size: FAIL/
146 $temp = "$actual_str has exceeded $limit_str by " .abs($left)." bytes";
147 print " FAIL!\n";
148 print STDERR "Error: $temp\n";
149 print "Error: $temp.\n";
150 exit 1;
151 }
152 else
153 {
154 print(" PASS!\n");
155 exit 0;
156 }
157}
158
159#**************************************************************************************************
160# Parse ~flash_cfg_temp_c to Get Flash Base Address
161#**************************************************************************************************
162sub getFlashBaseAdd {
163 my $ckresult = 0;
164 &error_handler("$flash_cfg_c: NOT exist!", __FILE__, __LINE__) if (!-e $flash_cfg_c);
165 open (FILE_HANDLE, "<$flash_cfg_c") or &error_handler("$flash_cfg_c: file error!", __FILE__, __LINE__);
166 while (<FILE_HANDLE>) {
167 if (/int flash_base_address\s+=\s+((\S|\s)+);/) {
168 $fs_base_addr = eval($1);
169 $ckresult = 1;
170 }
171 }
172 close (FILE_HANDLE);
173 print "The base address of file system = $fs_base_addr\n";
174 return $ckresult;
175}
176
177#*************************************************************************************************
178# Error Handling Message
179#*************************************************************************************************
180sub error_handler
181{
182 my ($error_msg, $file, $line_no) = @_;
183
184 my $final_error_msg = "Error: $error_msg at $file line $line_no\n";
185 print "$final_error_msg";
186 die $final_error_msg;
187}