0
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 #!perl
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 # generate a dynamic Linker command file
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 # PARAMETER ARE:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 # 1 : Name of the Linker command file
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 # 2 : Name of the file with the parameter
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 #
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 my ($cmd_file_temp,$tmp_file)=@ARGV;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 open (TMP, "$tmp_file");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 my $const_boot_lib = <TMP>;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 my $bss_boot_lib = <TMP>;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 my $bss_libs = <TMP>;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 my $const_libs = <TMP>;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 my $toolchoice_type = <TMP>;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 close TMP;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 # define the REPLACE STRINGS
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 my $const_boot_str="(CONST_BOOT_LIB)";
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 my $bss_boot_str="(BSS_BOOT_LIB)";
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 my $bss_str="(BSS_LIBS)";
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 my $const_str="(CONST_LIBS)";
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 # define some local variables
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 my $temp;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 my @CMD;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 my $line;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 # determine the cmd file name
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 @CMD=split /.template/, $cmd_file_temp;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 $cmd_file=$CMD[0].".cmd";
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 open (TMP1, ">$cmd_file");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 open (TMP,$cmd_file_temp);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 while ($line=<TMP>) {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 if ($line =~ m/$const_boot_str/g) {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 $line=mak_libs ($const_boot_lib)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 if ($line =~ m/$bss_boot_str/g) {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 $line=mak_libs ($bss_boot_lib)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 if ($line =~ m/$bss_str/g) {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 # insert the Libs
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 $line=mak_libs ($bss_libs);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 if ($line =~ m/$const_str/g) {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 $line=mak_libs ($const_libs)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 # NEW COMPILER MANAGEMENT
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 # If use of VISUAL LINKER, needs to manage trampoline download.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 # Case of:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 # - TOOL_CHOICE == 0 => compiler v1.22e with vlinker v1.9902
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 if ($toolchoice_type == 0) {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 $line =~ s(COMMENT2START)();
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 $line =~ s(COMMENT2END)();
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 if ($toolchoice_type == 3) {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 $line =~ s(COMMENT2START)(/*);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 $line =~ s(COMMENT2END)(*/);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 print TMP1 $line;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 close TMP;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 close TMP1;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 unlink $tmp_file;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 sub mak_libs
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 my ($bss_libs) =@_;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 my @temp;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 @temp = split /=/, $bss_libs;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 $_="\t\t\t" . $temp[1];
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 s/\) /)\n\t\t\t/g;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78 $_ =~ tr /\"//d;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79 return $_;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81
|