1# Makefile.in
2
3# Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation
4#
5# This file is part of GCC.
6#
7# GCC is free software; you can redistribute it and/or modify it under the
8# terms of the GNU Library General Public License as published by the Free
9# Software Foundation; either version 3 of the License, or (at your option)
10# any later version.
11#
12# GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
15# more details.
16#
17# You should have received a copy of the GNU General Public License along
18# with GCC; see the file COPYING3.  If not see
19# <http://www.gnu.org/licenses/>.
20#
21
22libgcc_topdir = @libgcc_topdir@
23host_subdir = @host_subdir@
24
25gcc_objdir = $(MULTIBUILDTOP)../../$(host_subdir)/gcc
26
27srcdir = @srcdir@
28
29prefix = @prefix@
30
31exec_prefix = @exec_prefix@
32libdir = @libdir@
33shlib_slibdir = @slibdir@
34
35SHELL = @SHELL@
36
37cpu_type = @cpu_type@
38enable_shared = @enable_shared@
39double_type_size = @double_type_size@
40long_double_type_size = @long_double_type_size@
41decimal_float = @decimal_float@
42enable_decimal_float = @enable_decimal_float@
43fixed_point = @fixed_point@
44
45host_noncanonical = @host_noncanonical@
46target_noncanonical = @target_noncanonical@
47
48# List of extra object files that should be compiled for this target machine.
49# The rules for compiling them should be in the t-* file for the machine.
50EXTRA_PARTS = @extra_parts@
51
52extra-parts = libgcc-extra-parts
53
54# Multilib support variables.
55MULTISRCTOP =
56MULTIBUILDTOP =
57MULTIDIRS =
58MULTISUBDIR =
59MULTIDO = true
60MULTICLEAN = true
61
62INSTALL = @INSTALL@
63INSTALL_PROGRAM = @INSTALL_PROGRAM@
64INSTALL_DATA = @INSTALL_DATA@
65mkinstalldirs = $(SHELL) $(libgcc_topdir)/mkinstalldirs
66INSTALL_PARTS = $(EXTRA_PARTS)
67
68objext = .o
69
70AR = @AR@
71AR_FLAGS = rc
72
73CC = @CC@
74CFLAGS = @CFLAGS@
75RANLIB = @RANLIB@
76LN_S = @LN_S@
77
78PWD_COMMAND = $${PWDCMD-pwd}
79
80# Flags to pass to a recursive make.
81FLAGS_TO_PASS = \
82	"AR=$(AR)" \
83	"AR_FLAGS=$(AR_FLAGS)" \
84	"CC=$(CC)" \
85	"CFLAGS=$(CFLAGS)" \
86	"DESTDIR=$(DESTDIR)" \
87	"EXTRA_OFILES=$(EXTRA_OFILES)" \
88	"HDEFINES=$(HDEFINES)" \
89	"INSTALL=$(INSTALL)" \
90	"INSTALL_DATA=$(INSTALL_DATA)" \
91	"INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \
92	"LDFLAGS=$(LDFLAGS)" \
93	"LOADLIBES=$(LOADLIBES)" \
94	"RANLIB=$(RANLIB)" \
95	"SHELL=$(SHELL)" \
96	"prefix=$(prefix)" \
97	"exec_prefix=$(exec_prefix)" \
98	"libdir=$(libdir)" \
99	"libsubdir=$(libsubdir)" \
100	"tooldir=$(tooldir)"
101
102# Dependencies for "all" are set later in the file.
103all: all-multi
104	# Now that we have built all the objects, we need to copy
105	# them back to the GCC directory.  Too many things (other
106	# in-tree libraries, and DejaGNU) know about the layout
107	# of the build tree, for now.
108	$(MAKE) install-leaf DESTDIR=$(gcc_objdir) \
109	  slibdir= libsubdir= MULTIOSDIR=$(MULTIDIR)
110
111.PHONY: all-multi
112all-multi:
113	# If this is the top-level multilib, build all the other
114	# multilibs.
115	@: $(MAKE) ; exec $(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=all
116
117.PHONY: check installcheck
118check:
119installcheck:
120
121.PHONY: all clean
122
123clean:
124	-rm -f config.h libgcc_tm.h stamp-h stmp-ldirs libgcc.map
125	-rm -f *$(objext)
126	-rm -f *.dep
127	-rm -f *.a
128	-rm -f libunwind$(SHLIB_EXT)
129	-rm -f libgcc_s*
130	@$(MULTICLEAN) multi-clean DO=clean
131distclean: clean
132	@$(MULTICLEAN) multi-clean DO=distclean
133	-rm -f *~ Makefile config.cache config.status multilib.out
134	-rm -f config.log
135maintainer-clean realclean: distclean
136
137Makefile: $(srcdir)/Makefile.in config.status
138	CONFIG_FILES=Makefile CONFIG_HEADERS= $(SHELL) ./config.status
139
140# Depending on Makefile makes sure that config.status has been re-run
141# if needed.  This prevents problems with parallel builds.
142config.h: stamp-h ; @true
143stamp-h: $(srcdir)/config.in config.status Makefile
144	CONFIG_FILES= CONFIG_HEADERS=config.h:$(srcdir)/config.in $(SHELL) ./config.status
145
146config.status: $(srcdir)/configure $(srcdir)/config.host
147	$(SHELL) ./config.status --recheck
148
149AUTOCONF = autoconf
150configure_deps = \
151	$(srcdir)/../config/enable.m4 \
152	$(srcdir)/../config/tls.m4 \
153	$(srcdir)/../config/acx.m4 \
154	$(srcdir)/../config/no-executables.m4 \
155	$(srcdir)/../config/override.m4 \
156	$(srcdir)/../config/dfp.m4 \
157
158$(srcdir)/configure: @MAINT@ $(srcdir)/configure.ac $(configure_deps)
159	cd $(srcdir) && $(AUTOCONF)
160
161include $(gcc_objdir)/libgcc.mvars
162
163# Flags to pass to recursive makes.
164
165AR_FOR_TARGET = $(AR)
166AR_FLAGS_FOR_TARGET =
167AR_CREATE_FOR_TARGET = $(AR_FOR_TARGET) $(AR_FLAGS_FOR_TARGET) rc
168AR_EXTRACT_FOR_TARGET = $(AR_FOR_TARGET) $(AR_FLAGS_FOR_TARGET) x
169AWK = @AWK@
170GCC_FOR_TARGET = $(CC)
171LIPO = @LIPO@
172LIPO_FOR_TARGET = $(LIPO)
173MACHMODE_H = machmode.h mode-classes.def insn-modes.h
174NM = @NM@
175NM_FOR_TARGET = $(NM)
176RANLIB_FOR_TARGET = $(RANLIB)
177STRIP = @STRIP@
178STRIP_FOR_TARGET = $(STRIP)
179
180# Directory in which the compiler finds libraries etc.
181libsubdir = $(libdir)/gcc/$(host_noncanonical)/$(version)
182# Used to install the shared libgcc.
183slibdir = @slibdir@
184# Maybe used for DLLs on Windows targets.
185toolexecdir = @toolexecdir@
186toolexeclibdir = @toolexeclibdir@
187
188export AR_FOR_TARGET
189export AR_CREATE_FOR_TARGET
190export AR_FLAGS_FOR_TARGET
191export AR_EXTRACT_FOR_TARGET
192export AWK
193export DESTDIR
194export GCC_FOR_TARGET
195export INCLUDES
196export INSTALL_DATA
197export LIB1ASMSRC
198export LIBGCC2_CFLAGS
199export LIPO_FOR_TARGET
200export MACHMODE_H
201export NM_FOR_TARGET
202export STRIP_FOR_TARGET
203export RANLIB_FOR_TARGET
204export libsubdir
205export slibdir
206export toolexecdir
207export toolexeclibdir
208
209version := $(shell $(CC) -dumpversion)
210
211ifeq ($(decimal_float),yes)
212ifeq ($(enable_decimal_float),bid)
213DECNUMINC = -I$(srcdir)/config/libbid -DENABLE_DECIMAL_BID_FORMAT
214else
215DECNUMINC = -I$(srcdir)/../libdecnumber/$(enable_decimal_float) \
216	    -I$(srcdir)/../libdecnumber
217endif
218else
219DECNUMINC =
220endif
221
222# Options to use when compiling libgcc2.a.
223#
224LIBGCC2_DEBUG_CFLAGS = -g
225LIBGCC2_CFLAGS = -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) $(HOST_LIBGCC2_CFLAGS) \
226		 $(LIBGCC2_DEBUG_CFLAGS) -DIN_LIBGCC2 \
227		 -fbuilding-libgcc -fno-stack-protector \
228		 $(INHIBIT_LIBC_CFLAGS)
229
230# Additional options to use when compiling libgcc2.a.
231# Some targets override this to -isystem include
232LIBGCC2_INCLUDES =
233
234# Additional target-dependent options for compiling libgcc2.a.
235HOST_LIBGCC2_CFLAGS =
236
237PICFLAG = @PICFLAG@
238
239# Defined in libgcc2.c, included only in the static library.
240LIB2FUNCS_ST = _eprintf __gcc_bcmp
241
242# List of functions not to build from libgcc2.c.
243LIB2FUNCS_EXCLUDE =
244
245# These might cause a divide overflow trap and so are compiled with
246# unwinder info.
247LIB2_DIVMOD_FUNCS = _divdi3 _moddi3 _udivdi3 _umoddi3 _udiv_w_sdiv _udivmoddi4
248
249# List of extra C and assembler files to add to static and shared libgcc2.
250# Assembler files should have names ending in `.S'.
251LIB2ADD =
252
253# List of extra C and assembler files to add to static libgcc2.
254# Assembler files should have names ending in `.S'.
255LIB2ADD_ST =
256
257# Specify the directories to be searched for header files.
258# Both . and srcdir are used, in that order,
259# so that *config.h will be found in the compilation
260# subdirectory rather than in the source directory.
261# -I$(@D) and -I$(srcdir)/$(@D) cause the subdirectory of the file
262# currently being compiled, in both source trees, to be examined as well.
263INCLUDES = -I. -I$(@D) -I$(gcc_objdir) \
264	   -I$(srcdir) -I$(srcdir)/$(@D) -I$(srcdir)/../gcc \
265	   -I$(srcdir)/../include $(DECNUMINC)
266
267# Forcibly remove any profiling-related flags.  There is no point
268# in supporting profiled bootstrap in this library.
269override CFLAGS := $(filter-out -fprofile-generate -fprofile-use,$(CFLAGS))
270
271# CFLAGS first is not perfect; normally setting CFLAGS should override any
272# options in LIBGCC2_CFLAGS.  But LIBGCC2_CFLAGS may contain -g0, and CFLAGS
273# will usually contain -g, so for the moment CFLAGS goes first.  We must
274# include CFLAGS - that's where multilib options live.
275INTERNAL_CFLAGS = $(CFLAGS) $(LIBGCC2_CFLAGS) $(HOST_LIBGCC2_CFLAGS) \
276		  $(INCLUDES) @set_have_cc_tls@ @set_use_emutls@
277
278# Options to use when compiling crtbegin/end.
279CRTSTUFF_CFLAGS = -O2 $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -g0 \
280  -finhibit-size-directive -fno-inline -fno-exceptions \
281  -fno-zero-initialized-in-bss -fno-toplevel-reorder -fno-tree-vectorize \
282  -fno-stack-protector \
283  $(INHIBIT_LIBC_CFLAGS)
284
285# Extra flags to use when compiling crt{begin,end}.o.
286CRTSTUFF_T_CFLAGS =
287
288MULTIDIR := $(shell $(CC) $(CFLAGS) -print-multi-directory)
289MULTIOSDIR := $(shell $(CC) $(CFLAGS) -print-multi-os-directory)
290
291MULTIOSSUBDIR := $(shell if test $(MULTIOSDIR) != .; then echo /$(MULTIOSDIR); fi)
292inst_libdir = $(libsubdir)$(MULTISUBDIR)
293inst_slibdir = $(slibdir)$(MULTIOSSUBDIR)
294
295gcc_compile_bare = $(CC) $(INTERNAL_CFLAGS)
296compile_deps = -MT $@ -MD -MP -MF $(basename $@).dep
297gcc_compile = $(gcc_compile_bare) -o $@ $(compile_deps)
298gcc_s_compile = $(gcc_compile) -DSHARED
299
300objects = $(filter %$(objext),$^)
301
302# Collect any host-specific information from Makefile fragments.
303
304LIBGCC_VER_GNU_PREFIX = __
305LIBGCC_VER_FIXEDPOINT_GNU_PREFIX = __
306LIBGCC_VER_SYMBOLS_PREFIX =
307
308FPBIT_FUNCS = _pack_sf _unpack_sf _addsub_sf _mul_sf _div_sf \
309    _fpcmp_parts_sf _compare_sf _eq_sf _ne_sf _gt_sf _ge_sf \
310    _lt_sf _le_sf _unord_sf _si_to_sf _sf_to_si _negate_sf _make_sf \
311    _sf_to_df _sf_to_tf _thenan_sf _sf_to_usi _usi_to_sf
312
313DPBIT_FUNCS = _pack_df _unpack_df _addsub_df _mul_df _div_df \
314    _fpcmp_parts_df _compare_df _eq_df _ne_df _gt_df _ge_df \
315    _lt_df _le_df _unord_df _si_to_df _df_to_si _negate_df _make_df \
316    _df_to_sf _df_to_tf _thenan_df _df_to_usi _usi_to_df
317
318TPBIT_FUNCS = _pack_tf _unpack_tf _addsub_tf _mul_tf _div_tf \
319    _fpcmp_parts_tf _compare_tf _eq_tf _ne_tf _gt_tf _ge_tf \
320    _lt_tf _le_tf _unord_tf _si_to_tf _tf_to_si _negate_tf _make_tf \
321    _tf_to_df _tf_to_sf _thenan_tf _tf_to_usi _usi_to_tf
322
323# Additional sources to handle exceptions; overridden by targets as needed.
324LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde.c \
325  $(srcdir)/unwind-sjlj.c $(srcdir)/unwind-c.c
326LIB2ADDEHSTATIC = $(LIB2ADDEH)
327LIB2ADDEHSHARED = $(LIB2ADDEH)
328
329# nm flags to list global symbols in libgcc object files.
330SHLIB_NM_FLAGS = -pg
331
332# Don't build libunwind by default.
333LIBUNWIND =
334SHLIBUNWIND_LINK =
335SHLIBUNWIND_INSTALL =
336
337tmake_file = @tmake_file@
338include $(srcdir)/empty.mk $(tmake_file)
339
340# Collect target defines and headers from config.host.
341libgcc_tm_defines = @tm_defines@
342libgcc_tm_file = @tm_file@
343libgcc_tm.h: libgcc_tm.stamp; @true
344libgcc_tm.stamp:
345	DEFINES='$(libgcc_tm_defines)' HEADERS='$(libgcc_tm_file)' \
346		$(srcdir)/mkheader.sh > tmp-libgcc_tm.h
347	$(SHELL) $(srcdir)/../move-if-change tmp-libgcc_tm.h libgcc_tm.h
348	echo timestamp > $@
349
350# Only handle shared libraries if both:
351#   - the user requested them
352#   - we know how to build them
353ifeq ($(SHLIB_LINK),)
354  enable_shared := no
355endif
356
357ifeq ($(enable_shared),yes)
358  iterator = $(srcdir)/empty.mk $(patsubst %,$(srcdir)/shared-object.mk,$(iter-items))
359
360  install-shared = install-shared
361
362  ifneq ($(LIBUNWIND),)
363    install-libunwind = install-libunwind
364  endif
365
366# For -fvisibility=hidden.  We need both a -fvisibility=hidden on
367# the command line, and a #define to prevent libgcc2.h etc from
368# overriding that with #pragmas.
369vis_hide = @vis_hide@
370
371ifneq (,$(vis_hide))
372
373# If we have -fvisibility=hidden, then we need to generate hide
374# lists for object files implemented in assembly.
375ASM_HIDDEN_OP = @asm_hidden_op@
376
377define gen-hide-list
378$(NM) -pg $< | \
379  $(AWK) 'NF == 3 && $$2 !~ /^[UN]$$/ && $$3 !~ /.*_compat/ \
380         && $$3 !~ /.*@.*/ \
381	 { print "\t$(ASM_HIDDEN_OP)", $$3 }' > $@T
382mv -f $@T $@
383endef
384else
385gen-hide-list = echo > $@
386endif
387
388else
389# Not enable_shared.
390iterator = $(srcdir)/empty.mk $(patsubst %,$(srcdir)/static-object.mk,$(iter-items))
391vis_hide =
392gen-hide-list = echo > \$@
393endif
394
395LIB2ADD += enable-execute-stack.c
396
397# While emutls.c has nothing to do with EH, it is in LIB2ADDEH*
398# instead of LIB2ADD because that's the way to be sure on some targets
399# (e.g. *-*-darwin*) only one copy of it is linked.
400LIB2ADDEH += $(srcdir)/emutls.c
401LIB2ADDEHSTATIC += $(srcdir)/emutls.c
402LIB2ADDEHSHARED += $(srcdir)/emutls.c
403
404# Library members defined in libgcc2.c.
405lib2funcs = _muldi3 _negdi2 _lshrdi3 _ashldi3 _ashrdi3 _cmpdi2 _ucmpdi2	   \
406	    _clear_cache _trampoline __main _absvsi2 \
407	    _absvdi2 _addvsi3 _addvdi3 _subvsi3 _subvdi3 _mulvsi3 _mulvdi3 \
408	    _negvsi2 _negvdi2 _ctors _ffssi2 _ffsdi2 _clz _clzsi2 _clzdi2  \
409	    _ctzsi2 _ctzdi2 _popcount_tab _popcountsi2 _popcountdi2	   \
410	    _paritysi2 _paritydi2 _powisf2 _powidf2 _powixf2 _powitf2	   \
411	    _mulsc3 _muldc3 _mulxc3 _multc3 _divsc3 _divdc3 _divxc3	   \
412	    _divtc3 _bswapsi2 _bswapdi2 _clrsbsi2 _clrsbdi2
413
414# The floating-point conversion routines that involve a single-word integer.
415# XX stands for the integer mode.
416swfloatfuncs = $(patsubst %,_fixuns%XX,sf df xf)
417
418# Likewise double-word routines.
419dwfloatfuncs = $(patsubst %,_fix%XX,sf df xf tf) \
420	       $(patsubst %,_fixuns%XX,sf df xf tf) \
421	       $(patsubst %,_floatXX%,sf df xf tf) \
422	       $(patsubst %,_floatunXX%,sf df xf tf)
423
424ifeq ($(LIB2_SIDITI_CONV_FUNCS),)
425  lib2funcs += $(subst XX,si,$(swfloatfuncs))
426  lib2funcs += $(subst XX,di,$(dwfloatfuncs))
427endif
428
429# These might cause a divide overflow trap and so are compiled with
430# unwinder info.
431LIB2_DIVMOD_FUNCS = _divdi3 _moddi3 _udivdi3 _umoddi3 _udiv_w_sdiv _udivmoddi4
432
433# Remove any objects from lib2funcs and LIB2_DIVMOD_FUNCS that are
434# defined as optimized assembly code in LIB1ASMFUNCS or as C code
435# in LIB2FUNCS_EXCLUDE.
436lib2funcs := $(filter-out $(LIB2FUNCS_EXCLUDE) $(LIB1ASMFUNCS),$(lib2funcs))
437LIB2_DIVMOD_FUNCS := $(filter-out $(LIB2FUNCS_EXCLUDE) $(LIB1ASMFUNCS), \
438		       $(LIB2_DIVMOD_FUNCS))
439
440# Build "libgcc1" (assembly) components.
441ifeq ($(enable_shared),yes)
442
443lib1asmfuncs-o = $(patsubst %,%$(objext),$(LIB1ASMFUNCS))
444$(lib1asmfuncs-o): %$(objext): $(srcdir)/config/$(LIB1ASMSRC) %.vis
445	$(gcc_compile) -DL$* -xassembler-with-cpp -c $< -include $*.vis
446$(patsubst %,%.vis,$(LIB1ASMFUNCS)): %.vis: %_s$(objext)
447	$(gen-hide-list)
448libgcc-objects += $(lib1asmfuncs-o)
449
450lib1asmfuncs-s-o = $(patsubst %,%_s$(objext),$(LIB1ASMFUNCS))
451$(lib1asmfuncs-s-o): %_s$(objext): $(srcdir)/config/$(LIB1ASMSRC)
452	$(gcc_s_compile) -DL$* -xassembler-with-cpp -c $<
453libgcc-s-objects += $(lib1asmfuncs-s-o)
454
455else
456
457lib1asmfuncs-o = $(patsubst %,%$(objext),$(LIB1ASMFUNCS))
458$(lib1asmfuncs-o): %$(objext): $(srcdir)/config/$(LIB1ASMSRC)
459	$(gcc_compile) -DL$* -xassembler-with-cpp -c $<
460libgcc-objects += $(lib1asmfuncs-o)
461
462endif
463
464# Build lib2funcs.  For the static library also include LIB2FUNCS_ST.
465lib2funcs-o = $(patsubst %,%$(objext),$(lib2funcs) $(LIB2FUNCS_ST))
466$(lib2funcs-o): %$(objext): $(srcdir)/libgcc2.c
467	$(gcc_compile) -DL$* -c $< $(vis_hide)
468libgcc-objects += $(lib2funcs-o)
469
470ifeq ($(enable_shared),yes)
471lib2funcs-s-o = $(patsubst %,%_s$(objext),$(lib2funcs))
472$(lib2funcs-s-o): %_s$(objext): $(srcdir)/libgcc2.c
473	$(gcc_s_compile) -DL$* -c $<
474libgcc-s-objects += $(lib2funcs-s-o)
475endif
476
477ifneq ($(LIB2_SIDITI_CONV_FUNCS),)
478# Build libgcc2.c for each conversion function, with a specific
479# L<func> definition and LIBGCC2_UNITS_PER_WORD setting.  The DImode
480# functions are built with a wordsize of 4; the TImode functions are
481# built with the same labels, but a wordsize of 8.
482
483sifuncs := $(filter-out $(LIB2FUNCS_EXCLUDE),$(subst XX,si,$(swfloatfuncs)))
484difuncs := $(filter-out $(LIB2FUNCS_EXCLUDE),$(subst XX,di,$(dwfloatfuncs)))
485tifuncs := $(filter-out $(LIB2FUNCS_EXCLUDE),$(subst XX,ti,$(dwfloatfuncs)))
486
487iter-items := $(sifuncs) $(difuncs) $(tifuncs)
488iter-labels := $(sifuncs) $(difuncs) $(difuncs)
489iter-sizes := $(patsubst %,4,$(sifuncs) $(difuncs)) $(patsubst %,8,$(tifuncs))
490
491include $(srcdir)/empty.mk $(patsubst %,$(srcdir)/siditi-object.mk,$(iter-items))
492
493libgcc-objects += $(patsubst %,%$(objext),$(sifuncs) $(difuncs) $(tifuncs))
494ifeq ($(enable_shared),yes)
495libgcc-s-objects += $(patsubst %,%_s$(objext),$(sifuncs) $(difuncs) $(tifuncs))
496endif
497endif
498
499# Build LIB2_DIVMOD_FUNCS.
500lib2-divmod-o = $(patsubst %,%$(objext),$(LIB2_DIVMOD_FUNCS))
501$(lib2-divmod-o): %$(objext): $(srcdir)/libgcc2.c
502	$(gcc_compile) -DL$* -c $< \
503	  -fexceptions -fnon-call-exceptions $(vis_hide)
504libgcc-objects += $(lib2-divmod-o)
505
506ifeq ($(enable_shared),yes)
507lib2-divmod-s-o = $(patsubst %,%_s$(objext),$(LIB2_DIVMOD_FUNCS))
508$(lib2-divmod-s-o): %_s$(objext): $(srcdir)/libgcc2.c
509	$(gcc_s_compile) -DL$* -c $< \
510	  -fexceptions -fnon-call-exceptions
511libgcc-s-objects += $(lib2-divmod-s-o)
512endif
513
514ifeq ($(TPBIT),)
515# _sf_to_tf and _df_to_tf require tp-bit.c being compiled in.
516FPBIT_FUNCS := $(filter-out _sf_to_tf,$(FPBIT_FUNCS))
517DPBIT_FUNCS := $(filter-out _df_to_tf,$(DPBIT_FUNCS))
518endif
519
520FPBIT_FUNCS := $(filter-out $(LIB2FUNCS_EXCLUDE),$(FPBIT_FUNCS))
521DPBIT_FUNCS := $(filter-out $(LIB2FUNCS_EXCLUDE),$(DPBIT_FUNCS))
522TPBIT_FUNCS := $(filter-out $(LIB2FUNCS_EXCLUDE),$(TPBIT_FUNCS))
523
524fpbit-src := $(srcdir)/fp-bit.c
525
526# Build FPBIT.
527ifneq ($(FPBIT),)
528fpbit-o = $(patsubst %,%$(objext),$(FPBIT_FUNCS))
529$(fpbit-o): %$(objext): $(fpbit-src)
530	$(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* -DFLOAT $(FPBIT_CFLAGS) -c $< $(vis_hide)
531libgcc-objects += $(fpbit-o)
532
533ifeq ($(enable_shared),yes)
534fpbit-s-o = $(patsubst %,%_s$(objext),$(FPBIT_FUNCS))
535$(fpbit-s-o): %_s$(objext): $(fpbit-src)
536	$(gcc_s_compile) -DFINE_GRAINED_LIBRARIES -DL$* -DFLOAT $(FPBIT_CFLAGS)  -c $<
537libgcc-s-objects += $(fpbit-s-o)
538endif
539endif
540
541# Build DPBIT.
542ifneq ($(DPBIT),)
543dpbit-o = $(patsubst %,%$(objext),$(DPBIT_FUNCS))
544$(dpbit-o): %$(objext): $(fpbit-src)
545	$(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* $(DPBIT_CFLAGS) -c $< $(vis_hide)
546libgcc-objects += $(dpbit-o)
547
548ifeq ($(enable_shared),yes)
549dpbit-s-o = $(patsubst %,%_s$(objext),$(DPBIT_FUNCS))
550$(dpbit-s-o): %_s$(objext): $(fpbit-src)
551	$(gcc_s_compile) -DFINE_GRAINED_LIBRARIES -DL$* $(DPBIT_CFLAGS) -c $<
552libgcc-s-objects += $(dpbit-s-o)
553endif
554endif
555
556# Build TPBIT.
557ifneq ($(TPBIT),)
558tpbit-o = $(patsubst %,%$(objext),$(TPBIT_FUNCS))
559$(tpbit-o): %$(objext): $(fpbit-src)
560	$(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* -DTFLOAT $(TPBIT_CFLAGS) -c $< $(vis_hide)
561libgcc-objects += $(tpbit-o)
562
563ifeq ($(enable_shared),yes)
564tpbit-s-o = $(patsubst %,%_s$(objext),$(TPBIT_FUNCS))
565$(tpbit-s-o): %_s$(objext): $(fpbit-src)
566	$(gcc_s_compile) -DFINE_GRAINED_LIBRARIES -DL$* -DTFLOAT $(TPBIT_CFLAGS) -c $<
567libgcc-s-objects += $(tpbit-s-o)
568endif
569endif
570
571# Build decimal floating point support.
572ifeq ($(decimal_float),yes)
573
574# If $DFP_ENABLE is set, then we want all data type sizes.
575ifneq ($(DFP_ENABLE),)
576D32PBIT = 1
577D64PBIT = 1
578D128PBIT = 1
579endif
580
581dfp-filenames =
582ifneq ($(D32PBIT)$(D64PBIT)$(D128PBIT),)
583ifeq ($(enable_decimal_float),bid)
584dfp-filenames += bid_decimal_globals bid_decimal_data \
585		 bid_binarydecimal bid_convert_data \
586		 _isinfd32 _isinfd64 _isinfd128 bid64_noncomp \
587		 bid128_noncomp bid128_fma bid_round bid_from_int \
588		 bid64_add bid128_add bid64_div bid128_div \
589		 bid64_mul bid128_mul bid64_compare bid128_compare \
590		 bid128 bid32_to_bid64 bid32_to_bid128 bid64_to_bid128 \
591		 bid64_to_int32 bid64_to_int64 \
592		 bid64_to_uint32 bid64_to_uint64 \
593		 bid128_to_int32 bid128_to_int64 \
594		 bid128_to_uint32 bid128_to_uint64
595else
596dfp-filenames += decContext decNumber decExcept decRound decLibrary decDouble decPacked decQuad decSingle
597endif
598endif
599
600dfp-objects = $(patsubst %,%$(objext),$(dfp-filenames))
601ifeq ($(enable_decimal_float),bid)
602$(dfp-objects): %$(objext): $(srcdir)/config/libbid/%.c
603else
604$(dfp-objects): %$(objext): $(srcdir)/../libdecnumber/%.c
605endif
606	$(gcc_compile) -c $<
607libgcc-objects += $(dfp-objects)
608
609decbits-filenames =
610ifneq ($(enable_decimal_float),bid)
611ifneq ($(D32PBIT),)
612decbits-filenames += decimal32
613endif
614
615ifneq ($(D64PBIT),)
616decbits-filenames += decimal64
617endif
618
619ifneq ($(D128PBIT),)
620decbits-filenames += decimal128
621endif
622endif
623
624decbits-objects = $(patsubst %,%$(objext),$(decbits-filenames))
625ifeq ($(enable_decimal_float),bid)
626$(decbits-objects): %$(objext): $(srcdir)/config/libbid/%.c
627else
628$(decbits-objects): %$(objext): $(srcdir)/../libdecnumber/$(enable_decimal_float)/%.c
629endif
630	$(gcc_compile) -c $<
631libgcc-objects += $(decbits-objects)
632
633# Next build individual support functions.
634D32PBIT_FUNCS = _addsub_sd _div_sd _mul_sd _plus_sd _minus_sd \
635	_eq_sd _ne_sd _lt_sd _gt_sd _le_sd _ge_sd \
636	_sd_to_si _sd_to_di _sd_to_usi _sd_to_udi \
637	_si_to_sd _di_to_sd _usi_to_sd _udi_to_sd \
638	_sd_to_sf _sd_to_df _sd_to_xf _sd_to_tf \
639	_sf_to_sd _df_to_sd _xf_to_sd _tf_to_sd \
640	_sd_to_dd _sd_to_td _unord_sd _conv_sd
641
642D64PBIT_FUNCS = _addsub_dd _div_dd _mul_dd _plus_dd _minus_dd \
643	_eq_dd _ne_dd _lt_dd _gt_dd _le_dd _ge_dd \
644	_dd_to_si _dd_to_di _dd_to_usi _dd_to_udi \
645	_si_to_dd _di_to_dd _usi_to_dd _udi_to_dd \
646	_dd_to_sf _dd_to_df _dd_to_xf _dd_to_tf \
647	_sf_to_dd _df_to_dd _xf_to_dd _tf_to_dd \
648	_dd_to_sd _dd_to_td _unord_dd _conv_dd
649
650D128PBIT_FUNCS = _addsub_td _div_td _mul_td _plus_td _minus_td \
651	_eq_td _ne_td _lt_td _gt_td _le_td _ge_td \
652	_td_to_si _td_to_di _td_to_usi _td_to_udi \
653	_si_to_td _di_to_td _usi_to_td _udi_to_td \
654	_td_to_sf _td_to_df _td_to_xf _td_to_tf \
655	_sf_to_td _df_to_td _xf_to_td _tf_to_td \
656	_td_to_sd _td_to_dd _unord_td _conv_td
657
658ifeq ($(enable_decimal_float),bid)
659ifneq ($(D32PBIT),)
660D32PBIT_FUNCS:=$(filter-out _plus_sd _minus_sd _conv_sd, $(D32PBIT_FUNCS))
661endif
662
663ifneq ($(D64PBIT),)
664D64PBIT_FUNCS:=$(filter-out _plus_dd _minus_dd _conv_dd, $(D64PBIT_FUNCS))
665endif
666
667ifneq ($(D128PBIT),)
668D128PBIT_FUNCS:=$(filter-out _plus_td _minus_td _conv_td, $(D128PBIT_FUNCS))
669endif
670endif
671
672ifneq ($(D32PBIT),)
673d32pbit-o = $(patsubst %,%$(objext),$(D32PBIT_FUNCS))
674ifeq ($(enable_decimal_float),bid)
675$(d32pbit-o): %$(objext): $(srcdir)/config/libbid/%.c
676else
677$(d32pbit-o): %$(objext): $(srcdir)/dfp-bit.c
678endif
679	$(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* -DWIDTH=32 -c $<
680libgcc-objects += $(d32pbit-o)
681endif
682
683ifneq ($(D64PBIT),)
684d64pbit-o = $(patsubst %,%$(objext),$(D64PBIT_FUNCS))
685ifeq ($(enable_decimal_float),bid)
686$(d64pbit-o): %$(objext): $(srcdir)/config/libbid/%.c
687else
688$(d64pbit-o): %$(objext): $(srcdir)/dfp-bit.c
689endif
690	$(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* -DWIDTH=64 -c $<
691libgcc-objects += $(d64pbit-o)
692endif
693
694ifneq ($(D128PBIT),)
695d128pbit-o = $(patsubst %,%$(objext),$(D128PBIT_FUNCS))
696ifeq ($(enable_decimal_float),bid)
697$(d128pbit-o): %$(objext): $(srcdir)/config/libbid/%.c
698else
699$(d128pbit-o): %$(objext): $(srcdir)/dfp-bit.c
700endif
701	$(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* -DWIDTH=128 -c $<
702libgcc-objects += $(d128pbit-o)
703endif
704
705endif
706
707ifeq ($(SYNC),yes)
708libgcc-sync-size-funcs := $(foreach op, add sub or and xor nand, \
709			    sync_fetch_and_$(op) \
710			    sync_$(op)_and_fetch) \
711			  sync_bool_compare_and_swap \
712			  sync_val_compare_and_swap \
713			  sync_lock_test_and_set
714
715libgcc-sync-size-funcs := $(foreach prefix, $(libgcc-sync-size-funcs), \
716			    $(foreach suffix, 1 2 4 8 16, \
717			      $(prefix)_$(suffix)))
718
719libgcc-sync-size-funcs-o = $(patsubst %,%$(objext),$(libgcc-sync-size-funcs))
720$(libgcc-sync-size-funcs-o): %$(objext): $(srcdir)/sync.c
721	$(gcc_compile) $(SYNC_CFLAGS) \
722	  -DFN=`echo "$*" | sed 's/_[^_]*$$//'` \
723	  -DSIZE=`echo "$*" | sed 's/.*_//'` \
724	  -c $< $(vis_hide)
725libgcc-objects += $(libgcc-sync-size-funcs-o)
726
727libgcc-sync-funcs := sync_synchronize
728
729libgcc-sync-funcs-o = $(patsubst %,%$(objext),$(libgcc-sync-funcs))
730$(libgcc-sync-funcs-o): %$(objext): $(srcdir)/sync.c
731	$(gcc_compile) $(SYNC_CFLAGS) \
732	  -DL$* \
733	  -c $< $(vis_hide)
734libgcc-objects += $(libgcc-sync-funcs-o)
735
736ifeq ($(enable_shared),yes)
737libgcc-sync-size-funcs-s-o = $(patsubst %,%_s$(objext), \
738			       $(libgcc-sync-size-funcs))
739$(libgcc-sync-size-funcs-s-o): %_s$(objext): $(srcdir)/sync.c
740	$(gcc_s_compile) $(SYNC_CFLAGS) \
741	  -DFN=`echo "$*" | sed 's/_[^_]*$$//'` \
742	  -DSIZE=`echo "$*" | sed 's/.*_//'` \
743	  -c $<
744libgcc-s-objects += $(libgcc-sync-size-funcs-s-o)
745
746libgcc-sync-funcs-s-o = $(patsubst %,%_s$(objext),$(libgcc-sync-funcs))
747$(libgcc-sync-funcs-s-o): %_s$(objext): $(srcdir)/sync.c
748	$(gcc_s_compile) $(SYNC_CFLAGS) \
749	  -DL$*	\
750	  -c $<
751libgcc-s-objects += $(libgcc-sync-funcs-s-o)
752endif
753endif
754
755# Build fixed-point support.
756ifeq ($(fixed_point),yes)
757
758# Generate permutations of function name and mode
759fixed-labels := $(shell $(SHELL) $(srcdir)/gen-fixed.sh arith labels)
760fixed-funcs := $(shell $(SHELL) $(srcdir)/gen-fixed.sh arith funcs)
761fixed-modes := $(shell $(SHELL) $(srcdir)/gen-fixed.sh arith modes)
762
763# Generate the rules for each arithmetic function
764iter-items := $(fixed-funcs)
765iter-labels := $(fixed-labels)
766iter-from := $(fixed-modes)
767iter-to := $(fixed-modes)
768include $(srcdir)/empty.mk $(patsubst %,$(srcdir)/fixed-obj.mk,$(iter-items))
769
770# Add arithmetic functions to list of objects to be built
771libgcc-objects += $(patsubst %,%$(objext),$(fixed-funcs))
772ifeq ($(enable_shared),yes)
773libgcc-s-objects += $(patsubst %,%_s$(objext),$(fixed-funcs))
774endif
775
776# Convert from or to fractional
777fixed-conv-funcs := $(shell $(SHELL) $(srcdir)/gen-fixed.sh conv funcs)
778fixed-conv-labels := $(shell $(SHELL) $(srcdir)/gen-fixed.sh conv labels)
779fixed-conv-from := $(shell $(SHELL) $(srcdir)/gen-fixed.sh conv from)
780fixed-conv-to :=  $(shell $(SHELL) $(srcdir)/gen-fixed.sh conv to)
781
782# Generate the make rules for each conversion function
783iter-items := $(fixed-conv-funcs)
784iter-labels := $(fixed-conv-labels)
785iter-from := $(fixed-conv-from)
786iter-to := $(fixed-conv-to)
787include $(srcdir)/empty.mk $(patsubst %,$(srcdir)/fixed-obj.mk,$(iter-items))
788
789# Add conversion functions to list of objects to be built
790libgcc-objects += $(patsubst %,%$(objext),$(fixed-conv-funcs))
791ifeq ($(enable_shared),yes)
792libgcc-s-objects += $(patsubst %,%_s$(objext),$(fixed-conv-funcs))
793endif
794
795endif
796
797# Build LIB2ADD and LIB2ADD_ST.
798ifneq ($(filter-out %.c %.S %.asm,$(LIB2ADD) $(LIB2ADD_ST)),)
799$(error Unsupported files in LIB2ADD or LIB2ADD_ST.)
800endif
801
802libgcc-objects += $(addsuffix $(objext),$(basename $(notdir $(LIB2ADD))))
803libgcc-objects += $(addsuffix $(objext),$(basename $(notdir $(LIB2ADD_ST))))
804
805c_flags :=
806iter-items := $(LIB2ADD) $(LIB2ADD_ST)
807include $(iterator)
808
809ifeq ($(enable_shared),yes)
810libgcc-s-objects += $(addsuffix _s$(objext),$(basename $(notdir $(LIB2ADD))))
811endif
812
813# Build LIB2ADDEH, LIB2ADDEHSTATIC, and LIB2ADDEHSHARED.  If we don't have
814# libgcc_eh.a, only LIB2ADDEH matters.  If we do, only LIB2ADDEHSTATIC and
815# LIB2ADDEHSHARED matter.  (Usually all three are identical.)
816
817c_flags := -fexceptions
818
819ifeq ($(enable_shared),yes)
820
821libgcc-eh-objects += $(addsuffix $(objext),$(basename $(notdir $(LIB2ADDEHSTATIC))))
822libgcc-s-objects += $(addsuffix _s$(objext),$(basename $(notdir $(LIB2ADDEHSHARED))))
823
824iter-items := $(sort $(LIB2ADDEHSTATIC) $(LIB2ADDEHSHARED))
825include $(iterator)
826
827else
828# Not shared.  LIB2ADDEH are added to libgcc.a.
829
830libgcc-objects += $(addsuffix $(objext),$(basename $(notdir $(LIB2ADDEH))))
831
832iter-items := $(LIB2ADDEH)
833include $(iterator)
834
835endif
836
837# Build LIBUNWIND. Use -fno-exceptions so that the unwind library does
838# not generate calls to __gcc_personality_v0.
839
840c_flags := -fno-exceptions
841
842libunwind-objects += $(addsuffix $(objext),$(basename $(notdir $(LIBUNWIND))))
843
844ifeq ($(enable_shared),yes)
845libunwind-s-objects += $(addsuffix _s$(objext),$(basename $(notdir $(LIBUNWIND))))
846endif
847
848iter-items := $(LIBUNWIND)
849include $(iterator)
850
851# Build libgcov components.
852
853# Defined in libgcov.c, included only in gcov library
854LIBGCOV = _gcov _gcov_merge_add _gcov_merge_single _gcov_merge_delta \
855    _gcov_fork _gcov_execl _gcov_execlp _gcov_execle \
856    _gcov_execv _gcov_execvp _gcov_execve \
857    _gcov_interval_profiler _gcov_pow2_profiler _gcov_one_value_profiler \
858    _gcov_indirect_call_profiler _gcov_average_profiler _gcov_ior_profiler \
859    _gcov_merge_ior
860
861libgcov-objects = $(patsubst %,%$(objext),$(LIBGCOV))
862
863$(libgcov-objects): %$(objext): $(srcdir)/libgcov.c
864	$(gcc_compile) -DL$* -c $(srcdir)/libgcov.c
865
866
867# Static libraries.
868libgcc.a: $(libgcc-objects)
869libgcov.a: $(libgcov-objects)
870libunwind.a: $(libunwind-objects)
871libgcc_eh.a: $(libgcc-eh-objects)
872
873libgcc.a libgcov.a libunwind.a libgcc_eh.a:
874	-rm -f $@
875
876	objects="$(objects)";					\
877	if test -z "$$objects"; then				\
878	  echo 'int __libgcc_eh_dummy;' > eh_dummy.c;		\
879	  $(gcc_compile_bare) $(vis_hide) -c eh_dummy.c		\
880	     -o eh_dummy$(objext);				\
881	  objects=eh_dummy$(objext);				\
882	fi;							\
883	$(AR_CREATE_FOR_TARGET) $@ $$objects
884
885	$(RANLIB) $@
886
887all: libgcc.a libgcov.a
888
889ifneq ($(LIBUNWIND),)
890all: libunwind.a
891libgcc_s$(SHLIB_EXT): libunwind$(SHLIB_EXT)
892endif
893
894ifeq ($(enable_shared),yes)
895all: libgcc_eh.a libgcc_s$(SHLIB_EXT)
896ifneq ($(LIBUNWIND),)
897all: libunwind$(SHLIB_EXT)
898endif
899endif
900
901ifeq ($(enable_shared),yes)
902
903# Map-file generation.
904ifneq ($(SHLIB_MKMAP),)
905libgcc.map: $(SHLIB_MKMAP) $(SHLIB_MAPFILES) $(libgcc-s-objects)
906	{ $(NM) $(SHLIB_NM_FLAGS) $(libgcc-s-objects); echo %%; \
907	  cat $(SHLIB_MAPFILES) \
908	    | sed -e '/^[ 	]*#/d' \
909		  -e 's/^%\(if\|else\|elif\|endif\|define\)/#\1/' \
910	    | $(gcc_compile_bare) -E -xassembler-with-cpp -; \
911	} | $(AWK) -f $(SHLIB_MKMAP) $(SHLIB_MKMAP_OPTS) > tmp-$@
912	mv tmp-$@ $@
913libgcc_s$(SHLIB_EXT): libgcc.map
914mapfile = libgcc.map
915endif
916
917libgcc-std.ver: $(srcdir)/libgcc-std.ver.in
918	sed -e 's/__PFX__/$(LIBGCC_VER_GNU_PREFIX)/g' \
919	    -e 's/__FIXPTPFX__/$(LIBGCC_VER_FIXEDPOINT_GNU_PREFIX)/g' < $< > $@
920
921libgcc_s$(SHLIB_EXT): $(libgcc-s-objects) $(extra-parts) libgcc.a
922	# @multilib_flags@ is still needed because this may use
923	# $(GCC_FOR_TARGET) and $(LIBGCC2_CFLAGS) directly.
924	# @multilib_dir@ is not really necessary, but sometimes it has
925	# more uses than just a directory name.
926	$(mkinstalldirs) $(MULTIDIR)
927	$(subst @multilib_flags@,$(CFLAGS) -B./,$(subst \
928		@multilib_dir@,$(MULTIDIR),$(subst \
929		@shlib_objs@,$(objects) libgcc.a,$(subst \
930		@shlib_base_name@,libgcc_s,$(subst \
931		@shlib_map_file@,$(mapfile),$(subst \
932		@shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(subst \
933		@shlib_slibdir@,$(shlib_slibdir),$(SHLIB_LINK))))))))
934
935libunwind$(SHLIB_EXT): $(libunwind-s-objects) $(extra-parts)
936	# @multilib_flags@ is still needed because this may use
937	# $(GCC_FOR_TARGET) and $(LIBGCC2_CFLAGS) directly.
938	# @multilib_dir@ is not really necessary, but sometimes it has
939	# more uses than just a directory name.
940	$(mkinstalldirs) $(MULTIDIR)
941	$(subst @multilib_flags@,$(CFLAGS) -B./,$(subst \
942		@multilib_dir@,$(MULTIDIR),$(subst \
943		@shlib_objs@,$(objects),$(subst \
944		@shlib_base_name@,libunwind,$(subst \
945		@shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(SHLIBUNWIND_LINK))))))
946
947endif
948
949# Build the standard GCC startfiles and endfiles.
950ALL_CRT_CFLAGS = $(CFLAGS) $(CRTSTUFF_CFLAGS) $(INCLUDES)
951crt_compile = $(CC) $(ALL_CRT_CFLAGS) -o $@ $(compile_deps)
952
953ifeq ($(CUSTOM_CRTSTUFF),)
954# Compile two additional files that are linked with every program
955# linked using GCC on systems using COFF or ELF, for the sake of C++
956# constructors.
957crtbegin$(objext): $(srcdir)/crtstuff.c
958	$(crt_compile) $(CRTSTUFF_T_CFLAGS) -c $< -DCRT_BEGIN
959
960crtend$(objext): $(srcdir)/crtstuff.c
961	$(crt_compile) $(CRTSTUFF_T_CFLAGS) -c $< -DCRT_END
962
963# These are versions of crtbegin and crtend for shared libraries.
964crtbeginS$(objext): $(srcdir)/crtstuff.c
965	$(crt_compile) $(CRTSTUFF_T_CFLAGS_S) -c $< -DCRT_BEGIN -DCRTSTUFFS_O
966
967crtendS$(objext): $(srcdir)/crtstuff.c
968	$(crt_compile) $(CRTSTUFF_T_CFLAGS_S) -c $< -DCRT_END -DCRTSTUFFS_O
969
970# This is a version of crtbegin for -static links.
971crtbeginT$(objext): $(srcdir)/crtstuff.c
972	$(crt_compile) $(CRTSTUFF_T_CFLAGS) -c $< -DCRT_BEGIN -DCRTSTUFFT_O
973endif
974
975ifeq ($(CUSTOM_CRTIN),)
976# -x assembler-with-cpp is only needed on case-insensitive filesystem.
977crti$(objext): $(srcdir)/config/$(cpu_type)/crti.S
978	$(crt_compile) -c -x assembler-with-cpp $<
979
980crtn$(objext): $(srcdir)/config/$(cpu_type)/crtn.S
981	$(crt_compile) -c -x assembler-with-cpp $<
982endif
983
984# Build extra startfiles in the libgcc directory.
985.PHONY: libgcc-extra-parts
986libgcc-extra-parts: $(EXTRA_PARTS)
987
988	# Early copyback; see "all" above for the rationale.  The
989	# early copy is necessary so that the gcc -B options find
990	# the right startup files when linking shared libgcc.
991	$(mkinstalldirs) $(gcc_objdir)$(MULTISUBDIR)
992	parts="$(EXTRA_PARTS)";					\
993	for file in $$parts; do					\
994	  rm -f $(gcc_objdir)$(MULTISUBDIR)/$$file;		\
995	  $(INSTALL_DATA) $$file $(gcc_objdir)$(MULTISUBDIR)/;	\
996	  case $$file in 					\
997	    *.a)						\
998	      $(RANLIB) $(gcc_objdir)$(MULTISUBDIR)/$$file ;;	\
999	  esac;							\
1000	done
1001
1002all: $(extra-parts)
1003
1004$(libgcc-objects) $(libgcc-s-objects) $(libgcc-eh-objects) \
1005	$(libgcov-objects) \
1006	$(libunwind-objects) $(libunwind-s-objects) \
1007	$(EXTRA_PARTS): libgcc_tm.h
1008
1009# Copy unwind.h to the place where gcc will look for it at build-time
1010install-unwind_h-forbuild:
1011	dest=$(gcc_objdir)/include/tmp$$$$-unwind.h; \
1012	cp unwind.h $$dest; \
1013	chmod a+r $$dest; \
1014	sh $(srcdir)/../move-if-change $$dest $(gcc_objdir)/include/unwind.h
1015
1016# Copy unwind.h to the place where gcc will look at run-time, once installed
1017#
1018# This is redundant with the internal copy above when using a regular toplevel
1019# "install" target, because gcc's install will copy to the destination as well.
1020#
1021# This is however useful for "install-no-fixincludes" case, when only the gcc
1022# internal headers are copied by gcc's install.
1023install-unwind_h:
1024	$(mkinstalldirs) $(DESTDIR)$(libsubdir)/include
1025	$(INSTALL_DATA) unwind.h $(DESTDIR)$(libsubdir)/include
1026
1027all: install-unwind_h-forbuild
1028
1029# Documentation targets (empty).
1030.PHONY: info html dvi pdf install-info install-html install-pdf
1031
1032info:
1033install-info:
1034html:
1035install-html:
1036dvi:
1037pdf:
1038install-pdf:
1039
1040# Install rules.  These do not depend on "all", so that they can be invoked
1041# recursively from it.
1042install-libunwind:
1043	$(mkinstalldirs) $(DESTDIR)$(inst_slibdir)
1044
1045	# NOTE: Maybe this should go into $(inst_libdir), but this
1046	# is where the old mklibgcc.in put it.
1047	$(INSTALL_DATA) libunwind.a $(DESTDIR)$(inst_slibdir)/
1048	chmod 644 $(DESTDIR)$(inst_slibdir)/libunwind.a
1049	$(RANLIB) $(DESTDIR)$(inst_slibdir)/libunwind.a
1050
1051	$(subst @multilib_dir@,$(MULTIDIR),$(subst \
1052		@shlib_base_name@,libunwind,$(subst \
1053		@shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(SHLIBUNWIND_INSTALL))))
1054
1055install-shared:
1056	$(mkinstalldirs) $(DESTDIR)$(inst_libdir)
1057
1058	$(INSTALL_DATA) libgcc_eh.a $(DESTDIR)$(inst_libdir)/
1059	chmod 644 $(DESTDIR)$(inst_libdir)/libgcc_eh.a
1060	$(RANLIB) $(DESTDIR)$(inst_libdir)/libgcc_eh.a
1061
1062	$(subst @multilib_dir@,$(MULTIDIR),$(subst \
1063		@shlib_base_name@,libgcc_s,$(subst \
1064		@shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(SHLIB_INSTALL))))
1065
1066install-leaf: $(install-shared) $(install-libunwind)
1067	$(mkinstalldirs) $(DESTDIR)$(inst_libdir)
1068
1069	$(INSTALL_DATA) libgcc.a $(DESTDIR)$(inst_libdir)/
1070	chmod 644 $(DESTDIR)$(inst_libdir)/libgcc.a
1071	$(RANLIB) $(DESTDIR)$(inst_libdir)/libgcc.a
1072	$(INSTALL_DATA) libgcov.a $(DESTDIR)$(inst_libdir)/
1073	chmod 644 $(DESTDIR)$(inst_libdir)/libgcov.a
1074	$(RANLIB) $(DESTDIR)$(inst_libdir)/libgcov.a
1075
1076	parts="$(INSTALL_PARTS)";				\
1077	for file in $$parts; do					\
1078	  rm -f $(DESTDIR)$(inst_libdir)/$$file;		\
1079	  $(INSTALL_DATA) $$file $(DESTDIR)$(inst_libdir)/;	\
1080	  case $$file in 					\
1081	    *.a)						\
1082	      $(RANLIB) $(gcc_objdir)$(MULTISUBDIR)/$$file ;;	\
1083	  esac;							\
1084	done
1085
1086install: install-leaf install-unwind_h
1087	@: $(MAKE) ; $(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=install
1088
1089install-strip: install
1090
1091.PHONY: install install-shared install-libunwind install-strip
1092.PHONY: install-unwind_h install-unwind_h-forbuild
1093
1094# Don't export variables to the environment, in order to not confuse
1095# configure.
1096.NOEXPORT:
1097
1098include $(srcdir)/empty.mk $(wildcard *.dep)
1099