diff g23m/system/busyb/tools/tune_mak.pl @ 0:509db1a7b7b8

initial import: leo2moko-r1
author Space Falcon <falcon@ivan.Harhan.ORG>
date Mon, 01 Jun 2015 03:24:05 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/g23m/system/busyb/tools/tune_mak.pl	Mon Jun 01 03:24:05 2015 +0000
@@ -0,0 +1,154 @@
+#!perl -w
+
+# This script modifies a BUSYB generated makefile. Once BUSYB generates variables it
+# won't be needed anymore.
+# It collects all *.obj *.lib ... files and writes them into variables.
+use strict;
+
+my %objects;
+my %libs;
+my %cs;
+my %pdfs;
+my %mdfs;
+my $mconst;
+my $rvswe;
+
+(@ARGV == 3) || die "Usage: tune_mak <in_file> <out_file> <abc_exp_name>";
+
+open(IN, $ARGV[0]) || die "Could not open file $ARGV[0]: $!";
+
+while (<IN>) {
+  if (/\%/) {
+    # ignore lines that contain the % charater
+  }
+  elsif (/       (__out__.+?\.obj)\b/) {
+    $objects{$1} = "";
+  }
+  elsif (/       (__out__.+?\.lib)\b/) {
+    $libs{$1} = "";
+  }
+  elsif (/       (__out__.+?\.c)\b/) {
+    $cs{$1} = "";
+  }
+  elsif (/       (__out__.+?\.pdf)\b/) {
+    $pdfs{$1} = "";
+  }
+  elsif (/       (__out__.+?\.mdf)\b/) {
+    my $doc = $1;
+    # special handling for m_rrlp_asn1_msg.mdf, m_rrlp_asn1_inc.mdf
+    # remove m_ to allow name deduction for TDC
+    if ($doc =~ /m_(rrlp_asn1)/) {
+      $mdfs{"$`$1$'"} = "";
+    }
+    else {
+      $mdfs{$doc} = "";
+    }
+  }
+  elsif (/       (__out__.+?mconst\.cdg)\b/) {
+    $mconst = $1;
+  }
+  elsif (/       (__out__.+?rv_swe\.h)\b/) {
+    $rvswe = $1;
+  }
+}
+
+
+my @objects = sort(keys(%objects));
+my @libs = sort(keys(%libs));
+my @cs = sort(keys(%cs));
+my @pdfs = sort(keys(%pdfs));
+my @mdfs = sort(keys(%mdfs));
+
+close IN;
+
+# reopen and modify the file
+open(IN, $ARGV[0])  || die "Could not open file $ARGV[0]: $!";
+open(OUT, ">$ARGV[1]")  || die "Could not open file $ARGV[1]: $!";
+
+my $i;
+my $line;
+my $tdcSpecial = 0;
+while (defined ($line = <IN>)) {
+  if (($line =~ /###BSB_OUT_MCONST/) && defined($mconst)) {
+    print OUT "BSB_OUT_MCONST = $mconst\n";
+  }
+  elsif (($line =~ /###BSB_OUT_RVSWE/) && defined($rvswe)) {
+    print OUT "BSB_OUT_RVSWE = $rvswe\n";
+  }
+  elsif (($line =~ /###BSB_OUT_OBJS/) && @objects > 0) {
+    print OUT "BSB_OUT_OBJS = ";
+    for ($i=0;$i<@objects;$i++) {
+      print OUT "$objects[$i] ";
+#      if ($i<(@objects-1)) {
+#        print " \\";
+#      }
+#  print "\n";
+    }
+    print OUT  "\n";
+   }
+  elsif (($line =~ /###BSB_OUT_CS/) && @cs > 0) {
+    print OUT "BSB_OUT_CS = ";
+    for ($i=0;$i<@cs;$i++) {
+      print OUT "$cs[$i] ";
+    }
+    print OUT "\n";
+   }
+  elsif (($line =~ /###BSB_OUT_LIBS/) && @libs > 0) {
+    print OUT "BSB_OUT_LIBS = ";
+    for ($i=0;$i<@libs;$i++) {
+      print OUT "$libs[$i] ";
+    }
+    print OUT "\n";
+   }
+  elsif (($line =~ /###BSB_OUT_PDFS/) && @pdfs > 0) {
+    print OUT "BSB_OUT_PDFS = ";
+    for ($i=0;$i<@pdfs;$i++) {
+      print OUT "$pdfs[$i] ";
+    }
+    print OUT "\n";
+   }
+  elsif (($line =~ /###BSB_OUT_MDFS/) && @mdfs > 0) {
+    print OUT "BSB_OUT_MDFS = ";
+    for ($i=0;$i<@mdfs;$i++) {
+      print OUT "$mdfs[$i] ";
+    }
+    print OUT "\n";
+   }
+  # same condition as in first run - this needs a cleanup
+  elsif ($line =~ s/^(__out__.+?)(rv_swe\.h):/$1$2 $1%\.cfg:/) {
+    print OUT $line;
+  }
+  # same condition as in first run - this needs a cleanup
+  elsif ($line =~ s/^(__out__.+?)(cdginc\/)(mconst\.cdg):/$1$2$3 $1$2%\.cdg $1$2%\.h $1$2%\.val $1tdcinc\/%\.cpp:/) {
+    print OUT $line;
+  }
+  # BuSyB generates a fixed "-include abc_exports.mak" statement but we want
+  # to include <makefile>.abc_exports.mak, given as 3rd parameter.
+  elsif ($line =~ s/ abc_exports.mak$/ $ARGV[2]/) {
+    print OUT $line;
+  }
+  elsif ($line =~ /^(__out__.+?)(tdclib\.lib):/) {
+    $tdcSpecial = 1;
+    print OUT $line;
+  }
+  elsif ($tdcSpecial) {
+    $tdcSpecial = 1;
+    if ($line =~ /(__out__.+?)p_(%.*?)(_dsc)?\.obj/ ) {
+      print OUT "\$(patsubst __out__/g23m_dfile/prim/%.pdf,$&,\$(BSB_OUT_PDFS))$'";
+    }
+    elsif ($line =~ /(__out__.+?)m_(%.*?)(_dsc)?\.obj/ ) {
+      print OUT "\$(patsubst __out__/g23m_dfile/msg/%.mdf,$&,\$(BSB_OUT_MDFS))$'";
+    }
+    else {
+      print OUT $line;
+    }
+    if ($line =~ /\\$/) {
+    }
+    else {
+      $tdcSpecial = 0;
+    }
+  }
+  else {
+    print OUT $line;
+  }
+}