Commit c4820158 by Nicolas Setton Committed by Arnaud Charlet

mlib-tgt-darwin.adb: New file.

2004-10-26  Nicolas Setton  <setton@act-europe.fr>

	* mlib-tgt-darwin.adb: New file.

	* mlib-tgt-tru64.adb, mlib-tgt-aix.adb, mlib-tgt-irix.adb,
	mlib-tgt-hpux.adb, mlib-tgt-linux.adb, mlib-tgt-solaris.adb,
	mlib-tgt-vms-alpha.adb, mlib-tgt-vms-ia64.adb,
	mlib-tgt-mingw.adb, mlib-tgt-vxworks.adb (Archive_Indexer_Options): New
	subprogram body.

	* Makefile.in: Add support for building shared libraries under Darwin.
	(EXTRA_GNATRTL_NONTASKING_OBJS, ppc-vxworks): Add s-vxwexc.o, containing
	the low level EH init subprogram to be called from __gnat_initialize.

	* mlib-tgt.ads, mlib-tgt.adb (Archive_Indexer_Options): New subprogram,
	indicates which options to pass to the archive indexer.

	* mlib-utl.adb: Add support for calling ranlib with additional
	options. This is needed for instance under Mac OS X.
	(Ranlib_Options): New global variable, used to store the potential
	options to pass to ranlib.
	(Ar): Use Ranlib_Options when spawning ranlib.
	(Initialize): Set the value of ranlib option.

From-SVN: r89639
parent 41cbab34
...@@ -559,7 +559,7 @@ ifeq ($(strip $(filter-out powerpc% wrs vxworks,$(targ))),) ...@@ -559,7 +559,7 @@ ifeq ($(strip $(filter-out powerpc% wrs vxworks,$(targ))),)
s-tfsetr.adb<s-tfsetr-vxworks.adb s-tfsetr.adb<s-tfsetr-vxworks.adb
endif endif
EXTRA_GNATRTL_NONTASKING_OBJS=i-vxwork.o i-vxwoio.o EXTRA_GNATRTL_NONTASKING_OBJS=i-vxwork.o i-vxwoio.o s-vxwexc.o
EXTRA_GNATRTL_TASKING_OBJS=s-vxwork.o EXTRA_GNATRTL_TASKING_OBJS=s-vxwork.o
endif endif
...@@ -1403,6 +1403,14 @@ ifeq ($(strip $(filter-out powerpc darwin%,$(arch) $(osys))),) ...@@ -1403,6 +1403,14 @@ ifeq ($(strip $(filter-out powerpc darwin%,$(arch) $(osys))),)
s-tpopsp.adb<s-tpopsp-posix-foreign.adb \ s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
g-soccon.ads<g-soccon-aix.ads \ g-soccon.ads<g-soccon-aix.ads \
system.ads<system-darwin-ppc.ads system.ads<system-darwin-ppc.ads
TOOLS_TARGET_PAIRS = \
mlib-tgt.adb<mlib-tgt-darwin.adb
GNATLIB_SHARED = gnatlib-shared-darwin
SO_OPTS = -Wl,-flat_namespace
RANLIB = ranlib -c
LIBRARY_VERSION := $(LIB_VERSION)
endif endif
# The runtime library for gnat comprises two directories. One contains the # The runtime library for gnat comprises two directories. One contains the
...@@ -1874,6 +1882,28 @@ gnatlib-shared-win32: ...@@ -1874,6 +1882,28 @@ gnatlib-shared-win32:
$(SO_OPTS)libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \ $(SO_OPTS)libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
$(THREADSLIB) -Wl,libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) $(THREADSLIB) -Wl,libgnat$(hyphen)$(LIBRARY_VERSION)$(soext)
gnatlib-shared-darwin:
$(MAKE) $(FLAGS_TO_PASS) \
GNATLIBFLAGS="$(GNATLIBFLAGS)" \
GNATLIBCFLAGS="$(GNATLIBCFLAGS) $(TARGET_LIBGCC2_CFLAGS)" \
THREAD_KIND="$(THREAD_KIND)" \
gnatlib
$(RM) rts/libgnat$(soext) rts/libgnarl$(soext)
cd rts; ../../xgcc -B../../ -dynamiclib $(TARGET_LIBGCC2_CFLAGS) \
-o libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
$(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS) \
$(SO_OPTS) \
$(MISCLIB) -lm
cd rts; ../../xgcc -B../../ -dynamiclib $(TARGET_LIBGCC2_CFLAGS) \
-o libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
$(GNATRTL_TASKING_OBJS) \
$(SO_OPTS) \
$(THREADSLIB) -Wl,libgnat$(hyphen)$(LIBRARY_VERSION)$(soext)
cd rts; $(LN_S) libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
libgnat$(soext)
cd rts; $(LN_S) libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
libgnarl$(soext)
gnatlib-shared-vms: gnatlib-shared-vms:
$(MAKE) $(FLAGS_TO_PASS) \ $(MAKE) $(FLAGS_TO_PASS) \
GNATLIBFLAGS="$(GNATLIBFLAGS)" \ GNATLIBFLAGS="$(GNATLIBFLAGS)" \
......
...@@ -110,6 +110,15 @@ package body MLib.Tgt is ...@@ -110,6 +110,15 @@ package body MLib.Tgt is
return "ranlib"; return "ranlib";
end Archive_Indexer; end Archive_Indexer;
-----------------------------
-- Archive_Indexer_Options --
-----------------------------
function Archive_Indexer_Options return String_List_Access is
begin
return new String_List (1 .. 0);
end Archive_Indexer_Options;
--------------------------- ---------------------------
-- Build_Dynamic_Library -- -- Build_Dynamic_Library --
--------------------------- ---------------------------
......
...@@ -90,6 +90,15 @@ package body MLib.Tgt is ...@@ -90,6 +90,15 @@ package body MLib.Tgt is
return "ranlib"; return "ranlib";
end Archive_Indexer; end Archive_Indexer;
-----------------------------
-- Archive_Indexer_Options --
-----------------------------
function Archive_Indexer_Options return String_List_Access is
begin
return new String_List (1 .. 0);
end Archive_Indexer_Options;
--------------------------- ---------------------------
-- Build_Dynamic_Library -- -- Build_Dynamic_Library --
--------------------------- ---------------------------
......
...@@ -91,6 +91,15 @@ package body MLib.Tgt is ...@@ -91,6 +91,15 @@ package body MLib.Tgt is
return "ranlib"; return "ranlib";
end Archive_Indexer; end Archive_Indexer;
-----------------------------
-- Archive_Indexer_Options --
-----------------------------
function Archive_Indexer_Options return String_List_Access is
begin
return new String_List (1 .. 0);
end Archive_Indexer_Options;
--------------------------- ---------------------------
-- Build_Dynamic_Library -- -- Build_Dynamic_Library --
--------------------------- ---------------------------
......
...@@ -94,6 +94,15 @@ package body MLib.Tgt is ...@@ -94,6 +94,15 @@ package body MLib.Tgt is
return "ranlib"; return "ranlib";
end Archive_Indexer; end Archive_Indexer;
-----------------------------
-- Archive_Indexer_Options --
-----------------------------
function Archive_Indexer_Options return String_List_Access is
begin
return new String_List (1 .. 0);
end Archive_Indexer_Options;
--------------------------- ---------------------------
-- Build_Dynamic_Library -- -- Build_Dynamic_Library --
--------------------------- ---------------------------
......
...@@ -82,6 +82,15 @@ package body MLib.Tgt is ...@@ -82,6 +82,15 @@ package body MLib.Tgt is
return "ranlib"; return "ranlib";
end Archive_Indexer; end Archive_Indexer;
-----------------------------
-- Archive_Indexer_Options --
-----------------------------
function Archive_Indexer_Options return String_List_Access is
begin
return new String_List (1 .. 0);
end Archive_Indexer_Options;
--------------------------- ---------------------------
-- Build_Dynamic_Library -- -- Build_Dynamic_Library --
--------------------------- ---------------------------
......
...@@ -88,6 +88,15 @@ package body MLib.Tgt is ...@@ -88,6 +88,15 @@ package body MLib.Tgt is
return "ranlib"; return "ranlib";
end Archive_Indexer; end Archive_Indexer;
-----------------------------
-- Archive_Indexer_Options --
-----------------------------
function Archive_Indexer_Options return String_List_Access is
begin
return new String_List (1 .. 0);
end Archive_Indexer_Options;
--------------------------- ---------------------------
-- Build_Dynamic_Library -- -- Build_Dynamic_Library --
--------------------------- ---------------------------
......
...@@ -96,6 +96,15 @@ package body MLib.Tgt is ...@@ -96,6 +96,15 @@ package body MLib.Tgt is
return "ranlib"; return "ranlib";
end Archive_Indexer; end Archive_Indexer;
-----------------------------
-- Archive_Indexer_Options --
-----------------------------
function Archive_Indexer_Options return String_List_Access is
begin
return new String_List (1 .. 0);
end Archive_Indexer_Options;
--------------------------- ---------------------------
-- Build_Dynamic_Library -- -- Build_Dynamic_Library --
--------------------------- ---------------------------
......
...@@ -118,6 +118,15 @@ package body MLib.Tgt is ...@@ -118,6 +118,15 @@ package body MLib.Tgt is
return "ranlib"; return "ranlib";
end Archive_Indexer; end Archive_Indexer;
-----------------------------
-- Archive_Indexer_Options --
-----------------------------
function Archive_Indexer_Options return String_List_Access is
begin
return new String_List (1 .. 0);
end Archive_Indexer_Options;
--------------------------- ---------------------------
-- Build_Dynamic_Library -- -- Build_Dynamic_Library --
--------------------------- ---------------------------
......
...@@ -118,6 +118,15 @@ package body MLib.Tgt is ...@@ -118,6 +118,15 @@ package body MLib.Tgt is
return "ranlib"; return "ranlib";
end Archive_Indexer; end Archive_Indexer;
-----------------------------
-- Archive_Indexer_Options --
-----------------------------
function Archive_Indexer_Options return String_List_Access is
begin
return new String_List (1 .. 0);
end Archive_Indexer_Options;
--------------------------- ---------------------------
-- Build_Dynamic_Library -- -- Build_Dynamic_Library --
--------------------------- ---------------------------
......
...@@ -81,6 +81,15 @@ package body MLib.Tgt is ...@@ -81,6 +81,15 @@ package body MLib.Tgt is
return "ranlib" & Get_Target_Suffix; return "ranlib" & Get_Target_Suffix;
end Archive_Indexer; end Archive_Indexer;
-----------------------------
-- Archive_Indexer_Options --
-----------------------------
function Archive_Indexer_Options return String_List_Access is
begin
return new String_List (1 .. 0);
end Archive_Indexer_Options;
--------------------------- ---------------------------
-- Build_Dynamic_Library -- -- Build_Dynamic_Library --
--------------------------- ---------------------------
......
...@@ -67,6 +67,15 @@ package body MLib.Tgt is ...@@ -67,6 +67,15 @@ package body MLib.Tgt is
return "ranlib"; return "ranlib";
end Archive_Indexer; end Archive_Indexer;
-----------------------------
-- Archive_Indexer_Options --
-----------------------------
function Archive_Indexer_Options return String_List_Access is
begin
return new String_List (1 .. 0);
end Archive_Indexer_Options;
--------------------------- ---------------------------
-- Build_Dynamic_Library -- -- Build_Dynamic_Library --
--------------------------- ---------------------------
......
...@@ -64,6 +64,9 @@ package MLib.Tgt is ...@@ -64,6 +64,9 @@ package MLib.Tgt is
-- Returns the name of the program, if any, that generates an index -- Returns the name of the program, if any, that generates an index
-- to the contents of an archive, usually "ranlib". -- to the contents of an archive, usually "ranlib".
function Archive_Indexer_Options return String_List_Access;
-- A list of options to invoke the Archive_Indexer, usually empty.
function Dynamic_Option return String; function Dynamic_Option return String;
-- gcc option to create a dynamic library. -- gcc option to create a dynamic library.
-- For Unix, returns "-shared", for Windows returns "-mdll". -- For Unix, returns "-shared", for Windows returns "-mdll".
......
...@@ -36,17 +36,18 @@ with GNAT; use GNAT; ...@@ -36,17 +36,18 @@ with GNAT; use GNAT;
package body MLib.Utl is package body MLib.Utl is
Initialized : Boolean := False; Initialized : Boolean := False;
Gcc_Name : constant String := "gcc"; Gcc_Name : constant String := "gcc";
Gcc_Exec : OS_Lib.String_Access; Gcc_Exec : OS_Lib.String_Access;
Ar_Name : OS_Lib.String_Access; Ar_Name : OS_Lib.String_Access;
Ar_Exec : OS_Lib.String_Access; Ar_Exec : OS_Lib.String_Access;
Ar_Options : OS_Lib.String_List_Access; Ar_Options : OS_Lib.String_List_Access;
Ranlib_Name : OS_Lib.String_Access; Ranlib_Name : OS_Lib.String_Access;
Ranlib_Exec : OS_Lib.String_Access := null; Ranlib_Exec : OS_Lib.String_Access := null;
Ranlib_Options : OS_Lib.String_List_Access := null;
procedure Initialize; procedure Initialize;
-- Look for the tools in the path and record the full path for each one -- Look for the tools in the path and record the full path for each one
...@@ -116,7 +117,7 @@ package body MLib.Utl is ...@@ -116,7 +117,7 @@ package body MLib.Utl is
OS_Lib.Spawn OS_Lib.Spawn
(Ranlib_Exec.all, (Ranlib_Exec.all,
(1 => Arguments (Ar_Options'Length + 1)), Ranlib_Options.all & (Arguments (Ar_Options'Length + 1)),
Success); Success);
if not Success then if not Success then
...@@ -284,6 +285,8 @@ package body MLib.Utl is ...@@ -284,6 +285,8 @@ package body MLib.Utl is
Write_Line (Ranlib_Exec.all); Write_Line (Ranlib_Exec.all);
end if; end if;
end if; end if;
Ranlib_Options := Archive_Indexer_Options;
end if; end if;
end Initialize; end Initialize;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment