[Feature]Upload Modem source code

Change-Id: Id4294f30faced84d3e6fd6d5e61e1111bf287a37
diff --git a/mcu/tools/vivaPrelink.pl b/mcu/tools/vivaPrelink.pl
new file mode 100644
index 0000000..6313c39
--- /dev/null
+++ b/mcu/tools/vivaPrelink.pl
@@ -0,0 +1,352 @@
+#!/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) 2005

+#

+#  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:

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

+#*   vivaPrelink.pl

+#*

+#* Project:

+#* --------

+#*   Maui_Software

+#*

+#* Description:

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

+#*   This file implemented the VIVA prelink process.

+#*

+#*

+#* Author:

+#* -------

+#*   Ke-Ting Chen (mtk03141)

+#*

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

+

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

+# Included Modules

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

+use strict;

+use warnings;

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

+use vivaHelper;

+

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

+# History

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

+my $VIVA_PRELINK_VERNO = " v1.00";

+   # v1.00: Phase in VIVA

+

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

+# Constants

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

+my $DEBUG = 1;

+my $afOverlapListName = "objectAF_Overlap.list";

+my $afOverlapLibraryName = "af_overlap.lib";

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

+

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

+# Arguments

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

+&vivaHelper::ErrorHandler("Insufficient arguments!", __LINE__, __FILE__)

+   unless scalar(@ARGV) == 5;

+

+my $customFolder = $ARGV[0];

+my $libraryFolder = $ARGV[1];

+my $objectFolder = $ARGV[2];

+my $makefilePath = $ARGV[3];

+my $outputFilePath = $ARGV[4];

+

+# To align error message file name format

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

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

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

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

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

+

+# Print out the arguments

+printLog($separateLine);

+printLog("Arguments:");

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

+printLog("Library Folder: $libraryFolder");

+printLog("Object Folder: $objectFolder");

+printLog("Makefile: $makefilePath");

+printLog("Output File: $outputFilePath");

+printLog("");

+

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

+# Variables

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

+my $afOverlapList = "$customFolder\\$afOverlapListName";

+my $afOverlapLibrary = "$libraryFolder\\$afOverlapLibraryName";

+

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

+# Process

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

+exit 0;

+

+printLog("[Start VIVA prelink]");

+

+&vivaHelper::Initialize(&vivaHelper::PROCESS_TYPE, $makefilePath);

+

+# Check feature options

+{

+   my $zImageOption = &vivaHelper::GetMakefileOption("ZIMAGE_SUPPORT");

+   my $aliceOption = &vivaHelper::GetMakefileOption("ALICE_SUPPORT");

+

+   unless ((defined $zImageOption and $zImageOption eq "TRUE") and

+           (defined $aliceOption and $aliceOption eq "TRUE"))

+   {

+      printLog("No need of prelinking");

+      goto END_PROCESS;

+   }

+}

+

+# ALICE Prelink process

+{

+   my %objectAFOverlapHash;

+   my @libraryList;

+

+   # Get AF overlap list hash

+   {

+      printLog("Getting AF overlap list...");

+      # Read AF overlap list

+      my @objectAFOverlapList;

+      &vivaHelper::InputObjectListFromFile($afOverlapList, \@objectAFOverlapList);

+

+      # Change to AF overlap list to hash form

+      foreach my $object (@objectAFOverlapList)

+      {

+         $objectAFOverlapHash{"$object->{name}"} = 1;

+         debugLog("$object->{name}");

+      }

+   }

+

+   # Delete the original AF overlap library

+   unlink($afOverlapLibrary) if -e $afOverlapLibrary;

+

+   # Move the AF overlap objects

+   {

+      printLog("Getting all object list...");

+      my @allObjectList;

+      &getFileList($objectFolder, \@allObjectList);

+

+      my %deleteObjectHash;

+      my $addObjectString = "";

+

+      printLog("Matching overlap object...");

+      foreach my $object (@allObjectList)

+      {

+         if ($object =~ /\\([\w\.]+)\\([\w\.]+)$/)

+         {

+            # Check if in the AF overlap list

+            if ($objectAFOverlapHash{$2})

+            {

+               # Mark the file as processed

+               $objectAFOverlapHash{$2} = 0;

+

+               if (exists $deleteObjectHash{$1})

+               {

+                  $deleteObjectHash{$1} .= "$2 ";

+               }

+               else

+               {

+                  $deleteObjectHash{$1} = "$2 ";

+               }

+

+               $addObjectString .= "$object "

+            }

+         }

+      }

+

+      printLog("Adding objects...");

+      debugLog("$_") foreach split(/ /, $addObjectString);

+      &addLibraryFile($afOverlapLibrary, $addObjectString);

+

+      printLog("Deleting objects...");

+      while (my ($key, $value) = each %deleteObjectHash)

+      {

+         debugLog("$key: $value");

+         &deleteLibraryFile("$libraryFolder\\$key.lib", $value);

+      }

+   }

+

+   # Output the library name to the output file

+   if (-e $afOverlapLibrary)

+   {

+      open my $output, ">$outputFilePath"  or

+         &vivaHelper::ErrorHandler("Cannot open file $outputFilePath: $!", __FILE__, __LINE__);

+

+      print $output $afOverlapLibraryName;

+

+      close $output;

+   }

+

+   # Print out the non-processed list

+   printLog("\nNon-processed objects");

+   while (my ($key, $value) = each %objectAFOverlapHash)

+   {

+      printLog("\t$key") if ($value);

+   }

+}

+

+

+END_PROCESS:

+

+printLog("[End VIVA prelink]");

+exit 0;

+

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

+# subroutine:  getFileList

+# description: Get all the file list under the folder.

+# input:       Folder path, file list ref

+# output:      File list

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

+sub getFileList

+{

+   my $folderPath = shift;

+   my $fileListRef = shift;

+

+   system("dir $folderPath /S /B > ~listTemp.tmp");

+   open my $input, "<~listTemp.tmp";

+   while (<$input>)

+   {

+      chomp;

+      push @$fileListRef, $_;

+   }

+   close $input;

+

+   unlink("~listTemp.tmp");

+}

+

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

+# subroutine:  getLibraryFileList

+# description: Get the file list in a library.

+# input:       Library path, library file list ref

+# output:      Library file list

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

+sub getLibraryFileList

+{

+   my $library = shift;

+   my $listRef = shift;

+

+   my $result = `armar -t $library 2>&1`;

+

+   if ($result =~ /Error:/)

+   {

+      &vivaHelper::ErrorHandler("Fail to get library content files $library $result", __FILE__, __LINE__);

+   }

+   else

+   {

+      @$listRef = split(/\n/, $result);

+   }

+}

+

+

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

+# subroutine:  addLibraryFile

+# description: Add the files to the library.

+# input:       Library, files

+# output:      None

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

+sub addLibraryFile

+{

+   my $library = shift;

+   my $files = shift;

+

+   my $result;

+

+   open my $output, ">~tempVIAFile.tmp";

+   print $output $files;

+   close $output;

+

+   if (-e $library)

+   {

+      $result = `armar -r $library -via ~tempVIAFile.tmp 2>&1`;

+   }

+   else

+   {

+      $result = `armar --create $library -via ~tempVIAFile.tmp 2>&1`;

+   }

+

+   unlink("~tempVIAFile.tmp");

+

+   if ($result =~ /Error/)

+   {

+      &vivaHelper::ErrorHandler("Fail to add library content files $library $result", __FILE__, __LINE__);

+   }

+}

+

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

+# subroutine:  deleteLibraryFile

+# description: Delete the files from the library.

+# input:       Library, files

+# output:      None

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

+sub deleteLibraryFile

+{

+   my $library = shift;

+   my $files = shift;

+

+   my $result;

+

+   # Delete files one by one for only remake some module case

+   foreach my $file (split(/ /, $files))

+   {

+      $result = `armar -d $library $file 2>&1`;

+

+      chomp $result;

+

+      if ($result =~ /Error/)

+      {

+         printLog("Warning: Cannot delete library content file $file from $library. $result");

+         #&vivaHelper::ErrorHandler("Fail to delete library content files $library $result", __FILE__, __LINE__);

+      }

+   }

+}

+

+sub printLog

+{

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

+}

+

+sub debugLog

+{

+   if ($DEBUG)

+   {

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

+   }

+}

+

+# tools\vivaPrelink.pl .\custom\system\MT6250_EVB .\build\MT6250_EVB\gprs\MT6250o\lib .\build\MT6250_EVB\gprs\MT6250o .\make\MT6250_EVB_GPRS.mak .\output.txt >tempVIVA.txt