[Feature]Upload Modem source code

Change-Id: Id4294f30faced84d3e6fd6d5e61e1111bf287a37
diff --git a/mcu/tools/objListGen.pl b/mcu/tools/objListGen.pl
new file mode 100644
index 0000000..082a981
--- /dev/null
+++ b/mcu/tools/objListGen.pl
@@ -0,0 +1,771 @@
+#!/usr/bin/perl

+#

+#  Copyright Statement:

+#  --------------------

+#  This software is protected by Copyright and the information contained

+#  herein is confidential. The software may not be copied and the information

+#  contained herein may not be used or disclosed except with the written

+#  permission of MediaTek Inc. (C) 2006

+#

+#  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES

+#  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")

+#  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON

+#  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,

+#  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF

+#  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.

+#  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE

+#  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR

+#  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH

+#  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO

+#  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S

+#  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.

+#

+#  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE

+#  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,

+#  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,

+#  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO

+#  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.

+#

+#  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE

+#  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF

+#  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND

+#  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER

+#  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).

+#

+#*****************************************************************************

+#*

+#* Filename:

+#* ---------

+#*   objListGen.pl

+#*

+#* Project:

+#* --------

+#*   Maui_Software

+#*

+#* Description:

+#* ------------

+#*   This file generate the object list for scatter file including.

+#*

+#*

+#* Author:

+#* -------

+#*   Ke-Ting Chen (mtk03141)

+#*

+#*****************************************************************************

+

+#****************************************************************************

+# Included Modules

+#****************************************************************************

+use strict;

+use warnings;

+BEGIN { push @INC, "pcore/" , './pcore/tools/' }  # add additional library path

+use File::Copy;

+use File::Basename;

+use File::Path;

+use Storable qw/lock_retrieve lock_nstore/;

+use objListHelper;

+use FileInfoParser;

+use tools::pack_dep_gen;

+

+PrintDependModule();

+

+#****************************************************************************

+# History

+#****************************************************************************

+my $OBJ_LIST_GEN_VERNO = " v1.01";

+   # v1.02: Phase in PrintDependency

+   # v1.01: Phase in BOOT_ZIMAGE

+   # v1.00: Phase in object list generate mechanism

+

+#****************************************************************************

+# Constants

+#****************************************************************************

+my $DEBUG = 1;

+my $templateFolderPath  = "pcore/custom/system/Template";

+my $objectListGenFolderPath = "scat_config/FeatureBased/ObjListGen";

+

+# Feature option

+my $featureOptionBackupFileName = "object.list.backup";

+

+# Source

+my $aliceForbidListFileName = "AliceForbidList.csv";

+my $bootZImageForbidListFileName = "BootZImageForbidList.csv";

+my $zImageForbidListFileName = "ZImageForbidList.csv";

+

+# Source backup

+my $aliceForbidListBackupFileName = "AliceForbidList.csv.backup";

+my $bootZImageForbidListBackupFileName = "BootZImageForbidList.csv.backup";

+my $zImageForbidListBackupFileName = "ZImageForbidList.csv.backup";

+

+# Normal scatter

+my $objectROM1ListFileName = "objectROM1.list";

+my $objectBootZImageListFileName = "objectBOOT_ZIMAGE.list";

+my $objectZImageListFileName = "objectZIMAGE.list";

+my $objectAliceListFileName = "objectALICE.list";

+

+# Dummy scatter

+my $objectROM1DummyListFileName = "objectROM1_dummy.list";

+my $objectBootZImageDummyListFileName = "objectBOOT_ZIMAGE_dummy.list";

+my $objectZImageDummyListFileName = "objectZIMAGE_dummy.list";

+my $objectAliceDummyListFileName = "objectALICE_dummy.list";

+my $objectAliceForbidDummyListFileName = "objectALICE_FORBID_dummy.list";

+

+my $separateLine = "=============================================================";

+

+#****************************************************************************

+# Arguments

+#****************************************************************************

+&objListHelper::ErrorHandler("Insufficient arguments! ".scalar(@ARGV), __LINE__, __FILE__)

+   unless scalar(@ARGV) >= 2;

+

+my $customFolder = $ARGV[0];

+my $makefilePath = $ARGV[1];

+my $forceDummyScatter = $ARGV[2];

+$forceDummyScatter = "FALSE" unless defined $forceDummyScatter;

+

+# To align error message file name format

+$customFolder =~ s/^.\/|^\///;

+$makefilePath =~ s/^.\/|^\///;

+

+# Print out the arguments

+printLog($separateLine);

+printLog("Arguments:");

+printLog("Custom Folder: $customFolder");

+printLog("Makefile: $makefilePath");

+printLog("Force Dummy Scatter: $forceDummyScatter");

+printLog("");

+

+#****************************************************************************

+# Variables

+#****************************************************************************

+# Files

+my $sourceCSVFolder = "$templateFolderPath/$objectListGenFolderPath";

+my $destinationListFolder = "$customFolder/$objectListGenFolderPath";

+

+# Source files

+my $aliceForbidListFile = "$sourceCSVFolder/$aliceForbidListFileName";

+my $bootZImageForbidListFile = "$sourceCSVFolder/$bootZImageForbidListFileName";

+my $zImageForbidListFile = "$sourceCSVFolder/$zImageForbidListFileName";

+

+# Source backup files

+my $featureOptionBackupFile = "$sourceCSVFolder/$featureOptionBackupFileName";

+my $aliceForbidListBackupFile = "$sourceCSVFolder/$aliceForbidListBackupFileName";

+my $bootZImageForbidListBackupFile = "$sourceCSVFolder/$bootZImageForbidListBackupFileName";

+my $zImageForbidListBackupFile = "$sourceCSVFolder/$zImageForbidListBackupFileName";

+

+# Normal scatter

+my $objectROM1ListFile = "$destinationListFolder/$objectROM1ListFileName";

+my $objectBootZImageListFile = "$destinationListFolder/$objectBootZImageListFileName";

+my $objectZImageListFile = "$destinationListFolder/$objectZImageListFileName";

+my $objectAliceListFile = "$destinationListFolder/$objectAliceListFileName";

+

+# Dummy scatter

+my $objectROM1DummyListFile = "$destinationListFolder/$objectROM1DummyListFileName";

+my $objectBootZImageDummyListFile = "$destinationListFolder/$objectBootZImageDummyListFileName";

+my $objectZImageDummyListFile = "$destinationListFolder/$objectZImageDummyListFileName";

+my $objectAliceDummyListFile = "$destinationListFolder/$objectAliceDummyListFileName";

+my $objectAliceForbidDummyListFile = "$destinationListFolder/$objectAliceForbidDummyListFileName";

+

+# Feature switches

+my $aliceEnabled = 0;

+my $bootZImageEnabled = 0;

+my $zImageEnabled = 0;

+

+my $isDummyScatter = 0;

+

+# Source file changed

+my $aliceForbidListFileChanged = 0;

+my $bootZImageForbidListFileChanged = 0;

+my $zImageForbidListFileChanged = 0;

+

+# Source object lists

+my @aliceForbidList;

+my @bootZImageForbidList;

+my @zImageForbidList;

+

+# Output object lists

+my %outputObjectLists =

+(

+   "ROM1"               => {"list" => [], "generate" => 0, "list_file" => $objectROM1ListFile},

+   "BOOT_ZIMAGE"        => {"list" => [], "generate" => 0, "list_file" => $objectBootZImageListFile},

+   "ZIMAGE"             => {"list" => [], "generate" => 0, "list_file" => $objectZImageListFile},

+   "ALICE"              => {"list" => [], "generate" => 0, "list_file" => $objectAliceListFile},

+   "ROM1_DUMMY"         => {"list" => [], "generate" => 0, "list_file" => $objectROM1DummyListFile},

+   "BOOT_ZIMAGE_DUMMY"  => {"list" => [], "generate" => 0, "list_file" => $objectBootZImageDummyListFile},

+   "ZIMAGE_DUMMY"       => {"list" => [], "generate" => 0, "list_file" => $objectZImageDummyListFile},

+   "ALICE_DUMMY"        => {"list" => [], "generate" => 0, "list_file" => $objectAliceDummyListFile},

+   "ALICE_FORBID_DUMMY" => {"list" => [], "generate" => 0, "list_file" => $objectAliceForbidDummyListFile}

+);

+

+exit 0;

+

+#****************************************************************************

+# Initialize

+#****************************************************************************

+printLog($separateLine);

+printLog("[Start initializing stage]");

+

+# Initialize the environment

+&initialize();

+

+printLog("[End initializing stage]\n");

+

+#****************************************************************************

+# Process ALICE Forbid List

+#****************************************************************************

+printLog($separateLine);

+printLog("[Start processing ALICE forbid list stage]");

+

+if (&processAliceForbidList())

+{

+   printLog("Process completed");

+}

+else

+{

+   printLog("Process skipped");

+}

+

+printLog("[End processing ALICE forbid list stage]\n");

+

+#****************************************************************************

+# Process ZIMAGE Forbid List

+#****************************************************************************

+printLog($separateLine);

+printLog("[Start prcoessing ZIMAGE forbid list stage]");

+

+if (&processZImageForbidList())

+{

+   printLog("Process completed");

+}

+else

+{

+   printLog("Process skipped");

+}

+

+printLog("[End prcoessing ZIMAGE fobid list stage]\n");

+

+#****************************************************************************

+# Process BOOT_ZIMAGE Forbid List

+#****************************************************************************

+printLog($separateLine);

+printLog("[Start processing BOOT_ZIMAGE forbid list stage]");

+

+if (&processBootZImageForbidList())

+{

+   printLog("Process completed");

+}

+else

+{

+   printLog("Process skipped");

+}

+

+printLog("[End processing BOOT_ZIMAGE forbid list stage]\n");

+

+#****************************************************************************

+# Output to files

+#****************************************************************************

+printLog($separateLine);

+printLog("[Start outputing stage]");

+{

+   foreach my $objectList (values %outputObjectLists)

+   {

+      if ($objectList->{"generate"})

+      {

+         my @filename = fileparse($objectList->{"list_file"});

+         printLog("Generate $filename[0]");

+         &objListHelper::SortObjectListByCategory($objectList->{"list"});

+         &objListHelper::OutputObjectListToObjListFile($objectList->{"list_file"}, $objectList->{"list"}, "        ");

+      }

+      #elsif (-e $objectList->{"list_file"} and not $objectList->{"manual_modified"})

+      #{

+      #   unlink $objectList->{"list_file"} or

+      #      &objListHelper::ErrorHandler("Fail to delete file $objectList->{list_file} $!", __FILE__, __LINE__);

+      #}

+   }

+}

+printLog("[End outputing stage]\n");

+

+

+sub initialize

+{

+   my %makefileOptions;

+

+   # Check the feature set

+   {

+      printLog("Checking feature set...");

+

+      # Parse makefile

+      if (0 == &FileInfo::Parse_MAKEFILE($makefilePath, \%makefileOptions))

+      {

+         &objListHelper::ErrorHandler("Fail to parse makefile $makefilePath $!", __FILE__, __LINE__);

+      }

+

+      $aliceEnabled = &_checkFeatureOption("ALICE", "ALICE_SUPPORT", "TRUE", \%makefileOptions);

+      $bootZImageEnabled = &_checkFeatureOption("BOOT_ZIMAGE", "BOOT_ZIMAGE_SUPPORT", "TRUE", \%makefileOptions);

+      $zImageEnabled = &_checkFeatureOption("ZIMAGE", "ZIMAGE_SUPPORT", "TRUE", \%makefileOptions);

+

+      # Check dummy scatter

+      {

+         my $option = $makefileOptions{"DUMMY_SCATTER_ENABLE"};

+         if ((defined $option and $option eq "TRUE") or ($forceDummyScatter eq "TRUE"))

+         {

+            debugLog("DUMMY_SCATTER is enabled");

+            $isDummyScatter = 1;

+         }

+      }

+

+      # Check if the feature options are changed

+      {

+         my $featureOptionChanged = 0;

+

+         if (-e $featureOptionBackupFile)

+         {

+            $featureOptionChanged = 1 if not &_isFileContentMatch($makefilePath, $featureOptionBackupFile);

+         }

+         else

+         {

+            $featureOptionChanged = 1;

+         }

+

+         if ($featureOptionChanged)

+         {

+            copy($makefilePath, $featureOptionBackupFile) or

+               &objListHelper::ErrorHandler("Fail to backup file $makefilePath $!", __FILE__, __LINE__);

+            _removeObjectLists();

+         }

+      }

+   }

+

+   # Parse source object lists

+   {

+      printLog("Parsing source object lists...");

+

+      if ($aliceEnabled)

+      {

+         $aliceForbidListFileChanged =

+            &_getSourceObjectList("ALICE Forbidden List", $aliceForbidListFile, \@aliceForbidList,

+                                  \%makefileOptions, $aliceForbidListBackupFile);

+      }

+

+      if ($bootZImageEnabled)

+      {

+         $bootZImageForbidListFileChanged =

+            &_getSourceObjectList("BOOT_ZIMAGE Forbidden List", $bootZImageForbidListFile, \@bootZImageForbidList,

+                                  \%makefileOptions, $bootZImageForbidListBackupFile);

+      }

+

+      if ($zImageEnabled)

+      {

+         $zImageForbidListFileChanged =

+            &_getSourceObjectList("ZIMAGE Forbidden List", $zImageForbidListFile, \@zImageForbidList,

+                                  \%makefileOptions, $zImageForbidListBackupFile);

+      }

+   }

+

+   # Check manual checking of output object lists

+   #{

+   #   printLog("Check manual modification of output object lists...");

+   #

+   #   foreach my $objectList (values %outputObjectLists)

+   #   {

+   #      if (&objListHelper::IsManualModified($objectList->{"list_file"}))

+   #      {

+   #         my @filename = fileparse($objectList->{"list_file"});

+   #         debugLog("$filename[0] was manual modified");

+   #

+   #         $objectList->{"manual_modified"} = 1;

+   #      }

+   #   }

+   #}

+

+   # Generate ObjListGenPath: scat_config\FeatureBased\ObjListGen

+   unless (-d $destinationListFolder)

+   {

+       mkpath($destinationListFolder)

+         or &objListHelper::ErrorHandler("Fail to create folder $destinationListFolder $!", __FILE__, __LINE__);

+   }

+}

+

+sub _checkFeatureOption

+{

+   my $featureName = shift;

+   my $featureOption = shift;

+   my $featureEnableValue = shift;

+   my $makefileOptions = shift;

+

+   my $result = 0;

+

+   my $option = $makefileOptions->{$featureOption};

+   if (defined $option and $option eq $featureEnableValue)

+   {

+      debugLog("$featureName is enabled");

+      $result = 1;

+   }

+

+   return $result;

+}

+

+sub _isFileContentMatch

+{

+   my $firstFile = shift;

+   my $secondFile = shift;

+

+   if (&__getFileContent($firstFile) eq &__getFileContent($secondFile))

+   {

+      return 1;

+   }

+   else

+   {

+      return 0;

+   }

+}

+

+sub __getFileContent

+{

+    my $sourceFile = shift;

+    my $content;

+    open FILE, "<$sourceFile" or

+      &objListHelper::ErrorHandler("Fail to open file $sourceFile $!", __FILE__, __LINE__);

+    {

+        local $/;

+        $content = <FILE>;

+    }

+    close FILE;

+    chomp($content);

+    return $content;

+}

+

+sub _getSourceObjectList

+{

+   my $listName = shift;

+   my $sourceFile = shift;

+   my $listRef = shift;

+   my $makefileOptions = shift;

+   my $backupFile = shift;

+   my $sourceFileChanged = 0;

+

+   debugLog("Get $listName");

+   &objListHelper::InputObjectListFromCSVFile($sourceFile, $listRef, $makefileOptions);

+   PrintDependency($sourceFile);

+

+   if (-e $backupFile)

+   {

+      #my @backupList;

+      #&objListHelper::InputObjectListFromCSVFile($backupFile, \@backupList, $makefileOptions);

+

+      #if (0 != &objListHelper::CompareObjectList($listRef, \@backupList))

+      unless (&_isFileContentMatch($sourceFile, $backupFile))

+      {

+         $sourceFileChanged = 1;

+

+         copy($sourceFile, $backupFile) or

+            &objListHelper::ErrorHandler("Fail to backup file $sourceFile $!", __FILE__, __LINE__);

+      }

+   }

+   else

+   {

+      copy($sourceFile, $backupFile) or

+         &objListHelper::ErrorHandler("Fail to backup file $sourceFile $!", __FILE__, __LINE__);

+

+      $sourceFileChanged = 1;

+   }

+

+   if ($sourceFileChanged)

+   {

+      debugLog("$listName changed");

+      _removeObjectLists();

+   }

+   else

+   {

+      debugLog("$listName not changed");

+   }

+

+   return $sourceFileChanged;

+}

+

+sub _removeObjectLists

+{

+   debugLog("Delete object lists");

+   unlink $_->{"list_file"} foreach (values %outputObjectLists);

+}

+

+sub processAliceForbidList

+{

+   if ($aliceEnabled)

+   {

+      if ($zImageEnabled)

+      {

+         my @afList;

+         my @afOverlapList;

+         my @afzfList;

+

+         &objListHelper::SplitObjectListByCheckList(\@aliceForbidList, \@zImageForbidList, \@afzfList, \@afOverlapList, \@afList);

+

+         &objListHelper::ChangeObjectListAttributeList(\@afList, "+RO");

+         &objListHelper::ChangeObjectListAttributeList(\@afOverlapList, "+RO-CODE");

+         &objListHelper::ChangeObjectListAttributeList(\@afzfList, "+RO-CODE, +RO-DATA");

+

+         my $isSourceChanged = $aliceForbidListFileChanged || $zImageForbidListFileChanged;

+

+         if ($isDummyScatter)

+         {

+            &_pushToOutputObjectList("ALICE_FORBID_DUMMY", \@afList, $isSourceChanged);

+            &_pushToOutputObjectList("ROM1_DUMMY", \@afOverlapList, $isSourceChanged);

+            &_pushToOutputObjectList("ROM1_DUMMY", \@afzfList, $isSourceChanged);

+            &_pushToOutputObjectList("ALICE_DUMMY", [], $isSourceChanged);

+         }

+         else

+         {

+            &_pushToOutputObjectList("ZIMAGE", \@afList, $isSourceChanged);

+            &_pushToOutputObjectList("ROM1", \@afOverlapList, $isSourceChanged);

+            &_pushToOutputObjectList("ROM1", \@afzfList, $isSourceChanged);

+            &_pushToOutputObjectList("ALICE", [], $isSourceChanged);

+         }

+      }

+      else

+      {

+         my $isSourceChanged = $aliceForbidListFileChanged;

+

+         if ($isDummyScatter)

+         {

+            &_pushToOutputObjectList("ROM1_DUMMY", \@aliceForbidList, $isSourceChanged);

+            &_pushToOutputObjectList("ALICE_DUMMY", [], $isSourceChanged);

+         }

+         else

+         {

+            &_pushToOutputObjectList("ROM1", \@aliceForbidList, $isSourceChanged);

+            &_pushToOutputObjectList("ALICE", [], $isSourceChanged);

+         }

+      }

+

+      return 1;

+   }

+   else

+   {

+      return 0;

+   }

+}

+

+sub processZImageForbidList

+{

+   if ($zImageEnabled)

+   {

+      if ($aliceEnabled)

+      {

+         my @zfUnmatchedList = grep((not $_->{"matched"}), @zImageForbidList);

+

+         my @zf_RList;

+         my @zf_AList;

+         my @zfafList;

+         my @zfOverlapList;

+         my @zfOnlyList;

+

+         &objListHelper::SplitObjectListByCheckList(\@zfUnmatchedList, \@aliceForbidList, \@zfafList, \@zfOverlapList, \@zfOnlyList);

+

+         # ZFAF list should have been empty if there were no wildcard symbol

+         # Append this list to ZF only list since the priority is lower for wildcard

+         push @zfOnlyList, @zfafList;

+         &objListHelper::SortObjectListByCategory(\@zfOnlyList);

+

+         # Specify the ZF overlap list to ROM1 with +RO-CODE, +RO-DATA since the libraries include them are in AF list

+         foreach my $object (@zfOverlapList)

+         {

+            if ($object->{"attributes"}[0] eq "+RO")

+            {

+               $object->{"attributes"}[0] = "+RO-CODE";

+               $object->{"attributes"}[1] = "+RO-DATA";

+               push @zf_RList, $object;

+            }

+            else

+            {

+               push @zf_RList, $object;

+            }

+         }

+

+         # The data part is in ROM1 and code part is in ALICE for ZF only list

+         foreach my $object (@zfOnlyList)

+         {

+            if ($object->{"attributes"}[0] eq "+RO")

+            {

+               my %newObject = %$object;

+               $object->{"attributes"}[0] = "+RO-DATA";

+               push @zf_RList, $object;

+

+               $newObject{"attributes"} = ["+RO"];

+               push @zf_AList, \%newObject;

+            }

+            elsif ($object->{"attributes"}[0] eq "+RO-CODE")

+            {

+               push @zf_AList, $object;

+

+               if (defined $object->{"attributes"}[1] and $object->{"attributes"}[1] eq "+RO-DATA")

+               {

+                  my %newObject = %$object;

+                  $newObject{"attributes"} = ["+RO-DATA"];

+                  push @zf_RList, \%newObject;

+                  splice @{$object->{"attributes"}}, -1;

+               }

+            }

+            else

+            {

+               push @zf_RList, $object;

+            }

+         }

+

+         my $isSourceChanged = $zImageForbidListFileChanged || $aliceForbidListFileChanged;

+

+         if ($isDummyScatter)

+         {

+            &_pushToOutputObjectList("ROM1_DUMMY", \@zf_RList, $isSourceChanged);

+            &_pushToOutputObjectList("ALICE_DUMMY", \@zf_AList, $isSourceChanged);

+

+            &_pushToOutputObjectList("ZIMAGE_DUMMY", [], $isSourceChanged);

+         }

+         else

+         {

+            &_pushToOutputObjectList("ROM1", \@zf_RList, $isSourceChanged);

+            &_pushToOutputObjectList("ALICE", \@zf_AList, $isSourceChanged);

+

+            &_pushToOutputObjectList("ZIMAGE", [], $isSourceChanged);

+         }

+      }

+      else

+      {

+         my $isSourceChanged = $zImageForbidListFileChanged;

+

+         if ($isDummyScatter)

+         {

+            &_pushToOutputObjectList("ROM1_DUMMY", \@zImageForbidList, $isSourceChanged);

+            &_pushToOutputObjectList("ZIMAGE_DUMMY", [], $isSourceChanged);

+         }

+         else

+         {

+            &_pushToOutputObjectList("ROM1", \@zImageForbidList, $isSourceChanged);

+            &_pushToOutputObjectList("ZIMAGE", [], $isSourceChanged);

+         }

+      }

+

+      return 1;

+   }

+   else

+   {

+      return 0;

+   }

+}

+

+sub processBootZImageForbidList

+{

+   if ($bootZImageEnabled)

+   {

+      my @bzList;

+      my @afzfbzfList;

+      my @afzfbzfOverlapList;

+

+      my $isSourceChanged = $bootZImageForbidListFileChanged;

+

+      # BOOT_ZIMAGE library problem workaround

+      my @bootZImageNormalForbidList;

+      my @bootZImageWorkaroundForbidList;

+

+      foreach my $object (@bootZImageForbidList)

+      {

+         if ($object->{"category"} eq "Workaround")

+         {

+            push @bootZImageWorkaroundForbidList, $object;

+         }

+         else

+         {

+            push @bootZImageNormalForbidList, $object;

+         }

+      }

+

+      if ($isDummyScatter)

+      {

+        #&objListHelper::SplitObjectListByCheckList(\@{$outputObjectLists{"ROM1_DUMMY"}{"list"}}, \@bootZImageForbidList, \@afzfbzfList, \@afzfbzfOverlapList, \@bzList);

+         &objListHelper::SplitObjectListByCheckList(\@{$outputObjectLists{"ROM1_DUMMY"}{"list"}}, \@bootZImageNormalForbidList, \@afzfbzfList, \@afzfbzfOverlapList, \@bzList);

+      }

+      else

+      {

+        #&objListHelper::SplitObjectListByCheckList(\@{$outputObjectLists{"ROM1"}{"list"}}, \@bootZImageForbidList, \@afzfbzfList, \@afzfbzfOverlapList, \@bzList);

+         &objListHelper::SplitObjectListByCheckList(\@{$outputObjectLists{"ROM1"}{"list"}}, \@bootZImageNormalForbidList, \@afzfbzfList, \@afzfbzfOverlapList, \@bzList);

+      }

+

+      # BOOT_ZIMAGE library problem workaround

+      {

+         # Force the workaround libraries to ROM1

+         my %bootZImageWorkaourndForbidHash = map { $_->{"name"} => 1 } @bootZImageWorkaroundForbidList;;

+         my @tempBZList = @bzList;

+         @bzList = ();

+

+         foreach my $object (@tempBZList)

+         {

+            if (exists $bootZImageWorkaourndForbidHash{$object->{"name"}})

+            {

+               push @afzfbzfList, $object;

+            }

+            else

+            {

+               push @bzList, $object;

+            }

+         }

+      }

+

+      if ($isDummyScatter)

+      {

+         &_pushToOutputObjectList("BOOT_ZIMAGE_DUMMY", \@bzList, $isSourceChanged);

+

+         @{$outputObjectLists{"ROM1_DUMMY"}{"list"}} = ();

+         &_pushToOutputObjectList("ROM1_DUMMY", \@afzfbzfList, $isSourceChanged);

+         &_pushToOutputObjectList("ROM1_DUMMY", \@afzfbzfOverlapList, $isSourceChanged);

+      }

+      else

+      {

+

+         &_pushToOutputObjectList("BOOT_ZIMAGE", \@bzList, $isSourceChanged);

+

+         @{$outputObjectLists{"ROM1"}{"list"}} = ();

+         &_pushToOutputObjectList("ROM1", \@afzfbzfList, $isSourceChanged);

+         &_pushToOutputObjectList("ROM1", \@afzfbzfOverlapList, $isSourceChanged);

+      }

+

+      return 1;

+   }

+   else

+   {

+      return 0;

+   }

+}

+

+sub _pushToOutputObjectList

+{

+   my $objectListName = shift;

+   my $objectListRef = shift;

+   my $isSourceChanged = shift;

+

+   push @{$outputObjectLists{$objectListName}{"list"}}, @$objectListRef;

+

+   if (-e $outputObjectLists{$objectListName}{"list_file"})

+   {

+      #if ($isSourceChanged)

+      #{

+      #   $outputObjectLists{$objectListName}{"generate"} = 1;

+      #}

+   }

+   else

+   {

+      $outputObjectLists{$objectListName}{"generate"} = 1;

+   }

+}

+

+sub printLog

+{

+   print "$_[0]\n";

+}

+

+sub debugLog

+{

+   if ($DEBUG)

+   {

+      printLog("\t$_[0]");

+   }

+}