OSDN Git Service

2003-12-11 Ed Falis <falis@gnat.com>
[pf3gnuchains/gcc-fork.git] / gcc / ada / 5zml-tgt.adb
1 ------------------------------------------------------------------------------
2 --                                                                          --
3 --                         GNAT COMPILER COMPONENTS                         --
4 --                                                                          --
5 --                             M L I B . T G T                              --
6 --                            (VxWorks Version)                             --
7 --                                                                          --
8 --                                 B o d y                                  --
9 --                                                                          --
10 --              Copyright (C) 2003 Free Software Foundation, Inc.           --
11 --                                                                          --
12 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
13 -- terms of the  GNU General Public License as published  by the Free Soft- --
14 -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
15 -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
16 -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
17 -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
18 -- for  more details.  You should have  received  a copy of the GNU General --
19 -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
20 -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
21 -- MA 02111-1307, USA.                                                      --
22 --                                                                          --
23 -- GNAT was originally developed  by the GNAT team at  New York University. --
24 -- Extensive contributions were provided by Ada Core Technologies Inc.      --
25 --                                                                          --
26 ------------------------------------------------------------------------------
27
28 --  This package provides a set of target dependent routines to build
29 --  static libraries.
30
31 --  This is the VxWorks version of the body
32
33 with MLib.Fil;
34 with Namet;  use Namet;
35 with Prj.Com;
36 with Sdefault;
37
38 package body MLib.Tgt is
39
40    -----------------------
41    -- Local Subprograms --
42    -----------------------
43
44    function Get_Target_Suffix return String;
45    --  Returns the required suffix for some utilities
46    --  (such as ar and ranlib) that depend on the real target.
47
48    ---------------------
49    -- Archive_Builder --
50    ---------------------
51
52    function Archive_Builder return String is
53    begin
54       return "ar" & Get_Target_Suffix;
55    end Archive_Builder;
56
57    -----------------------------
58    -- Archive_Builder_Options --
59    -----------------------------
60
61    function Archive_Builder_Options return String_List_Access is
62    begin
63       return new String_List'(1 => new String'("cr"));
64    end Archive_Builder_Options;
65
66    -----------------
67    -- Archive_Ext --
68    -----------------
69
70    function Archive_Ext return  String is
71    begin
72       return "a";
73    end Archive_Ext;
74
75    ---------------------
76    -- Archive_Indexer --
77    ---------------------
78
79    function Archive_Indexer return String is
80    begin
81       return "ranlib" & Get_Target_Suffix;
82    end Archive_Indexer;
83
84    ---------------------------
85    -- Build_Dynamic_Library --
86    ---------------------------
87
88    procedure Build_Dynamic_Library
89      (Ofiles       : Argument_List;
90       Foreign      : Argument_List;
91       Afiles       : Argument_List;
92       Options      : Argument_List;
93       Interfaces   : Argument_List;
94       Lib_Filename : String;
95       Lib_Dir      : String;
96       Symbol_Data  : Symbol_Record;
97       Driver_Name  : Name_Id := No_Name;
98       Lib_Address  : String  := "";
99       Lib_Version  : String  := "";
100       Relocatable  : Boolean := False;
101       Auto_Init    : Boolean := False)
102    is
103       pragma Unreferenced (Ofiles);
104       pragma Unreferenced (Foreign);
105       pragma Unreferenced (Afiles);
106       pragma Unreferenced (Options);
107       pragma Unreferenced (Interfaces);
108       pragma Unreferenced (Lib_Filename);
109       pragma Unreferenced (Lib_Dir);
110       pragma Unreferenced (Symbol_Data);
111       pragma Unreferenced (Driver_Name);
112       pragma Unreferenced (Lib_Address);
113       pragma Unreferenced (Lib_Version);
114       pragma Unreferenced (Relocatable);
115       pragma Unreferenced (Auto_Init);
116
117    begin
118       null;
119    end Build_Dynamic_Library;
120
121    -------------------------
122    -- Default_DLL_Address --
123    -------------------------
124
125    function Default_DLL_Address return String is
126    begin
127       return "";
128    end Default_DLL_Address;
129
130    -------------
131    -- DLL_Ext --
132    -------------
133
134    function DLL_Ext return String is
135    begin
136       return "";
137    end DLL_Ext;
138
139    --------------------
140    -- Dynamic_Option --
141    --------------------
142
143    function Dynamic_Option return String is
144    begin
145       return "";
146    end Dynamic_Option;
147
148    -----------------------------
149    -- Get_Target_Suffix --
150    -----------------------------
151
152    function Get_Target_Suffix return String is
153       Target_Name : String_Ptr := Sdefault.Target_Name;
154       Index       : Positive   := Target_Name'First;
155    begin
156       while ((Index < Target_Name'Last) and then
157                (Target_Name (Index + 1) /= '-')) loop
158          Index := Index + 1;
159       end loop;
160
161       if Target_Name (Target_Name'First .. Index) = "m68k" then
162          return "68k";
163       elsif Target_Name (Target_Name'First .. Index) = "mips" then
164          return "mips";
165       elsif Target_Name (Target_Name'First .. Index) = "powerpc" then
166          return "ppc";
167       elsif Target_Name (Target_Name'First .. Index) = "sparc" then
168          return "sparc";
169       elsif Target_Name (Target_Name'First .. Index) = "sparc64" then
170          return "sparc64";
171       elsif Target_Name (Target_Name'First .. Index) = "xscale" then
172          return "arm";
173       else
174          return "";
175       end if;
176    end Get_Target_Suffix;
177
178    -------------------
179    -- Is_Object_Ext --
180    -------------------
181
182    function Is_Object_Ext (Ext : String) return Boolean is
183    begin
184       return Ext = ".o";
185    end Is_Object_Ext;
186
187    --------------
188    -- Is_C_Ext --
189    --------------
190
191    function Is_C_Ext (Ext : String) return Boolean is
192    begin
193       return Ext = ".c";
194    end Is_C_Ext;
195
196    --------------------
197    -- Is_Archive_Ext --
198    --------------------
199
200    function Is_Archive_Ext (Ext : String) return Boolean is
201    begin
202       return Ext = ".a";
203    end Is_Archive_Ext;
204
205    -------------
206    -- Libgnat --
207    -------------
208
209    function Libgnat return String is
210    begin
211       return "libgnat.a";
212    end Libgnat;
213
214    ------------------------
215    -- Library_Exists_For --
216    ------------------------
217
218    function Library_Exists_For (Project : Project_Id) return Boolean is
219    begin
220       if not Projects.Table (Project).Library then
221          Prj.Com.Fail ("INTERNAL ERROR: Library_Exists_For called " &
222                        "for non library project");
223          return False; --  To avoid warning;
224
225       else
226          declare
227             Lib_Dir : constant String :=
228               Get_Name_String (Projects.Table (Project).Library_Dir);
229             Lib_Name : constant String :=
230               Get_Name_String (Projects.Table (Project).Library_Name);
231
232          begin
233             if Projects.Table (Project).Library_Kind = Static then
234                return Is_Regular_File
235                  (Lib_Dir & Directory_Separator & "lib" &
236                   Fil.Ext_To (Lib_Name, Archive_Ext));
237
238             else
239                return Is_Regular_File
240                  (Lib_Dir & Directory_Separator & "lib" &
241                   Fil.Ext_To (Lib_Name, DLL_Ext));
242             end if;
243          end;
244       end if;
245    end Library_Exists_For;
246
247    ---------------------------
248    -- Library_File_Name_For --
249    ---------------------------
250
251    function Library_File_Name_For (Project : Project_Id) return Name_Id is
252    begin
253       if not Projects.Table (Project).Library then
254          Prj.Com.Fail ("INTERNAL ERROR: Library_File_Name_For called " &
255                        "for non library project");
256          return No_Name;
257
258       else
259          declare
260             Lib_Name : constant String :=
261               Get_Name_String (Projects.Table (Project).Library_Name);
262
263          begin
264             Name_Len := 3;
265             Name_Buffer (1 .. Name_Len) := "lib";
266
267             if Projects.Table (Project).Library_Kind = Static then
268                Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, Archive_Ext));
269
270             else
271                Add_Str_To_Name_Buffer (Fil.Ext_To (Lib_Name, DLL_Ext));
272             end if;
273
274             return Name_Find;
275          end;
276       end if;
277    end Library_File_Name_For;
278
279    --------------------------------
280    -- Linker_Library_Path_Option --
281    --------------------------------
282
283    function Linker_Library_Path_Option return String_Access is
284    begin
285       return new String'("-Wl,-R,");
286    end Linker_Library_Path_Option;
287
288    ----------------
289    -- Object_Ext --
290    ----------------
291
292    function Object_Ext return String is
293    begin
294       return "o";
295    end Object_Ext;
296
297    ----------------
298    -- PIC_Option --
299    ----------------
300
301    function PIC_Option return String is
302    begin
303       return "";
304    end PIC_Option;
305
306    -----------------------------------------------
307    -- Standalone_Library_Auto_Init_Is_Supported --
308    -----------------------------------------------
309
310    function Standalone_Library_Auto_Init_Is_Supported return Boolean is
311    begin
312       return False;
313    end Standalone_Library_Auto_Init_Is_Supported;
314
315    ---------------------------
316    -- Support_For_Libraries --
317    ---------------------------
318
319    function Support_For_Libraries return Library_Support is
320    begin
321       return Static_Only;
322    end Support_For_Libraries;
323
324 end MLib.Tgt;