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 374# For -fvisibility=hidden. We need both a -fvisibility=hidden on 375# the command line, and a #define to prevent libgcc2.h etc from 376# overriding that with #pragmas. 377vis_hide = @vis_hide@ 378 379ifneq (,$(vis_hide)) 380 381# If we have -fvisibility=hidden, then we need to generate hide 382# lists for object files implemented in assembly. 383ASM_HIDDEN_OP = @asm_hidden_op@ 384 385define gen-hide-list 386$(NM) -pg $< | \ 387 $(AWK) 'NF == 3 && $$2 !~ /^[UN]$$/ && $$3 !~ /.*_compat/ \ 388 && $$3 !~ /.*@.*/ \ 389 { print "\t$(ASM_HIDDEN_OP)", $$3 }' > $@T 390mv -f $@T $@ 391endef 392else 393gen-hide-list = echo > $@ 394endif 395 396ifneq ($(enable_shared),yes) 397iterator = $(srcdir)/empty.mk $(patsubst %,$(srcdir)/static-object.mk,$(iter-items)) 398endif 399 400LIB2ADD += enable-execute-stack.c 401 402# While emutls.c has nothing to do with EH, it is in LIB2ADDEH* 403# instead of LIB2ADD because that's the way to be sure on some targets 404# (e.g. *-*-darwin*) only one copy of it is linked. 405LIB2ADDEH += $(srcdir)/emutls.c 406LIB2ADDEHSTATIC += $(srcdir)/emutls.c 407LIB2ADDEHSHARED += $(srcdir)/emutls.c 408 409# Library members defined in libgcc2.c. 410lib2funcs = _muldi3 _negdi2 _lshrdi3 _ashldi3 _ashrdi3 _cmpdi2 _ucmpdi2 \ 411 _clear_cache _trampoline __main _absvsi2 \ 412 _absvdi2 _addvsi3 _addvdi3 _subvsi3 _subvdi3 _mulvsi3 _mulvdi3 \ 413 _negvsi2 _negvdi2 _ctors _ffssi2 _ffsdi2 _clz _clzsi2 _clzdi2 \ 414 _ctzsi2 _ctzdi2 _popcount_tab _popcountsi2 _popcountdi2 \ 415 _paritysi2 _paritydi2 _powisf2 _powidf2 _powixf2 _powitf2 \ 416 _mulsc3 _muldc3 _mulxc3 _multc3 _divsc3 _divdc3 _divxc3 \ 417 _divtc3 _bswapsi2 _bswapdi2 _clrsbsi2 _clrsbdi2 418 419# The floating-point conversion routines that involve a single-word integer. 420# XX stands for the integer mode. 421swfloatfuncs = $(patsubst %,_fixuns%XX,sf df xf) 422 423# Likewise double-word routines. 424dwfloatfuncs = $(patsubst %,_fix%XX,sf df xf tf) \ 425 $(patsubst %,_fixuns%XX,sf df xf tf) \ 426 $(patsubst %,_floatXX%,sf df xf tf) \ 427 $(patsubst %,_floatunXX%,sf df xf tf) 428 429ifeq ($(LIB2_SIDITI_CONV_FUNCS),) 430 lib2funcs += $(subst XX,si,$(swfloatfuncs)) 431 lib2funcs += $(subst XX,di,$(dwfloatfuncs)) 432endif 433 434# These might cause a divide overflow trap and so are compiled with 435# unwinder info. 436LIB2_DIVMOD_FUNCS = _divdi3 _moddi3 _udivdi3 _umoddi3 _udiv_w_sdiv _udivmoddi4 437 438# Remove any objects from lib2funcs and LIB2_DIVMOD_FUNCS that are 439# defined as optimized assembly code in LIB1ASMFUNCS or as C code 440# in LIB2FUNCS_EXCLUDE. 441lib2funcs := $(filter-out $(LIB2FUNCS_EXCLUDE) $(LIB1ASMFUNCS),$(lib2funcs)) 442LIB2_DIVMOD_FUNCS := $(filter-out $(LIB2FUNCS_EXCLUDE) $(LIB1ASMFUNCS), \ 443 $(LIB2_DIVMOD_FUNCS)) 444 445# Build "libgcc1" (assembly) components. 446 447lib1asmfuncs-o = $(patsubst %,%$(objext),$(LIB1ASMFUNCS)) 448$(lib1asmfuncs-o): %$(objext): $(srcdir)/config/$(LIB1ASMSRC) %.vis 449 $(gcc_compile) -DL$* -xassembler-with-cpp -c $< -include $*.vis 450$(patsubst %,%.vis,$(LIB1ASMFUNCS)): %.vis: %_s$(objext) 451 $(gen-hide-list) 452libgcc-objects += $(lib1asmfuncs-o) 453 454lib1asmfuncs-s-o = $(patsubst %,%_s$(objext),$(LIB1ASMFUNCS)) 455$(lib1asmfuncs-s-o): %_s$(objext): $(srcdir)/config/$(LIB1ASMSRC) 456 $(gcc_s_compile) -DL$* -xassembler-with-cpp -c $< 457ifeq ($(enable_shared),yes) 458 459libgcc-s-objects += $(lib1asmfuncs-s-o) 460 461endif 462 463# Build lib2funcs. For the static library also include LIB2FUNCS_ST. 464lib2funcs-o = $(patsubst %,%$(objext),$(lib2funcs) $(LIB2FUNCS_ST)) 465$(lib2funcs-o): %$(objext): $(srcdir)/libgcc2.c 466 $(gcc_compile) -DL$* -c $< $(vis_hide) 467libgcc-objects += $(lib2funcs-o) 468 469ifeq ($(enable_shared),yes) 470lib2funcs-s-o = $(patsubst %,%_s$(objext),$(lib2funcs)) 471$(lib2funcs-s-o): %_s$(objext): $(srcdir)/libgcc2.c 472 $(gcc_s_compile) -DL$* -c $< 473libgcc-s-objects += $(lib2funcs-s-o) 474endif 475 476ifneq ($(LIB2_SIDITI_CONV_FUNCS),) 477# Build libgcc2.c for each conversion function, with a specific 478# L<func> definition and LIBGCC2_UNITS_PER_WORD setting. The DImode 479# functions are built with a wordsize of 4; the TImode functions are 480# built with the same labels, but a wordsize of 8. 481 482sifuncs := $(filter-out $(LIB2FUNCS_EXCLUDE),$(subst XX,si,$(swfloatfuncs))) 483difuncs := $(filter-out $(LIB2FUNCS_EXCLUDE),$(subst XX,di,$(dwfloatfuncs))) 484tifuncs := $(filter-out $(LIB2FUNCS_EXCLUDE),$(subst XX,ti,$(dwfloatfuncs))) 485 486iter-items := $(sifuncs) $(difuncs) $(tifuncs) 487iter-labels := $(sifuncs) $(difuncs) $(difuncs) 488iter-sizes := $(patsubst %,4,$(sifuncs) $(difuncs)) $(patsubst %,8,$(tifuncs)) 489 490include $(srcdir)/empty.mk $(patsubst %,$(srcdir)/siditi-object.mk,$(iter-items)) 491 492libgcc-objects += $(patsubst %,%$(objext),$(sifuncs) $(difuncs) $(tifuncs)) 493ifeq ($(enable_shared),yes) 494libgcc-s-objects += $(patsubst %,%_s$(objext),$(sifuncs) $(difuncs) $(tifuncs)) 495endif 496endif 497 498ifeq ($(LIB2_DIVMOD_EXCEPTION_FLAGS),) 499# Provide default flags for compiling divmod functions, if they haven't been 500# set already by a target-specific Makefile fragment. 501LIB2_DIVMOD_EXCEPTION_FLAGS := -fexceptions -fnon-call-exceptions 502endif 503 504# Build LIB2_DIVMOD_FUNCS. 505lib2-divmod-o = $(patsubst %,%$(objext),$(LIB2_DIVMOD_FUNCS)) 506$(lib2-divmod-o): %$(objext): $(srcdir)/libgcc2.c 507 $(gcc_compile) -DL$* -c $< \ 508 $(LIB2_DIVMOD_EXCEPTION_FLAGS) $(vis_hide) 509libgcc-objects += $(lib2-divmod-o) 510 511ifeq ($(enable_shared),yes) 512lib2-divmod-s-o = $(patsubst %,%_s$(objext),$(LIB2_DIVMOD_FUNCS)) 513$(lib2-divmod-s-o): %_s$(objext): $(srcdir)/libgcc2.c 514 $(gcc_s_compile) -DL$* -c $< \ 515 $(LIB2_DIVMOD_EXCEPTION_FLAGS) 516libgcc-s-objects += $(lib2-divmod-s-o) 517endif 518 519ifeq ($(TPBIT),) 520# _sf_to_tf and _df_to_tf require tp-bit.c being compiled in. 521FPBIT_FUNCS := $(filter-out _sf_to_tf,$(FPBIT_FUNCS)) 522DPBIT_FUNCS := $(filter-out _df_to_tf,$(DPBIT_FUNCS)) 523endif 524 525FPBIT_FUNCS := $(filter-out $(LIB2FUNCS_EXCLUDE),$(FPBIT_FUNCS)) 526DPBIT_FUNCS := $(filter-out $(LIB2FUNCS_EXCLUDE),$(DPBIT_FUNCS)) 527TPBIT_FUNCS := $(filter-out $(LIB2FUNCS_EXCLUDE),$(TPBIT_FUNCS)) 528 529fpbit-src := $(srcdir)/fp-bit.c 530 531# Build FPBIT. 532ifneq ($(FPBIT),) 533fpbit-o = $(patsubst %,%$(objext),$(FPBIT_FUNCS)) 534$(fpbit-o): %$(objext): $(fpbit-src) 535 $(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* -DFLOAT $(FPBIT_CFLAGS) -c $< $(vis_hide) 536libgcc-objects += $(fpbit-o) 537 538ifeq ($(enable_shared),yes) 539fpbit-s-o = $(patsubst %,%_s$(objext),$(FPBIT_FUNCS)) 540$(fpbit-s-o): %_s$(objext): $(fpbit-src) 541 $(gcc_s_compile) -DFINE_GRAINED_LIBRARIES -DL$* -DFLOAT $(FPBIT_CFLAGS) -c $< 542libgcc-s-objects += $(fpbit-s-o) 543endif 544endif 545 546# Build DPBIT. 547ifneq ($(DPBIT),) 548dpbit-o = $(patsubst %,%$(objext),$(DPBIT_FUNCS)) 549$(dpbit-o): %$(objext): $(fpbit-src) 550 $(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* $(DPBIT_CFLAGS) -c $< $(vis_hide) 551libgcc-objects += $(dpbit-o) 552 553ifeq ($(enable_shared),yes) 554dpbit-s-o = $(patsubst %,%_s$(objext),$(DPBIT_FUNCS)) 555$(dpbit-s-o): %_s$(objext): $(fpbit-src) 556 $(gcc_s_compile) -DFINE_GRAINED_LIBRARIES -DL$* $(DPBIT_CFLAGS) -c $< 557libgcc-s-objects += $(dpbit-s-o) 558endif 559endif 560 561# Build TPBIT. 562ifneq ($(TPBIT),) 563tpbit-o = $(patsubst %,%$(objext),$(TPBIT_FUNCS)) 564$(tpbit-o): %$(objext): $(fpbit-src) 565 $(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* -DTFLOAT $(TPBIT_CFLAGS) -c $< $(vis_hide) 566libgcc-objects += $(tpbit-o) 567 568ifeq ($(enable_shared),yes) 569tpbit-s-o = $(patsubst %,%_s$(objext),$(TPBIT_FUNCS)) 570$(tpbit-s-o): %_s$(objext): $(fpbit-src) 571 $(gcc_s_compile) -DFINE_GRAINED_LIBRARIES -DL$* -DTFLOAT $(TPBIT_CFLAGS) -c $< 572libgcc-s-objects += $(tpbit-s-o) 573endif 574endif 575 576# Build decimal floating point support. 577ifeq ($(decimal_float),yes) 578 579# If $DFP_ENABLE is set, then we want all data type sizes. 580ifneq ($(DFP_ENABLE),) 581D32PBIT = 1 582D64PBIT = 1 583D128PBIT = 1 584endif 585 586dfp-filenames = 587ifneq ($(D32PBIT)$(D64PBIT)$(D128PBIT),) 588ifeq ($(enable_decimal_float),bid) 589dfp-filenames += bid_decimal_globals bid_decimal_data \ 590 bid_binarydecimal bid_convert_data \ 591 _isinfd32 _isinfd64 _isinfd128 bid64_noncomp \ 592 bid128_noncomp bid128_fma bid_round bid_from_int \ 593 bid64_add bid128_add bid64_div bid128_div \ 594 bid64_mul bid128_mul bid64_compare bid128_compare \ 595 bid128 bid32_to_bid64 bid32_to_bid128 bid64_to_bid128 \ 596 bid64_to_int32 bid64_to_int64 \ 597 bid64_to_uint32 bid64_to_uint64 \ 598 bid128_to_int32 bid128_to_int64 \ 599 bid128_to_uint32 bid128_to_uint64 600else 601dfp-filenames += decContext decNumber decExcept decRound decLibrary decDouble decPacked decQuad decSingle 602endif 603endif 604 605dfp-objects = $(patsubst %,%$(objext),$(dfp-filenames)) 606ifeq ($(enable_decimal_float),bid) 607$(dfp-objects): %$(objext): $(srcdir)/config/libbid/%.c 608else 609$(dfp-objects): %$(objext): $(srcdir)/../libdecnumber/%.c 610endif 611 $(gcc_compile) -c $< 612libgcc-objects += $(dfp-objects) 613 614decbits-filenames = 615ifneq ($(enable_decimal_float),bid) 616ifneq ($(D32PBIT),) 617decbits-filenames += decimal32 618endif 619 620ifneq ($(D64PBIT),) 621decbits-filenames += decimal64 622endif 623 624ifneq ($(D128PBIT),) 625decbits-filenames += decimal128 626endif 627endif 628 629decbits-objects = $(patsubst %,%$(objext),$(decbits-filenames)) 630ifeq ($(enable_decimal_float),bid) 631$(decbits-objects): %$(objext): $(srcdir)/config/libbid/%.c 632else 633$(decbits-objects): %$(objext): $(srcdir)/../libdecnumber/$(enable_decimal_float)/%.c 634endif 635 $(gcc_compile) -c $< 636libgcc-objects += $(decbits-objects) 637 638# Next build individual support functions. 639D32PBIT_FUNCS = _addsub_sd _div_sd _mul_sd _plus_sd _minus_sd \ 640 _eq_sd _ne_sd _lt_sd _gt_sd _le_sd _ge_sd \ 641 _sd_to_si _sd_to_di _sd_to_usi _sd_to_udi \ 642 _si_to_sd _di_to_sd _usi_to_sd _udi_to_sd \ 643 _sd_to_sf _sd_to_df _sd_to_xf _sd_to_tf \ 644 _sf_to_sd _df_to_sd _xf_to_sd _tf_to_sd \ 645 _sd_to_dd _sd_to_td _unord_sd _conv_sd 646 647D64PBIT_FUNCS = _addsub_dd _div_dd _mul_dd _plus_dd _minus_dd \ 648 _eq_dd _ne_dd _lt_dd _gt_dd _le_dd _ge_dd \ 649 _dd_to_si _dd_to_di _dd_to_usi _dd_to_udi \ 650 _si_to_dd _di_to_dd _usi_to_dd _udi_to_dd \ 651 _dd_to_sf _dd_to_df _dd_to_xf _dd_to_tf \ 652 _sf_to_dd _df_to_dd _xf_to_dd _tf_to_dd \ 653 _dd_to_sd _dd_to_td _unord_dd _conv_dd 654 655D128PBIT_FUNCS = _addsub_td _div_td _mul_td _plus_td _minus_td \ 656 _eq_td _ne_td _lt_td _gt_td _le_td _ge_td \ 657 _td_to_si _td_to_di _td_to_usi _td_to_udi \ 658 _si_to_td _di_to_td _usi_to_td _udi_to_td \ 659 _td_to_sf _td_to_df _td_to_xf _td_to_tf \ 660 _sf_to_td _df_to_td _xf_to_td _tf_to_td \ 661 _td_to_sd _td_to_dd _unord_td _conv_td 662 663ifeq ($(enable_decimal_float),bid) 664ifneq ($(D32PBIT),) 665D32PBIT_FUNCS:=$(filter-out _plus_sd _minus_sd _conv_sd, $(D32PBIT_FUNCS)) 666endif 667 668ifneq ($(D64PBIT),) 669D64PBIT_FUNCS:=$(filter-out _plus_dd _minus_dd _conv_dd, $(D64PBIT_FUNCS)) 670endif 671 672ifneq ($(D128PBIT),) 673D128PBIT_FUNCS:=$(filter-out _plus_td _minus_td _conv_td, $(D128PBIT_FUNCS)) 674endif 675endif 676 677ifneq ($(D32PBIT),) 678d32pbit-o = $(patsubst %,%$(objext),$(D32PBIT_FUNCS)) 679ifeq ($(enable_decimal_float),bid) 680$(d32pbit-o): %$(objext): $(srcdir)/config/libbid/%.c 681else 682$(d32pbit-o): %$(objext): $(srcdir)/dfp-bit.c 683endif 684 $(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* -DWIDTH=32 -c $< 685libgcc-objects += $(d32pbit-o) 686endif 687 688ifneq ($(D64PBIT),) 689d64pbit-o = $(patsubst %,%$(objext),$(D64PBIT_FUNCS)) 690ifeq ($(enable_decimal_float),bid) 691$(d64pbit-o): %$(objext): $(srcdir)/config/libbid/%.c 692else 693$(d64pbit-o): %$(objext): $(srcdir)/dfp-bit.c 694endif 695 $(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* -DWIDTH=64 -c $< 696libgcc-objects += $(d64pbit-o) 697endif 698 699ifneq ($(D128PBIT),) 700d128pbit-o = $(patsubst %,%$(objext),$(D128PBIT_FUNCS)) 701ifeq ($(enable_decimal_float),bid) 702$(d128pbit-o): %$(objext): $(srcdir)/config/libbid/%.c 703else 704$(d128pbit-o): %$(objext): $(srcdir)/dfp-bit.c 705endif 706 $(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* -DWIDTH=128 -c $< 707libgcc-objects += $(d128pbit-o) 708endif 709 710endif 711 712ifeq ($(SYNC),yes) 713libgcc-sync-size-funcs := $(foreach op, add sub or and xor nand, \ 714 sync_fetch_and_$(op) \ 715 sync_$(op)_and_fetch) \ 716 sync_bool_compare_and_swap \ 717 sync_val_compare_and_swap \ 718 sync_lock_test_and_set 719 720libgcc-sync-size-funcs := $(foreach prefix, $(libgcc-sync-size-funcs), \ 721 $(foreach suffix, 1 2 4 8 16, \ 722 $(prefix)_$(suffix))) 723 724libgcc-sync-size-funcs-o = $(patsubst %,%$(objext),$(libgcc-sync-size-funcs)) 725$(libgcc-sync-size-funcs-o): %$(objext): $(srcdir)/sync.c 726 $(gcc_compile) $(SYNC_CFLAGS) \ 727 -DFN=`echo "$*" | sed 's/_[^_]*$$//'` \ 728 -DSIZE=`echo "$*" | sed 's/.*_//'` \ 729 -c $< $(vis_hide) 730libgcc-objects += $(libgcc-sync-size-funcs-o) 731 732libgcc-sync-funcs := sync_synchronize 733 734libgcc-sync-funcs-o = $(patsubst %,%$(objext),$(libgcc-sync-funcs)) 735$(libgcc-sync-funcs-o): %$(objext): $(srcdir)/sync.c 736 $(gcc_compile) $(SYNC_CFLAGS) \ 737 -DL$* \ 738 -c $< $(vis_hide) 739libgcc-objects += $(libgcc-sync-funcs-o) 740 741ifeq ($(enable_shared),yes) 742libgcc-sync-size-funcs-s-o = $(patsubst %,%_s$(objext), \ 743 $(libgcc-sync-size-funcs)) 744$(libgcc-sync-size-funcs-s-o): %_s$(objext): $(srcdir)/sync.c 745 $(gcc_s_compile) $(SYNC_CFLAGS) \ 746 -DFN=`echo "$*" | sed 's/_[^_]*$$//'` \ 747 -DSIZE=`echo "$*" | sed 's/.*_//'` \ 748 -c $< 749libgcc-s-objects += $(libgcc-sync-size-funcs-s-o) 750 751libgcc-sync-funcs-s-o = $(patsubst %,%_s$(objext),$(libgcc-sync-funcs)) 752$(libgcc-sync-funcs-s-o): %_s$(objext): $(srcdir)/sync.c 753 $(gcc_s_compile) $(SYNC_CFLAGS) \ 754 -DL$* \ 755 -c $< 756libgcc-s-objects += $(libgcc-sync-funcs-s-o) 757endif 758endif 759 760# Build fixed-point support. 761ifeq ($(fixed_point),yes) 762 763# Generate permutations of function name and mode 764fixed-labels := $(shell $(SHELL) $(srcdir)/gen-fixed.sh arith labels) 765fixed-funcs := $(shell $(SHELL) $(srcdir)/gen-fixed.sh arith funcs) 766fixed-modes := $(shell $(SHELL) $(srcdir)/gen-fixed.sh arith modes) 767 768# Generate the rules for each arithmetic function 769iter-items := $(fixed-funcs) 770iter-labels := $(fixed-labels) 771iter-from := $(fixed-modes) 772iter-to := $(fixed-modes) 773include $(srcdir)/empty.mk $(patsubst %,$(srcdir)/fixed-obj.mk,$(iter-items)) 774 775# Add arithmetic functions to list of objects to be built 776libgcc-objects += $(patsubst %,%$(objext),$(filter-out $(LIB2FUNCS_EXCLUDE),$(fixed-funcs))) 777ifeq ($(enable_shared),yes) 778libgcc-s-objects += $(patsubst %,%_s$(objext),$(filter-out $(LIB2FUNCS_EXCLUDE),$(fixed-funcs))) 779endif 780 781# Convert from or to fractional 782fixed-conv-funcs := $(shell $(SHELL) $(srcdir)/gen-fixed.sh conv funcs) 783fixed-conv-labels := $(shell $(SHELL) $(srcdir)/gen-fixed.sh conv labels) 784fixed-conv-from := $(shell $(SHELL) $(srcdir)/gen-fixed.sh conv from) 785fixed-conv-to := $(shell $(SHELL) $(srcdir)/gen-fixed.sh conv to) 786 787# Generate the make rules for each conversion function 788iter-items := $(fixed-conv-funcs) 789iter-labels := $(fixed-conv-labels) 790iter-from := $(fixed-conv-from) 791iter-to := $(fixed-conv-to) 792include $(srcdir)/empty.mk $(patsubst %,$(srcdir)/fixed-obj.mk,$(iter-items)) 793 794# Add conversion functions to list of objects to be built 795libgcc-objects += $(patsubst %,%$(objext),$(filter-out $(LIB2FUNCS_EXCLUDE),$(fixed-conv-funcs))) 796ifeq ($(enable_shared),yes) 797libgcc-s-objects += $(patsubst %,%_s$(objext),$(filter-out $(LIB2FUNCS_EXCLUDE),$(fixed-conv-funcs))) 798endif 799 800endif 801 802# Build LIB2ADD and LIB2ADD_ST. 803ifneq ($(filter-out %.c %.S %.asm,$(LIB2ADD) $(LIB2ADD_ST)),) 804$(error Unsupported files in LIB2ADD or LIB2ADD_ST.) 805endif 806 807libgcc-objects += $(addsuffix $(objext),$(basename $(notdir $(LIB2ADD)))) 808libgcc-objects += $(addsuffix $(objext),$(basename $(notdir $(LIB2ADD_ST)))) 809 810c_flags := 811iter-items := $(LIB2ADD) $(LIB2ADD_ST) 812include $(iterator) 813 814ifeq ($(enable_shared),yes) 815libgcc-s-objects += $(addsuffix _s$(objext),$(basename $(notdir $(LIB2ADD)))) 816endif 817 818# Build LIB2ADDEH, LIB2ADDEHSTATIC, and LIB2ADDEHSHARED. If we don't have 819# libgcc_eh.a, only LIB2ADDEH matters. If we do, only LIB2ADDEHSTATIC and 820# LIB2ADDEHSHARED matter. (Usually all three are identical.) 821 822c_flags := -fexceptions 823 824ifeq ($(enable_shared),yes) 825 826libgcc-eh-objects += $(addsuffix $(objext),$(basename $(notdir $(LIB2ADDEHSTATIC)))) 827libgcc-s-objects += $(addsuffix _s$(objext),$(basename $(notdir $(LIB2ADDEHSHARED)))) 828 829iter-items := $(sort $(LIB2ADDEHSTATIC) $(LIB2ADDEHSHARED)) 830include $(iterator) 831 832else 833# Not shared. LIB2ADDEH are added to libgcc.a. 834 835libgcc-objects += $(addsuffix $(objext),$(basename $(notdir $(LIB2ADDEH)))) 836 837iter-items := $(LIB2ADDEH) 838include $(iterator) 839 840endif 841 842# Build LIBUNWIND. Use -fno-exceptions so that the unwind library does 843# not generate calls to __gcc_personality_v0. 844 845c_flags := -fno-exceptions 846 847libunwind-objects += $(addsuffix $(objext),$(basename $(notdir $(LIBUNWIND)))) 848 849ifeq ($(enable_shared),yes) 850libunwind-s-objects += $(addsuffix _s$(objext),$(basename $(notdir $(LIBUNWIND)))) 851endif 852 853iter-items := $(LIBUNWIND) 854include $(iterator) 855 856# Build libgcov components. 857 858LIBGCOV_MERGE = _gcov_merge_add _gcov_merge_single _gcov_merge_delta \ 859 _gcov_merge_ior _gcov_merge_time_profile _gcov_merge_icall_topn 860LIBGCOV_PROFILER = _gcov_interval_profiler _gcov_pow2_profiler \ 861 _gcov_one_value_profiler _gcov_indirect_call_profiler \ 862 _gcov_average_profiler _gcov_ior_profiler \ 863 _gcov_indirect_call_profiler_v2 _gcov_time_profiler \ 864 _gcov_indirect_call_topn_profiler 865LIBGCOV_INTERFACE = _gcov_dump _gcov_flush _gcov_fork \ 866 _gcov_execl _gcov_execlp \ 867 _gcov_execle _gcov_execv _gcov_execvp _gcov_execve _gcov_reset 868LIBGCOV_DRIVER = _gcov 869 870libgcov-merge-objects = $(patsubst %,%$(objext),$(LIBGCOV_MERGE)) 871libgcov-profiler-objects = $(patsubst %,%$(objext),$(LIBGCOV_PROFILER)) 872libgcov-interface-objects = $(patsubst %,%$(objext),$(LIBGCOV_INTERFACE)) 873libgcov-driver-objects = $(patsubst %,%$(objext),$(LIBGCOV_DRIVER)) 874libgcov-objects = $(libgcov-merge-objects) $(libgcov-profiler-objects) \ 875 $(libgcov-interface-objects) $(libgcov-driver-objects) 876 877$(libgcov-merge-objects): %$(objext): $(srcdir)/libgcov-merge.c $(srcdir)/libgcov.h 878 $(gcc_compile) -DL$* -c $(srcdir)/libgcov-merge.c 879$(libgcov-profiler-objects): %$(objext): $(srcdir)/libgcov-profiler.c $(srcdir)/libgcov.h 880 $(gcc_compile) -DL$* -c $(srcdir)/libgcov-profiler.c 881$(libgcov-interface-objects): %$(objext): $(srcdir)/libgcov-interface.c $(srcdir)/libgcov.h 882 $(gcc_compile) -DL$* -c $(srcdir)/libgcov-interface.c 883$(libgcov-driver-objects): %$(objext): $(srcdir)/libgcov-driver.c \ 884 $(srcdir)/libgcov-driver-system.c $(srcdir)/libgcov.h 885 $(gcc_compile) -DL$* -c $(srcdir)/libgcov-driver.c 886 887 888# Static libraries. 889libgcc.a: $(libgcc-objects) 890libgcov.a: $(libgcov-objects) 891libunwind.a: $(libunwind-objects) 892libgcc_eh.a: $(libgcc-eh-objects) 893 894libgcc.a libgcov.a libunwind.a libgcc_eh.a: 895 -rm -f $@ 896 897 objects="$(objects)"; \ 898 if test -z "$$objects"; then \ 899 echo 'int __libgcc_eh_dummy;' > eh_dummy.c; \ 900 $(gcc_compile_bare) $(vis_hide) -c eh_dummy.c \ 901 -o eh_dummy$(objext); \ 902 objects=eh_dummy$(objext); \ 903 fi; \ 904 $(AR_CREATE_FOR_TARGET) $@ $$objects 905 906 $(RANLIB) $@ 907 908all: libgcc.a libgcov.a 909 910ifneq ($(LIBUNWIND),) 911all: libunwind.a 912libgcc_s$(SHLIB_EXT): libunwind$(SHLIB_EXT) 913endif 914 915ifeq ($(enable_shared),yes) 916all: libgcc_eh.a libgcc_s$(SHLIB_EXT) 917ifneq ($(LIBUNWIND),) 918all: libunwind$(SHLIB_EXT) 919endif 920endif 921 922ifeq ($(enable_shared),yes) 923 924# Map-file generation. 925ifneq ($(SHLIB_MKMAP),) 926libgcc.map.in: $(SHLIB_MAPFILES) 927 { cat $(SHLIB_MAPFILES) \ 928 | sed -e '/^[ ]*#/d' \ 929 -e 's/^%\(if\|else\|elif\|endif\|define\)/#\1/' \ 930 | $(gcc_compile_bare) -E -xassembler-with-cpp -; \ 931 } > tmp-$@ 932 mv tmp-$@ $@ 933libgcc.map: $(SHLIB_MKMAP) libgcc.map.in $(libgcc-s-objects) 934 { $(NM) $(SHLIB_NM_FLAGS) $(libgcc-s-objects); echo %%; \ 935 cat libgcc.map.in; \ 936 } | $(AWK) -f $(SHLIB_MKMAP) $(SHLIB_MKMAP_OPTS) > tmp-$@ 937 mv tmp-$@ $@ 938libgcc_s$(SHLIB_EXT): libgcc.map 939mapfile = libgcc.map 940endif 941 942libgcc-std.ver: $(srcdir)/libgcc-std.ver.in 943 sed -e 's/__PFX__/$(LIBGCC_VER_GNU_PREFIX)/g' \ 944 -e 's/__FIXPTPFX__/$(LIBGCC_VER_FIXEDPOINT_GNU_PREFIX)/g' < $< > $@ 945 946libgcc_s$(SHLIB_EXT): $(libgcc-s-objects) $(extra-parts) libgcc.a 947 # @multilib_flags@ is still needed because this may use 948 # $(GCC_FOR_TARGET) and $(LIBGCC2_CFLAGS) directly. 949 # @multilib_dir@ is not really necessary, but sometimes it has 950 # more uses than just a directory name. 951 $(mkinstalldirs) $(MULTIDIR) 952 $(subst @multilib_flags@,$(CFLAGS) -B./,$(subst \ 953 @multilib_dir@,$(MULTIDIR),$(subst \ 954 @shlib_objs@,$(objects) libgcc.a,$(subst \ 955 @shlib_base_name@,libgcc_s,$(subst \ 956 @shlib_map_file@,$(mapfile),$(subst \ 957 @shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(subst \ 958 @shlib_slibdir@,$(shlib_slibdir),$(SHLIB_LINK)))))))) 959 960libunwind$(SHLIB_EXT): $(libunwind-s-objects) $(extra-parts) 961 # @multilib_flags@ is still needed because this may use 962 # $(GCC_FOR_TARGET) and $(LIBGCC2_CFLAGS) directly. 963 # @multilib_dir@ is not really necessary, but sometimes it has 964 # more uses than just a directory name. 965 $(mkinstalldirs) $(MULTIDIR) 966 $(subst @multilib_flags@,$(CFLAGS) -B./,$(subst \ 967 @multilib_dir@,$(MULTIDIR),$(subst \ 968 @shlib_objs@,$(objects),$(subst \ 969 @shlib_base_name@,libunwind,$(subst \ 970 @shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(SHLIBUNWIND_LINK)))))) 971 972endif 973 974# Build the standard GCC startfiles and endfiles. 975ALL_CRT_CFLAGS = $(CFLAGS) $(CRTSTUFF_CFLAGS) $(INCLUDES) 976crt_compile = $(CC) $(ALL_CRT_CFLAGS) -o $@ $(compile_deps) 977 978ifeq ($(CUSTOM_CRTSTUFF),) 979# Compile two additional files that are linked with every program 980# linked using GCC on systems using COFF or ELF, for the sake of C++ 981# constructors. 982crtbegin$(objext): $(srcdir)/crtstuff.c 983 $(crt_compile) $(CRTSTUFF_T_CFLAGS) -c $< -DCRT_BEGIN 984 985crtend$(objext): $(srcdir)/crtstuff.c 986 $(crt_compile) $(CRTSTUFF_T_CFLAGS) -c $< -DCRT_END 987 988# These are versions of crtbegin and crtend for shared libraries. 989crtbeginS$(objext): $(srcdir)/crtstuff.c 990 $(crt_compile) $(CRTSTUFF_T_CFLAGS_S) -c $< -DCRT_BEGIN -DCRTSTUFFS_O 991 992crtendS$(objext): $(srcdir)/crtstuff.c 993 $(crt_compile) $(CRTSTUFF_T_CFLAGS_S) -c $< -DCRT_END -DCRTSTUFFS_O 994 995# This is a version of crtbegin for -static links. 996crtbeginT$(objext): $(srcdir)/crtstuff.c 997 $(crt_compile) $(CRTSTUFF_T_CFLAGS) -c $< -DCRT_BEGIN -DCRTSTUFFT_O 998 999# crtoffloadbegin and crtoffloadend contain symbols, that mark the begin and 1000# the end of tables with addresses, required for offloading. 1001crtoffloadbegin$(objext): $(srcdir)/offloadstuff.c 1002 $(crt_compile) $(CRTSTUFF_T_CFLAGS) -c $< -DCRT_BEGIN 1003 1004crtoffloadend$(objext): $(srcdir)/offloadstuff.c 1005 $(crt_compile) $(CRTSTUFF_T_CFLAGS) -c $< -DCRT_END 1006endif 1007 1008ifeq ($(enable_vtable_verify),yes) 1009# These are used in vtable verification; see comments in source files for 1010# more details. 1011vtv_start$(objext): $(srcdir)/vtv_start.c 1012 $(crt_compile) $(CRTSTUFF_T_CFLAGS_S) -c $(srcdir)/vtv_start.c 1013 1014vtv_end$(objext): $(srcdir)/vtv_end.c 1015 $(crt_compile) $(CRTSTUFF_T_CFLAGS_S) -c $(srcdir)/vtv_end.c 1016 1017vtv_start_preinit$(objext): $(srcdir)/vtv_start_preinit.c 1018 $(crt_compile) $(CRTSTUFF_T_CFLAGS_S) -c $(srcdir)/vtv_start_preinit.c 1019 1020vtv_end_preinit$(objext): $(srcdir)/vtv_end_preinit.c 1021 $(crt_compile) $(CRTSTUFF_T_CFLAGS_S) -c $(srcdir)/vtv_end_preinit.c 1022endif 1023 1024ifeq ($(CUSTOM_CRTIN),) 1025# -x assembler-with-cpp is only needed on case-insensitive filesystem. 1026crti$(objext): $(srcdir)/config/$(cpu_type)/crti.S 1027 $(crt_compile) -c -x assembler-with-cpp $< 1028 1029crtn$(objext): $(srcdir)/config/$(cpu_type)/crtn.S 1030 $(crt_compile) -c -x assembler-with-cpp $< 1031endif 1032 1033# Build extra startfiles in the libgcc directory. 1034.PHONY: libgcc-extra-parts 1035libgcc-extra-parts: $(EXTRA_PARTS) 1036 1037 # Early copyback; see "all" above for the rationale. The 1038 # early copy is necessary so that the gcc -B options find 1039 # the right startup files when linking shared libgcc. 1040 $(mkinstalldirs) $(gcc_objdir)$(MULTISUBDIR) 1041 parts="$(EXTRA_PARTS)"; \ 1042 for file in $$parts; do \ 1043 rm -f $(gcc_objdir)$(MULTISUBDIR)/$$file; \ 1044 $(INSTALL_DATA) $$file $(gcc_objdir)$(MULTISUBDIR)/; \ 1045 case $$file in \ 1046 *.a) \ 1047 $(RANLIB) $(gcc_objdir)$(MULTISUBDIR)/$$file ;; \ 1048 esac; \ 1049 done 1050 1051all: $(extra-parts) 1052 1053$(libgcc-objects) $(libgcc-s-objects) $(libgcc-eh-objects) \ 1054 $(libgcov-objects) \ 1055 $(libunwind-objects) $(libunwind-s-objects) \ 1056 $(EXTRA_PARTS): libgcc_tm.h 1057 1058# Copy unwind.h to the place where gcc will look for it at build-time 1059install-unwind_h-forbuild: 1060 dest=$(gcc_objdir)/include/tmp$$$$-unwind.h; \ 1061 cp unwind.h $$dest; \ 1062 chmod a+r $$dest; \ 1063 $(SHELL) $(srcdir)/../move-if-change $$dest $(gcc_objdir)/include/unwind.h 1064 1065# Copy unwind.h to the place where gcc will look at run-time, once installed 1066# 1067# This is redundant with the internal copy above when using a regular toplevel 1068# "install" target, because gcc's install will copy to the destination as well. 1069# 1070# This is however useful for "install-no-fixincludes" case, when only the gcc 1071# internal headers are copied by gcc's install. 1072install-unwind_h: 1073 $(mkinstalldirs) $(DESTDIR)$(libsubdir)/include 1074 $(INSTALL_DATA) unwind.h $(DESTDIR)$(libsubdir)/include 1075 1076all: install-unwind_h-forbuild 1077 1078# Documentation targets (empty). 1079.PHONY: info html dvi pdf install-info install-html install-pdf 1080 1081info: 1082install-info: 1083html: 1084install-html: 1085dvi: 1086pdf: 1087install-pdf: 1088 1089# Install rules. These do not depend on "all", so that they can be invoked 1090# recursively from it. 1091install-libunwind: 1092 $(mkinstalldirs) $(DESTDIR)$(inst_slibdir) 1093 1094 # NOTE: Maybe this should go into $(inst_libdir), but this 1095 # is where the old mklibgcc.in put it. 1096 $(INSTALL_DATA) libunwind.a $(DESTDIR)$(inst_slibdir)/ 1097 chmod 644 $(DESTDIR)$(inst_slibdir)/libunwind.a 1098 $(RANLIB) $(DESTDIR)$(inst_slibdir)/libunwind.a 1099 1100 $(subst @multilib_dir@,$(MULTIDIR),$(subst \ 1101 @shlib_base_name@,libunwind,$(subst \ 1102 @shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(SHLIBUNWIND_INSTALL)))) 1103 1104install-shared: 1105 $(mkinstalldirs) $(DESTDIR)$(inst_libdir) 1106 1107 $(INSTALL_DATA) libgcc_eh.a $(DESTDIR)$(inst_libdir)/ 1108 chmod 644 $(DESTDIR)$(inst_libdir)/libgcc_eh.a 1109 $(RANLIB) $(DESTDIR)$(inst_libdir)/libgcc_eh.a 1110 1111 $(subst @multilib_dir@,$(MULTIDIR),$(subst \ 1112 @shlib_base_name@,libgcc_s,$(subst \ 1113 @shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(SHLIB_INSTALL)))) 1114 1115install-leaf: $(install-shared) $(install-libunwind) 1116 $(mkinstalldirs) $(DESTDIR)$(inst_libdir) 1117 1118 $(INSTALL_DATA) libgcc.a $(DESTDIR)$(inst_libdir)/ 1119 chmod 644 $(DESTDIR)$(inst_libdir)/libgcc.a 1120 $(RANLIB) $(DESTDIR)$(inst_libdir)/libgcc.a 1121 $(INSTALL_DATA) libgcov.a $(DESTDIR)$(inst_libdir)/ 1122 chmod 644 $(DESTDIR)$(inst_libdir)/libgcov.a 1123 $(RANLIB) $(DESTDIR)$(inst_libdir)/libgcov.a 1124 1125 parts="$(INSTALL_PARTS)"; \ 1126 for file in $$parts; do \ 1127 rm -f $(DESTDIR)$(inst_libdir)/$$file; \ 1128 $(INSTALL_DATA) $$file $(DESTDIR)$(inst_libdir)/; \ 1129 case $$file in \ 1130 *.a) \ 1131 $(RANLIB) $(gcc_objdir)$(MULTISUBDIR)/$$file ;; \ 1132 esac; \ 1133 done 1134 1135install: install-leaf install-unwind_h 1136 @: $(MAKE) ; $(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=install 1137 1138install-strip: install 1139 1140.PHONY: install install-shared install-libunwind install-strip 1141.PHONY: install-unwind_h install-unwind_h-forbuild 1142 1143# Don't export variables to the environment, in order to not confuse 1144# configure. 1145.NOEXPORT: 1146 1147include $(srcdir)/empty.mk $(wildcard *.dep) 1148