| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 
 | # 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_INSTALL_NAME = @shlib_base_name@.$(SHLIB_SOVERSION)$(SHLIB_EXT)
SHLIB_SONAME = @shlib_base_name@$(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) \
	-Wl,-exported_symbols_list,$(SHLIB_MAP) \
	$(SHLIB_VERSTRING) \
	@multilib_flags@ $(SHLIB_OBJS) $(SHLIB_LC)
SHLIB_MKMAP = $(srcdir)/mkmap-flat.awk
SHLIB_MKMAP_OPTS = -v leading_underscore=1
SHLIB_MAPFILES = libgcc-std.ver $(srcdir)/config/libgcc-libsystem.ver
SHLIB_VERPFX = $(srcdir)/config/$(cpu_type)/libgcc-darwin
# we're only going to build the stubs if the target slib is /usr/lib
# there is no other case in which they're useful in a live system.
ifeq (/usr/lib,$(shlib_slibdir))
LGCC_STUBS = libgcc_s.10.4.dylib libgcc_s.10.5.dylib
else
LGCC_STUBS =
endif
LGCC_FILES = libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)
LGCC_FILES += $(LGCC_STUBS)
LEXT_STUBS = libgcc_ext.10.4$(SHLIB_EXT) libgcc_ext.10.5$(SHLIB_EXT)
LGCC_FILES += $(LEXT_STUBS)
INSTALL_FILES=$(LGCC_FILES)
# we do our own thing
SHLIB_INSTALL =
# For the toplevel multilib, build a fat archive including all the multilibs.
ifeq ($(MULTIBUILDTOP),)
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 : all-multi $(SHLIB_VERPFX).%.ver libgcc_s$(SHLIB_EXT)
	MLIBS=`$(CC) --print-multi-lib | sed -e 's/;.*$$//'` ; \
	for mlib in $$MLIBS ; do \
	  $(STRIP) -o $(@)_T$${mlib} \
	    -s $(SHLIB_VERPFX).$(*).ver -c -u \
	    ../$${mlib}/libgcc/$${mlib}/libgcc_s$(SHLIB_EXT)  || exit 1 ; \
	done
	$(LIPO) -output $@ -create $(@)_T*
	rm $(@)_T*
libgcc_ext.%.dylib : all-multi $(SHLIB_VERPFX).%.ver libgcc_s$(SHLIB_EXT) 
	MLIBS=`$(CC) --print-multi-lib | sed -e 's/;.*$$//'` ; \
	for mlib in $$MLIBS ; do \
	  $(STRIP) -o $(@)_T$${mlib} \
	    -R $(SHLIB_VERPFX).$(*).ver -c -urx \
	    ../$${mlib}/libgcc/$${mlib}/libgcc_s$(SHLIB_EXT) || exit 1 ; \
	done
	$(LIPO) -output $@ -create $(@)_T*
	rm $(@)_T*
libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT): all-multi libgcc_s$(SHLIB_EXT)
	MLIBS=`$(CC) --print-multi-lib | sed -e 's/;.*$$//'` ; \
	for mlib in $$MLIBS ; do \
	  cp ../$${mlib}/libgcc/$${mlib}/libgcc_s$(SHLIB_EXT)  \
	    ./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 :
	$(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.
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
 |