blob: d661158e6a00d14d2e8894a366e2deda6151be19 [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) 2006
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#* Filename:
38#* ---------
39#* sys_auto_gen.pl
40#*
41#* Project:
42#* --------
43#*
44#*
45#* Description:
46#* ------------
47#* This script is used to generate image layout
48#*
49#* Author:
50#* -------
51#* Qmei Yang (mtk03726)
52#*
53#****************************************************************************/
54use strict;
55#****************************************************************************
56# Included Modules
57#****************************************************************************
58BEGIN { push @INC , './tools/' } # add additional library path
59use sysGenUtility; #pm file name without case sensitivity
60use FileInfoParser;
61use File::Copy;
62use tools::pack_dep_gen;
63PrintDependModule();
64
65#****************************************************************************
66# Constants
67#****************************************************************************
68my $SYSAUTOGEN_VERNO = " m0.08";
69 # m0.08 , 20130625 by mei, Add copro_info.log input
70 # m0.07 , 20130528 by mei, Replace factory rom with infomake.log
71 # m0.06 , 20121019 by mei, Remove FOTA input
72 # m0.05 , 20120807 by mei, Move sysgen2 to scatGen.pl
73 # m0.04 , 20120712 by mei, Not to precompile linker script due to changing lib name
74 # m0.03 , 20120702 by mei, Support EWS
75 # m0.02 , 20120614 by mei, Support input with ()'s problem for linux
76 # m0.01 , 20120528 by mei, Support path and filename case sensitive on Linux
77 # m0.03 , 20120507 by mei, Remove precompile BL and ext_BL
78 # v0.02 , 20120614 by mei, Fix if system call fails, it'll return errro code:256
79 # and make build flow will pass if without shifting.
80 # v0.01 by mei, initial version
81
82#****************************************************************************
83# Global Variables
84#****************************************************************************
85my $g_exit = 0;
86my %g_MAKEFILE_OPTIONS;
87my $g_strCOMPILER;
88
89#****************************************************************************
90# Input Parameters
91#****************************************************************************
92my $IMAGELAYOUT = $ARGV[0];
93my $BL_IMAGELAYOUT = $ARGV[1];
94my $themf = $ARGV[2];
95my $BB_PATH = $ARGV[3];
96my $NEED_BUILD_BOOTLOADER = $ARGV[4];
97my $DUMMY_IMAGELAYOUT_ALLOW = $ARGV[5]; # INSIDE_MTK (need to check dummy_scatter_enable)
98my $DUMMY_IMAGELAYOUT_FORCE = $ARGV[6]; # DUMMY_LIS (from gendummylis)
99my $INFOMAKELOG = $ARGV[7];
100my $COPRO_INFO_FILE = $ARGV[8];
101my $LIB_PATH = $ARGV[9];
102my $CC_CMD = $ARGV[10];
103my $EXT_BL_IMAGELAYOUT = $BL_IMAGELAYOUT;
104$EXT_BL_IMAGELAYOUT =~ s/\.txt/_ext\.txt/;
105
106print "NEED BL=$NEED_BUILD_BOOTLOADER\n";
107
108#****************************************************************************
109# 1 >>> Run Process
110#****************************************************************************
111if(1!=&FileInfo::Parse_MAKEFILE($themf, \%g_MAKEFILE_OPTIONS))
112{
113 &sysUtil::sysgen_die("Parse MakeFile failed");
114}
115$g_strCOMPILER = &FileInfo::GetCompiler();
116
117#****************************************************************************
118# 2 >>> Run Process
119#****************************************************************************
120$g_exit = &RunProcess("perl tools/sysGen1.pl $BB_PATH", 0);
121$g_exit = &RunProcess("perl tools/scatGen.pl $ARGV[0] $ARGV[1] \"$ARGV[2]\" $ARGV[3] $ARGV[4] $ARGV[5] $ARGV[6] $ARGV[7] $ARGV[8] $ARGV[10]", $g_exit);
122
123#****************************************************************************
124# 0 >>> exit - no error: 0, error code: > 0
125#****************************************************************************
126exit $g_exit>>8;
127
128#****************************************************************************
129# subroutines
130#****************************************************************************
131sub RunProcess
132{#exit - no error: 0, error code: > 0
133 my ($CMD, $n_exit) = @_;
134 if($n_exit == 0)
135 {
136 print "========COMMAND==========\n$CMD\n==\n";
137 $n_exit = system($CMD);
138 print "===========$n_exit=============\n"
139 }
140 return $n_exit;
141}
142
143sub RunPreprocess
144{
145 my ($SrcPath, $nExit) = @_;
146 my ($DestPath, $bBackup) = &BackupFile($SrcPath, "txt", "h");
147 if($bBackup && $CC_CMD ne "")
148 {
149 $nExit = &RunProcess("$CC_CMD -C -E -P -D LIB_PATH=$LIB_PATH $DestPath > $SrcPath", $nExit);
150 &ChompEmptyLine($SrcPath) if($nExit == 0);
151 }
152 my $pch = $DestPath;
153 $pch =~ s/\.h/\.pch/;
154 move($DestPath, $pch);
155 return $nExit;
156}
157
158sub BackupFile
159{
160 my ($SrcPath, $strNameToBeReplaced, $strNameToReplace)=@_;
161 my $nRes = undef;
162 my $DestPath = $SrcPath;
163 $DestPath =~ s/$strNameToBeReplaced/$strNameToReplace/;
164 print "[BackupFile] $SrcPath => $DestPath\n";
165 copy($SrcPath, $DestPath);
166 $nRes = 1 if(-e $DestPath);
167 return ($DestPath, $nRes);
168}
169
170sub ChompEmptyLine
171{
172 my ($strFilePath) = @_;
173 my $content;
174 open FILE, "<$strFilePath" or &sysUtil::sysgen_die("$strFilePath: open file error!", __FILE__, __LINE__);
175 while(<FILE>)
176 {
177 chomp;
178 $content .= $_. "\n" if ($_ ne "");
179 }
180 close FILE;
181 open FILE, ">$strFilePath" or &sysUtil::sysgen_die("$strFilePath: open file error!", __FILE__, __LINE__);
182 print FILE $content;
183 close FILE;
184}