From df62c1c110e8532b995b23540b7e3695729c0779 Mon Sep 17 00:00:00 2001 From: Jing Yu Date: Thu, 5 Nov 2009 15:11:04 -0800 Subject: Check in gcc sources for prebuilt toolchains in Eclair. --- gcc-4.3.1/libgcc/config/t-slibgcc-darwin | 122 +++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 gcc-4.3.1/libgcc/config/t-slibgcc-darwin (limited to 'gcc-4.3.1/libgcc/config/t-slibgcc-darwin') diff --git a/gcc-4.3.1/libgcc/config/t-slibgcc-darwin b/gcc-4.3.1/libgcc/config/t-slibgcc-darwin new file mode 100644 index 000000000..3dd172367 --- /dev/null +++ b/gcc-4.3.1/libgcc/config/t-slibgcc-darwin @@ -0,0 +1,122 @@ +# Build a shared libgcc library with the darwin linker. +SHLIB_SOVERSION = 1 +SHLIB_VERSTRING = -compatibility_version $(SHLIB_SOVERSION) -current_version $(SHLIB_SOVERSION).0 +SHLIB_EXT = .dylib +SHLIB_SUFFIX = `if test @multilib_dir@ = ppc64 ; then echo _@multilib_dir@ ; fi` +SHLIB_INSTALL_NAME = @shlib_base_name@$(SHLIB_SUFFIX).$(SHLIB_SOVERSION)$(SHLIB_EXT) +SHLIB_SONAME = @shlib_base_name@.$(SHLIB_SOVERSION)$(SHLIB_EXT) +SHLIB_SOLINK = @shlib_base_name@.so +SHLIB_MAP = @shlib_map_file@ +SHLIB_OBJS = @shlib_objs@ +SHLIB_DIR = @multilib_dir@ +SHLIB_LC = -lc + +# Darwin only searches in /usr/lib for shared libraries, not in subdirectories, +# so the libgcc variants have different names not different locations. +# Note that this version is used for the loader, not the linker; the linker +# uses the stub versions named by the versioned members of $(INSTALL_FILES). +SHLIB_LINK = $(CC) $(LIBGCC2_CFLAGS) -dynamiclib -nodefaultlibs \ + -install_name @shlib_slibdir@/$(SHLIB_INSTALL_NAME) \ + -single_module -o $(SHLIB_DIR)/$(SHLIB_SONAME).tmp \ + -Wl,-exported_symbols_list,$(SHLIB_MAP) \ + $(SHLIB_VERSTRING) \ + @multilib_flags@ $(SHLIB_OBJS) $(SHLIB_LC) + +SHLIB_MKMAP = $(gcc_srcdir)/mkmap-flat.awk +SHLIB_MKMAP_OPTS = -v leading_underscore=1 +SHLIB_MAPFILES += $(gcc_srcdir)/libgcc-std.ver + +INSTALL_FILES=libgcc_s.10.4.dylib libgcc_s.10.5.dylib libgcc_s.1.dylib + +# For the toplevel multilib, build a fat archive including all the multilibs. +ifeq ($(MULTIBUILDTOP),) + +SHLIB_INSTALL = \ + $(mkinstalldirs) $(DESTDIR)$(slibdir); \ + $(INSTALL_DATA) $(SHLIB_SONAME) \ + $(DESTDIR)$(slibdir)/$(SHLIB_SONAME) + +ifeq ($(enable_shared),yes) +all: $(INSTALL_FILES) +install-leaf: install-darwin-libgcc-stubs +endif + +# In order to support -mmacosx-version-min, you need to have multiple +# different libgcc_s libraries that actually get linked against, one for +# each system version supported. They are 'stub' libraries that +# contain no code, just a list of exported symbols. +# The actual use of the libraries is controlled by REAL_LIBGCC_SPEC. +# +# This assumes each multilib corresponds to a different architecture. +libgcc_s.%.dylib : $(SHLIB_VERPFX).%.ver libgcc_s$(SHLIB_EXT) all-multi + $(STRIP) -o $(@)_T \ + -s $(SHLIB_VERPFX).$(*).ver -c -u \ + ./libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT).tmp + MLIBS=`$(CC) --print-multi-lib \ + | sed -e 's/;.*$$//' -e '/^\.$$/d'` ; \ + for mlib in $$MLIBS ; do \ + $(STRIP) -o $(@)_T$${mlib} \ + -s $(SHLIB_VERPFX).$(*).ver -c -u \ + ../$${mlib}/libgcc/$${mlib}/libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT).tmp || exit 1 ; \ + done + $(LIPO) -output $@ -create $(@)_T* + rm $(@)_T* + +libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT): all-multi libgcc_s$(SHLIB_EXT) \ + libgcc_s.10.4.dylib libgcc_s.10.5.dylib + cp libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT).tmp \ + ./libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T_ || exit 1 ; \ + MLIBS=`$(CC) --print-multi-lib \ + | sed -e 's/;.*$$//' -e '/^\.$$/d'` ; \ + for mlib in $$MLIBS ; do \ + cp ../$${mlib}/libgcc/$${mlib}/libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT).tmp \ + ./libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T_$${mlib} || exit 1 ; \ + done + $(LIPO) -output libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT) \ + -create libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T* + rm libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T* + +install-darwin-libgcc-stubs : $(INSTALL_FILES) + $(mkinstalldirs) $(DESTDIR)$(slibdir) + for d in $(INSTALL_FILES) ; do \ + $(INSTALL_DATA) $$d $(DESTDIR)$(slibdir)/$$d || exit 1 ; \ + done + if [ -f $(DESTDIR)$(slibdir)/libgcc_s_ppc64.1.dylib ]; then \ + rm -f $(DESTDIR)$(slibdir)/libgcc_s_ppc64.1.dylib; \ + else true; fi + $(LN_S) libgcc_s.1.dylib \ + $(DESTDIR)$(slibdir)/libgcc_s_ppc64.1.dylib + if [ -f $(DESTDIR)$(slibdir)/libgcc_s_x86_64.1.dylib ]; then \ + rm -f $(DESTDIR)$(slibdir)/libgcc_s_x86_64.1.dylib; \ + else true; fi + $(LN_S) libgcc_s.1.dylib \ + $(DESTDIR)$(slibdir)/libgcc_s_x86_64.1.dylib + +else + +# Do not install shared libraries for any other multilibs. Unless +# we're putting them in the gcc directory during a build, for +# compatibility with the pre-top-level layout. In that case we +# need symlinks. +SHLIB_INSTALL = + +ifeq ($(enable_shared),yes) +all: install-darwin-libgcc-links +endif + +install-darwin-libgcc-links: + $(mkinstalldirs) $(gcc_objdir)$(MULTISUBDIR) + for file in $(INSTALL_FILES); do \ + rm -f $(gcc_objdir)$(MULTISUBDIR)/$$file; \ + $(LN_S) ../$$file $(gcc_objdir)$(MULTISUBDIR)/; \ + done + + rm -f $(gcc_objdir)$(MULTISUBDIR)/libgcc_s_x86_64.1.dylib + $(LN_S) libgcc_s.1.dylib \ + $(gcc_objdir)$(MULTISUBDIR)/libgcc_s_x86_64.1.dylib + + rm -f $(gcc_objdir)$(MULTISUBDIR)/libgcc_s_ppc64.1.dylib + $(LN_S) libgcc_s.1.dylib \ + $(gcc_objdir)$(MULTISUBDIR)/libgcc_s_ppc64.1.dylib + +endif -- cgit v1.2.3