t-slibgcc-darwin revision 1.8 1 1.1 mrg # Build a shared libgcc library with the darwin linker.
2 1.8 mrg
3 1.8 mrg SHLIB_SOVERSION = 1.1
4 1.8 mrg SHLIB_SO_MINVERSION = 1
5 1.8 mrg SHLIB_VERSTRING = -compatibility_version $(SHLIB_SO_MINVERSION) \
6 1.8 mrg -current_version $(SHLIB_SOVERSION)
7 1.1 mrg SHLIB_EXT = .dylib
8 1.8 mrg SHLIB_LC = -lSystem
9 1.8 mrg SHLIB_INSTALL_DIR = $(slibdir)
10 1.8 mrg
11 1.8 mrg SHLIB_MKMAP = $(srcdir)/mkmap-flat.awk
12 1.8 mrg SHLIB_MKMAP_OPTS = -v leading_underscore=1
13 1.8 mrg
14 1.8 mrg # Shorthand expressions for the LINK below, these are substituted in the
15 1.8 mrg # link expression.
16 1.1 mrg SHLIB_INSTALL_NAME = @shlib_base_name@.$(SHLIB_SOVERSION)$(SHLIB_EXT)
17 1.1 mrg SHLIB_MAP = @shlib_map_file@
18 1.1 mrg SHLIB_DIR = @multilib_dir@
19 1.8 mrg SHLIB_SONAME = @shlib_base_name@$(SHLIB_EXT)
20 1.1 mrg
21 1.8 mrg # Darwin only searches in shlib_slibdir for shared libraries, not in
22 1.8 mrg # subdirectories. The link builds one architecture slice in its designated
23 1.8 mrg # subdir. The code under MULTIBUILDTOP combines these into a single FAT
24 1.8 mrg # library, that is what we eventually install.
25 1.1 mrg
26 1.8 mrg SHLIB_LINK = $(CC) $(LIBGCC2_CFLAGS) $(LDFLAGS) -dynamiclib -nodefaultlibs \
27 1.8 mrg -install_name $(SHLIB_INSTALL_DIR)/$(SHLIB_INSTALL_NAME) \
28 1.1 mrg -single_module -o $(SHLIB_DIR)/$(SHLIB_SONAME) \
29 1.1 mrg -Wl,-exported_symbols_list,$(SHLIB_MAP) \
30 1.1 mrg $(SHLIB_VERSTRING) \
31 1.8 mrg @multilib_flags@ @shlib_objs@ $(SHLIB_LC)
32 1.8 mrg
33 1.8 mrg # we do our own thing
34 1.8 mrg SHLIB_INSTALL =
35 1.8 mrg
36 1.8 mrg LGCC_FILES = libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)
37 1.8 mrg
38 1.8 mrg ifeq ($(BUILD_LIBGCCS1),YES)
39 1.8 mrg
40 1.8 mrg # We are going to build a libgcc_s.1.dylib so that distributions can
41 1.8 mrg # install it for compatibility with binaries linked against the old
42 1.8 mrg # libgcc_ext.10.x.dylib stubs.
43 1.8 mrg
44 1.8 mrg # For systems after macOS 10.7 we can forward the correct unwinder symbols
45 1.8 mrg # from libSystem.
46 1.1 mrg
47 1.8 mrg # For older systems we have to forward an entire library (since they cannot
48 1.8 mrg # selectively forward symbols, which means that we cannot forward the unwinder
49 1.8 mrg # in /usr/lib/libgcc_s.1.dylib). We also cannot forward the entire library
50 1.8 mrg # since that creates a self-referencing loop when DYLD_LIBRARY_PATH is used.
51 1.8 mrg # To provide the unwinder symbols in this case, we build the unwinder into a
52 1.8 mrg # separate shared lib (libgcc_ehs) and forward that.
53 1.8 mrg
54 1.8 mrg # These targets are local to this make fragment, which means that they do not
55 1.8 mrg # get the substitutions seen in SHLIB_LINK.
56 1.8 mrg
57 1.8 mrg ifneq ($(LIBEHSOBJS),)
58 1.8 mrg
59 1.8 mrg EHS_INSTNAME = libgcc_ehs.$(SHLIB_SOVERSION)$(SHLIB_EXT)
60 1.8 mrg
61 1.8 mrg # multilib build for a shared EH lib.
62 1.8 mrg
63 1.8 mrg libgcc_ehs$(SHLIB_EXT): $(LIBEHSOBJS) $(extra-parts)
64 1.8 mrg mkdir -p $(MULTIDIR)
65 1.8 mrg $(CC) $(LIBGCC2_CFLAGS) $(LDFLAGS) -dynamiclib -nodefaultlibs \
66 1.8 mrg -install_name $(SHLIB_INSTALL_DIR)/$(EHS_INSTNAME) \
67 1.8 mrg -o $(MULTIDIR)/libgcc_ehs$(SHLIB_EXT) $(SHLIB_VERSTRING) \
68 1.8 mrg $(LIBEHSOBJS) $(SHLIB_LC)
69 1.8 mrg
70 1.8 mrg all: libgcc_ehs$(SHLIB_EXT)
71 1.8 mrg
72 1.8 mrg LGCC_FILES += libgcc_ehs.$(SHLIB_SOVERSION)$(SHLIB_EXT)
73 1.8 mrg
74 1.8 mrg endif
75 1.8 mrg
76 1.8 mrg # Provide libgcc_s.1 for backwards compatibility.
77 1.8 mrg LGCC_FILES += libgcc_s.1.dylib
78 1.1 mrg
79 1.1 mrg endif
80 1.1 mrg
81 1.1 mrg INSTALL_FILES=$(LGCC_FILES)
82 1.1 mrg
83 1.8 mrg # For the toplevel multilib, build FAT dylibs including all the multilibs.
84 1.1 mrg ifeq ($(MULTIBUILDTOP),)
85 1.1 mrg
86 1.1 mrg ifeq ($(enable_shared),yes)
87 1.1 mrg all: $(INSTALL_FILES)
88 1.1 mrg install-leaf: install-darwin-libgcc-stubs
89 1.1 mrg endif
90 1.1 mrg
91 1.8 mrg libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT): all-multi libgcc_s$(SHLIB_EXT)
92 1.8 mrg MLIBS=`$(CC) --print-multi-lib | sed -e 's/;.*$$//'` ; \
93 1.8 mrg for mlib in $$MLIBS ; do \
94 1.8 mrg cp ../$${mlib}/libgcc/$${mlib}/libgcc_s$(SHLIB_EXT) \
95 1.8 mrg ./libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T_$${mlib} || exit 1 ; \
96 1.8 mrg done
97 1.8 mrg $(LIPO) -output libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT) \
98 1.8 mrg -create libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T*
99 1.8 mrg rm libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T*
100 1.8 mrg
101 1.8 mrg ifeq ($(BUILD_LIBGCCS1),YES)
102 1.8 mrg ifneq ($(LIBEHSOBJS),)
103 1.8 mrg
104 1.8 mrg libgcc_ehs.$(SHLIB_SOVERSION)$(SHLIB_EXT): all-multi libgcc_ehs$(SHLIB_EXT)
105 1.1 mrg MLIBS=`$(CC) --print-multi-lib | sed -e 's/;.*$$//'` ; \
106 1.1 mrg for mlib in $$MLIBS ; do \
107 1.8 mrg cp ../$${mlib}/libgcc/$${mlib}/libgcc_ehs$(SHLIB_EXT) \
108 1.8 mrg ./libgcc_ehs.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T_$${mlib} || exit 1 ; \
109 1.1 mrg done
110 1.8 mrg $(LIPO) -output libgcc_ehs.$(SHLIB_SOVERSION)$(SHLIB_EXT) \
111 1.8 mrg -create libgcc_ehs.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T*
112 1.8 mrg rm libgcc_ehs.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T*
113 1.1 mrg
114 1.8 mrg
115 1.8 mrg libgcc_s.1.dylib: all-multi libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT) \
116 1.8 mrg libgcc_ehs.$(SHLIB_SOVERSION)$(SHLIB_EXT)
117 1.1 mrg MLIBS=`$(CC) --print-multi-lib | sed -e 's/;.*$$//'` ; \
118 1.1 mrg for mlib in $$MLIBS ; do \
119 1.8 mrg cp ../$${mlib}/libgcc/$${mlib}/libgcc_s$(SHLIB_EXT) \
120 1.8 mrg ./libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T_$${mlib} || exit 1 ; \
121 1.8 mrg cp ../$${mlib}/libgcc/$${mlib}/libgcc_ehs$(SHLIB_EXT) \
122 1.8 mrg ./libgcc_ehs.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T_$${mlib} || exit 1 ; \
123 1.8 mrg arch=`$(LIPO) -info libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T_$${mlib} | sed -e 's/.*:\ //'` ; \
124 1.8 mrg $(CC) -arch $${arch} -nodefaultlibs -dynamiclib \
125 1.8 mrg -o libgcc_s.1$(SHLIB_EXT)_T_$${mlib} \
126 1.8 mrg -Wl,-reexport_library,libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T_$${mlib} \
127 1.8 mrg -Wl,-reexport_library,libgcc_ehs.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T_$${mlib} \
128 1.8 mrg -install_name $(SHLIB_INSTALL_DIR)/libgcc_s.1.dylib \
129 1.8 mrg -compatibility_version 1 -current_version 1 ; \
130 1.1 mrg done
131 1.8 mrg $(LIPO) -output libgcc_s.1$(SHLIB_EXT) -create libgcc_s.1$(SHLIB_EXT)_T*
132 1.8 mrg rm libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T*
133 1.8 mrg rm libgcc_ehs.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T*
134 1.1 mrg
135 1.8 mrg else
136 1.8 mrg
137 1.8 mrg libgcc_s.1.dylib: all-multi libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)
138 1.1 mrg MLIBS=`$(CC) --print-multi-lib | sed -e 's/;.*$$//'` ; \
139 1.1 mrg for mlib in $$MLIBS ; do \
140 1.1 mrg cp ../$${mlib}/libgcc/$${mlib}/libgcc_s$(SHLIB_EXT) \
141 1.1 mrg ./libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T_$${mlib} || exit 1 ; \
142 1.8 mrg arch=`$(LIPO) -info libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T_$${mlib} | sed -e 's/.*:\ //'` ; \
143 1.8 mrg $(CC) -arch $${arch} -nodefaultlibs -dynamiclib \
144 1.8 mrg -o libgcc_s.1$(SHLIB_EXT)_T_$${mlib} \
145 1.8 mrg -Wl,-reexport_library,libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T_$${mlib} \
146 1.8 mrg -lSystem \
147 1.8 mrg -Wl,-reexported_symbols_list,$(srcdir)/config/darwin-unwind.ver \
148 1.8 mrg -install_name $(SHLIB_INSTALL_DIR)/libgcc_s.1.dylib \
149 1.8 mrg -compatibility_version 1 -current_version 1 ; \
150 1.1 mrg done
151 1.8 mrg $(LIPO) -output libgcc_s.1$(SHLIB_EXT) -create libgcc_s.1$(SHLIB_EXT)_T*
152 1.1 mrg rm libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T*
153 1.1 mrg
154 1.8 mrg endif
155 1.8 mrg endif
156 1.8 mrg
157 1.8 mrg # Install the shared libraries.
158 1.8 mrg
159 1.1 mrg install-darwin-libgcc-stubs :
160 1.1 mrg $(mkinstalldirs) $(DESTDIR)$(slibdir)
161 1.1 mrg for d in $(INSTALL_FILES) ; do \
162 1.1 mrg $(INSTALL_DATA) $$d $(DESTDIR)$(slibdir)/$$d || exit 1 ; \
163 1.1 mrg done
164 1.1 mrg
165 1.1 mrg else
166 1.1 mrg
167 1.8 mrg # Do not install shared libraries for multilibs. Unless we are putting them
168 1.8 mrg # in the gcc directory during a build, for compatibility with the pre-top-
169 1.8 mrg # level layout. In that case we provide symlinks to the FAT lib from the
170 1.8 mrg # multilib sub-directories.
171 1.1 mrg
172 1.1 mrg ifeq ($(enable_shared),yes)
173 1.1 mrg all: install-darwin-libgcc-links
174 1.1 mrg endif
175 1.1 mrg
176 1.1 mrg install-darwin-libgcc-links:
177 1.1 mrg $(mkinstalldirs) $(gcc_objdir)$(MULTISUBDIR)
178 1.1 mrg for file in $(INSTALL_FILES); do \
179 1.1 mrg rm -f $(gcc_objdir)$(MULTISUBDIR)/$$file; \
180 1.1 mrg $(LN_S) ../$$file $(gcc_objdir)$(MULTISUBDIR)/; \
181 1.1 mrg done
182 1.1 mrg
183 1.1 mrg endif
184