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