t-slibgcc-darwin revision 1.9 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.9 mrg endif
76 1.9 mrg
77 1.9 mrg INSTALL_FILES=$(LGCC_FILES)
78 1.8 mrg
79 1.9 mrg ifeq ($(BUILD_LIBGCCS1),YES)
80 1.8 mrg # Provide libgcc_s.1 for backwards compatibility.
81 1.9 mrg INSTALL_FILES += libgcc_s.1.dylib
82 1.1 mrg endif
83 1.1 mrg
84 1.8 mrg # For the toplevel multilib, build FAT dylibs including all the multilibs.
85 1.1 mrg ifeq ($(MULTIBUILDTOP),)
86 1.1 mrg
87 1.1 mrg ifeq ($(enable_shared),yes)
88 1.1 mrg all: $(INSTALL_FILES)
89 1.1 mrg install-leaf: install-darwin-libgcc-stubs
90 1.1 mrg endif
91 1.1 mrg
92 1.8 mrg libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT): all-multi libgcc_s$(SHLIB_EXT)
93 1.8 mrg MLIBS=`$(CC) --print-multi-lib | sed -e 's/;.*$$//'` ; \
94 1.8 mrg for mlib in $$MLIBS ; do \
95 1.8 mrg cp ../$${mlib}/libgcc/$${mlib}/libgcc_s$(SHLIB_EXT) \
96 1.8 mrg ./libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T_$${mlib} || exit 1 ; \
97 1.8 mrg done
98 1.8 mrg $(LIPO) -output libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT) \
99 1.8 mrg -create libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T*
100 1.8 mrg rm libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T*
101 1.8 mrg
102 1.8 mrg ifeq ($(BUILD_LIBGCCS1),YES)
103 1.8 mrg ifneq ($(LIBEHSOBJS),)
104 1.8 mrg
105 1.8 mrg libgcc_ehs.$(SHLIB_SOVERSION)$(SHLIB_EXT): all-multi libgcc_ehs$(SHLIB_EXT)
106 1.1 mrg MLIBS=`$(CC) --print-multi-lib | sed -e 's/;.*$$//'` ; \
107 1.1 mrg for mlib in $$MLIBS ; do \
108 1.8 mrg cp ../$${mlib}/libgcc/$${mlib}/libgcc_ehs$(SHLIB_EXT) \
109 1.8 mrg ./libgcc_ehs.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T_$${mlib} || exit 1 ; \
110 1.1 mrg done
111 1.8 mrg $(LIPO) -output libgcc_ehs.$(SHLIB_SOVERSION)$(SHLIB_EXT) \
112 1.8 mrg -create libgcc_ehs.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T*
113 1.8 mrg rm libgcc_ehs.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T*
114 1.1 mrg
115 1.8 mrg
116 1.8 mrg libgcc_s.1.dylib: all-multi libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT) \
117 1.8 mrg libgcc_ehs.$(SHLIB_SOVERSION)$(SHLIB_EXT)
118 1.1 mrg MLIBS=`$(CC) --print-multi-lib | sed -e 's/;.*$$//'` ; \
119 1.1 mrg for mlib in $$MLIBS ; do \
120 1.8 mrg cp ../$${mlib}/libgcc/$${mlib}/libgcc_s$(SHLIB_EXT) \
121 1.8 mrg ./libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T_$${mlib} || exit 1 ; \
122 1.8 mrg cp ../$${mlib}/libgcc/$${mlib}/libgcc_ehs$(SHLIB_EXT) \
123 1.8 mrg ./libgcc_ehs.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T_$${mlib} || exit 1 ; \
124 1.8 mrg arch=`$(LIPO) -info libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T_$${mlib} | sed -e 's/.*:\ //'` ; \
125 1.8 mrg $(CC) -arch $${arch} -nodefaultlibs -dynamiclib \
126 1.8 mrg -o libgcc_s.1$(SHLIB_EXT)_T_$${mlib} \
127 1.8 mrg -Wl,-reexport_library,libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T_$${mlib} \
128 1.8 mrg -Wl,-reexport_library,libgcc_ehs.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T_$${mlib} \
129 1.8 mrg -install_name $(SHLIB_INSTALL_DIR)/libgcc_s.1.dylib \
130 1.8 mrg -compatibility_version 1 -current_version 1 ; \
131 1.1 mrg done
132 1.8 mrg $(LIPO) -output libgcc_s.1$(SHLIB_EXT) -create libgcc_s.1$(SHLIB_EXT)_T*
133 1.8 mrg rm libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T*
134 1.8 mrg rm libgcc_ehs.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T*
135 1.1 mrg
136 1.8 mrg else
137 1.8 mrg
138 1.8 mrg libgcc_s.1.dylib: all-multi libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)
139 1.1 mrg MLIBS=`$(CC) --print-multi-lib | sed -e 's/;.*$$//'` ; \
140 1.1 mrg for mlib in $$MLIBS ; do \
141 1.1 mrg cp ../$${mlib}/libgcc/$${mlib}/libgcc_s$(SHLIB_EXT) \
142 1.1 mrg ./libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T_$${mlib} || exit 1 ; \
143 1.8 mrg arch=`$(LIPO) -info libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T_$${mlib} | sed -e 's/.*:\ //'` ; \
144 1.8 mrg $(CC) -arch $${arch} -nodefaultlibs -dynamiclib \
145 1.8 mrg -o libgcc_s.1$(SHLIB_EXT)_T_$${mlib} \
146 1.8 mrg -Wl,-reexport_library,libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T_$${mlib} \
147 1.8 mrg -lSystem \
148 1.8 mrg -Wl,-reexported_symbols_list,$(srcdir)/config/darwin-unwind.ver \
149 1.8 mrg -install_name $(SHLIB_INSTALL_DIR)/libgcc_s.1.dylib \
150 1.8 mrg -compatibility_version 1 -current_version 1 ; \
151 1.1 mrg done
152 1.8 mrg $(LIPO) -output libgcc_s.1$(SHLIB_EXT) -create libgcc_s.1$(SHLIB_EXT)_T*
153 1.1 mrg rm libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T*
154 1.1 mrg
155 1.8 mrg endif
156 1.8 mrg endif
157 1.8 mrg
158 1.8 mrg # Install the shared libraries.
159 1.8 mrg
160 1.1 mrg install-darwin-libgcc-stubs :
161 1.1 mrg $(mkinstalldirs) $(DESTDIR)$(slibdir)
162 1.9 mrg if test x$(slibdir) = x; then \
163 1.9 mrg for d in $(LGCC_FILES) ; do \
164 1.9 mrg $(INSTALL_DATA) $$d $(DESTDIR)$(slibdir)/$$d || exit 1 ; \
165 1.9 mrg done; \
166 1.9 mrg else \
167 1.9 mrg for d in $(INSTALL_FILES) ; do \
168 1.9 mrg $(INSTALL_DATA) $$d $(DESTDIR)$(slibdir)/$$d || exit 1 ; \
169 1.9 mrg done; \
170 1.9 mrg fi
171 1.1 mrg
172 1.1 mrg else
173 1.1 mrg
174 1.8 mrg # Do not install shared libraries for multilibs. Unless we are putting them
175 1.8 mrg # in the gcc directory during a build, for compatibility with the pre-top-
176 1.8 mrg # level layout. In that case we provide symlinks to the FAT lib from the
177 1.8 mrg # multilib sub-directories.
178 1.1 mrg
179 1.1 mrg ifeq ($(enable_shared),yes)
180 1.1 mrg all: install-darwin-libgcc-links
181 1.1 mrg endif
182 1.1 mrg
183 1.1 mrg install-darwin-libgcc-links:
184 1.1 mrg $(mkinstalldirs) $(gcc_objdir)$(MULTISUBDIR)
185 1.1 mrg for file in $(INSTALL_FILES); do \
186 1.1 mrg rm -f $(gcc_objdir)$(MULTISUBDIR)/$$file; \
187 1.1 mrg $(LN_S) ../$$file $(gcc_objdir)$(MULTISUBDIR)/; \
188 1.1 mrg done
189 1.1 mrg
190 1.1 mrg endif
191