[Feature][Modem]Update MTK MODEM V1.6 baseline version: MOLY.NR15.R3.MD700.IVT.MP1MR3.MP.V1.6
MTK modem version: MT2735_IVT_MOLY.NR15.R3.MD700.IVT.MP1MR3.MP.V1.6.tar.gz
RF modem version: NA
Change-Id: I45a4c2752fa9d1a618beacd5d40737fb39ab64fb
diff --git a/mcu/tools/extractObj.pl b/mcu/tools/extractObj.pl
new file mode 100644
index 0000000..09f871d
--- /dev/null
+++ b/mcu/tools/extractObj.pl
@@ -0,0 +1,216 @@
+#!/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).
+#
+#
+$custom = "Dragonfly_Demo";
+$proj = "gprs"; # gprs or gsm
+@objs = ();#qw(custom_wap_cust_pack.obj nvram_cust_pack.obj);
+$outputdir = "C:\\CustPack\\BIN";
+$dboutputdir = "C:\\CustPack";
+$extractObjExe = "ExtractObj.exe";
+
+$ini_file = "ExtractObj.ini";
+if (!-e $ini_file) {
+ die "$ini_file OR pcore\\tools\\$ini_file did NOT exist!\n" if (!-e "pcore\\tools\\$ini_file");
+ $ini_file = "pcore\\tools\\$ini_file";
+}
+
+open INI_FILE, "<$ini_file" or die "cannot open $ini_file\n";
+
+while (<INI_FILE>) {
+ if (/^\s*CUSTOM\s*=\s*\"(\S+)\"\s/) {
+ $custom = $1;
+ } elsif (/^\s*PROJECT\s*=\s*\"(\S+)\"\s/) {
+ $proj = $1;
+ } elsif (/^\s*OBJ\d+\s*=\s*\"(\S+)\"\s/) {
+ push(@objs, $1);
+ } elsif (/^\s*OUTPUTDIR\s*=\s*\"(\S+)\"\s/) {
+ $dboutputdir = $1;
+ $outputdir = $1."\\BIN";
+ }
+}
+close INI_FILE;
+
+while ($#ARGV != -1) {
+ if ($ARGV[0] =~ /-h/) {
+ Usage();
+ } elsif ($ARGV[0] =~ /^custom=(\w+)/) {
+ $custom = $1;
+ } elsif ($ARGV[0] =~ /(gprs|gsm|umts)/i) {
+ $proj = $ARGV[0];
+ } elsif ($ARGV[0] =~ /^objs=(\S+)/) {
+ @objs = split(',', $1);
+ } else {
+ Usage();
+ }
+ shift(@ARGV);
+}
+
+$fromelf = "fromelf";
+$builddir = "build\\${custom}\\${proj}";
+
+$makefolder = "make";
+if (!-d $makefolder) {
+ die "$makefolder OR ..\\$makefolder did NOT exist!\n" if (!-d "..\\$makefolder");
+ $makefolder = "..\\$makefolder";
+}
+$custombld = "${makefolder}\\custom.bld";
+die "$custombld did NOT exist!\n" if (!-e $custombld);
+open (FILE_HANDLE, "<$custombld") or die "cannot open $custombld\n";
+while (<FILE_HANDLE>) {
+ if (/^(\S+)\s*=\s*(\S+)/) {
+ $keyname = lc($1);
+ defined($${keyname}) && warn "$1 redefined in $custombld!\n";
+ $${keyname} = uc($2);
+ }
+}
+close FILE_HANDLE;
+
+if ($custom_release eq "TRUE") {
+ $dbfileprefix = "BPLGUInfoCustomAppSrcP_MT62";
+} else {
+ $dbfileprefix = "BPLGUInfoCustomApp_MT62";
+}
+
+
+#system("rd /s /q $outputdir") if (-d $outputdir);
+#system("rd /s /q $dboutputdir") if (-d $dboutputdir);
+system("md $dboutputdir") if (!-d $dboutputdir);
+system("md $outputdir") if (!-d $outputdir);
+if (!-d $builddir) {
+ die "$builddir OR ..\\$builddir did NOT exist!\n" if (!-d "..\\$builddir");
+ $builddir = "..\\$builddir";
+}
+
+$not_found_flag = 0;
+foreach $chkobj (@objs) {
+ if (!-e $chkobj) { $not_found_flag = 1; last; }
+ else { $found{$chkobj} = $chkobj; }
+}
+
+if ($not_found_flag == 0) { goto DEAL_OBJ; }
+
+if (opendir(OBJDIRS, $builddir)) {
+ @syndirs = sort readdir(OBJDIRS);
+ closedir(OBJDIRS);
+ shift(@syndirs); shift(@syndirs); ## . and ..
+} else {
+ die "Could not open $builddir";
+}
+
+CHIP_DIR: foreach $tarDir (@syndirs) {
+ next if ($tarDir !~ m/o$/);
+ $tarDir = "$builddir\\$tarDir";
+ if (opendir(OBJDIRS, $tarDir)) {
+ @moduledirs = sort readdir(OBJDIRS);
+ closedir(OBJDIRS);
+ shift(@moduledirs); shift(@moduledirs); ## . and ..
+ } else {
+ warn "Could not open $tarDir\n";
+ next;
+ }
+
+ foreach $chkobj (@objs) { undef($found{$chkobj}); }
+
+ CHIP_OBJ: foreach $m (@moduledirs) {
+ next if ($m eq "lib");
+ $tarDir2 = "$tarDir\\$m";
+ if (opendir(OBJDIRS, $tarDir2)) {
+ @objfiles = sort readdir(OBJDIRS);
+ closedir(OBJDIRS);
+ shift(@objfiles); shift(@objfiles); ## . and ..
+ } else {
+ warn "Could not open $tarDir2\n";
+ next;
+ }
+ foreach $objfile (@objfiles) {
+ foreach $chkobj (@objs) {
+ next if (defined($found{$chkobj}));
+ next if ($objfile ne $chkobj);
+ $found{$chkobj} = "$tarDir2\\$chkobj";
+ }
+ }
+ foreach $chkobj (@objs) { next CHIP_OBJ if (!defined($found{$chkobj}));}
+ print "Found all obj files @ $tarDir\n";
+ last CHIP_DIR;
+ }
+}
+
+DEAL_OBJ:
+$allObjs = "";
+foreach $chkobj (@objs) {
+ $chktxt = $found{$chkobj};
+ die "$chkobj did NOT exist!\n" if (!-e $found{$chkobj});
+ $allObjs .= " $chktxt";
+ $chktxt =~ s/\.obj/\.txt/;
+ system("del /f /q $chktxt") if (-e $chktxt);
+ print("$fromelf -text -v -s $found{$chkobj} > $chktxt\n");
+ system("$fromelf -text -v -s $found{$chkobj} > $chktxt");
+}
+
+if (!-e $extractObjExe) {
+ die "$extractObjExe OR pcore\\tools\\$extractObjExe did NOT exist!\n" if (!-e "pcore\\tools\\$extractObjExe");
+ $extractObjExe = "pcore\\tools\\$extractObjExe";
+}
+print("$extractObjExe $outputdir $allObjs\n");
+system("$extractObjExe $outputdir $allObjs");
+
+$dbfolder = "tst\\database";
+
+if (!-d $dbfolder) {
+ die "$dbfolder OR ..\\$dbfolder did NOT exist!\n" if (!-d "..\\$dbfolder");
+ $dbfolder = "..\\$dbfolder";
+}
+print("$extractObjExe $outputdir $allObjs\n");
+if (opendir(OBJDIRS, $dbfolder)) {
+ @dbfiles= sort readdir(OBJDIRS);
+ closedir(OBJDIRS);
+ shift(@dbfiles); shift(@dbfiles); ## . and ..
+} else {
+ die "Could not open $dbfolder\n";
+}
+foreach $dbfile (@dbfiles) {
+ next if ($dbfile !~ /$dbfileprefix/);
+ system("copy /Y ${dbfolder}\\$dbfile ${dboutputdir}\\$dbfile");
+}
+
+exit 0;
+
+sub Usage {
+ print <<"__EOFUSAGE";
+Usage: $0 [-h | custom=\$custom | (gprs|gsm) | [objs=a.obj,b.obj]]
+ -h Help.
+__EOFUSAGE
+ exit 0;
+}