1------------------------------------------------------------------------------
2--                                                                          --
3--                         GNAT COMPILER COMPONENTS                         --
4--                                                                          --
5--                    M L I B . T G T . S P E C I F I C                     --
6--                            (Windows Version)                             --
7--                                                                          --
8--                                 B o d y                                  --
9--                                                                          --
10--          Copyright (C) 2002-2010, 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 3,  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 COPYING3.  If not, go to --
20-- http://www.gnu.org/licenses for a complete copy of the license.          --
21--                                                                          --
22-- GNAT was originally developed  by the GNAT team at  New York University. --
23-- Extensive contributions were provided by Ada Core Technologies Inc.      --
24--                                                                          --
25------------------------------------------------------------------------------
26
27--  This is the Windows version of the body. Works only with GCC versions
28--  supporting the "-shared" option.
29
30with Opt;
31with Output; use Output;
32
33with MLib.Fil;
34with MLib.Utl;
35
36package body MLib.Tgt.Specific is
37
38   package Files renames MLib.Fil;
39   package Tools renames MLib.Utl;
40
41   --  Non default subprograms
42
43   procedure Build_Dynamic_Library
44     (Ofiles       : Argument_List;
45      Options      : Argument_List;
46      Interfaces   : Argument_List;
47      Lib_Filename : String;
48      Lib_Dir      : String;
49      Symbol_Data  : Symbol_Record;
50      Driver_Name  : Name_Id := No_Name;
51      Lib_Version  : String  := "";
52      Auto_Init    : Boolean := False);
53
54   function DLL_Ext return String;
55
56   function DLL_Prefix return String;
57
58   function Is_Archive_Ext (Ext : String) return Boolean;
59
60   function Library_Major_Minor_Id_Supported return Boolean;
61
62   function PIC_Option return String;
63
64   Shared_Libgcc : aliased String := "-shared-libgcc";
65
66   Shared_Libgcc_Switch : constant Argument_List :=
67                            (1 => Shared_Libgcc'Access);
68
69   ---------------------------
70   -- Build_Dynamic_Library --
71   ---------------------------
72
73   procedure Build_Dynamic_Library
74     (Ofiles       : Argument_List;
75      Options      : Argument_List;
76      Interfaces   : Argument_List;
77      Lib_Filename : String;
78      Lib_Dir      : String;
79      Symbol_Data  : Symbol_Record;
80      Driver_Name  : Name_Id := No_Name;
81      Lib_Version  : String  := "";
82      Auto_Init    : Boolean := False)
83   is
84      pragma Unreferenced (Symbol_Data);
85      pragma Unreferenced (Interfaces);
86      pragma Unreferenced (Lib_Version);
87      pragma Unreferenced (Auto_Init);
88
89      Lib_File : constant String :=
90                   Lib_Dir & Directory_Separator &
91                   DLL_Prefix & Files.Append_To (Lib_Filename, DLL_Ext);
92
93   --  Start of processing for Build_Dynamic_Library
94
95   begin
96      if Opt.Verbose_Mode then
97         Write_Str ("building relocatable shared library ");
98         Write_Line (Lib_File);
99      end if;
100
101      Tools.Gcc
102        (Output_File => Lib_File,
103         Objects     => Ofiles,
104         Options     => Shared_Libgcc_Switch,
105         Options_2   => Options,
106         Driver_Name => Driver_Name);
107   end Build_Dynamic_Library;
108
109   -------------
110   -- DLL_Ext --
111   -------------
112
113   function DLL_Ext return String is
114   begin
115      return "dll";
116   end DLL_Ext;
117
118   ----------------
119   -- DLL_Prefix --
120   ----------------
121
122   function DLL_Prefix return String is
123   begin
124      return "lib";
125   end DLL_Prefix;
126
127   --------------------
128   -- Is_Archive_Ext --
129   --------------------
130
131   function Is_Archive_Ext (Ext : String) return Boolean is
132   begin
133      return Ext = ".a" or else Ext = ".dll";
134   end Is_Archive_Ext;
135
136   --------------------------------------
137   -- Library_Major_Minor_Id_Supported --
138   --------------------------------------
139
140   function Library_Major_Minor_Id_Supported return Boolean is
141   begin
142      return False;
143   end Library_Major_Minor_Id_Supported;
144
145   ----------------
146   -- PIC_Option --
147   ----------------
148
149   function PIC_Option return String is
150   begin
151      return "";
152   end PIC_Option;
153
154begin
155   Build_Dynamic_Library_Ptr := Build_Dynamic_Library'Access;
156   DLL_Ext_Ptr               := DLL_Ext'Access;
157   DLL_Prefix_Ptr            := DLL_Prefix'Access;
158   Is_Archive_Ext_Ptr        := Is_Archive_Ext'Access;
159   PIC_Option_Ptr            := PIC_Option'Access;
160   Library_Major_Minor_Id_Supported_Ptr :=
161                                Library_Major_Minor_Id_Supported'Access;
162end MLib.Tgt.Specific;
163