[Feature]Upload Modem source code

Change-Id: Id4294f30faced84d3e6fd6d5e61e1111bf287a37
diff --git a/mcu/tools/parse_comp_err.pl b/mcu/tools/parse_comp_err.pl
new file mode 100644
index 0000000..a86774c
--- /dev/null
+++ b/mcu/tools/parse_comp_err.pl
@@ -0,0 +1,172 @@
+#!/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).
+#
+#
+
+use strict;
+my $logPath = "$ARGV[0]/bin/log";
+my $logPath_modis = "$ARGV[0]/MoDIS/_BUILD_LOG";
+my $modisConfig = "false";
+my $debugPrint = 0;
+my $filename;
+my $outStr = "";
+my $outFile = "$ARGV[2]/comp_err.txt";
+
+unlink $outFile if(-e $outFile);
+
+if (defined $ARGV[1])
+{
+  $modisConfig = lc($ARGV[1]);
+}
+else
+{
+  $debugPrint = 1;
+}
+if (defined $ARGV[3] && $ARGV[3] eq "TRUE")
+{
+  $debugPrint = 1;
+}
+
+if ($modisConfig eq "true")
+{
+  $logPath = "$ARGV[0]/MoDIS/_BUILD_XGEN/bin/log";
+  $filename = "${logPath_modis}/codegen.log";
+}
+else
+{
+  $filename = "${logPath}/codegen.log";
+}
+
+if ((-e $filename) && (!-z $filename)) {
+  $outStr .= "Codegen might be failed ==> $filename\n";
+  open(F, $filename) || die "I can't open $filename";
+  while(<F>) {
+    next if (/^\s*$/);
+    $outStr .= " $_";
+  }
+  close (F);
+}
+
+if ($modisConfig eq "true")
+{
+  $filename = "${logPath_modis}/mcddll_update.log";
+}
+else
+{
+  $filename = "${logPath}/mcddll_update.log";
+}
+
+if ((-e $filename) && (!-z $filename)) {
+  $outStr .= "mcddll_update might be failed ==> $filename\n";
+  open(F, $filename) || die "I can't open $filename";
+  while(<F>) {
+    next if (/^\s*$/);
+    $outStr .= " $_";
+  }
+  close (F);
+}
+
+if ($modisConfig eq "true")
+{
+  &Output_Error if ($outStr ne "");
+  exit 0;
+}
+
+my $errModule = 0;
+while(defined($filename= <$logPath/*.log>)) {
+  next if ($filename =~ /info/);
+  next if ($filename =~ /codegen/);
+  open(F, $filename ) || die "I can't open $filename";
+  my $errFlag = 0;
+  my $showthefile = 1;
+  my $thefile;
+  while(<F>) {
+    if (/\/\*.*error\s*:.*\*\//i) {
+      next;
+    }
+    if (/Compiling (\S+)/) {
+      $thefile = $1;
+      $showthefile = 0;
+    } elsif ((/Serious error:/)||(/Error:/i)||(/Fatal error:/)||(/No rule/)||(/dependency errors/) || ((/\bError(s?)\b/)&&($_ !~ /\b0 Errors\b/)&&($filename =~ "bootloader"))) {
+      $errModule++;
+      if ($errFlag == 0) {
+        $errFlag = 1;
+        $outStr .= "$filename\n";
+      }
+      if($showthefile == 0)
+      {
+        $outStr .= " $thefile:\n";
+      }
+      $showthefile = 1;
+      $outStr .= " $_";
+      last if ($errModule > 300);
+    }
+  } ## while
+  close(F);
+  last if ($errModule > 300);
+} ## while
+
+if ($errModule == 0) {
+  while(defined($filename= <$ARGV[0]/bin/*.log>)) {
+    open(F, $filename ) || die "I can't open $filename";
+    my $errFlag = 0;
+    while(<F>) {
+      if ((/Serious error:/) || (/Error:/) || (/No rule/) || (/Fatal error:/)) {
+        if ($errFlag == 0) {
+          $errFlag = 1;
+          $outStr .= "$filename\n";
+        }
+        $outStr .= " $_";
+      }
+    } ## while
+    close(F);
+  } ## while
+} elsif ($errModule > 300) {
+  $outStr .= "\n   Too many errors. Stop parsing.";
+}
+
+&Output_Error if ($outStr ne "");
+exit 0;
+
+sub Output_Error
+{
+  if($debugPrint)
+  {
+    print "Please check following errors:\n";
+    print "$outStr\n";
+  }
+  open (Fout, ">$outFile") || die "Error: cannot open $outFile\n";
+  print Fout "$outStr\n";
+  close Fout;
+}