1------------------------------------------------------------------------------ 2-- -- 3-- GNAT COMPILER COMPONENTS -- 4-- -- 5-- M L I B . T G T -- 6-- -- 7-- S p e c -- 8-- -- 9-- Copyright (C) 2001-2003, Ada Core Technologies, Inc. -- 10-- -- 11-- GNAT is free software; you can redistribute it and/or modify it under -- 12-- terms of the GNU General Public License as published by the Free Soft- -- 13-- ware Foundation; either version 2, or (at your option) any later ver- -- 14-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- 15-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- 16-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -- 17-- for more details. You should have received a copy of the GNU General -- 18-- Public License distributed with GNAT; see file COPYING. If not, write -- 19-- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, -- 20-- MA 02111-1307, USA. -- 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 package provides a set of target dependent routines to build 28-- static, dynamic and shared libraries. 29 30-- There are several versions for the body of this package. 31 32-- In the default version, libraries are not supported, so function 33-- Support_For_Libraries return None. 34 35with GNAT.OS_Lib; use GNAT.OS_Lib; 36with Prj; use Prj; 37 38package MLib.Tgt is 39 40 type Library_Support is (None, Static_Only, Full); 41 -- Support for Library Project File. 42 -- - None: Library Project Files are not supported at all 43 -- - Static_Only: Library Project Files are only supported for static 44 -- libraries. 45 -- - Full: Library Project Files are supported for static and dynamic 46 -- (shared) libraries. 47 48 function Support_For_Libraries return Library_Support; 49 -- Indicates how building libraries by gnatmake is supported by the GNAT 50 -- implementation for the platform. 51 52 function Standalone_Library_Auto_Init_Is_Supported return Boolean; 53 -- Indicates if when building a dynamic Standalone Library, 54 -- automatic initialization is supported. If it is, then it is the default, 55 -- unless attribute Library_Auto_Init has the value "false". 56 57 function Archive_Builder return String; 58 -- Returns the name of the archive builder program, usually "ar" 59 60 function Archive_Builder_Options return String_List_Access; 61 -- A list of options to invoke the Archive_Builder, usually "cr" for "ar" 62 63 function Archive_Indexer return String; 64 -- Returns the name of the program, if any, that generates an index 65 -- to the contents of an archive, usually "ranlib". 66 67 function Default_DLL_Address return String; 68 -- Default address for non relocatable DLL. 69 -- For OSes where a dynamic library is always relocatable, 70 -- this function returns an empty string. 71 72 function Dynamic_Option return String; 73 -- gcc option to create a dynamic library. 74 -- For Unix, returns "-shared", for Windows returns "-mdll". 75 76 function Libgnat return String; 77 -- System dependent static GNAT library 78 79 function Archive_Ext return String; 80 -- System dependent static library extension, without leading dot. 81 -- For Unix and Windows, return "a". 82 83 function Object_Ext return String; 84 -- System dependent object extension, without leadien dot. 85 -- On Unix, returns "o". 86 87 function DLL_Ext return String; 88 -- System dependent dynamic library extension, without leading dot. 89 -- On Unix, returns "so", on Windows, returns "dll". 90 91 function PIC_Option return String; 92 -- Position independent code option 93 94 function Is_Object_Ext (Ext : String) return Boolean; 95 -- Returns True iff Ext is an object file extension 96 97 function Is_C_Ext (Ext : String) return Boolean; 98 -- Returns True iff Ext is a C file extension. 99 100 function Is_Archive_Ext (Ext : String) return Boolean; 101 -- Returns True iff Ext is an extension for a library 102 103 function Linker_Library_Path_Option return String_Access; 104 -- Linker option to specify to the linker the library directory path. 105 -- If non null, the library directory path is to be appended. 106 -- Should be deallocated by the caller, when no longer needed. 107 108 procedure Build_Dynamic_Library 109 (Ofiles : Argument_List; 110 Foreign : Argument_List; 111 Afiles : Argument_List; 112 Options : Argument_List; 113 Interfaces : Argument_List; 114 Lib_Filename : String; 115 Lib_Dir : String; 116 Symbol_Data : Symbol_Record; 117 Driver_Name : Name_Id := No_Name; 118 Lib_Address : String := ""; 119 Lib_Version : String := ""; 120 Relocatable : Boolean := False; 121 Auto_Init : Boolean := False); 122 -- Build a dynamic/relocatable library. 123 -- 124 -- Ofiles is the list of all object files in the library. 125 -- Foreign is the list of non Ada object files (also included in Ofiles). 126 -- Afiles is the list of ALI files for the Ada object files. 127 -- Options is a list of options to be passed to the tool (gcc or other) 128 -- that effectively builds the dynamic library. 129 -- 130 -- Interfaces is the list of ALI files for the interfaces of a SAL. 131 -- It is empty if the library is not a SAL. 132 -- 133 -- Lib_Filename is the name of the library, without any prefix or 134 -- extension. For example, on Unix, if Lib_Filename is "toto", the name of 135 -- the library file will be "libtoto.so". 136 -- 137 -- Lib_Dir is the directory path where the library will be located. 138 -- 139 -- Lib_Address is the base address of the library for a non relocatable 140 -- library, given as an hexadecimal string. 141 -- 142 -- For OSes that support symbolic links, Lib_Version, if non null, 143 -- is the actual file name of the library. For example on Unix, if 144 -- Lib_Filename is "toto" and Lib_Version is "libtoto.so.2.1", 145 -- "libtoto.so" will be a symbolic link to "libtoto.so.2.1" which 146 -- will be the actual library file. 147 -- 148 -- Relocatable indicates if the library should be relocatable or not, 149 -- for those OSes that actually support non relocatable dynamic libraries. 150 -- Relocatable indicates that automatic elaboration/finalization must be 151 -- indicated to the linker, if possible. 152 -- 153 -- Symbol_Data is used for some patforms, including VMS, to generate 154 -- the symbols to be exported by the library. 155 -- 156 -- Note: Depending on the OS, some of the parameters may not be taken 157 -- into account. For example, on Linux, Foreign, Afiles Lib_Address and 158 -- Relocatable are ignored. 159 160 function Library_Exists_For (Project : Project_Id) return Boolean; 161 -- Return True if the library file for a library project already exists. 162 -- This function can only be called for library projects. 163 164 function Library_File_Name_For (Project : Project_Id) return Name_Id; 165 -- Returns the file name of the library file of a library project. 166 -- This function can only be called for library projects. 167 168end MLib.Tgt; 169