diff scripts/ti/make_cmd.pl @ 17:021ac9f5a765

scripts/ti/make_cmd.pl: import from Magnetite
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 16 Oct 2020 07:24:56 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/ti/make_cmd.pl	Fri Oct 16 07:24:56 2020 +0000
@@ -0,0 +1,93 @@
+#!perl
+
+# generate a dynamic Linker command file 
+# PARAMETER ARE:
+
+# 0         : Name of the file with the parameters
+# 1         : Name of the Linker command file (output)
+# 2         : value of the TOOL_CHOICE variable
+# 3         : Name of the Linker command file template
+# 4 - (n-1) : Name of the libraries
+
+#$argcount = @ARGV;
+my $lnk_opt_file=$ARGV[0];
+my $cmd_file=$ARGV[1];
+my $toolchoice_type = $ARGV[2];
+my $cmd_file_temp=$ARGV[3];
+my %section;
+
+
+open (TMP,$lnk_opt_file)||die "can't open file\n";
+
+# parse the parameter file and construct replacement strings
+#
+# the file contains entries of the following form
+# (BSS_LIBS (.bss))
+# or
+# (BSS_LIBS (.bss) CONST_LIBS (.text, .const))
+# or
+# (BSS_LIBS (.bss)) (BSS_LIBS (.bss) CONST_LIBS (.text, .const)) 
+#
+# the syntax is as follows, white space and line breaks are not significant
+# <ENTRY> := <lp> <PAIR><lp>
+# <PAIR> := <name> <SECTION>
+# <SECTION> := <lp><free_text><lp>
+# <lp> := (
+# <rp> := )
+# <name> := [A-Za-z_]+
+# <free_text> := [^()]+
+#
+# each entry will be linked with one library passed on the command line
+
+my $line;
+my $count;
+while ($line=<TMP>) {
+  # find <ENTRY>
+  while ($line =~ /\((\s*\w+\s*\([^\(\)]+\))+\)/) {
+    $line = $';
+    $match = $&;
+    # find <PAIR>
+    while ($match =~  /\s*(\w+)\s*(\([^\(\)]+\))/  ) {
+        $match = $';
+        $section{"$1"} .= "$ARGV[$count+4] $2\n";
+    }
+    $count++;
+  }
+}
+
+open (TMP1, ">$cmd_file");
+open (TMP,$cmd_file_temp);
+while ($line=<TMP>) {
+  my $replaced = 0;
+  foreach $key (keys(%section)) {
+    if ($line =~ /\($key\)/g) {
+			# insert the Libs
+			$line = $section{$key};
+      $replaced = 1;
+    }
+	}
+  # NEW COMPILER MANAGEMENT 
+  # If use of VISUAL LINKER, needs to manage trampoline download.
+  # Case of:
+  #      - TOOL_CHOICE == 0 => compiler v1.22e with vlinker v1.9902
+  #      - TOOL_CHOICE == 3 => compiler & linker v2.54
+
+  if ($toolchoice_type == 0) {
+    $line =~ s(COMMENT1START)(/*);
+    $line =~ s(COMMENT1END)(*/);
+    $line =~ s(COMMENT2START)();
+    $line =~ s(COMMENT2END)();
+  } else {
+    $line =~ s(COMMENT1START)();
+    $line =~ s(COMMENT1END)();
+    $line =~ s(COMMENT2START)(/*);
+    $line =~ s(COMMENT2END)(*/);
+  }
+
+  if ($replaced || !($line =~ /^\s*\$\(\s*\w+\s*\)\s*$/ )) {
+    print TMP1 $line;
+  }
+}
+close TMP;
+close TMP1;
+unlink $tmp_file;