Makefile.def (target_modules): Add libgcc.

./	* Makefile.def (target_modules): Add libgcc.
	(lang_env_dependencies): Remove default items.  Use no_c and no_gcc.
	* Makefile.tpl (clean-target-libgcc): Delete.
	(configure-target-[+module+]): Emit --disable-bootstrap dependencies
	on gcc even for bootstrapped modules.  Rewrite handling of
	lang_env_dependencies to loop over target_modules.
	* configure.in (target_libraries): Add target-libgcc.
	* Makefile.in, configure: Regenerated.
gcc/
	* config.gcc: Mention libgcc/config.host.
	* Makefile.in: Update comments mentioning libgcc.
	(LIBGCC, INSTALL_LIBGCC, GCC_PARTS, mklibgcc): Delete.
	(all.cross, start.encap, rest.encap, rest.cross): Update
	dependencies for libgcc move.
	(libgcc.mk, LIBGCC_DEPS, libgcov.a, libgcc.a, stmp-multilib)
	(clean-target, clean-target-libgcc): Delete.
	(srcdirify, GCC_EXTRA_PARTS): New macros.
	(libgcc-support, libgcc.mvars): New rules.
	(distclean): Remove mention of mklibgcc.
	(install): Don't reference INSTALL_LIBGCC.
	(install-common): Don't reference EXTRA_PARTS.
	(install-libgcc, install-multilib): Delete rules.
	* mklibgcc.in: Delete file.
	* doc/configfiles.texi: Don't mention mklibgcc.

	* config/i386/t-darwin (SHLIB_VERPFX): Delete (moved to libgcc).
	* config/i386/t-darwin64 (SHLIB_VERPFX): Likewise.
	* config/rs6000/t-darwin (SHLIB_VERPFX): Likewise.
	* config/rs6000/t-ppccomm (TARGET_LIBGCC2_CFLAGS, SHLIB_MAPFILES)
	(mklibgcc, ldblspecs): Likewise.

	* config/i386/t-nwld (libgcc.def, libc.def, libpcre.def)
	(posixpre.def): Use $(T).
	(SHLIB_EXT, SHLIB_NAME, SHLIB_SLIBDIR_QUAL, SHLIB_DEF, SHLIB_MAP)
	(SHLIB_SRC, SHLIB_INSTALL): Delete.
	(SHLIB_LINK): Make dummy.
	* config/t-slibgcc-darwin: Delete contents except for dummy SHLIB_LINK.

	* config/frv/t-linux (EXTRA_MULTILIB_PARTS): Clear.

	* config/alpha/t-crtfm: Use $(T) in rules for EXTRA_PARTS.
	* config/alpha/t-vms, config/alpha/t-vms64, config/fr30/t-fr30,
	config/i386/t-rtems-i386, config/ia64/t-ia64, config/rs6000/t-beos,
	config/rs6000/t-newas, config/sparc/t-elf: Likewise.

	* configure.ac (all_outputs): Remove mklibgcc.
	* configure: Regenerated.
libgcc/
	* Makefile.in, config/i386/t-darwin, config/i386/t-darwin64,
	config/i386/t-nwld, config/rs6000/t-darwin, config/rs6000/t-ldbl128,
	config/i386/t-crtfm, config/alpha/t-crtfm, config/ia64/t-ia64,
	config/sparc/t-crtfm, config/t-slibgcc-darwin,
	config/rs6000/t-ppccomm, config.host, configure.ac, empty.mk,
	shared-object.mk, siditi-object.mk, static-object.mk: New files.
	* configure: Generated.

Co-Authored-By: Paolo Bonzini <bonzini@gnu.org>

From-SVN: r120429
This commit is contained in:
Daniel Jacobowitz 2007-01-04 04:22:37 +00:00 committed by Daniel Jacobowitz
parent de43c613ab
commit fa9585134f
49 changed files with 7592 additions and 1470 deletions

View File

@ -1,3 +1,14 @@
2007-01-03 Daniel Jacobowitz <dan@codesourcery.com>
* Makefile.def (target_modules): Add libgcc.
(lang_env_dependencies): Remove default items. Use no_c and no_gcc.
* Makefile.tpl (clean-target-libgcc): Delete.
(configure-target-[+module+]): Emit --disable-bootstrap dependencies
on gcc even for bootstrapped modules. Rewrite handling of
lang_env_dependencies to loop over target_modules.
* configure.in (target_libraries): Add target-libgcc.
* Makefile.in, configure: Regenerated.
2006-12-29 Paolo Bonzini <bonzini@gnu.org>
* configure.in: Reorganize recognition of languages. Add

View File

@ -119,6 +119,7 @@ target_modules = { module= libstdc++-v3; lib_path=.libs; raw_cxx=true; };
target_modules = { module= libmudflap; lib_path=.libs; };
target_modules = { module= libssp; lib_path=.libs; };
target_modules = { module= newlib; };
target_modules = { module= libgcc; bootstrap=true; no_check=true; };
target_modules = { module= libgfortran; };
target_modules = { module= libobjc; };
target_modules = { module= libtermcap; no_check=true;
@ -439,18 +440,17 @@ dependencies = { module=all-tar; on=all-build-texinfo; };
dependencies = { module=all-uudecode; on=all-build-texinfo; };
// Target modules. These can also have dependencies on the language
// environment (e.g. on libstdc++).
lang_env_dependencies = { module=boehm-gc; };
// environment (e.g. on libstdc++). By default target modules depend
// on libgcc and newlib/libgloss.
lang_env_dependencies = { module=gperf; cxx=true; };
lang_env_dependencies = { module=libada; };
lang_env_dependencies = { module=libgfortran; };
lang_env_dependencies = { module=libffi; };
lang_env_dependencies = { module=libjava; cxx=true; };
lang_env_dependencies = { module=libmudflap; };
lang_env_dependencies = { module=libobjc; };
lang_env_dependencies = { module=libssp; };
lang_env_dependencies = { module=libstdc++-v3; };
lang_env_dependencies = { module=zlib; };
lang_env_dependencies = { module=newlib; no_c=true; };
lang_env_dependencies = { module=libgloss; no_c=true; };
lang_env_dependencies = { module=libgcc; no_gcc=true; no_c=true; };
// libiberty does not depend on newlib or libgloss because it must be
// built newlib on some targets (e.g. Cygwin). It still needs
// a dependency on libgcc for native targets to configure.
lang_env_dependencies = { module=libiberty; no_c=true; };
dependencies = { module=configure-target-boehm-gc; on=configure-target-qthreads; };
dependencies = { module=configure-target-fastjar; on=configure-target-zlib; };

File diff suppressed because it is too large Load Diff

View File

@ -611,11 +611,6 @@ maintainer-clean: local-maintainer-clean do-maintainer-clean local-clean
maintainer-clean: local-distclean
realclean: maintainer-clean
# Extra dependency for clean-target, owing to the mixed nature of gcc.
clean-target: clean-target-libgcc
clean-target-libgcc:
if test -f gcc/Makefile; then cd gcc && $(MAKE) $@; else :; fi
# Check target.
.PHONY: check do-check
@ -1400,18 +1395,12 @@ configure-target-[+module+]: stage_last[+
ENDIF bootstrap +][+ ENDFOR target_modules +]
@endif gcc-bootstrap
@if gcc-no-bootstrap[+ FOR target_modules +][+ IF bootstrap
+][+ ELSE +]
@if gcc-no-bootstrap[+ FOR target_modules +]
configure-target-[+module+]: maybe-all-gcc[+
ENDIF bootstrap +][+ ENDFOR target_modules +]
ENDFOR target_modules +]
@endif gcc-no-bootstrap
[+ FOR lang_env_dependencies +]
configure-target-[+module+]: maybe-all-target-newlib maybe-all-target-libgloss
[+ IF cxx +]configure-target-[+module+]: maybe-all-target-libstdc++-v3
[+ ENDIF cxx +][+ ENDFOR lang_env_dependencies +]
# There are two types of dependencies here: 'hard' dependencies, where one
# module simply won't build without the other; and 'soft' dependencies, where
# if the depended-on module is missing, the depending module will do without
@ -1507,6 +1496,48 @@ configure-target-[+module+]: maybe-all-target-newlib maybe-all-target-libgloss
[+ ESAC +][+
ENDFOR dependencies +]
# Dependencies for target modules on other target modules are
# described by lang_env_dependencies; the defaults apply to anything
# not mentioned there.
[+
;; Predicate for whether LANG was specified in lang_env_dependencies.
(define lang-dep (lambda (lang)
(hash-ref lang-env-deps (string-append (get "module") "-" lang))))
;; Build the hash table we will need.
(define lang-env-deps (make-hash-table 7))
+][+ FOR lang_env_dependencies +][+
(if (exist? "cxx")
(hash-create-handle! lang-env-deps
(string-append (get "module") "-" "cxx") #t))
(if (exist? "no_c")
(hash-create-handle! lang-env-deps
(string-append (get "module") "-" "no_c") #t))
(if (exist? "no_gcc")
(hash-create-handle! lang-env-deps
(string-append (get "module") "-" "no_gcc") #t))
"" +][+ ENDFOR lang_env_dependencies +]
@if gcc-bootstrap[+ FOR target_modules +][+ IF (not (lang-dep "no_gcc"))
+][+ IF bootstrap +][+ FOR bootstrap_stage +]
configure-stage[+id+]-target-[+module+]: maybe-all-stage[+id+]-target-libgcc[+
ENDFOR +][+ ENDIF bootstrap +][+ ENDIF +][+ ENDFOR target_modules +]
@endif gcc-bootstrap
@if gcc-no-bootstrap[+ FOR target_modules +][+ IF (not (lang-dep "no_gcc")) +]
configure-target-[+module+]: maybe-all-target-libgcc[+
ENDIF +][+ ENDFOR target_modules +]
@endif gcc-no-bootstrap
[+ FOR target_modules +][+ IF (not (lang-dep "no_c")) +]
configure-target-[+module+]: maybe-all-target-newlib maybe-all-target-libgloss[+
ENDIF +][+ IF (lang-dep "cxx") +]
configure-target-[+module+]: maybe-all-target-libstdc++-v3[+
ENDIF +]
[+ ENDFOR target_modules +]
CONFIGURE_GDB_TK = @CONFIGURE_GDB_TK@
GDB_TK = @GDB_TK@
INSTALL_GDB_TK = @INSTALL_GDB_TK@

275
configure vendored

File diff suppressed because it is too large Load Diff

View File

@ -142,6 +142,7 @@ libgcj="target-libffi \
# the host libraries and the host tools (which may be a cross compiler)
#
target_libraries="target-libiberty \
target-libgcc \
target-libgloss \
target-newlib \
target-libstdc++-v3 \

View File

@ -1,3 +1,44 @@
2007-01-03 Daniel Jacobowitz <dan@codesourcery.com>
* config.gcc: Mention libgcc/config.host.
* Makefile.in: Update comments mentioning libgcc.
(LIBGCC, INSTALL_LIBGCC, GCC_PARTS, mklibgcc): Delete.
(all.cross, start.encap, rest.encap, rest.cross): Update
dependencies for libgcc move.
(libgcc.mk, LIBGCC_DEPS, libgcov.a, libgcc.a, stmp-multilib)
(clean-target, clean-target-libgcc): Delete.
(srcdirify, GCC_EXTRA_PARTS): New macros.
(libgcc-support, libgcc.mvars): New rules.
(distclean): Remove mention of mklibgcc.
(install): Don't reference INSTALL_LIBGCC.
(install-common): Don't reference EXTRA_PARTS.
(install-libgcc, install-multilib): Delete rules.
* mklibgcc.in: Delete file.
* doc/configfiles.texi: Don't mention mklibgcc.
* config/i386/t-darwin (SHLIB_VERPFX): Delete (moved to libgcc).
* config/i386/t-darwin64 (SHLIB_VERPFX): Likewise.
* config/rs6000/t-darwin (SHLIB_VERPFX): Likewise.
* config/rs6000/t-ppccomm (TARGET_LIBGCC2_CFLAGS, SHLIB_MAPFILES)
(mklibgcc, ldblspecs): Likewise.
* config/i386/t-nwld (libgcc.def, libc.def, libpcre.def)
(posixpre.def): Use $(T).
(SHLIB_EXT, SHLIB_NAME, SHLIB_SLIBDIR_QUAL, SHLIB_DEF, SHLIB_MAP)
(SHLIB_SRC, SHLIB_INSTALL): Delete.
(SHLIB_LINK): Make dummy.
* config/t-slibgcc-darwin: Delete contents except for dummy SHLIB_LINK.
* config/frv/t-linux (EXTRA_MULTILIB_PARTS): Clear.
* config/alpha/t-crtfm: Use $(T) in rules for EXTRA_PARTS.
* config/alpha/t-vms, config/alpha/t-vms64, config/fr30/t-fr30,
config/i386/t-rtems-i386, config/ia64/t-ia64, config/rs6000/t-beos,
config/rs6000/t-newas, config/sparc/t-elf: Likewise.
* configure.ac (all_outputs): Remove mklibgcc.
* configure: Regenerated.
2007-01-03 Josh Conner <jconner@apple.com>
PR middle-end/29683

View File

@ -330,9 +330,9 @@ USER_H = $(srcdir)/ginclude/decfloat.h \
UNWIND_H = $(srcdir)/unwind-generic.h
# The GCC to use for compiling libgcc.a and crt*.o.
# The GCC to use for compiling crt*.o.
# Usually the one we just built.
# Don't use this as a dependency--use $(GCC_PASSES) or $(GCC_PARTS).
# Don't use this as a dependency--use $(GCC_PASSES).
GCC_FOR_TARGET = $(STAGE_CC_WRAPPER) ./xgcc -B./ -B$(build_tooldir)/bin/ -isystem $(build_tooldir)/include -isystem $(build_tooldir)/sys-include -L$(objdir)/../ld
# This is used instead of ALL_CFLAGS when compiling with GCC_FOR_TARGET.
@ -537,11 +537,6 @@ GGC=@GGC@.o
# If a supplementary library is being used for the GC.
GGC_LIB=
# libgcc.a may be built directly or via stmp-multilib,
# and installed likewise. Overridden by t-fragment.
LIBGCC = libgcc.a
INSTALL_LIBGCC = install-libgcc
# "true" if the target C library headers are unavailable; "false"
# otherwise.
inhibit_libc = @inhibit_libc@
@ -655,10 +650,6 @@ COMPILERS = cc1$(exeext) @all_compilers@
# to compile anything (without linking).
GCC_PASSES=xgcc$(exeext) cc1$(exeext) specs $(EXTRA_PASSES)
# List of things which should already be built whenever we try to use xgcc
# to link anything.
GCC_PARTS=$(GCC_PASSES) $(LIBGCC) $(EXTRA_PROGRAMS) $(COLLECT2) $(EXTRA_PARTS)
# Directory to link to, when using the target `maketest'.
DIR = ../gcc
@ -701,7 +692,7 @@ CRT0STUFF_T_CFLAGS =
# "t" or nothing, for building multilibbed versions of, say, crtbegin.o.
T =
# Should T contain a `=', libgcc.mk will make T_TARGET, setting
# Should T contain a `=', libgcc/Makefile will make T_TARGET, setting
# $(T_TARGET) to the name of the actual target filename.
T_TARGET =
T_TARGET : $(T_TARGET)
@ -1230,9 +1221,6 @@ $(srcdir)/configure: @MAINT@ $(srcdir)/configure.ac $(srcdir)/aclocal.m4 \
gccbug: $(srcdir)/gccbug.in
CONFIG_FILES=gccbug CONFIG_HEADERS= ./config.status
mklibgcc: $(srcdir)/mklibgcc.in
CONFIG_FILES=mklibgcc CONFIG_HEADERS= ./config.status
# cstamp-h.in controls rebuilding of config.in.
# It is named cstamp-h.in and not stamp-h.in so the mostlyclean rule doesn't
# delete it. A stamp file is needed as autoheader won't update the file if
@ -1274,12 +1262,12 @@ config.status: $(srcdir)/configure $(srcdir)/config.gcc
all.internal: start.encap rest.encap doc
# This is what to compile if making a cross-compiler.
all.cross: native gcc-cross$(exeext) cpp$(exeext) specs \
$(LIBGCC) $(EXTRA_PARTS) lang.all.cross doc @GENINSRC@ srcextra
libgcc-support lang.all.cross doc @GENINSRC@ srcextra
# This is what must be made before installing GCC and converting libraries.
start.encap: native xgcc$(exeext) cpp$(exeext) specs \
xlimits.h lang.start.encap @GENINSRC@ srcextra
libgcc-support xlimits.h lang.start.encap @GENINSRC@ srcextra
# These can't be made until after GCC can run.
rest.encap: $(STMP_FIXPROTO) $(LIBGCC) $(EXTRA_PARTS) lang.rest.encap
rest.encap: $(STMP_FIXPROTO) lang.rest.encap
# This is what is made with the host's compiler
# whether making a cross compiler or not.
native: config.status auto-host.h build-@POSUB@ $(LANGUAGES) \
@ -1293,7 +1281,7 @@ c: cc1$(exeext)
# On the target machine, finish building a cross compiler.
# This does the things that can't be done on the host machine.
rest.cross: $(LIBGCC) specs
rest.cross: specs
# Recompile all the language-independent object files.
# This is used only if the user explicitly asks for it.
@ -1415,75 +1403,66 @@ xlimits.h: glimits.h limitx.h limity.h
LIB2ADD = $(LIB2FUNCS_EXTRA)
LIB2ADD_ST = $(LIB2FUNCS_STATIC_EXTRA)
libgcc.mk: config.status Makefile mklibgcc $(LIB2ADD) $(LIB2ADD_ST) specs \
# All source files for libgcc are either in the source directory (in
# which case they will start with $(srcdir)), or generated into the build
# directory (in which case they will be relative paths).
srcdirify = $(patsubst $(srcdir)%,$$(gcc_srcdir)%,$(filter $(srcdir)%,$(1))) \
$(patsubst %,$$(gcc_objdir)/%,$(filter-out $(srcdir)%,$(1)))
# The distinction between these two variables is no longer relevant,
# so we combine them. Sort removes duplicates.
GCC_EXTRA_PARTS := $(sort $(EXTRA_MULTILIB_PARTS) $(EXTRA_PARTS))
libgcc-support: libgcc.mvars stmp-int-hdrs $(STMP_FIXPROTO) $(TCONFIG_H) \
$(MACHMODE_H) $(FPBIT) $(DPBIT) $(TPBIT) $(LIB2ADD) \
$(LIB2ADD_ST) $(LIB2ADDEH) gcov-iov.h $(SFP_MACHINE)
libgcc.mvars: config.status Makefile $(LIB2ADD) $(LIB2ADD_ST) specs \
xgcc$(exeext) stamp-as stamp-collect-ld stamp-nm
objext='$(objext)' \
LIB1ASMFUNCS='$(LIB1ASMFUNCS)' \
LIB2FUNCS_ST='$(LIB2FUNCS_ST)' \
LIB2FUNCS_EXCLUDE='$(LIB2FUNCS_EXCLUDE)' \
LIBGCOV='$(LIBGCOV)' \
LIB2ADD='$(LIB2ADD)' \
LIB2ADD_ST='$(LIB2ADD_ST)' \
LIB2ADDEH='$(LIB2ADDEH)' \
LIB2ADDEHSTATIC='$(LIB2ADDEHSTATIC)' \
LIB2ADDEHSHARED='$(LIB2ADDEHSHARED)' \
LIB2ADDEHDEP='$(LIB2ADDEHDEP)' \
LIB2_SIDITI_CONV_FUNCS='$(LIB2_SIDITI_CONV_FUNCS)' \
LIBUNWIND='$(LIBUNWIND)' \
LIBUNWINDDEP='$(LIBUNWINDDEP)' \
SHLIBUNWIND_LINK='$(SHLIBUNWIND_LINK)' \
SHLIBUNWIND_INSTALL='$(SHLIBUNWIND_INSTALL)' \
FPBIT='$(FPBIT)' \
FPBIT_FUNCS='$(FPBIT_FUNCS)' \
LIB2_DIVMOD_FUNCS='$(LIB2_DIVMOD_FUNCS)' \
DPBIT='$(DPBIT)' \
DPBIT_FUNCS='$(DPBIT_FUNCS)' \
TPBIT='$(TPBIT)' \
TPBIT_FUNCS='$(TPBIT_FUNCS)' \
DFP_ENABLE='$(DFP_ENABLE)' \
DFP_CFLAGS='$(DFP_CFLAGS)' \
D32PBIT='$(D32PBIT)' \
D32PBIT_FUNCS='$(D32PBIT_FUNCS)' \
D64PBIT='$(D64PBIT)' \
D64PBIT_FUNCS='$(D64PBIT_FUNCS)' \
D128PBIT='$(D128PBIT)' \
D128PBIT_FUNCS='$(D128PBIT_FUNCS)' \
MULTILIBS=`$(GCC_FOR_TARGET) --print-multi-lib` \
EXTRA_MULTILIB_PARTS='$(EXTRA_MULTILIB_PARTS)' \
SHLIB_LINK='$(SHLIB_LINK)' \
SHLIB_INSTALL='$(SHLIB_INSTALL)' \
SHLIB_EXT='$(SHLIB_EXT)' \
SHLIB_MULTILIB='$(SHLIB_MULTILIB)' \
SHLIB_MKMAP='$(SHLIB_MKMAP)' \
SHLIB_MKMAP_OPTS='$(SHLIB_MKMAP_OPTS)' \
SHLIB_MAPFILES='$(SHLIB_MAPFILES)' \
SHLIB_NM_FLAGS='$(SHLIB_NM_FLAGS)' \
MULTILIB_OSDIRNAMES='$(MULTILIB_OSDIRNAMES)' \
ASM_HIDDEN_OP='$(ASM_HIDDEN_OP)' \
GCC_FOR_TARGET='$(GCC_FOR_TARGET)' \
mkinstalldirs='$(mkinstalldirs)' \
$(SHELL) mklibgcc > tmp-libgcc.mk
mv tmp-libgcc.mk libgcc.mk
: > tmp-libgcc.mvars
echo LIB1ASMFUNCS = '$(LIB1ASMFUNCS)' >> tmp-libgcc.mvars
echo LIB1ASMSRC = '$(LIB1ASMSRC)' >> tmp-libgcc.mvars
echo LIB2FUNCS_ST = '$(LIB2FUNCS_ST)' >> tmp-libgcc.mvars
echo LIB2FUNCS_EXCLUDE = '$(LIB2FUNCS_EXCLUDE)' >> tmp-libgcc.mvars
echo LIBGCOV = '$(LIBGCOV)' >> tmp-libgcc.mvars
echo LIB2ADD = '$(call srcdirify,$(LIB2ADD))' >> tmp-libgcc.mvars
echo LIB2ADD_ST = '$(call srcdirify,$(LIB2ADD_ST))' >> tmp-libgcc.mvars
echo LIB2ADDEH = '$(call srcdirify,$(LIB2ADDEH))' >> tmp-libgcc.mvars
echo LIB2ADDEHSTATIC = '$(call srcdirify,$(LIB2ADDEHSTATIC))' >> tmp-libgcc.mvars
echo LIB2ADDEHSHARED = '$(call srcdirify,$(LIB2ADDEHSHARED))' >> tmp-libgcc.mvars
echo LIB2_SIDITI_CONV_FUNCS = '$(LIB2_SIDITI_CONV_FUNCS)' >> tmp-libgcc.mvars
echo LIBUNWIND = '$(call srcdirify,$(LIBUNWIND))' >> tmp-libgcc.mvars
echo SHLIBUNWIND_LINK = '$(SHLIBUNWIND_LINK)' >> tmp-libgcc.mvars
echo SHLIBUNWIND_INSTALL = '$(SHLIBUNWIND_INSTALL)' >> tmp-libgcc.mvars
echo FPBIT = '$(FPBIT)' >> tmp-libgcc.mvars
echo FPBIT_FUNCS = '$(FPBIT_FUNCS)' >> tmp-libgcc.mvars
echo LIB2_DIVMOD_FUNCS = '$(LIB2_DIVMOD_FUNCS)' >> tmp-libgcc.mvars
echo DPBIT = '$(DPBIT)' >> tmp-libgcc.mvars
echo DPBIT_FUNCS = '$(DPBIT_FUNCS)' >> tmp-libgcc.mvars
echo TPBIT = '$(TPBIT)' >> tmp-libgcc.mvars
echo TPBIT_FUNCS = '$(TPBIT_FUNCS)' >> tmp-libgcc.mvars
echo DFP_ENABLE = '$(DFP_ENABLE)' >> tmp-libgcc.mvars
echo DFP_CFLAGS='$(DFP_CFLAGS)' >> tmp-libgcc.mvars
echo D32PBIT='$(D32PBIT)' >> tmp-libgcc.mvars
echo D32PBIT_FUNCS='$(D32PBIT_FUNCS)' >> tmp-libgcc.mvars
echo D64PBIT='$(D64PBIT)' >> tmp-libgcc.mvars
echo D64PBIT_FUNCS='$(D64PBIT_FUNCS)' >> tmp-libgcc.mvars
echo D128PBIT='$(D128PBIT)' >> tmp-libgcc.mvars
echo D128PBIT_FUNCS='$(D128PBIT_FUNCS)' >> tmp-libgcc.mvars
echo GCC_EXTRA_PARTS = '$(GCC_EXTRA_PARTS)' >> tmp-libgcc.mvars
echo SHLIB_LINK = '$(subst $(GCC_FOR_TARGET),$$(GCC_FOR_TARGET),$(SHLIB_LINK))' >> tmp-libgcc.mvars
echo SHLIB_INSTALL = '$(SHLIB_INSTALL)' >> tmp-libgcc.mvars
echo SHLIB_EXT = '$(SHLIB_EXT)' >> tmp-libgcc.mvars
echo SHLIB_MKMAP = '$(call srcdirify,$(SHLIB_MKMAP))' >> tmp-libgcc.mvars
echo SHLIB_MKMAP_OPTS = '$(SHLIB_MKMAP_OPTS)' >> tmp-libgcc.mvars
echo SHLIB_MAPFILES = '$(call srcdirify,$(SHLIB_MAPFILES))' >> tmp-libgcc.mvars
echo SHLIB_NM_FLAGS = '$(SHLIB_NM_FLAGS)' >> tmp-libgcc.mvars
echo LIBGCC2_CFLAGS = '$(LIBGCC2_CFLAGS)' >> tmp-libgcc.mvars
echo CRTSTUFF_CFLAGS = '$(CRTSTUFF_CFLAGS)' >> tmp-libgcc.mvars
echo CRTSTUFF_T_CFLAGS = '$(CRTSTUFF_T_CFLAGS)' >> tmp-libgcc.mvars
echo CRTSTUFF_T_CFLAGS_S = '$(CRTSTUFF_T_CFLAGS_S)' >> tmp-libgcc.mvars
# All the things that might cause us to want to recompile bits of libgcc.
LIBGCC_DEPS = $(GCC_PASSES) stmp-int-hdrs $(STMP_FIXPROTO) \
libgcc.mk $(srcdir)/libgcc2.c $(srcdir)/libgcov.c $(TCONFIG_H) \
$(MACHMODE_H) longlong.h gbl-ctors.h config.status $(srcdir)/libgcc2.h \
tsystem.h $(FPBIT) $(DPBIT) $(TPBIT) $(LIB2ADD) \
config/dfp-bit.h config/dfp-bit.c \
$(LIB2ADD_ST) $(LIB2ADDEH) $(LIB2ADDEHDEP) $(EXTRA_PARTS) \
$(srcdir)/config/$(LIB1ASMSRC) \
$(srcdir)/gcov-io.h $(srcdir)/gcov-io.c gcov-iov.h $(SFP_MACHINE)
libgcov.a: libgcc.a; @true
libgcc.a: $(LIBGCC_DEPS)
$(MAKE) \
CFLAGS="$(CFLAGS) $(WARN_CFLAGS)" \
CONFIG_H="$(TCONFIG_H)" TM_H="$(TM_H)" \
INCLUDES="$(INCLUDES)" \
MAKEOVERRIDES= \
-f libgcc.mk all
mv tmp-libgcc.mvars libgcc.mvars
# Use the genmultilib shell script to generate the information the gcc
# driver program needs to select the library directory based on the
@ -1509,15 +1488,6 @@ s-mlib: $(srcdir)/genmultilib Makefile
$(SHELL) $(srcdir)/../move-if-change tmp-mlib.h multilib.h
$(STAMP) s-mlib
# Build multiple copies of libgcc.a, one for each target switch.
stmp-multilib: $(LIBGCC_DEPS)
$(MAKE) \
CFLAGS="$(CFLAGS) $(WARN_CFLAGS)" \
CONFIG_H="$(CONFIG_H)" \
MAKEOVERRIDES= \
-f libgcc.mk all
$(STAMP) stmp-multilib
# Compile two additional files that are linked with every program
# linked using GCC on systems using COFF or ELF, for the sake of C++
# constructors.
@ -3538,18 +3508,6 @@ fsf-funding.pod: funding.texi
-$(TEXI2POD) $< > $@
#
# clean-target removes all files made by compilation.
# This can be added to over time.
clean-target: clean-target-libgcc
clean-target-libgcc:
test ! -d libgcc || \
(cd libgcc && find . -type d -print) | \
while read d; do rm -f $$d/libgcc.a || : ; done
test ! -d libgcc || rm -r libgcc
test ! -f stmp-dirs || rm stmp-dirs
# Deletion of files made during compilation.
# There are four levels of this:
# `mostlyclean', `clean', `distclean' and `maintainer-clean'.
@ -3646,7 +3604,7 @@ distclean: clean lang.distclean
-cd testsuite && rm -f *.out *.gcov *$(coverageexts)
-rm -rf ${QMTEST_DIR} stamp-qmtest
-rm -f cxxmain.c
-rm -f mklibgcc gccbug .gdbinit configargs.h
-rm -f gccbug .gdbinit configargs.h
-rm -f gcov.pod
# Delete po/*.gmo only if we are not building in the source directory.
-if [ ! -f po/exgettext ]; then rm -f po/*.gmo; fi
@ -3668,7 +3626,7 @@ maintainer-clean:
# Copy the compiler files into directories where they will be run.
# Install the driver last so that the window when things are
# broken is small.
install: install-common $(INSTALL_HEADERS) $(INSTALL_LIBGCC) \
install: install-common $(INSTALL_HEADERS) \
install-cpp install-man install-info install-@POSUB@ \
install-driver
@ -3694,7 +3652,7 @@ installdirs:
$(mkinstalldirs) $(DESTDIR)$(man7dir)
# Install the compiler executables built during cross compilation.
install-common: native $(EXTRA_PARTS) lang.install-common installdirs
install-common: native lang.install-common installdirs
for file in $(COMPILERS); do \
if [ -f $$file ] ; then \
rm -f $(DESTDIR)$(libexecsubdir)/$$file; \
@ -3708,13 +3666,6 @@ install-common: native $(EXTRA_PARTS) lang.install-common installdirs
$(INSTALL_PROGRAM) $$file $(DESTDIR)$(libexecsubdir)/$$file; \
else true; fi; \
done
for file in $(EXTRA_PARTS) ..; do \
if [ x"$$file" != x.. ]; then \
rm -f $(DESTDIR)$(libsubdir)/$$file; \
$(INSTALL_DATA) $$file $(DESTDIR)$(libsubdir)/$$file; \
chmod a-x $(DESTDIR)$(libsubdir)/$$file; \
else true; fi; \
done
# We no longer install the specs file because its presence makes the
# driver slower, and because people who need it can recreate it by
# using -dumpspecs. We remove any old version because it would
@ -3833,24 +3784,6 @@ $(DESTDIR)$(man1dir)/$(GCOV_INSTALL_NAME)$(man1ext): doc/gcov.1 installdirs
-$(INSTALL_DATA) $< $@
-chmod a-x $@
# Install the library.
install-libgcc: libgcc.mk libgcc.a libgcov.a installdirs
$(MAKE) \
CFLAGS="$(CFLAGS) $(WARN_CFLAGS)" \
CONFIG_H="$(TCONFIG_H)" \
MAKEOVERRIDES= \
mkinstalldirs='$(mkinstalldirs)' \
-f libgcc.mk install
# Install multiple versions of libgcc.a, libgcov.a.
install-multilib: stmp-multilib installdirs
$(MAKE) \
CFLAGS="$(CFLAGS) $(WARN_CFLAGS)" \
CONFIG_H="$(CONFIG_H)" \
MAKEOVERRIDES= \
mkinstalldirs='$(mkinstalldirs)' \
-f libgcc.mk install
# Install all the header files built in the include subdirectory.
install-headers: $(INSTALL_HEADERS_DIR)
# Fix symlinks to absolute paths in the installed include directory to

View File

@ -25,6 +25,9 @@
# configure script. Putting it in a separate shell file lets us skip
# running autoconf when modifying target-specific information.
# When you change the cases in the OS or target switches, consider
# updating ../libgcc/config.host also.
# This file switches on the shell variable ${target}, and also uses the
# following shell variables:
#

View File

@ -1,5 +1,5 @@
EXTRA_PARTS += crtfastmath.o
crtfastmath.o: $(srcdir)/config/alpha/crtfastmath.c $(GCC_PASSES)
$(T)crtfastmath.o: $(srcdir)/config/alpha/crtfastmath.c $(GCC_PASSES)
$(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -frandom-seed=gcc-crtfastmath -c \
-o crtfastmath.o $(srcdir)/config/alpha/crtfastmath.c
-o $(T)crtfastmath.o $(srcdir)/config/alpha/crtfastmath.c

View File

@ -7,18 +7,18 @@ EXTRA_PARTS = vms-dwarf2.o vms-dwarf2eh.o $(VMS_EXTRA_PARTS)
# This object must be linked with in order to make the executable debuggable.
# vms-ld handles it automatically when passed -g.
vms-dwarf2.o : $(srcdir)/config/alpha/vms-dwarf2.asm
$(T)vms-dwarf2.o : $(srcdir)/config/alpha/vms-dwarf2.asm
gcc -c -x assembler $< -o $@
vms-dwarf2eh.o : $(srcdir)/config/alpha/vms-dwarf2eh.asm
$(T)vms-dwarf2eh.o : $(srcdir)/config/alpha/vms-dwarf2eh.asm
gcc -c -x assembler $< -o $@
# Assemble startup files.
vcrt0.o: $(CRT0_S) $(GCC_PASSES)
decc -c /names=as_is $(srcdir)/config/alpha/vms-crt0.c -o vcrt0.o
$(T)vcrt0.o: $(CRT0_S) $(GCC_PASSES)
decc -c /names=as_is $(srcdir)/config/alpha/vms-crt0.c -o $(T)vcrt0.o
pcrt0.o: $(CRT0_S) $(GCC_PASSES)
decc -c /names=as_is $(srcdir)/config/alpha/vms-psxcrt0.c -o pcrt0.o
$(T)pcrt0.o: $(CRT0_S) $(GCC_PASSES)
decc -c /names=as_is $(srcdir)/config/alpha/vms-psxcrt0.c -o $(T)pcrt0.o
MULTILIB_OPTIONS = mcpu=ev6
MULTILIB_DIRNAMES = ev6

View File

@ -1,8 +1,8 @@
# Assemble startup files.
vcrt0.o: $(CRT0_S) $(GCC_PASSES)
$(T)vcrt0.o: $(CRT0_S) $(GCC_PASSES)
decc -c /names=as_is /pointer_size=64 \
$(srcdir)/config/alpha/vms-crt0-64.c -o vcrt0.o
$(srcdir)/config/alpha/vms-crt0-64.c -o $(T)vcrt0.o
pcrt0.o: $(CRT0_S) $(GCC_PASSES)
$(T)pcrt0.o: $(CRT0_S) $(GCC_PASSES)
decc -c /names=as_is /pointer_size=64 \
$(srcdir)/config/alpha/vms-psxcrt0-64.c -o pcrt0.o
$(srcdir)/config/alpha/vms-psxcrt0-64.c -o $(T)pcrt0.o

View File

@ -2,11 +2,11 @@ LIB1ASMSRC = fr30/lib1funcs.asm
LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3
# Assemble startup files.
crti.o: $(srcdir)/config/fr30/crti.asm $(GCC_PASSES)
$(GCC_FOR_TARGET) -c -o crti.o -x assembler $(srcdir)/config/fr30/crti.asm
$(T)crti.o: $(srcdir)/config/fr30/crti.asm $(GCC_PASSES)
$(GCC_FOR_TARGET) -c -o $(T)crti.o -x assembler $(srcdir)/config/fr30/crti.asm
crtn.o: $(srcdir)/config/fr30/crtn.asm $(GCC_PASSES)
$(GCC_FOR_TARGET) -c -o crtn.o -x assembler $(srcdir)/config/fr30/crtn.asm
$(T)crtn.o: $(srcdir)/config/fr30/crtn.asm $(GCC_PASSES)
$(GCC_FOR_TARGET) -c -o $(T)crtn.o -x assembler $(srcdir)/config/fr30/crtn.asm
# We want fine grained libraries, so use the new code to build the
# floating point emulation libraries.

View File

@ -5,6 +5,9 @@ MULTILIB_MATCHES=
MULTILIB_EXCEPTIONS=
MULTILIB_EXTRA_OPTS=
# We don't use frvbegin.o or frvend.o.
EXTRA_MULTILIB_PARTS =
CRTSTUFF_T_CFLAGS = -fPIC
TARGET_LIBGCC2_CFLAGS = -fPIC

View File

@ -1,4 +1,3 @@
SHLIB_VERPFX = $(srcdir)/config/i386/darwin-libgcc
MULTILIB_OPTIONS = m64
MULTILIB_DIRNAMES = x86_64
LIB2_SIDITI_CONV_FUNCS=yes

View File

@ -1,3 +1,2 @@
SHLIB_VERPFX = $(srcdir)/config/i386/darwin-libgcc
LIB2_SIDITI_CONV_FUNCS=yes
LIB2FUNCS_EXTRA = $(srcdir)/config/darwin-64.c

View File

@ -4,18 +4,18 @@ CRT0STUFF_T_CFLAGS = -mpreferred-stack-boundary=2 $(INCLUDES)
CRT0_S = $(srcdir)/config/i386/netware-crt0.c
MCRT0_S = $(srcdir)/config/i386/netware-crt0.c
libgcc.def: $(srcdir)/config/i386/t-nwld
$(T)libgcc.def: $(srcdir)/config/i386/t-nwld
echo "module libgcc_s" >$@
libc.def: $(srcdir)/config/i386/t-nwld
$(T)libc.def: $(srcdir)/config/i386/t-nwld
echo "module libc" >$@
libcpre.def: $(srcdir)/config/i386/t-nwld
$(T)libcpre.def: $(srcdir)/config/i386/t-nwld
echo "start _LibCPrelude" >$@
echo "exit _LibCPostlude" >>$@
echo "check _LibCCheckUnload" >>$@
posixpre.def: $(srcdir)/config/i386/t-nwld
$(T)posixpre.def: $(srcdir)/config/i386/t-nwld
echo "start POSIX_Start" >$@
echo "exit POSIX_Stop" >>$@
echo "check POSIX_CheckUnload" >>$@
@ -26,36 +26,5 @@ nwld.o: $(srcdir)/config/i386/nwld.c $(RTL_H) $(TREE_H) $(CONFIG_H) $(TM_P_H)
s-crt0: $(srcdir)/unwind-dw2-fde.h
# Build a shared libgcc library for NetWare.
SHLIB_EXT = .nlm
SHLIB_NAME = @shlib_base_name@.nlm
SHLIB_SLIBDIR_QUAL = @shlib_slibdir_qual@
SHLIB_DEF = $(srcdir)/config/i386/netware-libgcc.def
SHLIB_MAP = $(srcdir)/config/i386/netware-libgcc.exp
SHLIB_SRC = $(srcdir)/config/i386/netware-libgcc.c
SHLIB_LINK = set -e; \
cat $(SHLIB_DEF) >@shlib_base_name@.def; \
echo "name $(SHLIB_NAME)" >>@shlib_base_name@.def; \
echo "version $(version)" | sed "s!\.!,!g" >>@shlib_base_name@.def; \
touch libgcc/build; \
echo "build $$$$(expr $$$$(<libgcc/build) + 0)" >>@shlib_base_name@.def; \
echo "export @$(SHLIB_MAP)" >>@shlib_base_name@.def; \
if mpkxdc -n -p @shlib_base_name@.xdc; \
then echo "xdcdata @shlib_base_name@.xdc" >>@shlib_base_name@.def; \
else echo "WARNING: $(SHLIB_NAME) built without XDC data will not work well." 1>&2; \
fi; \
$(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -o $(SHLIB_NAME) \
$(SHLIB_SRC) -posix -static-libgcc -lnetware \
-Wl,--Map,--map-info,full,--strip-all,--def-file,@shlib_base_name@.def; \
rm -f @shlib_base_name@.imp; $(LN_S) $(SHLIB_MAP) @shlib_base_name@.imp; \
rm -f libgcc.imp; $(LN_S) @shlib_base_name@.imp libgcc.imp; \
expr $$$$(<libgcc/build) + 1 >libgcc/build
# $(slibdir) double quoted to protect it from expansion while building
# libgcc.mk. We want this delayed until actual install time.
SHLIB_INSTALL = \
$$(SHELL) $(srcdir)/mkinstalldirs $$(slibdir)$(SHLIB_SLIBDIR_QUAL); \
$$(INSTALL_DATA) $(SHLIB_NAME) $$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_NAME); \
$$(INSTALL_DATA) @shlib_base_name@.imp $$(DESTDIR)$$(libsubdir)/
# To keep DRIVER_DEFINES correct.
SHLIB_LINK = dummy

View File

@ -5,12 +5,12 @@
# version of these files.
#
crti.o: $(srcdir)/config/i386/sol2-ci.asm $(GCC_PASSES)
$(T)crti.o: $(srcdir)/config/i386/sol2-ci.asm $(GCC_PASSES)
sed -e '/^!/d' <$(srcdir)/config/i386/sol2-ci.asm >crti.s
$(GCC_FOR_TARGET) -c -o crti.o crti.s
crtn.o: $(srcdir)/config/i386/sol2-cn.asm $(GCC_PASSES)
$(GCC_FOR_TARGET) -c -o $(T)crti.o crti.s
$(T)crtn.o: $(srcdir)/config/i386/sol2-cn.asm $(GCC_PASSES)
sed -e '/^!/d' <$(srcdir)/config/i386/sol2-cn.asm >crtn.s
$(GCC_FOR_TARGET) -c -o crtn.o crtn.s
$(GCC_FOR_TARGET) -c -o $(T)crtn.o crtn.s
# We want fine grained libraries, so use the new code to build the
# floating point emulation libraries.

View File

@ -24,21 +24,21 @@ SHLIB_MAPFILES += $(srcdir)/config/ia64/libgcc-ia64.ver
T = disable
# Assemble startup files.
crtbegin.o: $(srcdir)/config/ia64/crtbegin.asm $(GCC_PASSES)
$(GCC_FOR_TARGET) -I. -c -o crtbegin.o -x assembler-with-cpp \
$(T)crtbegin.o: $(srcdir)/config/ia64/crtbegin.asm $(GCC_PASSES)
$(GCC_FOR_TARGET) -I. -c -o $(T)crtbegin.o -x assembler-with-cpp \
$(srcdir)/config/ia64/crtbegin.asm
crtend.o: $(srcdir)/config/ia64/crtend.asm $(GCC_PASSES)
$(GCC_FOR_TARGET) -I. -c -o crtend.o -x assembler-with-cpp \
$(T)crtend.o: $(srcdir)/config/ia64/crtend.asm $(GCC_PASSES)
$(GCC_FOR_TARGET) -I. -c -o $(T)crtend.o -x assembler-with-cpp \
$(srcdir)/config/ia64/crtend.asm
crtbeginS.o: $(srcdir)/config/ia64/crtbegin.asm $(GCC_PASSES)
$(GCC_FOR_TARGET) -I. -DSHARED -c -o crtbeginS.o \
$(T)crtbeginS.o: $(srcdir)/config/ia64/crtbegin.asm $(GCC_PASSES)
$(GCC_FOR_TARGET) -I. -DSHARED -c -o $(T)crtbeginS.o \
-x assembler-with-cpp \
$(srcdir)/config/ia64/crtbegin.asm
crtendS.o: $(srcdir)/config/ia64/crtend.asm $(GCC_PASSES)
$(GCC_FOR_TARGET) -I. -DSHARED -c -o crtendS.o -x assembler-with-cpp \
$(T)crtendS.o: $(srcdir)/config/ia64/crtend.asm $(GCC_PASSES)
$(GCC_FOR_TARGET) -I. -DSHARED -c -o $(T)crtendS.o -x assembler-with-cpp \
$(srcdir)/config/ia64/crtend.asm
crtfastmath.o: $(srcdir)/config/ia64/crtfastmath.c $(GCC_PASSES)
$(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -c -o crtfastmath.o \
$(T)crtfastmath.o: $(srcdir)/config/ia64/crtfastmath.c $(GCC_PASSES)
$(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -c -o $(T)crtfastmath.o \
$(srcdir)/config/ia64/crtfastmath.c
LIB2ADDEH = $(srcdir)/config/ia64/unwind-ia64.c $(srcdir)/unwind-sjlj.c \

View File

@ -25,6 +25,6 @@ LIMITS_H_TEST = [ -f /boot/develop/headers/posix/limits.h ]
# Aix 3.2.x needs milli.exp for -mcpu=common
EXTRA_PARTS = milli.exp
milli.exp: $(srcdir)/config/rs6000/milli.exp
rm -f milli.exp
cp $(srcdir)/config/rs6000/milli.exp ./milli.exp
$(T)milli.exp: $(srcdir)/config/rs6000/milli.exp
rm -f $(T)milli.exp
cp $(srcdir)/config/rs6000/milli.exp $(T)milli.exp

View File

@ -23,8 +23,6 @@ TARGET_LIBGCC2_CFLAGS = -Wa,-force_cpusubtype_ALL -pipe -mmacosx-version-min=10.
# Export the _xlq* symbols from darwin-ldouble.c.
SHLIB_MAPFILES += $(srcdir)/config/rs6000/libgcc-ppc64.ver
SHLIB_VERPFX = $(srcdir)/config/rs6000/darwin-libgcc
LIB2ADDEH += $(srcdir)/config/rs6000/darwin-fallback.c
darwin-fpsave.o: $(srcdir)/config/rs6000/darwin-asm.h

View File

@ -32,6 +32,6 @@ LIB2FUNCS_EXTRA = $(srcdir)/config/rs6000/darwin-ldouble.c
# Aix 3.2.x needs milli.exp for -mcpu=common
EXTRA_PARTS = milli.exp
milli.exp: $(srcdir)/config/rs6000/milli.exp
rm -f milli.exp
cp $(srcdir)/config/rs6000/milli.exp ./milli.exp
$(T)milli.exp: $(srcdir)/config/rs6000/milli.exp
rm -f $(T)milli.exp
cp $(srcdir)/config/rs6000/milli.exp $(T)milli.exp

View File

@ -11,18 +11,6 @@ eabi.S: $(srcdir)/config/rs6000/eabi.asm
tramp.S: $(srcdir)/config/rs6000/tramp.asm
cat $(srcdir)/config/rs6000/tramp.asm > tramp.S
ifneq (,$findstring gnu,$(target))
TARGET_LIBGCC2_CFLAGS += -specs=ldblspecs
SHLIB_MAPFILES += $(srcdir)/config/rs6000/libgcc-ppc-glibc.ver
# Hack to use -mlong-double-128 only when not compiling nof libgcc
mklibgcc: ldblspecs
ldblspecs: specs
sed -e '/cc1_options/{ n; s/$$/ %{!msoft-float:-mlong-double-128}/; }' < specs > $@
endif
# Switch synonyms
MULTILIB_MATCHES_ENDIAN = mlittle=mlittle-endian mbig=mbig-endian
MULTILIB_MATCHES_SYSV = mcall-sysv=mcall-sysv-eabi mcall-sysv=mcall-sysv-noeabi mcall-sysv=mcall-linux mcall-sysv=mcall-netbsd

View File

@ -23,7 +23,7 @@ LIBGCC = stmp-multilib
INSTALL_LIBGCC = install-multilib
# Assemble startup files.
crti.o: $(srcdir)/config/sparc/sol2-ci.asm $(GCC_PASSES)
$(GCC_FOR_TARGET) -c -o crti.o -x assembler-with-cpp $(srcdir)/config/sparc/sol2-ci.asm
crtn.o: $(srcdir)/config/sparc/sol2-cn.asm $(GCC_PASSES)
$(GCC_FOR_TARGET) -c -o crtn.o -x assembler-with-cpp $(srcdir)/config/sparc/sol2-cn.asm
$(T)crti.o: $(srcdir)/config/sparc/sol2-ci.asm $(GCC_PASSES)
$(GCC_FOR_TARGET) -c -o $(T)crti.o -x assembler-with-cpp $(srcdir)/config/sparc/sol2-ci.asm
$(T)crtn.o: $(srcdir)/config/sparc/sol2-cn.asm $(GCC_PASSES)
$(GCC_FOR_TARGET) -c -o $(T)crtn.o -x assembler-with-cpp $(srcdir)/config/sparc/sol2-cn.asm

View File

@ -1,101 +1,2 @@
# Build a shared libgcc library with the darwin linker.
SHLIB_SOVERSION = 1
SHLIB_VERSTRING = -compatibility_version $(SHLIB_SOVERSION) -current_version $(SHLIB_SOVERSION).0
SHLIB_EXT = .dylib
SHLIB_SUFFIX = `if test @multilib_dir@ = ppc64 ; then echo _@multilib_dir@ ; fi`
SHLIB_INSTALL_NAME = @shlib_base_name@$(SHLIB_SUFFIX).$(SHLIB_SOVERSION)$(SHLIB_EXT)
SHLIB_SONAME = @shlib_base_name@.$(SHLIB_SOVERSION)$(SHLIB_EXT)
SHLIB_SOLINK = @shlib_base_name@.so
SHLIB_MAP = @shlib_map_file@
SHLIB_OBJS = @shlib_objs@
SHLIB_DIR = @multilib_dir@
SHLIB_LC = -lc
# Darwin only searches in /usr/lib for shared libraries, not in subdirectories,
# so the libgcc variants have different names not different locations.
# Note that this version is used for the loader, not the linker; the linker
# uses the stub versions named by $(LIBGCC).
SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -dynamiclib -nodefaultlibs \
-install_name $(slibdir)/$(SHLIB_INSTALL_NAME) \
-single_module -o $(SHLIB_DIR)/$(SHLIB_SONAME).tmp \
-Wl,-exported_symbols_list,$(SHLIB_MAP) \
$(SHLIB_VERSTRING) \
@multilib_flags@ $(SHLIB_OBJS) $(SHLIB_LC)
# $(slibdir) double quoted to protect it from expansion while building
# libgcc.mk. We want this delayed until actual install time.
SHLIB_INSTALL = \
$$(mkinstalldirs) $$(DESTDIR)$$(slibdir); \
$(INSTALL_DATA) $(SHLIB_SONAME) \
$$(DESTDIR)$$(slibdir)/$(SHLIB_SONAME)
SHLIB_MKMAP = $(srcdir)/mkmap-flat.awk
SHLIB_MKMAP_OPTS = -v leading_underscore=1
SHLIB_MAPFILES += $(srcdir)/libgcc-std.ver
# Must use a different directive for hidden visibility in assembly sources.
ASM_HIDDEN_OP = .private_extern
# In order to support -mmacosx-version-min, you need to have multiple
# different libgcc_s libraries that actually get linked against, one for
# each system version supported. They are 'stub' libraries that
# contain no code, just a list of exported symbols.
# The actual use of the libraries is controlled by REAL_LIBGCC_SPEC.
#
# This assumes each multilib corresponds to a different architecture.
libgcc_s.%.dylib : $(SHLIB_VERPFX).%.ver stmp-multilib
# When building multilibbed target libraries, all the required
# libraries are expected to exist in the multilib directory.
MLIBS=`$(GCC_FOR_TARGET) --print-multi-lib \
| sed -e 's/;.*$$//' -e '/^\.$$/d'` ; \
for mlib in $$MLIBS ; do \
rm -f $${mlib}/$@ || exit 1 ; \
$(LN_S) ../$@ $${mlib}/$@ || exit 1 ; \
done
MLIBS=`$(GCC_FOR_TARGET) --print-multi-lib \
| sed -e 's/;.*$$//' -e '/^\.$$/d'` ; \
for mlib in '' $$MLIBS ; do \
$(STRIP_FOR_TARGET) -o $(@)_T$${mlib} \
-s $(SHLIB_VERPFX).$(*).ver -c -u \
./$${mlib}/libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT).tmp || exit 1 ; \
done
$(LIPO_FOR_TARGET) -output $@ -create $(@)_T*
rm $(@)_T*
libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT): stmp-multilib libgcc_s.10.4.dylib \
libgcc_s.10.5.dylib
# When building multilibbed target libraries, all the required
# libraries are expected to exist in the multilib directory.
MLIBS=`$(GCC_FOR_TARGET) --print-multi-lib \
| sed -e 's/;.*$$//' -e '/^\.$$/d'` ; \
for mlib in '' $$MLIBS ; do \
cp ./$${mlib}/libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT).tmp \
./libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T_$${mlib} || exit 1 ; \
done
$(LIPO_FOR_TARGET) -output libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT) \
-create libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T*
rm libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T*
# From the point-of-view of the Makefiles, libgcc is built by the 'strip'
# and 'lipo' commands above.
LIBGCC=libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT) libgcc_s.10.4.dylib \
libgcc_s.10.5.dylib stmp-multilib
INSTALL_FILES=libgcc_s.10.4.dylib libgcc_s.10.5.dylib libgcc_s.1.dylib
install-darwin-libgcc-stubs : $(INSTALL_FILES) installdirs
for d in $(INSTALL_FILES) ; do \
$(INSTALL_DATA) $$d $(DESTDIR)$(slibdir)/$$d || exit 1 ; \
done
if [ -f $(DESTDIR)$(slibdir)/libgcc_s_ppc64.1.dylib ]; then \
rm -f $(DESTDIR)$(slibdir)/libgcc_s_ppc64.1.dylib; \
else true; fi
$(LN_S) libgcc_s.1.dylib \
$(DESTDIR)$(slibdir)/libgcc_s_ppc64.1.dylib
if [ -f $(DESTDIR)$(slibdir)/libgcc_s_x86_64.1.dylib ]; then \
rm -f $(DESTDIR)$(slibdir)/libgcc_s_x86_64.1.dylib; \
else true; fi
$(LN_S) libgcc_s.1.dylib \
$(DESTDIR)$(slibdir)/libgcc_s_x86_64.1.dylib
INSTALL_LIBGCC = install-darwin-libgcc-stubs install-multilib
# To keep DRIVER_DEFINES correct.
SHLIB_LINK = dummy

2
gcc/configure vendored
View File

@ -16421,7 +16421,7 @@ all_languages=
all_boot_languages=
all_compilers=
all_stagestuff=
all_outputs='Makefile gccbug mklibgcc libada-mk'
all_outputs='Makefile gccbug libada-mk'
# List of language makefile fragments.
all_lang_makefrags=
# List of language subdirectory makefiles. Deprecated.

View File

@ -3470,7 +3470,7 @@ all_languages=
all_boot_languages=
all_compilers=
all_stagestuff=
all_outputs='Makefile gccbug mklibgcc libada-mk'
all_outputs='Makefile gccbug libada-mk'
# List of language makefile fragments.
all_lang_makefrags=
# List of language subdirectory makefiles. Deprecated.

View File

@ -40,9 +40,6 @@ used.
@item
@file{intl/Makefile} is constructed from @file{intl/Makefile.in}.
@item
@file{mklibgcc}, a shell script to create a Makefile to build libgcc,
is constructed from @file{mklibgcc.in}.
@item
If a language @file{config-lang.in} file (@pxref{Front End Config, ,
The Front End @file{config-lang.in} File}) sets @code{outputs}, then
the files listed in @code{outputs} there are also generated.

View File

@ -1,935 +0,0 @@
#!/bin/sh
# Construct makefile for libgcc.
# Copyright (C) 2000, 2002, 2003, 2004, 2005, 2006
# Free Software Foundation, Inc.
#
# This file is part of GCC.
# Arguments, taken from the environment, since there are a lot
# of them, and positional args becomes quite ugly.
#
# objext
# LIB1ASMFUNCS
# LIB2FUNCS_ST
# LIB2FUNCS_EXCLUDE
# LIBGCOV
# LIB2ADD
# LIB2ADD_ST
# LIB2ADDEH
# LIB2ADDEHSTATIC
# LIB2ADDEHSHARED
# LIB2ADDEHDEP
# LIBUNWIND
# LIBUNWINDDEP
# SHLIBUNWIND_LINK
# SHLIBUNWIND_INSTALL
# FPBIT
# FPBIT_FUNCS
# LIB2_DIVMOD_FUNCS
# LIB2_SIDITI_CONV_FUNCS
# DFP_ENABLE
# DFP_CFLAGS
# DPBIT
# DPBIT_FUNCS
# TPBIT
# TPBIT_FUNCS
# D32PBIT
# D32PBIT_FUNCS
# D64PBIT
# D64PBIT_FUNCS
# D128PBIT
# D128PBIT_FUNCS
# LIBGCC
# MULTILIBS
# EXTRA_MULTILIB_PARTS
# SHLIB_EXT
# SHLIB_LINK
# SHLIB_MKMAP
# SHLIB_MKMAP_OPTS
# SHLIB_MAPFILES
# SHLIB_NM_FLAGS
# SHLIB_INSTALL
# MULTILIB_OSDIRNAMES
# ASM_HIDDEN_OP
# GCC_FOR_TARGET
# Make needs VPATH to be literal.
echo 'srcdir = @srcdir@'
echo 'VPATH = @srcdir@'
echo 'EQ = ='
echo 'objects = $(filter %'$objext',$^)'
echo
echo '# Dependencies are accumulated as we go.'
echo 'all: stmp-dirs'
echo 'dirs = libgcc'
echo
# Library members defined in libgcc2.c.
# The floating-point conversion routines that involve a single-word integer.
# XX stands for the integer mode.
swfloatfuncs=
for mode in sf df xf; do
swfloatfuncs="$swfloatfuncs _fixuns${mode}XX"
done
# Likewise double-word routines.
dwfloatfuncs=
for mode in sf df xf tf; do
dwfloatfuncs="$dwfloatfuncs _fix${mode}XX _fixuns${mode}XX"
dwfloatfuncs="$dwfloatfuncs _floatXX${mode} _floatunXX${mode}"
done
# Entries of the form <objfile>:<func>:<wordsize> indicate that libgcc2.c
# should be compiled with L<func> defined and with LIBGCC2_UNITS_PER_WORD
# set to <wordsize>. <objfile> is the name of the associated object file
lib2funcs='_muldi3 _negdi2 _lshrdi3 _ashldi3 _ashrdi3
_cmpdi2 _ucmpdi2 _clear_cache
_enable_execute_stack _trampoline __main _absvsi2 _absvdi2 _addvsi3
_addvdi3 _subvsi3 _subvdi3 _mulvsi3 _mulvdi3 _negvsi2 _negvdi2 _ctors
_ffssi2 _ffsdi2 _clz _clzsi2 _clzdi2 _ctzsi2 _ctzdi2 _popcount_tab
_popcountsi2 _popcountdi2 _paritysi2 _paritydi2 _powisf2 _powidf2
_powixf2 _powitf2 _mulsc3 _muldc3 _mulxc3 _multc3 _divsc3 _divdc3
_divxc3 _divtc3 _bswapsi2 _bswapdi2'
if [ "$LIB2_SIDITI_CONV_FUNCS" ]; then
for func in $swfloatfuncs; do
sifunc=`echo $func | sed -e 's/XX/si/'`
lib2funcs="$lib2funcs $sifunc:$sifunc:4"
done
for func in $dwfloatfuncs; do
difunc=`echo $func | sed -e 's/XX/di/'`
tifunc=`echo $func | sed -e 's/XX/ti/'`
lib2funcs="$lib2funcs $difunc:$difunc:4 $tifunc:$difunc:8"
done
else
lib2funcs="$lib2funcs `echo $swfloatfuncs | sed -e 's/XX/si/g'`"
lib2funcs="$lib2funcs `echo $dwfloatfuncs | sed -e 's/XX/di/g'`"
fi
# Disable SHLIB_LINK if shared libgcc not enabled.
if [ "@enable_shared@" = "no" ]; then
SHLIB_LINK=""
fi
# Build lines.
gcc_compile='$(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(INCLUDES)'
gcc_s_compile="$gcc_compile -DSHARED"
make_compile='$(MAKE) GCC_FOR_TARGET="$(GCC_FOR_TARGET)" \
AR_FOR_TARGET="$(AR_FOR_TARGET)" \
AR_CREATE_FOR_TARGET="$(AR_CREATE_FOR_TARGET)" \
AR_EXTRACT_FOR_TARGET="$(AR_EXTRACT_FOR_TARGET)" \
AR_FLAGS_FOR_TARGET="$(AR_FLAGS_FOR_TARGET)" \
CC="$(CC)" CFLAGS="$(CFLAGS)" \
BUILD_PREFIX="$(BUILD_PREFIX)" \
BUILD_PREFIX_1="$(BUILD_PREFIX_1)" \
LANGUAGES="$(LANGUAGES)"'
# Generic dependencies for libgcc
libgcc_dep='$(CONFIG_H) coretypes.h $(TM_H) $(MACHMODE_H) longlong.h config.status stmp-int-hdrs tsystem.h'
# Dependencies for libgcc2.c
libgcc2_c_dep='stmp-dirs $(srcdir)/libgcc2.c $(srcdir)/libgcc2.h gbl-ctors.h'" $libgcc_dep"
# Dependencies for libgcov.c
libgcov_c_dep='stmp-dirs $(srcdir)/libgcov.c $(srcdir)/gcov-io.h $(srcdir)/gcov-io.c gcov-iov.h'" $libgcc_dep"
# Dependencies for fp-bit.c
fpbit_c_dep='stmp-dirs config.status tsystem.h'
# Dependencies for decnumber and friends. This is an overzealous set,
# but at least we can be sure to recompile if anything gets modified.
decnumber_dep='stmp-dirs $(srcdir)/../libdecnumber/decContext.h $(srcdir)/../libdecnumber/decNumber.h
$(srcdir)/../libdecnumber/decNumberLocal.h $(srcdir)/../libdecnumber/decimal32.h $(srcdir)/../libdecnumber/decimal64.h
$(srcdir)/../libdecnumber/decimal128.h $(srcdir)/../libdecnumber/decDPD.h $(srcdir)/../libdecnumber/decUtility.h'
# Dependencies for dfp-bit.c
dfpbit_c_dep='$(srcdir)/../libdecnumber/decRound.h'" $libgcc_dep $decnumber_dep"
# Flag whether we need eh_dummy.c
need_eh_dummy=
if [ "$SHLIB_LINK" ]; then
# Test -fvisibility=hidden. We need both a -fvisibility=hidden on
# the command line, and a #define to prevent libgcc2.h etc from
# overriding that with #pragmas. The dance with @ is to prevent
# echo from seeing anything it might take for an option.
# echo turns the \$\$\$\$ into $$$$ and when make sees it it
# becomes $$ and the shell substitutes the pid. Makes for a
# slightly safer temp file.
echo "vis_hide := \$(strip \$(subst @,-,\\"
echo " \$(shell if echo 'void foo(void); void foo(void) {}' | \\"
echo " $gcc_compile -fvisibility=hidden -Werror \\"
echo " -c -xc - -o vis_temp_file\$\$\$\$.o 2> /dev/null; \\"
echo " then echo @fvisibility=hidden @DHIDE_EXPORTS; \\"
echo " rm vis_temp_file\$\$\$\$.o 2> /dev/null; \\"
echo " fi)))"
echo
# If we have -fvisibility=hidden, then we need to generate hide
# lists for object files implemented in assembly. The default
# pseudo-op for this is ".hidden", but can be overridden with
# ASM_HIDDEN_OP.
[ "$ASM_HIDDEN_OP" ] || ASM_HIDDEN_OP=".hidden"
echo "ifneq (,\$(vis_hide))"
echo "define gen-hide-list"
echo "\$(NM_FOR_TARGET) ${SHLIB_NM_FLAGS} \$< | \\"
# non-GNU nm emits three fields even for undefined and typeless symbols,
# so explicitly omit them
echo " \$(AWK) 'NF == 3 && \$\$2 !~ /^[UN]\$\$/ { print \"\\t${ASM_HIDDEN_OP}\", \$\$3 }' > \$@T"
echo "mv -f \$@T \$@"
echo "endef"
echo "else"
echo "gen-hide-list = echo > \$@"
echo "endif"
echo
else
# It is too hard to guarantee that vis_hide and gen-hide-list will never
# be referenced if SHLIB_LINK is not set, so set them to the values they'd
# have if SHLIB_LINK were set and we didn't have visibility support.
echo "vis_hide ="
echo "gen-hide-list = echo > \$@"
fi
# Remove any objects from lib2funcs and LIB2_DIVMOD_FUNCS that are
# defined as optimized assembly code in LIB1ASMFUNCS or as C code
# in LIB2FUNCS_EXCLUDE.
for name in $LIB1ASMFUNCS $LIB2FUNCS_EXCLUDE; do
lib2funcs=`echo $lib2funcs | sed -e 's/^'$name'[ :]//' \
-e 's/ '$name'[ :]/ /' \
-e 's/ '$name'$//'`
LIB2_DIVMOD_FUNCS=`echo $LIB2_DIVMOD_FUNCS | sed -e 's/^'$name' //' \
-e 's/ '$name' / /' \
-e 's/ '$name'$//'`
done
#
# Rules to generate object files.
#
for ml in $MULTILIBS; do
# Work out relevant parameters that depend only on the multilib.
dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
shlib_slibdir_qual=
libgcc_a=$dir/libgcc.a
libgcov_a=$dir/libgcov.a
libgcc_eh_a=
libgcc_s_so=
libunwind_a=
libunwind_so=
if [ "$LIBUNWIND" ]; then
libunwind_a=$dir/libunwind.a
fi
if [ "$SHLIB_LINK" ]; then
libgcc_eh_a=$dir/libgcc_eh.a
libgcc_s_so=$dir/libgcc_s${SHLIB_EXT}
if [ "$LIBUNWIND" ]; then
libunwind_so=$dir/libunwind${SHLIB_EXT}
fi
os_multilib_dir=`$GCC_FOR_TARGET $flags --print-multi-os-directory`
if [ "$os_multilib_dir" != . ]; then
shlib_slibdir_qual="/$os_multilib_dir"
fi
fi
libgcc_s_so_extra=
libunwind_so_extra=
echo
echo \#
echo \# ml: $ml
echo \# dir: $dir
echo \# flags: $flags
echo \# libgcc_a: $libgcc_a
echo \# libgcov_a: $libgcov_a
echo \# libgcc_eh_a: $libgcc_eh_a
echo \# libunwind_a: $libunwind_a
echo \#
echo \# shlib_slibdir_qual: $shlib_slibdir_qual
echo \# libgcc_s_so: $libgcc_s_so
echo \# libunwind_so: $libunwind_so
echo \#
echo
# Update list of directories.
if [ $dir != . ]; then
echo "dirs += ${dir} libgcc/${dir}"
echo
fi
#
# Build libgcc1 components.
#
for name in $LIB1ASMFUNCS; do
if [ "$libgcc_s_so" ]; then
out="libgcc/${dir}/${name}${objext}"
outS="libgcc/${dir}/${name}_s${objext}"
outV="libgcc/${dir}/${name}.vis"
echo ${outS}: stmp-dirs '$(srcdir)/config/$(LIB1ASMSRC)'
echo " $gcc_s_compile" $flags -DL$name -xassembler-with-cpp \
-c '$(srcdir)/config/$(LIB1ASMSRC)' -o $outS
echo ${out}: stmp-dirs '$(srcdir)/config/$(LIB1ASMSRC)' ${outV}
echo " $gcc_compile" $flags -DL$name -xassembler-with-cpp \
-c '$(srcdir)/config/$(LIB1ASMSRC)' -include $outV -o $out
echo "${outV}: ${outS}; \$(gen-hide-list)"
echo $libgcc_a: $out
echo $libgcc_s_so: $outS
if [ "$SHLIB_MKMAP" ]; then
echo libgcc/${dir}/libgcc.map: $outS
fi
else
out="libgcc/${dir}/${name}${objext}"
echo ${out}: stmp-dirs '$(srcdir)/config/$(LIB1ASMSRC)'
echo " $gcc_compile" $flags -DL$name -xassembler-with-cpp \
-c '$(srcdir)/config/$(LIB1ASMSRC)' -o $out
echo $libgcc_a: $out
fi
done
#
# Build libgcc2 components.
#
for name in $lib2funcs; do
case $name in
*:*:*)
defines=`echo $name | sed -e 's/.*:\(.*\):\(.*\)/-DL\1 -DLIBGCC2_UNITS_PER_WORD=\2/'`
name=`echo $name | sed -e 's/\(.*\):.*:.*/\1/'`
;;
*)
defines="-DL$name"
;;
esac
if [ "$libgcc_s_so" ]; then
out="libgcc/${dir}/${name}${objext}"
outS="libgcc/${dir}/${name}_s${objext}"
echo $outS: $libgcc2_c_dep
echo " $gcc_s_compile" $flags $defines -c '$(srcdir)/libgcc2.c' \
-o $outS
echo $out: $libgcc2_c_dep
echo " $gcc_compile" $flags $defines '$(vis_hide)' \
-c '$(srcdir)/libgcc2.c' -o $out
echo $libgcc_a: $out
echo $libgcc_s_so: $outS
if [ "$SHLIB_MKMAP" ]; then
echo libgcc/${dir}/libgcc.map: $outS
fi
else
out="libgcc/${dir}/${name}${objext}"
echo ${out}: stmp-dirs '$(srcdir)/config/$(LIB1ASMSRC)'
echo " $gcc_compile" $flags $defines -c '$(srcdir)/libgcc2.c' -o $out
echo $libgcc_a: $out
fi
done
for name in $LIB2FUNCS_ST; do
out="libgcc/${dir}/${name}${objext}"
echo $out: $libgcc2_c_dep
echo " $gcc_compile" $flags -DL$name '$(vis_hide)' \
-c '$(srcdir)/libgcc2.c' -o $out
echo ${dir}/libgcc.a: $out
done
for name in $LIB2_DIVMOD_FUNCS; do
if [ "$libgcc_s_so" ]; then
out="libgcc/${dir}/${name}${objext}"
outS="libgcc/${dir}/${name}_s${objext}"
echo $outS: $libgcc2_c_dep
echo " $gcc_s_compile" $flags -DL$name \
-fexceptions -fnon-call-exceptions -c '$(srcdir)/libgcc2.c' -o $outS
echo $out: $libgcc2_c_dep
echo " $gcc_compile" $flags -DL$name '$(vis_hide)' \
-fexceptions -fnon-call-exceptions -c '$(srcdir)/libgcc2.c' -o $out
echo $libgcc_a: $out
echo $libgcc_s_so: $outS
if [ "$SHLIB_MKMAP" ]; then
echo libgcc/${dir}/libgcc.map: $outS
fi
else
out="libgcc/${dir}/${name}${objext}"
echo ${out}: stmp-dirs '$(srcdir)/config/$(LIB1ASMSRC)'
echo " $gcc_compile" $flags -DL$name \
-fexceptions -fnon-call-exceptions -c '$(srcdir)/libgcc2.c' -o $out
echo $libgcc_a: $out
fi
done
#
# Build software floating point functions.
#
for fpbit_var in FPBIT DPBIT TPBIT ; do
fpfuncs_var="${fpbit_var}_FUNCS"
eval fpbit=\$$fpbit_var
eval fpfuncs=\$$fpfuncs_var
if [ "$fpbit" ] ; then
for name in $fpfuncs; do
case "$name" in
# _sf_to_tf and _df_to_tf require tp-bit.c
# being compiled in.
_[sd]f_to_tf) [ -z "$TPBIT" ] && continue;;
esac
if [ "$libgcc_s_so" ]; then
out="libgcc/${dir}/${name}${objext}"
outS="libgcc/${dir}/${name}_s${objext}"
echo $outS: $fpbit $fpbit_c_dep
echo " $gcc_s_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
-c $fpbit -o $outS
echo $out: $fpbit $fpbit_c_dep
echo " $gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
'$(vis_hide)' -c $fpbit -o $out
echo $libgcc_a: $out
echo $libgcc_s_so: $outS
if [ "$SHLIB_MKMAP" ]; then
echo libgcc/${dir}/libgcc.map: $outS
fi
else
out="libgcc/${dir}/${name}${objext}"
echo $out: $fpbit $fpbit_c_dep
echo " $gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
-c $fpbit -o $out
echo $libgcc_a: $out
fi
done
fi
done
if [ "@enable_decimal_float@" = "yes" -a -z "$libgcc_so" ]; then
# If $DFP_ENABLE is set, then we want all data type sizes.
if [ "$DFP_ENABLE" ] ; then
D32PBIT=1; D64PBIT=1; D128PBIT=1
fi
# Bring in the DFP support code if D32PBIT, D64PBIT or D128PBIT are set.
if [ -n "$D32PBIT" -o -n "$D64PBIT" -o -n "$D128PBIT" ] ; then
dec_filenames="decContext decNumber decRound decLibrary decUtility"
fi
# Only bring in decimal*.c files for types we support.
if [ -n "$D32PBIT" ] ; then
dec_filenames="$dec_filenames decimal32"
fi
if [ -n "$D64PBIT" ] ; then
dec_filenames="$dec_filenames decimal64"
fi
if [ -n "$D128PBIT" ] ; then
dec_filenames="$dec_filenames decimal128"
fi
for name in $dec_filenames ; do
out="libgcc/${dir}/${name}${objext}"
echo $out: "\$(srcdir)/../libdecnumber/${name}.c" $decnumber_dep
echo " $gcc_compile" $flags -c "\$(srcdir)/../libdecnumber/${name}.c" -o $out
echo $libgcc_a: $out
done
# For individual functions, loop over each variable by name.
for dpbit_var in D32PBIT D64PBIT D128PBIT ; do
dpfuncs_var="${dpbit_var}_FUNCS"
eval dpbit=\$$dpbit_var
eval dpfuncs=\$$dpfuncs_var
case "$dpbit_var" in
D32PBIT) dpwidth=32 ;;
D64PBIT) dpwidth=64 ;;
D128PBIT) dpwidth=128 ;;
esac
if [ "$dpbit" ]; then
for name in $dpfuncs; do
out="libgcc/${dir}/${name}${objext}"
echo $out: config/dfp-bit.h config/dfp-bit.c $dfpbit_c_dep
echo " $gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name -DWIDTH=$dpwidth \
$DFP_CFLAGS -c $\(srcdir\)/config/dfp-bit.c -o $out
echo $libgcc_a: $out
done
fi
done
fi
for file in $LIB2ADD; do
name=`echo $file | sed -e 's/[.][cS]$//' -e 's/[.]asm$//'`
oname=`echo $name | sed -e 's,.*/,,'`
if [ "$libgcc_s_so" ]; then
out="libgcc/${dir}/${oname}${objext}"
outS="libgcc/${dir}/${oname}_s${objext}"
case $file in
*.c)
echo $outS: stmp-dirs $file $libgcc_dep
echo " $gcc_s_compile" $flags -c $file -o $outS
echo $out: stmp-dirs $file $libgcc_dep
echo " $gcc_compile" $flags '$(vis_hide)' -c $file -o $out
;;
*.asm | *.S)
outV="libgcc/${dir}/${oname}.vis"
echo $outS: stmp-dirs $file $libgcc_dep
echo " $gcc_s_compile" $flags -xassembler-with-cpp \
-c $file -o $outS
echo $out: stmp-dirs $file $libgcc_dep $outV
echo " $gcc_compile" $flags -xassembler-with-cpp \
-include $outV -c $file -o $out
echo "${outV}: ${outS}; \$(gen-hide-list)"
;;
*)
echo "Unhandled extension: $file" >&2
exit 1
;;
esac
echo $libgcc_a: $out
echo $libgcc_s_so: $outS
if [ "$SHLIB_MKMAP" ]; then
echo libgcc/${dir}/libgcc.map: $outS
fi
else
out="libgcc/${dir}/${oname}${objext}"
case $file in
*.c)
echo $out: stmp-dirs $file $libgcc_dep
echo " $gcc_compile" $flags -c $file -o $out
;;
*.asm | *.S)
echo $out: stmp-dirs $file $libgcc_dep
echo " $gcc_compile" $flags -xassembler-with-cpp \
-c $file -o $out
;;
*)
echo "Unhandled extension: $file" >&2
exit 1
;;
esac
echo $libgcc_a: $out
fi
done
for file in $LIB2ADD_ST; do
name=`echo $file | sed -e 's/[.][cSo]$//' -e 's/[.]asm$//'`
oname=`echo $name | sed -e 's,.*/,,'`
out="libgcc/${dir}/${oname}${objext}"
case $file in
*.c)
echo $out: stmp-dirs $file $libgcc_dep
echo " $gcc_compile" $flags '$(vis_hide)' -c $file -o $out
;;
*.asm | *.S)
# We may have to compile it twice in order to establish the list
# of symbols to be marked hidden.
if [ "$libgcc_so" ]; then
outV="libgcc/${dir}/${oname}.vis"
outT="libgcc/${dir}/${oname}_t${objext}"
echo ${outT}: stmp-dirs $file $libgcc_dep
echo " $gcc_compile" $flags -xassembler-with-cpp \
-c $file -o ${outT}
echo $out: stmp-dirs $file $libgcc_dep $outV
echo " $gcc_compile" $flags -xassembler-with-cpp \
-include $outV -c $file -o $out
echo "${outV}: ${outT}; \$(gen-hide-list)"
else
echo $out: stmp-dirs $file $libgcc_dep
echo " $gcc_compile" $flags -xassembler-with-cpp \
-c $file -o $out
fi
;;
*)
echo "Unhandled extension: $file" >&2
exit 1
;;
esac
echo $libgcc_a: $out
done
# If we don't have libgcc_eh.a, only LIB2ADDEH matters. If we do, only
# LIB2ADDEHSTATIC and LIB2ADDEHSHARED matter. (Usually all three are
# identical.)
if [ "$libgcc_eh_a" ]; then
for file in $LIB2ADDEHSTATIC; do
name=`echo $file | sed -e 's/[.][cSo]$//' -e 's/[.]asm$//'`
oname=`echo $name | sed -e 's,.*/,,'`
out="libgcc/${dir}/${oname}${objext}"
case $file in
*.c)
echo $out: stmp-dirs $file $LIB2ADDEHDEP $libgcc_dep
echo " $gcc_compile" $flags -fexceptions '$(vis_hide)' -c $file -o $out
;;
*.asm | *.S)
# We have to compile it twice in order to establish the list
# of symbols to be marked hidden.
outV="libgcc/${dir}/${oname}.vis"
outT="libgcc/${dir}/${oname}_t${objext}"
echo ${outT}: stmp-dirs $file $LIB2ADDEHDEP $libgcc_dep
echo " $gcc_compile" $flags -xassembler-with-cpp \
-c $file -o ${outT}
echo $out: stmp-dirs $file $LIB2ADDEHDEP $libgcc_dep $outV
echo " $gcc_compile" $flags -xassembler-with-cpp \
-include $outV -c $file -o $out
echo "${outV}: ${outT}; \$(gen-hide-list)"
;;
*) echo "Unhandled extension: $file">&2; exit 1 ;;
esac
echo $libgcc_eh_a: $out
done
for file in $LIB2ADDEHSHARED; do
name=`echo $file | sed -e 's/[.][cSo]$//' -e 's/[.]asm$//'`
oname=`echo $name | sed -e 's,.*/,,'`
outS="libgcc/${dir}/${oname}_s${objext}"
case $file in
*.c)
echo $outS: stmp-dirs $file $LIB2ADDEHDEP $libgcc_dep
echo " $gcc_s_compile" $flags -fexceptions -c $file -o $outS
;;
*.asm | *.S)
echo $outS: stmp-dirs $file $LIB2ADDEHDEP $libgcc_dep
echo " $gcc_s_compile" $flags -xassembler-with-cpp -c $file -o $outS
;;
*) echo "Unhandled extension: $file">&2; exit 1 ;;
esac
echo $libgcc_s_so: $outS
if [ "$SHLIB_MKMAP" ]; then
echo libgcc/${dir}/libgcc.map: $outS
fi
done
# If nothing went into libgcc_eh.a, create a dummy object -
# some linkers don't like totally empty archives.
if [ -z "$LIB2ADDEHSTATIC" ]; then
file=eh_dummy.c
out="libgcc/${dir}/eh_dummy${objext}"
need_eh_dummy=1
echo $out: stmp-dirs $file
echo " $gcc_compile" $flags '$(vis_hide)' -fexceptions -c $file -o $out
echo $libgcc_eh_a: $out
fi
else # no libgcc_eh.a
for file in $LIB2ADDEH; do
name=`echo $file | sed -e 's/[.][cSo]$//' -e 's/[.]asm$//'`
oname=`echo $name | sed -e 's,.*/,,'`
out="libgcc/${dir}/${oname}${objext}"
case $file in
*.c)
echo $out: stmp-dirs $file $LIB2ADDEHDEP $libgcc_dep
echo " $gcc_compile" $flags '$(vis_hide)' -fexceptions -c $file -o $out
;;
*.asm | *.S)
echo $out: stmp-dirs $file $LIB2ADDEHDEP $libgcc_dep
echo " $gcc_compile" $flags -xassembler-with-cpp \
-c $file -o $out
;;
*) echo "Unhandled extension: $file">&2; exit 1 ;;
esac
echo $libgcc_a: $out
done
fi
# We do _not_ handle assembly files in this context.
if [ "$LIBUNWIND" ]; then
for file in $LIBUNWIND; do
case $file in
*.c) ;;
*) echo "Unhandled extension: $file">&2; exit 1 ;;
esac
name=`echo $file | sed -e 's/[.]c$//'`
oname=`echo $name | sed -e 's,.*/,,'`
if [ "$libunwind_so" ]; then
out="libgcc/${dir}/${oname}${objext}"
outS="libgcc/${dir}/${oname}_s${objext}"
echo $out: stmp-dirs $file $LIBUNWINDDEP
echo " $gcc_compile $flags -fexceptions \$(vis_hide) -c $file -o $out"
echo $outS: stmp-dirs $file $LIBUNWINDDEP
echo " $gcc_s_compile $flags -fexceptions -c $file -o $outS"
echo $libunwind_a: $out
echo $libunwind_so: $outS
else
out="libgcc/${dir}/${oname}${objext}"
echo $out: stmp-dirs $file $LIBUNWINDDEP
echo " $gcc_compile $flags -fexceptions \$(vis_hide) -c $file -o $out"
echo $libunwind_a: $out
fi
done
fi
#
# build libgcov components
#
for name in $LIBGCOV; do
dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
out="libgcc/${dir}/${name}${objext}"
echo $out: $libgcov_c_dep
echo " $gcc_compile $flags -DL$name -c \$(srcdir)/libgcov.c -o $out"
echo $libgcov_a: $out
done
# EXTRA_MULTILIB_PARTS.
if [ -n "$EXTRA_MULTILIB_PARTS" ]; then
# Each of the EXTRA_MULTILIB_PARTS is built by recursive invocation
# of the parent Makefile. We must do this just once for each
# multilib, passing it all the EXTRA_MULTILIB_PARTS as
# simultaneous goal targets, so that rules which cannot execute
# simultaneously are properly serialized.
extra=
echo
for f in $EXTRA_MULTILIB_PARTS; do
case $dir in
.) out=$f ; t= ;;
*) out=$dir/$f ; t=$dir/ ;;
esac
case $out in
# Prevent `make' from interpreting $out as a macro assignment
*'$(EQ)'*) targ="T_TARGET=$out T_TARGET" ;;
*) targ=$out ;;
esac
extra="$extra $targ"
done
if [ "$dir" = . ]; then
suffix=
else
suffix=`echo $dir | sed s,/,_,g`
fi
echo extra$suffix: stmp-dirs
echo " $make_compile" \\
echo ' LIBGCC2_CFLAGS="$(LIBGCC2_CFLAGS)' $flags '" ' \\
echo ' MULTILIB_CFLAGS="'$flags'"' T=$t $extra
echo "all: extra$suffix"
# Make libunwind.so and libgcc_s.so depend on these, since they
# are likely to be implicitly used by the link process.
if [ "$libgcc_s_so" ]; then
echo "$libgcc_s_so: extra$suffix"
fi
if [ "$libunwind_so" ]; then
echo "$libunwind_so: extra$suffix"
fi
fi
# Library build rules.
dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
# Map-file generation.
if [ "$SHLIB_LINK" -a "$SHLIB_MKMAP" ]; then
mapfile="libgcc/${dir}/libgcc.map"
tmpmapfile="libgcc/${dir}/tmp-libgcc.map"
# This uses a here document instead of echos because some shells
# will convert the \1 in the second sed command to a control-A.
# The behavior of here documents is more predictable.
cat <<EOF
${mapfile}: $SHLIB_MKMAP $SHLIB_MAPFILES
{ \$(NM_FOR_TARGET) $SHLIB_NM_FLAGS \$(objects); echo %%; \\
cat $SHLIB_MAPFILES \\
| sed -e '/^[ ]*#/d' \\
-e 's/^%\(if\|else\|elif\|endif\|define\)/#\1/' \\
| $gcc_compile $flags -E -xassembler-with-cpp -; \\
} | \$(AWK) -f $SHLIB_MKMAP $SHLIB_MKMAP_OPTS > ${tmpmapfile}
mv '$tmpmapfile' \$@
$libgcc_s_so: ${mapfile}
EOF
fi
# Static libraries.
# Each of these .a files depends on stmp-dirs. It would seem that
# this dependency is redundant, since each of the object files
# itself depends on stmp-dirs. However, it is possible that there
# are in fact no object files. In that case, the stmp-dirs
# dependency is required; the directory containing the archive must
# exist before the archive itself can be created.
echo ""
echo "$libgcc_a: stmp-dirs"
echo " -rm -f $libgcc_a"
echo ' $(AR_CREATE_FOR_TARGET)' $libgcc_a '$(objects)'
echo ' $(RANLIB_FOR_TARGET)' $libgcc_a
echo "all: $libgcc_a"
echo ""
echo "$libgcov_a: stmp-dirs"
echo " -rm -f $libgcov_a"
echo ' $(AR_CREATE_FOR_TARGET)' $libgcov_a '$(objects)'
echo ' $(RANLIB_FOR_TARGET)' $libgcov_a
echo "all: $libgcov_a"
# These libraries are not always built.
if [ "$libunwind_a" ]; then
echo ""
echo "$libunwind_a: stmp-dirs"
echo " -rm -f $libunwind_a"
echo ' $(AR_CREATE_FOR_TARGET)' $libunwind_a '$(objects)'
echo ' $(RANLIB_FOR_TARGET)' $libunwind_a
echo "all: $libunwind_a"
fi
if [ "$libgcc_eh_a" ]; then
echo ""
echo "${dir}/libgcc_eh.a: stmp-dirs"
echo " -rm -f ${dir}/libgcc_eh.a"
echo ' $(AR_CREATE_FOR_TARGET)' ${dir}/libgcc_eh.a '$(objects)'
echo ' $(RANLIB_FOR_TARGET)' ${dir}/libgcc_eh.a
echo "all: $libgcc_eh_a"
fi
# Shared libraries.
if [ "$libgcc_s_so" ]; then
echo ""
echo "$libgcc_s_so: stmp-dirs $libunwind_so"
echo " $SHLIB_LINK" \
| sed -e "s%@multilib_flags@%$flags%g" \
-e "s%@multilib_dir@%$dir%g" \
-e "s%@shlib_objs@%\$(objects)%g" \
-e "s%@shlib_base_name@%libgcc_s%g" \
-e "s%@shlib_map_file@%$mapfile%g" \
-e "s%@shlib_slibdir_qual@%$shlib_dir_qual%g"
echo "all: $libgcc_s_so"
fi
if [ "$libunwind_so" ]; then
echo ""
echo "$libunwind_so: stmp-dirs"
echo " $SHLIBUNWIND_LINK" \
| sed -e "s%@multilib_flags@%$flags%g" \
-e "s%@multilib_dir@%$dir%g" \
-e "s%@shlib_objs@%\$(objects)%g" \
-e "s%@shlib_base_name@%libunwind%g" \
-e "s%@shlib_slibdir_qual@%$shlib_dir_qual%g"
echo "all: $libunwind_so"
fi
done # ml in MULTILIBS
echo
echo "libgcc-stage-start:"
echo " for dir in \$(dirs); do \\"
echo " if [ -d \$(stage)/\$\$dir ]; then :; \\"
echo " else $mkinstalldirs \$(stage)/\$\$dir; fi; \\"
echo " done"
echo " -for dir in \$(dirs); do \\"
echo " mv \$\$dir/*${objext} \$(stage)/\$\$dir; \\"
echo " mv \$\$dir/*.vis \$(stage)/\$\$dir; \\"
echo " mv \$\$dir/*.map \$(stage)/\$\$dir; \\"
echo " test ! -f \$\$dir/libgcc.a || mv \$\$dir/lib* \$(stage)/\$\$dir; \\"
echo " done"
echo
echo "stmp-dirs:"
echo " for d in \$(dirs); do \\"
echo " if [ -d \$\$d ]; then true; else $mkinstalldirs \$\$d; fi; \\"
echo " done"
echo " if [ -f stmp-dirs ]; then true; else touch stmp-dirs; fi"
if [ "$need_eh_dummy" ]; then
echo "eh_dummy.c:"
echo " echo 'int __libgcc_eh_dummy;' > \$@"
fi
echo ""
echo "install: all"
for ml in $MULTILIBS; do
dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
if [ $dir != . ]; then
ldir='$(DESTDIR)$(libsubdir)'/$dir
echo " if [ -d $ldir ]; then true; else $mkinstalldirs $ldir; chmod a+rx $ldir; fi;"
else
ldir='$(DESTDIR)$(libsubdir)'
fi
echo ' $(INSTALL_DATA)' ${dir}/libgcc.a ${ldir}/
echo ' chmod 644' ${ldir}/libgcc.a
echo ' $(RANLIB_FOR_TARGET)' ${ldir}/libgcc.a
echo ' $(INSTALL_DATA)' ${dir}/libgcov.a ${ldir}/
echo ' chmod 644' ${ldir}/libgcov.a
echo ' $(RANLIB_FOR_TARGET)' ${ldir}/libgcov.a
if [ "$SHLIB_LINK" ]; then
echo ' $(INSTALL_DATA)' ${dir}/libgcc_eh.a ${ldir}/
echo ' chmod 644' ${ldir}/libgcc_eh.a
echo ' $(RANLIB_FOR_TARGET)' ${ldir}/libgcc_eh.a
shlib_slibdir_qual=
os_multilib_dir=`$GCC_FOR_TARGET $flags --print-multi-os-directory`
if [ "$os_multilib_dir" != . ]; then
shlib_slibdir_qual="/$os_multilib_dir"
fi
echo " $SHLIB_INSTALL" \
| sed -e "s%@multilib_dir@%$dir%g" \
-e "s%@shlib_base_name@%libgcc_s%g" \
-e "s%@shlib_slibdir_qual@%$shlib_slibdir_qual%g"
if [ "$LIBUNWIND" ]; then
echo " $SHLIBUNWIND_INSTALL" \
| sed -e "s%@multilib_dir@%$dir%g" \
-e "s%@shlib_base_name@%libunwind%g" \
-e "s%@shlib_slibdir_qual@%$shlib_slibdir_qual%g"
libunwinddir='$(DESTDIR)$(slibdir)$(shlib_slibdir_qual)/$(shlib_dir)'
echo ' $(INSTALL_DATA)' ${dir}/libunwind.a ${libunwinddir}/
echo ' chmod 644' ${dir}/libunwind.a
echo ' $(RANLIB_FOR_TARGET)' ${libunwinddir}/libunwind.a
fi
fi
done
for f in $EXTRA_MULTILIB_PARTS; do
for ml in $MULTILIBS; do
dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
if [ $dir != . ]; then
out=${dir}/$f
ldir='$(DESTDIR)$(libsubdir)'/$dir
else
out=$f
ldir='$(DESTDIR)$(libsubdir)'
fi
echo ' $(INSTALL_DATA)' $out $ldir/
done
done
echo '.PHONY: all install'

10
libgcc/ChangeLog Normal file
View File

@ -0,0 +1,10 @@
2007-01-03 Daniel Jacobowitz <dan@codesourcery.com>
Paolo Bonzini <bonzini@gnu.org>
* Makefile.in, config/i386/t-darwin, config/i386/t-darwin64,
config/i386/t-nwld, config/rs6000/t-darwin, config/rs6000/t-ldbl128,
config/i386/t-crtfm, config/alpha/t-crtfm, config/ia64/t-ia64,
config/sparc/t-crtfm, config/t-slibgcc-darwin,
config/rs6000/t-ppccomm, config.host, configure.ac, empty.mk,
shared-object.mk, siditi-object.mk, static-object.mk: New files.
* configure: Generated.

786
libgcc/Makefile.in Normal file
View File

@ -0,0 +1,786 @@
# Makefile.in
# Copyright (C) 2005, 2006 Free Software Foundation
#
# This file is part of GCC.
#
# GCC is free software; you can redistribute it and/or modify it under the
# terms of the GNU Library General Public License as published by the Free
# Software Foundation; either version 2 of the License, or (at your option)
# any later version.
#
# GCC is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for
# more details.
#
# You should have received a copy of the GNU General Public License along
# with GCC; see the file COPYING. If not, write to the Free Software
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
# USA.
#
libgcc_topdir = @libgcc_topdir@
gcc_srcdir = $(libgcc_topdir)/gcc
gcc_objdir = $(MULTIBUILDTOP)../../gcc
srcdir = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
libdir = @libdir@
SHELL = @SHELL@
enable_shared = @enable_shared@
decimal_float = @decimal_float@
host_noncanonical = @host_noncanonical@
# List of extra object files that should be compiled for this target machine.
# The rules for compiling them should be in the t-* file for the machine.
EXTRA_PARTS = @extra_parts@
# Multilib support variables.
MULTISRCTOP =
MULTIBUILDTOP =
MULTIDIRS =
MULTISUBDIR =
MULTIDO = true
MULTICLEAN = true
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
mkinstalldirs = $(SHELL) $(libgcc_topdir)/mkinstalldirs
objext = .o
AR = @AR@
AR_FLAGS = rc
CC = @CC@
CFLAGS = @CFLAGS@
RANLIB = @RANLIB@
MAKEINFO = @MAKEINFO@
LN_S = @LN_S@
PERL = @PERL@
PWD_COMMAND = $${PWDCMD-pwd}
# Flags to pass to a recursive make.
FLAGS_TO_PASS = \
"AR=$(AR)" \
"AR_FLAGS=$(AR_FLAGS)" \
"CC=$(CC)" \
"CFLAGS=$(CFLAGS)" \
"DESTDIR=$(DESTDIR)" \
"EXTRA_OFILES=$(EXTRA_OFILES)" \
"HDEFINES=$(HDEFINES)" \
"INSTALL=$(INSTALL)" \
"INSTALL_DATA=$(INSTALL_DATA)" \
"INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \
"LDFLAGS=$(LDFLAGS)" \
"LOADLIBES=$(LOADLIBES)" \
"RANLIB=$(RANLIB)" \
"SHELL=$(SHELL)" \
"prefix=$(prefix)" \
"exec_prefix=$(exec_prefix)" \
"libdir=$(libdir)" \
"libsubdir=$(libsubdir)" \
"tooldir=$(tooldir)"
# Dependencies for "all" are set later in the file.
all: all-multi
# Now that we have built all the objects, we need to copy
# them back to the GCC directory. Too many things (other
# in-tree libraries, and DejaGNU) know about the layout
# of the build tree, for now.
$(MAKE) install DESTDIR=$(gcc_objdir) \
slibdir= libsubdir= MULTIOSDIR=$(MULTIDIR)
.PHONY: all-multi
all-multi:
# If this is the top-level multilib, build all the other
# multilibs.
@: $(MAKE) ; exec $(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=all
.PHONY: check installcheck
check:
installcheck:
.PHONY: all clean
clean:
-rm -f config.h stamp-h stmp-ldirs libgcc.map
-rm -f *$(objext)
-rm -f *.dep
-rm -f *.a
-rm -f libunwind$(SHLIB_EXT)
-rm -f libgcc_s*
@$(MULTICLEAN) multi-clean DO=clean
distclean: clean
@$(MULTICLEAN) multi-clean DO=distclean
-rm -f *~ Makefile config.cache config.status multilib.out
-rm -f config.log
maintainer-clean realclean: distclean
Makefile: $(srcdir)/Makefile.in config.status
CONFIG_FILES=Makefile CONFIG_HEADERS= $(SHELL) ./config.status
# Depending on Makefile makes sure that config.status has been re-run
# if needed. This prevents problems with parallel builds.
config.h: stamp-h ; @true
stamp-h: $(srcdir)/config.in config.status Makefile
CONFIG_FILES= CONFIG_HEADERS=config.h:$(srcdir)/config.in $(SHELL) ./config.status
config.status: $(srcdir)/configure
$(SHELL) ./config.status --recheck
include $(gcc_objdir)/libgcc.mvars
# Flags to pass to recursive makes.
AR_FOR_TARGET = $(AR)
AR_FLAGS_FOR_TARGET =
AR_CREATE_FOR_TARGET = $(AR_FOR_TARGET) $(AR_FLAGS_FOR_TARGET) rc
AR_EXTRACT_FOR_TARGET = $(AR_FOR_TARGET) $(AR_FLAGS_FOR_TARGET) x
AWK = @AWK@
GCC_FOR_TARGET = $(CC)
LIPO = @LIPO@
LIPO_FOR_TARGET = $(LIPO)
MACHMODE_H = machmode.h mode-classes.def insn-modes.h
NM = @NM@
NM_FOR_TARGET = $(NM)
RANLIB_FOR_TARGET = $(RANLIB)
STRIP = @STRIP@
STRIP_FOR_TARGET = $(STRIP)
# Directory in which the compiler finds libraries etc.
libsubdir = $(libdir)/gcc/$(host_noncanonical)/$(version)
# Used to install the shared libgcc.
slibdir = @slibdir@
export AR_FOR_TARGET
export AR_CREATE_FOR_TARGET
export AR_FLAGS_FOR_TARGET
export AR_EXTRACT_FOR_TARGET
export AWK
export DESTDIR
export GCC_FOR_TARGET
export INCLUDES
export INSTALL_DATA
export LIB1ASMSRC
export LIBGCC2_CFLAGS
export LIPO_FOR_TARGET
export MACHMODE_H
export NM_FOR_TARGET
export STRIP_FOR_TARGET
export RANLIB_FOR_TARGET
export libsubdir
export slibdir
DECNUMINC = -I$(srcdir)/../libdecnumber -I$(MULTIBUILDTOP)../../libdecnumber
# Specify the directories to be searched for header files.
# Both . and srcdir are used, in that order,
# so that *config.h will be found in the compilation
# subdirectory rather than in the source directory.
# -I$(@D) and -I$(srcdir)/$(@D) cause the subdirectory of the file
# currently being compiled, in both source trees, to be examined as well.
INCLUDES = -I. -I$(@D) -I$(gcc_objdir) \
-I$(srcdir) -I$(srcdir)/$(@D) -I$(srcdir)/../gcc \
-I$(srcdir)/../include $(DECNUMINC)
# CFLAGS first is not perfect; normally setting CFLAGS should override any
# options in LIBGCC2_CFLAGS. But LIBGCC2_CFLAGS may contain -g0, and CFLAGS
# will usually contain -g, so for the moment CFLAGS goes first. We must
# include CFLAGS - that's where multilib options live.
INTERNAL_CFLAGS = $(CFLAGS) $(LIBGCC2_CFLAGS) $(HOST_LIBGCC2_CFLAGS) $(INCLUDES)
MULTIDIR := $(shell $(CC) $(CFLAGS) -print-multi-directory)
MULTIOSDIR := $(shell $(CC) $(CFLAGS) -print-multi-os-directory)
MULTIOSSUBDIR := $(shell if test $(MULTIOSDIR) != .; then echo /$(MULTIOSDIR); fi)
inst_libdir = $(libsubdir)$(MULTISUBDIR)
inst_slibdir = $(slibdir)$(MULTIOSSUBDIR)
gcc_compile_bare = $(CC) $(INTERNAL_CFLAGS)
compile_deps = -MT $@ -MD -MP -MF $(basename $@).dep
gcc_compile = $(gcc_compile_bare) -o $@ $(compile_deps)
gcc_s_compile = $(gcc_compile) -DSHARED
objects = $(filter %$(objext),$^)
# Collect any host-specific information from Makefile fragments.
tmake_file = @tmake_file@
include $(srcdir)/empty.mk $(tmake_file)
# Only handle shared libraries if both:
# - the user requested them
# - we know how to build them
ifeq ($(SHLIB_LINK),)
enable_shared := no
endif
ifeq ($(enable_shared),yes)
iterator = $(srcdir)/empty.mk $(patsubst %,$(srcdir)/shared-object.mk,$(iter-items))
install-shared = install-shared
ifneq ($(LIBUNWIND),)
install-libunwind = install-libunwind
endif
# For -fvisibility=hidden. We need both a -fvisibility=hidden on
# the command line, and a #define to prevent libgcc2.h etc from
# overriding that with #pragmas.
vis_hide = @vis_hide@
ifneq (,$(vis_hide))
# If we have -fvisibility=hidden, then we need to generate hide
# lists for object files implemented in assembly.
ASM_HIDDEN_OP = @asm_hidden_op@
define gen-hide-list
$(NM) -pg $< | \
$(AWK) 'NF == 3 && $$2 !~ /^[UN]$$/ { print "\t$(ASM_HIDDEN_OP)", $$3 }' > $@T
mv -f $@T $@
endef
else
gen-hide-list = echo > $@
endif
else
# Not enable_shared.
iterator = $(srcdir)/empty.mk $(patsubst %,$(srcdir)/static-object.mk,$(iter-items))
vis_hide =
gen-hide-list = echo > \$@
endif
ifneq ($(EXTRA_PARTS),)
extra-parts = libgcc-extra-parts
INSTALL_PARTS = $(EXTRA_PARTS)
else
ifneq ($(GCC_EXTRA_PARTS),)
extra-parts = gcc-extra-parts
INSTALL_PARTS = $(GCC_EXTRA_PARTS)
endif
endif
# Library members defined in libgcc2.c.
lib2funcs = _muldi3 _negdi2 _lshrdi3 _ashldi3 _ashrdi3 _cmpdi2 _ucmpdi2 \
_clear_cache _enable_execute_stack _trampoline __main _absvsi2 \
_absvdi2 _addvsi3 _addvdi3 _subvsi3 _subvdi3 _mulvsi3 _mulvdi3 \
_negvsi2 _negvdi2 _ctors _ffssi2 _ffsdi2 _clz _clzsi2 _clzdi2 \
_ctzsi2 _ctzdi2 _popcount_tab _popcountsi2 _popcountdi2 \
_paritysi2 _paritydi2 _powisf2 _powidf2 _powixf2 _powitf2 \
_mulsc3 _muldc3 _mulxc3 _multc3 _divsc3 _divdc3 _divxc3 \
_divtc3 _bswapsi2 _bswapdi2
# The floating-point conversion routines that involve a single-word integer.
# XX stands for the integer mode.
swfloatfuncs = $(patsubst %,_fixuns%XX,sf df xf)
# Likewise double-word routines.
dwfloatfuncs = $(patsubst %,_fix%XX,sf df xf tf) \
$(patsubst %,_fixuns%XX,sf df xf tf) \
$(patsubst %,_floatXX%,sf df xf tf) \
$(patsubst %,_floatunXX%,sf df xf tf)
ifeq ($(LIB2_SIDITI_CONV_FUNCS),)
lib2funcs += $(subst XX,si,$(swfloatfuncs))
lib2funcs += $(subst XX,di,$(dwfloatfuncs))
endif
# These might cause a divide overflow trap and so are compiled with
# unwinder info.
LIB2_DIVMOD_FUNCS = _divdi3 _moddi3 _udivdi3 _umoddi3 _udiv_w_sdiv _udivmoddi4
# Remove any objects from lib2funcs and LIB2_DIVMOD_FUNCS that are
# defined as optimized assembly code in LIB1ASMFUNCS or as C code
# in LIB2FUNCS_EXCLUDE.
lib2funcs := $(filter-out $(LIB2FUNCS_EXCLUDE) $(LIB1ASMFUNCS),$(lib2funcs))
LIB2_DIVMOD_FUNCS := $(filter-out $(LIB2FUNCS_EXCLUDE) $(LIB1ASMFUNCS), \
$(LIB2_DIVMOD_FUNCS))
# Build "libgcc1" (assembly) components.
ifeq ($(enable_shared),yes)
lib1asmfuncs-o = $(patsubst %,%$(objext),$(LIB1ASMFUNCS))
$(lib1asmfuncs-o): %$(objext): $(gcc_srcdir)/config/$(LIB1ASMSRC) %.vis
$(gcc_compile) -DL$* -xassembler-with-cpp \
-c $(gcc_srcdir)/config/$(LIB1ASMSRC) -include $*.vis
$(patsubst %,%.vis,$(LIB1ASMFUNCS)): %.vis: %_s$(objext)
$(gen-hide-list)
libgcc-objects += $(lib1asmfuncs-o)
lib1asmfuncs-s-o = $(patsubst %,%_s$(objext),$(LIB1ASMFUNCS))
$(lib1asmfuncs-s-o): %_s$(objext): $(gcc_srcdir)/config/$(LIB1ASMSRC)
$(gcc_s_compile) -DL$* -xassembler-with-cpp \
-c $(gcc_srcdir)/config/$(LIB1ASMSRC)
libgcc-s-objects += $(lib1asmfuncs-s-o)
else
lib1asmfuncs-o = $(patsubst %,%$(objext),$(LIB1ASMFUNCS))
$(lib1asmfuncs-o): %$(objext): $(gcc_srcdir)/config/$(LIB1ASMSRC)
$(gcc_compile) -DL$* -xassembler-with-cpp \
-c $(gcc_srcdir)/config/$(LIB1ASMSRC)
libgcc-objects += $(lib1asmfuncs-o)
endif
# Build lib2funcs. For the static library also include LIB2FUNCS_ST.
lib2funcs-o = $(patsubst %,%$(objext),$(lib2funcs) $(LIB2FUNCS_ST))
$(lib2funcs-o): %$(objext): $(gcc_srcdir)/libgcc2.c
$(gcc_compile) -DL$* -c $(gcc_srcdir)/libgcc2.c \
$(vis_hide)
libgcc-objects += $(lib2funcs-o)
ifeq ($(enable_shared),yes)
lib2funcs-s-o = $(patsubst %,%_s$(objext),$(lib2funcs))
$(lib2funcs-s-o): %_s$(objext): $(gcc_srcdir)/libgcc2.c
$(gcc_s_compile) -DL$* -c $(gcc_srcdir)/libgcc2.c
libgcc-s-objects += $(lib2funcs-s-o)
endif
ifneq ($(LIB2_SIDITI_CONV_FUNCS),)
# Build libgcc2.c for each conversion function, with a specific
# L<func> definition and LIBGCC2_UNITS_PER_WORD setting. The DImode
# functions are built with a wordsize of 4; the TImode functions are
# built with the same labels, but a wordsize of 8.
sifuncs = $(subst XX,si,$(swfloatfuncs))
difuncs = $(subst XX,di,$(dwfloatfuncs))
tifuncs = $(subst XX,ti,$(dwfloatfuncs))
iter-items := $(sifuncs) $(difuncs) $(tifuncs)
iter-labels := $(sifuncs) $(difuncs) $(difuncs)
iter-sizes := $(patsubst %,4,$(sifuncs) $(difuncs)) $(patsubst %,8,$(tifuncs))
include $(srcdir)/empty.mk $(patsubst %,$(srcdir)/siditi-object.mk,$(iter-items))
libgcc-objects += $(patsubst %,%$(objext),$(sifuncs) $(difuncs) $(tifuncs))
ifeq ($(enable_shared),yes)
libgcc-s-objects += $(patsubst %,%_s$(objext),$(sifuncs) $(difuncs) $(tifuncs))
endif
endif
# Build LIB2_DIVMOD_FUNCS.
lib2-divmod-o = $(patsubst %,%$(objext),$(LIB2_DIVMOD_FUNCS))
$(lib2-divmod-o): %$(objext): $(gcc_srcdir)/libgcc2.c
$(gcc_compile) -DL$* -c $(gcc_srcdir)/libgcc2.c \
-fexceptions -fnon-call-exceptions $(vis_hide)
libgcc-objects += $(lib2-divmod-o)
ifeq ($(enable_shared),yes)
lib2-divmod-s-o = $(patsubst %,%_s$(objext),$(LIB2_DIVMOD_FUNCS))
$(lib2-divmod-s-o): %_s$(objext): $(gcc_srcdir)/libgcc2.c
$(gcc_s_compile) -DL$* -c $(gcc_srcdir)/libgcc2.c \
-fexceptions -fnon-call-exceptions
libgcc-s-objects += $(lib2-divmod-s-o)
endif
# $(FPBIT) et al. are pathnames relative to the GCC build
# directory; the supporting files are made by the GCC
# Makefile.
# FIXME: Soon we will be able to move this logic into this directory.
ifneq ($(fpbit-in-libgcc),yes)
FPBIT:=$(if $(FPBIT),$(gcc_objdir)/$(FPBIT),)
DPBIT:=$(if $(DPBIT),$(gcc_objdir)/$(DPBIT),)
TPBIT:=$(if $(TPBIT),$(gcc_objdir)/$(TPBIT),)
endif
ifeq ($(TPBIT),)
# _sf_to_tf and _df_to_tf require tp-bit.c being compiled in.
FPBIT_FUNCS := $(filter-out _sf_to_tf,$(FPBIT_FUNCS))
DPBIT_FUNCS := $(filter-out _df_to_tf,$(DPBIT_FUNCS))
endif
# Build FPBIT.
ifneq ($(FPBIT),)
fpbit-o = $(patsubst %,%$(objext),$(FPBIT_FUNCS))
$(fpbit-o): %$(objext): $(FPBIT)
$(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* -c $(FPBIT) $(vis_hide)
libgcc-objects += $(fpbit-o)
ifeq ($(enable_shared),yes)
fpbit-s-o = $(patsubst %,%_s$(objext),$(FPBIT_FUNCS))
$(fpbit-s-o): %_s$(objext): $(FPBIT)
$(gcc_s_compile) -DFINE_GRAINED_LIBRARIES -DL$* -c $(FPBIT)
libgcc-s-objects += $(fpbit-s-o)
endif
endif
# Build DPBIT.
ifneq ($(DPBIT),)
dpbit-o = $(patsubst %,%$(objext),$(DPBIT_FUNCS))
$(dpbit-o): %$(objext): $(DPBIT)
$(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* -c $(DPBIT) $(vis_hide)
libgcc-objects += $(dpbit-o)
ifeq ($(enable_shared),yes)
dpbit-s-o = $(patsubst %,%_s$(objext),$(DPBIT_FUNCS))
$(dpbit-s-o): %_s$(objext): $(DPBIT)
$(gcc_s_compile) -DFINE_GRAINED_LIBRARIES -DL$* -c $(DPBIT)
libgcc-s-objects += $(dpbit-s-o)
endif
endif
# Build TPBIT.
ifneq ($(TPBIT),)
tpbit-o = $(patsubst %,%$(objext),$(TPBIT_FUNCS))
$(tpbit-o): %$(objext): $(TPBIT)
$(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* -c $(TPBIT) $(vis_hide)
libgcc-objects += $(tpbit-o)
ifeq ($(enable_shared),yes)
tpbit-s-o = $(patsubst %,%_s$(objext),$(TPBIT_FUNCS))
$(tpbit-s-o): %_s$(objext): $(TPBIT)
$(gcc_s_compile) -DFINE_GRAINED_LIBRARIES -DL$* -c $(TPBIT)
libgcc-s-objects += $(tpbit-s-o)
endif
endif
# Build decimal floating point support.
ifeq ($(decimal_float),yes)
# If $DFP_ENABLE is set, then we want all data type sizes.
ifneq ($(DFP_ENABLE),)
D32PBIT = 1
D64PBIT = 1
D128PBIT = 1
endif
dec-filenames =
ifneq ($(D32PBIT)$(D64PBIT)$(D128PBIT),)
dec-filenames += decContext decNumber decRound decLibrary decUtility
endif
ifneq ($(D32PBIT),)
dec-filenames += decimal32
endif
ifneq ($(D64PBIT),)
dec-filenames += decimal64
endif
ifneq ($(D128PBIT),)
dec-filenames += decimal128
endif
dec-objects = $(patsubst %,%$(objext),$(dec-filenames))
$(dec-objects): %$(objext): $(srcdir)/../libdecnumber/%.c
$(gcc_compile) -c $<
libgcc-objects += $(dec-objects)
# Next build individual support functions.
ifneq ($(D32PBIT),)
d32pbit-o = $(patsubst %,%$(objext),$(D32PBIT_FUNCS))
$(d32pbit-o): %$(objext): $(gcc_srcdir)/config/dfp-bit.c
$(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* -DWIDTH=32 -c $<
libgcc-objects += $(d32pbit-o)
endif
ifneq ($(D64PBIT),)
d64pbit-o = $(patsubst %,%$(objext),$(D64PBIT_FUNCS))
$(d64pbit-o): %$(objext): $(gcc_srcdir)/config/dfp-bit.c
$(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* -DWIDTH=64 -c $<
libgcc-objects += $(d64pbit-o)
endif
ifneq ($(D128PBIT),)
d128pbit-o = $(patsubst %,%$(objext),$(D128PBIT_FUNCS))
$(d128pbit-o): %$(objext): $(gcc_srcdir)/config/dfp-bit.c
$(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* -DWIDTH=128 -c $<
libgcc-objects += $(d128pbit-o)
endif
endif
# Build LIB2ADD and LIB2ADD_ST.
ifneq ($(filter-out %.c %.S %.asm,$(LIB2ADD) $(LIB2ADD_ST)),)
$(error Unsupported files in LIB2ADD or LIB2ADD_ST.)
endif
libgcc-objects += $(addsuffix $(objext),$(basename $(notdir $(LIB2ADD))))
libgcc-objects += $(addsuffix $(objext),$(basename $(notdir $(LIB2ADD_ST))))
c_flags :=
iter-items := $(LIB2ADD) $(LIB2ADD_ST)
include $(iterator)
ifeq ($(enable_shared),yes)
libgcc-s-objects += $(addsuffix _s$(objext),$(basename $(notdir $(LIB2ADD))))
endif
# Build LIB2ADDEH, LIB2ADDEHSTATIC, and LIB2ADDEHSHARED. If we don't have
# libgcc_eh.a, only LIB2ADDEH matters. If we do, only LIB2ADDEHSTATIC and
# LIB2ADDEHSHARED matter. (Usually all three are identical.)
c_flags := -fexceptions
ifeq ($(enable_shared),yes)
libgcc-eh-objects += $(addsuffix $(objext),$(basename $(notdir $(LIB2ADDEHSTATIC))))
libgcc-s-objects += $(addsuffix _s$(objext),$(basename $(notdir $(LIB2ADDEHSHARED))))
iter-items := $(sort $(LIB2ADDEHSTATIC) $(LIB2ADDEHSHARED))
include $(iterator)
else
# Not shared. LIB2ADDEH are added to libgcc.a.
libgcc-objects += $(addsuffix $(objext),$(basename $(notdir $(LIB2ADDEH))))
iter-items := $(LIB2ADDEH)
include $(iterator)
endif
# Build LIBUNWIND.
c_flags := -fexceptions
libunwind-objects += $(addsuffix $(objext),$(basename $(notdir $(LIBUNWIND))))
ifeq ($(enable_shared),yes)
libunwind-s-objects += $(addsuffix _s$(objext),$(basename $(notdir $(LIBUNWIND))))
endif
iter-items := $(LIBUNWIND)
include $(iterator)
# Build libgcov components.
libgcov-objects = $(patsubst %,%$(objext),$(LIBGCOV))
$(libgcov-objects): %$(objext): $(gcc_srcdir)/libgcov.c
$(gcc_compile) -DL$* -c $(gcc_srcdir)/libgcov.c
# Static libraries.
libgcc.a: $(libgcc-objects)
libgcov.a: $(libgcov-objects)
libunwind.a: $(libunwind-objects)
libgcc_eh.a: $(libgcc-eh-objects)
libgcc.a libgcov.a libunwind.a libgcc_eh.a:
-rm -f $@
objects="$(objects)"; \
if test -z "$$objects"; then \
echo 'int __libgcc_eh_dummy;' > eh_dummy.c; \
$(gcc_compile_bare) $(vis_hide) -c eh_dummy.c \
-o eh_dummy$(objext); \
objects=eh_dummy$(objext); \
fi; \
$(AR_CREATE_FOR_TARGET) $@ $$objects
$(RANLIB) $@
all: libgcc.a libgcov.a
ifneq ($(LIBUNWIND),)
all: libunwind.a
endif
ifeq ($(enable_shared),yes)
all: libgcc_eh.a libgcc_s$(SHLIB_EXT)
ifneq ($(LIBUNWIND),)
all: libunwind$(SHLIB_EXT)
endif
endif
ifeq ($(enable_shared),yes)
# Map-file generation.
ifneq ($(SHLIB_MKMAP),)
libgcc.map: $(SHLIB_MKMAP) $(SHLIB_MAPFILES) $(libgcc-s-objects)
{ $(NM) $(SHLIB_NM_FLAGS) $(libgcc-s-objects); echo %%; \
cat $(SHLIB_MAPFILES) \
| sed -e '/^[ ]*#/d' \
-e 's/^%\(if\|else\|elif\|endif\|define\)/#\1/' \
| $(gcc_compile_bare) -E -xassembler-with-cpp -; \
} | $(AWK) -f $(SHLIB_MKMAP) $(SHLIB_MKMAP_OPTS) > tmp-$@
mv tmp-$@ $@
libgcc_s$(SHLIB_EXT): libgcc.map
mapfile = libgcc.map
endif
libgcc_s$(SHLIB_EXT): $(libgcc-s-objects) $(extra-parts)
# @multilib_flags@ is still needed because this may use
# $(GCC_FOR_TARGET) and $(LIBGCC2_CFLAGS) directly.
# @multilib_dir@ is not really necessary, but sometimes it has
# more uses than just a directory name.
$(mkinstalldirs) $(MULTIDIR)
$(subst @multilib_flags@,$(CFLAGS),$(subst \
@multilib_dir@,$(MULTIDIR),$(subst \
@shlib_objs@,$(objects),$(subst \
@shlib_base_name@,libgcc_s,$(subst \
@shlib_map_file@,$(mapfile),$(subst \
@shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(SHLIB_LINK)))))))
libunwind$(SHLIB_EXT): $(libunwind-s-objects) $(extra-parts)
# @multilib_flags@ is still needed because this may use
# $(GCC_FOR_TARGET) and $(LIBGCC2_CFLAGS) directly.
# @multilib_dir@ is not really necessary, but sometimes it has
# more uses than just a directory name.
$(mkinstalldirs) $(MULTIDIR)
$(subst @multilib_flags@,$(CFLAGS),$(subst \
@multilib_dir@,$(MULTIDIR),$(subst \
@shlib_objs@,$(objects),$(subst \
@shlib_base_name@,libunwind,$(subst \
@shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(SHLIBUNWIND_LINK))))))
endif
# Build the standard GCC startfiles and endfiles.
ALL_CRT_CFLAGS = $(CFLAGS) $(CRTSTUFF_CFLAGS) $(INCLUDES)
crt_compile = $(CC) $(ALL_CRT_CFLAGS) -o $@ $(compile_deps)
ifeq ($(CUSTOM_CRTSTUFF),)
crtbegin$(objext): $(gcc_srcdir)/crtstuff.c
$(crt_compile) $(CRTSTUFF_T_CFLAGS) \
-c $(gcc_srcdir)/crtstuff.c -DCRT_BEGIN
crtend$(objext): $(gcc_srcdir)/crtstuff.c
$(crt_compile) $(CRTSTUFF_T_CFLAGS) \
-c $(gcc_srcdir)/crtstuff.c -DCRT_END
# These are versions of crtbegin and crtend for shared libraries.
crtbeginS$(objext): $(gcc_srcdir)/crtstuff.c
$(crt_compile) $(CRTSTUFF_T_CFLAGS_S) \
-c $(gcc_srcdir)/crtstuff.c -DCRT_BEGIN -DCRTSTUFFS_O
crtendS$(objext): $(gcc_srcdir)/crtstuff.c
$(crt_compile) $(CRTSTUFF_T_CFLAGS_S) \
-c $(gcc_srcdir)/crtstuff.c -DCRT_END -DCRTSTUFFS_O
# This is a version of crtbegin for -static links.
crtbeginT.o: $(gcc_srcdir)/crtstuff.c
$(crt_compile) $(CRTSTUFF_T_CFLAGS) \
-c $(gcc_srcdir)/crtstuff.c -DCRT_BEGIN -DCRTSTUFFT_O
endif
# Build extra startfiles in the libgcc directory.
.PHONY: libgcc-extra-parts
libgcc-extra-parts: $(EXTRA_PARTS)
ifneq ($(GCC_EXTRA_PARTS),)
ifneq ($(sort $(EXTRA_PARTS)),$(GCC_EXTRA_PARTS))
# If the gcc directory specifies which extra parts to
# build for this target, and the libgcc configuration also
# specifies, make sure they match. This can be removed
# when the gcc directory no longer holds libgcc configuration;
# it is useful when migrating a target.
@echo "Configuration mismatch!"
@echo "Extra parts from gcc directory: $(GCC_EXTRA_PARTS)"
@echo "Extra parts from libgcc: $(EXTRA_PARTS)"
exit 1
endif
endif
# Early copyback; see "all" above for the rationale. The
# early copy is necessary so that the gcc -B options find
# the right startup files when linking shared libgcc.
$(mkinstalldirs) $(gcc_objdir)$(MULTISUBDIR)
parts="$(EXTRA_PARTS)"; \
for file in $$parts; do \
rm -f $(gcc_objdir)$(MULTISUBDIR)/$$file; \
$(INSTALL_DATA) $$file $(gcc_objdir)$(MULTISUBDIR)/; \
done
# Build extra startfiles in the gcc directory, for unconverted
# targets.
.PHONY: gcc-extra-parts
gcc-extra-parts:
# Recursively invoke make in the GCC directory to build any
# startfiles (for now). We must do this just once, passing
# it all the GCC_EXTRA_PARTS as simultaneous goal targets,
# so that rules which cannot execute simultaneously are properly
# serialized. We indirect through T_TARGET in case any multilib
# directories contain an equals sign, to prevent make from
# interpreting any of the goals as variable assignments.
# We must use cd && make rather than make -C, or else the stage
# number will be embedded in debug information.
T=`$(PWD_COMMAND)`/ \
&& cd $(gcc_objdir) \
&& $(MAKE) GCC_FOR_TARGET="$(CC)" \
MULTILIB_CFLAGS="$(CFLAGS)" \
T=$$T \
T_TARGET="$(patsubst %,$${T}%,$(GCC_EXTRA_PARTS))" \
T_TARGET
# Early copyback; see "all" above for the rationale. The
# early copy is necessary so that the gcc -B options find
# the right startup files when linking shared libgcc.
$(mkinstalldirs) $(gcc_objdir)$(MULTISUBDIR)
parts="$(GCC_EXTRA_PARTS)"; \
for file in $$parts; do \
rm -f $(gcc_objdir)$(MULTISUBDIR)/$$file; \
$(INSTALL_DATA) $$file $(gcc_objdir)$(MULTISUBDIR)/; \
done
all: $(extra-parts)
# Install rules. These do not depend on "all", so that they can be invoked
# recursively from it.
install-libunwind:
$(mkinstalldirs) $(DESTDIR)$(inst_slibdir)
# NOTE: Maybe this should go into $(inst_libdir), but this
# is where the old mklibgcc.in put it.
$(INSTALL_DATA) libunwind.a $(DESTDIR)$(inst_slibdir)/
chmod 644 $(DESTDIR)$(inst_slibdir)/libunwind.a
$(RANLIB) $(DESTDIR)$(inst_slibdir)/libunwind.a
$(subst @multilib_dir@,$(MULTIDIR),$(subst \
@shlib_base_name@,libunwind,$(subst \
@shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(SHLIBUNWIND_INSTALL))))
install-shared:
$(mkinstalldirs) $(DESTDIR)$(inst_libdir)
$(INSTALL_DATA) libgcc_eh.a $(DESTDIR)$(inst_libdir)/
chmod 644 $(DESTDIR)$(inst_libdir)/libgcc_eh.a
$(RANLIB) $(DESTDIR)$(inst_libdir)/libgcc_eh.a
$(subst @multilib_dir@,$(MULTIDIR),$(subst \
@shlib_base_name@,libgcc_s,$(subst \
@shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(SHLIB_INSTALL))))
install: $(install-shared) $(install-libunwind)
$(mkinstalldirs) $(DESTDIR)$(inst_libdir)
$(INSTALL_DATA) libgcc.a $(DESTDIR)$(inst_libdir)/
chmod 644 $(DESTDIR)$(inst_libdir)/libgcc.a
$(RANLIB) $(DESTDIR)$(inst_libdir)/libgcc.a
$(INSTALL_DATA) libgcov.a $(DESTDIR)$(inst_libdir)/
chmod 644 $(DESTDIR)$(inst_libdir)/libgcov.a
$(RANLIB) $(DESTDIR)$(inst_libdir)/libgcov.a
parts="$(INSTALL_PARTS)"; \
for file in $$parts; do \
rm -f $(DESTDIR)$(inst_libdir)/$$file; \
$(INSTALL_DATA) $$file $(DESTDIR)$(inst_libdir)/; \
done
.PHONY: install install-shared install-libunwind
# Don't export variables to the environment, in order to not confuse
# configure.
.NOEXPORT:
include $(srcdir)/empty.mk $(wildcard *.dep)
# TODO QUEUE:
# Garbage collect in gcc/:
# $(LIBGCC) settings in t-* are now unused
#
# Remove use of $(gcc_srcdir). Source files referenced using $(gcc_srcdir)
# should move into the libgcc directory.

632
libgcc/config.host Normal file
View File

@ -0,0 +1,632 @@
# libgcc host-specific configuration file.
# Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
# Free Software Foundation, Inc.
#This file is part of GCC.
#GCC is free software; you can redistribute it and/or modify it under
#the terms of the GNU General Public License as published by the Free
#Software Foundation; either version 2, or (at your option) any later
#version.
#GCC is distributed in the hope that it will be useful, but WITHOUT
#ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
#FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
#for more details.
#You should have received a copy of the GNU General Public License
#along with GCC; see the file COPYING. If not, write to the Free
#Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
#02110-1301, USA.
# This is the libgcc host-specific configuration file
# where a configuration type is mapped to different system-specific
# definitions and files. This is invoked by the autoconf-generated
# configure script. Putting it in a separate shell file lets us skip
# running autoconf when modifying host-specific information.
# This file bears an obvious resemblance to gcc/config.gcc. The cases
# should be kept similar, to ease moving library-specific settings
# from config.gcc to this file. That is also why tmake_file is
# left as tmake_file, rather than hmake_file, even though this library
# switches on ${host}.
# This file switches on the shell variable ${host}, and also uses the
# following shell variables:
#
# with_* Various variables as set by configure.
# This file sets the following shell variables for use by the
# autoconf-generated configure script:
#
# asm_hidden_op The assembler pseudo-op to use for hide
# lists for object files implemented in
# assembly (with -fvisibility=hidden for C).
# The default is ".hidden".
# cpu_type The name of the cpu, if different from the first
# chunk of the canonical host name.
# extra_parts List of extra object files that should be compiled
# for this target machine. This may be overridden
# by setting EXTRA_PARTS in a tmake_file fragment.
# If either is set, EXTRA_PARTS and
# EXTRA_MULTILIB_PARTS inherited from the GCC
# subdirectory will be ignored.
# tmake_file A list of machine-description-specific
# makefile-fragments, if different from
# "$cpu_type/t-$cpu_type".
asm_hidden_op=.hidden
extra_parts=
tmake_file=
# Set default cpu_type so it can be updated in each machine entry.
cpu_type=`echo ${host} | sed 's/-.*$//'`
case ${host} in
m32c*-*-*)
cpu_type=m32c
;;
alpha*-*-*)
cpu_type=alpha
;;
am33_2.0-*-linux*)
cpu_type=mn10300
;;
strongarm*-*-*)
cpu_type=arm
;;
arm*-*-*)
cpu_type=arm
;;
bfin*-*)
cpu_type=bfin
;;
ep9312*-*-*)
cpu_type=arm
;;
frv*) cpu_type=frv
;;
xscale-*-*)
cpu_type=arm
;;
i[34567]86-*-*)
cpu_type=i386
;;
x86_64-*-*)
cpu_type=i386
;;
ia64-*-*)
;;
hppa*-*-* | parisc*-*-*)
cpu_type=pa
;;
m32r*-*-*)
cpu_type=m32r
;;
m680[012]0-*-*)
cpu_type=m68k
;;
m68k-*-*)
;;
mips*-*-*)
cpu_type=mips
;;
powerpc*-*-*)
cpu_type=rs6000
;;
rs6000*-*-*)
;;
score*-*-*)
cpu_type=score
;;
sparc64*-*-*)
cpu_type=sparc
;;
sparc*-*-*)
cpu_type=sparc
;;
spu*-*-*)
cpu_type=spu
;;
s390*-*-*)
cpu_type=s390
;;
# Note the 'l'; we need to be able to match e.g. "shle" or "shl".
sh[123456789lbe]*-*-*)
cpu_type=sh
;;
tic4x-*-*)
cpu_type=c4x
;;
esac
# Common parts for widely ported systems.
case ${host} in
*-*-darwin*)
asm_hidden_op=.private_extern
tmake_file="t-darwin ${cpu_type}/t-darwin t-slibgcc-darwin"
;;
*-*-freebsd[12] | *-*-freebsd[12].* | *-*-freebsd*aout*)
# This is the place-holder for the generic a.out configuration
# of FreeBSD. No actual configuration resides here since
# there was only ever a bare-bones ix86 configuration for
# a.out and it exists solely in the machine-specific section.
# This place-holder must exist to avoid dropping into
# the generic ELF configuration of FreeBSD (i.e. it must be
# ordered before that section).
;;
*-*-freebsd*)
# This is the generic ELF configuration of FreeBSD. Later
# machine-specific sections may refine and add to this
# configuration.
;;
*-*-linux*libc1* | *-*-linux*aout*)
# Avoid the generic linux case.
;;
*-*-linux* | frv-*-*linux* | *-*-kfreebsd*-gnu | *-*-knetbsd*-gnu)
# Must come before *-*-gnu* (because of *-*-linux-gnu* systems).
extra_parts="crtbegin.o crtbeginS.o crtbeginT.o crtend.o crtendS.o"
;;
*-*-gnu*)
;;
*-*-netbsd*)
;;
*-*-openbsd*)
;;
*-*-rtems*)
;;
*-*-vxworks*)
;;
*-*-elf)
;;
esac
case ${host} in
# Support site-specific machine types.
*local*)
rest=`echo ${host} | sed -e "s/$cpu_type-//"`
if test -f $srcdir/config/${cpu_type}/t-$rest
then tmake_file=${cpu_type}/t-$rest
fi
;;
alpha*-*-unicosmk*)
;;
alpha*-*-linux*)
tmake_file="${tmake_file} alpha/t-crtfm"
;;
alpha*-*-gnu*)
;;
alpha*-*-freebsd*)
;;
alpha*-*-netbsd*)
;;
alpha*-*-openbsd*)
;;
alpha*-dec-osf[45]*)
;;
alpha64-dec-*vms*)
;;
alpha*-dec-*vms*)
;;
arc-*-elf*)
;;
arm-*-coff* | armel-*-coff*)
;;
arm-semi-aof | armel-semi-aof)
;;
arm-wrs-vxworks)
;;
arm*-*-freebsd*|strongarm*-*-freebsd*)
;;
arm*-*-netbsdelf*)
;;
arm*-*-netbsd*)
;;
arm*-*-linux*) # ARM GNU/Linux with ELF
;;
arm*-*-uclinux*) # ARM ucLinux
;;
arm*-*-ecos-elf)
;;
arm*-*-eabi* | arm*-*-symbianelf* )
;;
arm*-*-rtems*)
;;
arm*-*-elf | ep9312-*-elf)
;;
arm*-wince-pe*)
;;
arm-*-pe*)
;;
arm*-*-kaos*)
;;
avr-*-rtems*)
;;
avr-*-*)
;;
bfin*-elf*)
;;
bfin*-uclinux*)
;;
bfin*-*)
;;
c4x-*-rtems* | tic4x-*-rtems*)
;;
c4x-* | tic4x-*)
;;
cris-*-aout)
;;
cris-*-elf | cris-*-none)
;;
cris-*-linux*)
;;
crx-*-elf)
;;
fr30-*-elf)
;;
frv-*-elf)
;;
frv-*-*linux*)
;;
h8300-*-rtemscoff*)
;;
h8300-*-rtems*)
;;
h8300-*-elf*)
;;
h8300-*-*)
;;
hppa*64*-*-linux* | parisc*64*-*-linux*)
;;
hppa*-*-linux* | parisc*-*-linux*)
;;
hppa1.1-*-pro*)
;;
hppa1.1-*-osf*)
;;
hppa1.1-*-bsd*)
;;
hppa[12]*-*-hpux10*)
;;
hppa*64*-*-hpux11*)
;;
hppa[12]*-*-hpux11*)
;;
i[34567]86-*-darwin*)
;;
x86_64-*-darwin*)
tmake_file="t-darwin ${cpu_type}/t-darwin64 t-slibgcc-darwin"
;;
i[34567]86-*-elf*)
;;
i[34567]86-sequent-ptx4* | i[34567]86-sequent-sysv4*)
;;
i[34567]86-*-aout*)
;;
i[34567]86-*-beoself* | i[34567]86-*-beos*)
;;
i[34567]86-*-freebsd*)
;;
x86_64-*-freebsd*)
;;
i[34567]86-*-netbsdelf*)
;;
i[34567]86-*-netbsd*)
;;
x86_64-*-netbsd*)
;;
i[34567]86-*-openbsd2.*|i[34567]86-*openbsd3.[0123])
;;
i[34567]86-*-openbsd*)
;;
i[34567]86-*-coff*)
;;
i[34567]86-*-linux* | i[34567]86-*-kfreebsd*-gnu | i[34567]86-*-knetbsd*-gnu)
extra_parts="$extra_parts crtfastmath.o"
tmake_file="${tmake_file} i386/t-crtfm"
;;
x86_64-*-linux* | x86_64-*-kfreebsd*-gnu | x86_64-*-knetbsd*-gnu)
extra_parts="$extra_parts crtfastmath.o"
tmake_file="${tmake_file} i386/t-crtfm"
;;
i[34567]86-*-gnu*)
;;
i[34567]86-pc-msdosdjgpp*)
;;
i[34567]86-*-lynxos*)
;;
i[3456x]86-*-netware*)
case /${with_ld} in
*/nwld)
tmake_file="${tmake_file} i386/t-nwld"
;;
esac
;;
i[34567]86-*-nto-qnx*)
;;
i[34567]86-*-rtems*)
;;
i[34567]86-*-sco3.2v5*) # 80386 running SCO Open Server 5
;;
i[34567]86-*-solaris2*)
;;
i[34567]86-*-sysv5*) # Intel x86 on System V Release 5
;;
i[34567]86-*-sysv4*) # Intel 80386's running system V.4
;;
i[4567]86-wrs-vxworks|i[4567]86-wrs-vxworksae)
;;
i[34567]86-*-pe | i[34567]86-*-cygwin*)
;;
i[34567]86-*-mingw32*)
;;
i[34567]86-*-uwin*)
;;
i[34567]86-*-interix3*)
;;
i[34567]86-*-kaos*)
;;
ia64*-*-elf*)
;;
ia64*-*-freebsd*)
;;
ia64*-*-linux*)
extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtfastmath.o"
;;
ia64*-*-hpux*)
;;
iq2000*-*-elf*)
;;
m32r-*-elf*)
;;
m32rle-*-elf*)
;;
m32r-*-linux*)
;;
m32rle-*-linux*)
;;
m68hc11-*-*|m6811-*-*)
;;
m68hc12-*-*|m6812-*-*)
;;
m68k-*-aout*)
;;
m68k-*-coff*)
;;
m68020-*-elf* | m68k-*-elf*)
;;
m68010-*-netbsdelf* | m68k*-*-netbsdelf*)
;;
m68k*-*-openbsd*)
;;
m68k-*-uclinux*) # Motorola m68k/ColdFire running uClinux with uClibc
;;
m68k-*-linux*) # Motorola m68k's running GNU/Linux
# with ELF format using glibc 2
# aka the GNU/Linux C library 6.
;;
m68k-*-rtems*)
;;
mcore-*-elf)
;;
mcore-*-pe*)
;;
mips-sgi-irix[56]*)
;;
mips*-*-netbsd*) # NetBSD/mips, either endian.
;;
mips64*-*-linux*)
;;
mips*-*-linux*) # Linux MIPS, either endian.
;;
mips*-*-openbsd*)
;;
mipsisa32-*-elf* | mipsisa32el-*-elf*)
;;
mipsisa32r2-*-elf* | mipsisa32r2el-*-elf*)
;;
mipsisa64-*-elf* | mipsisa64el-*-elf*)
;;
mipsisa64sr71k-*-elf*)
;;
mipsisa64sb1-*-elf* | mipsisa64sb1el-*-elf*)
;;
mips-*-elf* | mipsel-*-elf*)
;;
mips64-*-elf* | mips64el-*-elf*)
;;
mips64vr-*-elf* | mips64vrel-*-elf*)
;;
mips64orion-*-elf* | mips64orionel-*-elf*)
;;
mips*-*-rtems*)
;;
mips-wrs-vxworks)
;;
mips-wrs-windiss) # Instruction-level simulator for VxWorks.
;;
mipstx39-*-elf* | mipstx39el-*-elf*)
;;
mmix-knuth-mmixware)
;;
mn10300-*-*)
;;
mt-*-elf)
;;
ns32k-*-netbsdelf*)
echo "GCC does not yet support the ${host} target"; exit 1
;;
ns32k-*-netbsd*)
;;
pdp11-*-bsd)
;;
pdp11-*-*)
;;
powerpc64-*-linux*)
tmake_file="${tmake_file} rs6000/t-ppccomm rs6000/t-ldbl128"
;;
powerpc64-*-gnu*)
tmake_file="${tmake_file} rs6000/t-ldbl128"
;;
powerpc-*-beos*)
;;
powerpc-*-darwin*)
;;
powerpc64-*-darwin*)
;;
powerpc*-*-freebsd*)
;;
powerpc-*-netbsd*)
;;
powerpc-*-chorusos*)
;;
powerpc-*-eabispe*)
;;
powerpc-*-eabisimaltivec*)
;;
powerpc-*-eabisim*)
;;
powerpc-*-elf*)
;;
powerpc-*-eabialtivec*)
;;
powerpc-*-eabi*)
;;
powerpc-*-rtems*)
;;
powerpc-*-linux*altivec*)
tmake_file="${tmake_file} rs6000/t-ppccomm rs6000/t-ldbl128"
;;
powerpc-*-linux*spe*)
tmake_file="${tmake_file} rs6000/t-ppccomm rs6000/t-ldbl128"
;;
powerpc-*-linux*)
tmake_file="${tmake_file} rs6000/t-ppccomm rs6000/t-ldbl128"
;;
powerpc-*-gnu-gnualtivec*)
tmake_file="${tmake_file} rs6000/t-ldbl128"
;;
powerpc-*-gnu*)
tmake_file="${tmake_file} rs6000/t-ldbl128"
;;
powerpc-wrs-vxworks|powerpc-wrs-vxworksae)
;;
powerpc-wrs-windiss*) # Instruction-level simulator for VxWorks.
;;
powerpc-*-lynxos*)
;;
powerpcle-*-sysv*)
;;
powerpcle-*-elf*)
;;
powerpcle-*-eabisim*)
;;
powerpcle-*-eabi*)
;;
powerpc-*-kaos*)
;;
powerpcle-*-kaos*)
;;
rs6000-ibm-aix4.[12]* | powerpc-ibm-aix4.[12]*)
;;
rs6000-ibm-aix4.[3456789]* | powerpc-ibm-aix4.[3456789]*)
;;
rs6000-ibm-aix5.1.* | powerpc-ibm-aix5.1.*)
;;
rs6000-ibm-aix[56789].* | powerpc-ibm-aix[56789].*)
;;
s390-*-linux*)
;;
s390x-*-linux*)
;;
s390x-ibm-tpf*)
;;
score-*-elf)
;;
sh-*-elf* | sh[12346l]*-*-elf* | sh*-*-kaos* | \
sh-*-symbianelf* | sh[12346l]*-*-symbianelf* | \
sh-*-linux* | sh[346lbe]*-*-linux* | \
sh-*-netbsdelf* | shl*-*-netbsdelf* | sh5-*-netbsd* | sh5l*-*-netbsd* | \
sh64-*-netbsd* | sh64l*-*-netbsd*)
;;
sh-*-rtemscoff*)
;;
sh-*-rtems*)
;;
sh-wrs-vxworks)
;;
sh-*-*)
;;
sparc-*-netbsdelf*)
;;
sparc64-*-openbsd*)
;;
sparc-*-elf*)
;;
sparc-*-linux*) # SPARC's running GNU/Linux, libc6
extra_parts="$extra_parts crtfastmath.o"
tmake_file="${tmake_file} sparc/t-crtfm"
;;
sparc-*-rtems*)
;;
sparc64-*-solaris2* | sparcv9-*-solaris2*)
;;
sparc-*-solaris2*)
;;
sparc-*-sysv4*)
;;
sparc64-*-elf*)
;;
sparc64-*-freebsd*|ultrasparc-*-freebsd*)
;;
sparc64-*-linux*) # 64-bit SPARC's running GNU/Linux
extra_parts="$extra_parts crtfastmath.o"
tmake_file="${tmake_file} sparc/t-crtfm"
;;
sparc64-*-netbsd*)
;;
spu-*-elf*)
;;
strongarm-*-elf*)
;;
strongarm-*-pe)
;;
strongarm-*-kaos*)
;;
v850e1-*-*)
;;
v850e-*-*)
;;
v850-*-*)
;;
vax-*-bsd*) # VAXen running BSD
;;
vax-*-sysv*) # VAXen running system V
;;
vax-*-netbsdelf*)
;;
vax-*-netbsd*)
;;
vax-*-openbsd*)
;;
vax-*-ultrix*) # VAXen running ultrix
;;
xscale-*-elf)
;;
xscale-*-coff)
;;
xstormy16-*-elf)
;;
xtensa-*-elf*)
;;
xtensa-*-linux*)
;;
am33_2.0-*-linux*)
extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o"
;;
m32c-*-elf*)
;;
*)
echo "*** Configuration ${host} not supported" 1>&2
exit 1
;;
esac

View File

@ -0,0 +1,6 @@
# FIXME drow/20061228 - I have preserved this -frandom-seed option
# while migrating this rule from the GCC directory, but I do not
# know why it is necessary if no other crt file uses it.
crtfastmath.o: $(gcc_srcdir)/config/alpha/crtfastmath.c
$(gcc_compile) -frandom-seed=gcc-crtfastmath -c \
$(gcc_srcdir)/config/alpha/crtfastmath.c

View File

@ -0,0 +1,2 @@
crtfastmath.o: $(gcc_srcdir)/config/i386/crtfastmath.c
$(gcc_compile) -msse -c $(gcc_srcdir)/config/i386/crtfastmath.c

View File

@ -0,0 +1 @@
SHLIB_VERPFX = $(gcc_srcdir)/config/i386/darwin-libgcc

View File

@ -0,0 +1 @@
SHLIB_VERPFX = $(gcc_srcdir)/config/i386/darwin-libgcc

31
libgcc/config/i386/t-nwld Normal file
View File

@ -0,0 +1,31 @@
# Build a shared libgcc library for NetWare.
SHLIB_EXT = .nlm
SHLIB_NAME = @shlib_base_name@.nlm
SHLIB_SLIBDIR_QUAL = @shlib_slibdir_qual@
SHLIB_DEF = $(gcc_srcdir)/config/i386/netware-libgcc.def
SHLIB_MAP = $(gcc_srcdir)/config/i386/netware-libgcc.exp
SHLIB_SRC = $(gcc_srcdir)/config/i386/netware-libgcc.c
SHLIB_LINK = set -e; \
cat $(SHLIB_DEF) >@shlib_base_name@.def; \
echo "name $(SHLIB_NAME)" >>@shlib_base_name@.def; \
echo "version $(version)" | sed "s!\.!,!g" >>@shlib_base_name@.def; \
touch build; \
echo "build $$(expr $$(<build) + 0)" >>@shlib_base_name@.def; \
echo "export @$(SHLIB_MAP)" >>@shlib_base_name@.def; \
if mpkxdc -n -p @shlib_base_name@.xdc; \
then echo "xdcdata @shlib_base_name@.xdc" >>@shlib_base_name@.def; \
else echo "WARNING: $(SHLIB_NAME) built without XDC data will not work well." 1>&2; \
fi; \
$(CC) $(LIBGCC2_CFLAGS) -o $(SHLIB_NAME) \
$(SHLIB_SRC) -posix -static-libgcc -lnetware \
-Wl,--Map,--map-info,full,--strip-all,--def-file,@shlib_base_name@.def; \
rm -f @shlib_base_name@.imp; $(LN_S) $(SHLIB_MAP) @shlib_base_name@.imp; \
rm -f libgcc.imp; $(LN_S) @shlib_base_name@.imp libgcc.imp; \
expr $$(<build) + 1 >build
SHLIB_INSTALL = \
$(SHELL) $(srcdir)/mkinstalldirs $(slibdir)$(SHLIB_SLIBDIR_QUAL); \
$(INSTALL_DATA) $(SHLIB_NAME) $(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_NAME); \
$(INSTALL_DATA) @shlib_base_name@.imp $(DESTDIR)$(libsubdir)/

18
libgcc/config/ia64/t-ia64 Normal file
View File

@ -0,0 +1,18 @@
CUSTOM_CRTSTUFF = yes
# Assemble startup files.
crtbegin.o: $(gcc_srcdir)/config/ia64/crtbegin.asm
$(CC) $(compile_deps) -I. -I$(gcc_objdir) -c -x assembler-with-cpp \
-o $@ $(gcc_srcdir)/config/ia64/crtbegin.asm
crtend.o: $(gcc_srcdir)/config/ia64/crtend.asm
$(CC) $(compile_deps) -I. -I$(gcc_objdir) -c -x assembler-with-cpp \
-o $@ $(gcc_srcdir)/config/ia64/crtend.asm
crtbeginS.o: $(gcc_srcdir)/config/ia64/crtbegin.asm
$(CC) $(compile_deps) -I. -I$(gcc_objdir) -c -x assembler-with-cpp \
-o $@ -DSHARED $(gcc_srcdir)/config/ia64/crtbegin.asm
crtendS.o: $(gcc_srcdir)/config/ia64/crtend.asm
$(CC) $(compile_deps) -I. -I$(gcc_objdir) -c -x assembler-with-cpp \
-o $@ -DSHARED $(gcc_srcdir)/config/ia64/crtend.asm
crtfastmath.o: $(gcc_srcdir)/config/ia64/crtfastmath.c
$(gcc_compile) -c $(gcc_srcdir)/config/ia64/crtfastmath.c

View File

@ -0,0 +1 @@
SHLIB_VERPFX = $(gcc_srcdir)/config/rs6000/darwin-libgcc

View File

@ -0,0 +1,7 @@
SHLIB_MAPFILES += $(gcc_srcdir)/config/rs6000/libgcc-ppc-glibc.ver
# Use -mlong-double-128 only when not compiling nof libgcc.
predefined-macros := $(shell true | $(CC) $(CFLAGS) -x c -dD -E -)
ifeq ($(findstring _SOFT_FLOAT,$(predefined-macros)),)
HOST_LIBGCC2_CFLAGS += -mlong-double-128
endif

View File

@ -0,0 +1,36 @@
EXTRA_PARTS += ecrti$(objext) ecrtn$(objext) ncrti$(objext) ncrtn$(objext) \
crtsavres$(objext)
# We build {e,n}crti.o and {e,n}crtn.o, which serve to add begin and
# end labels to all of the special sections used when we link using gcc.
# Assemble startup files.
ecrti.S: $(gcc_srcdir)/config/rs6000/eabi-ci.asm
cat $(gcc_srcdir)/config/rs6000/eabi-ci.asm >ecrti.S
ecrtn.S: $(gcc_srcdir)/config/rs6000/eabi-cn.asm
cat $(gcc_srcdir)/config/rs6000/eabi-cn.asm >ecrtn.S
ncrti.S: $(gcc_srcdir)/config/rs6000/sol-ci.asm
cat $(gcc_srcdir)/config/rs6000/sol-ci.asm >ncrti.S
ncrtn.S: $(gcc_srcdir)/config/rs6000/sol-cn.asm
cat $(gcc_srcdir)/config/rs6000/sol-cn.asm >ncrtn.S
crtsavres.S: $(gcc_srcdir)/config/rs6000/crtsavres.asm
cat $(gcc_srcdir)/config/rs6000/crtsavres.asm >crtsavres.S
ecrti$(objext): ecrti.S
$(crt_compile) -c ecrti.S
ecrtn$(objext): ecrtn.S
$(crt_compile) -c ecrtn.S
ncrti$(objext): ncrti.S
$(crt_compile) -c ncrti.S
ncrtn$(objext): ncrtn.S
$(crt_compile) -c ncrtn.S
crtsavres$(objext): crtsavres.S
$(crt_compile) -c crtsavres.S

View File

@ -0,0 +1,2 @@
crtfastmath.o: $(gcc_srcdir)/config/sparc/crtfastmath.c
$(gcc_compile) -c $(gcc_srcdir)/config/sparc/crtfastmath.c

View File

@ -0,0 +1,122 @@
# Build a shared libgcc library with the darwin linker.
SHLIB_SOVERSION = 1
SHLIB_VERSTRING = -compatibility_version $(SHLIB_SOVERSION) -current_version $(SHLIB_SOVERSION).0
SHLIB_EXT = .dylib
SHLIB_SUFFIX = `if test @multilib_dir@ = ppc64 ; then echo _@multilib_dir@ ; fi`
SHLIB_INSTALL_NAME = @shlib_base_name@$(SHLIB_SUFFIX).$(SHLIB_SOVERSION)$(SHLIB_EXT)
SHLIB_SONAME = @shlib_base_name@.$(SHLIB_SOVERSION)$(SHLIB_EXT)
SHLIB_SOLINK = @shlib_base_name@.so
SHLIB_MAP = @shlib_map_file@
SHLIB_OBJS = @shlib_objs@
SHLIB_DIR = @multilib_dir@
SHLIB_LC = -lc
# Darwin only searches in /usr/lib for shared libraries, not in subdirectories,
# so the libgcc variants have different names not different locations.
# Note that this version is used for the loader, not the linker; the linker
# uses the stub versions named by the versioned members of $(INSTALL_FILES).
SHLIB_LINK = $(CC) $(LIBGCC2_CFLAGS) -dynamiclib -nodefaultlibs \
-install_name $(slibdir)/$(SHLIB_INSTALL_NAME) \
-single_module -o $(SHLIB_DIR)/$(SHLIB_SONAME).tmp \
-Wl,-exported_symbols_list,$(SHLIB_MAP) \
$(SHLIB_VERSTRING) \
@multilib_flags@ $(SHLIB_OBJS) $(SHLIB_LC)
SHLIB_MKMAP = $(gcc_srcdir)/mkmap-flat.awk
SHLIB_MKMAP_OPTS = -v leading_underscore=1
SHLIB_MAPFILES += $(gcc_srcdir)/libgcc-std.ver
INSTALL_FILES=libgcc_s.10.4.dylib libgcc_s.10.5.dylib libgcc_s.1.dylib
# For the toplevel multilib, build a fat archive including all the multilibs.
ifeq ($(MULTIBUILDTOP),)
SHLIB_INSTALL = \
$(mkinstalldirs) $(DESTDIR)$(slibdir); \
$(INSTALL_DATA) $(SHLIB_SONAME) \
$(DESTDIR)$(slibdir)/$(SHLIB_SONAME)
ifeq ($(enable_shared),yes)
all: $(INSTALL_FILES)
install: install-darwin-libgcc-stubs
endif
# In order to support -mmacosx-version-min, you need to have multiple
# different libgcc_s libraries that actually get linked against, one for
# each system version supported. They are 'stub' libraries that
# contain no code, just a list of exported symbols.
# The actual use of the libraries is controlled by REAL_LIBGCC_SPEC.
#
# This assumes each multilib corresponds to a different architecture.
libgcc_s.%.dylib : $(SHLIB_VERPFX).%.ver libgcc_s$(SHLIB_EXT) all-multi
$(STRIP) -o $(@)_T \
-s $(SHLIB_VERPFX).$(*).ver -c -u \
./libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT).tmp
MLIBS=`$(CC) --print-multi-lib \
| sed -e 's/;.*$$//' -e '/^\.$$/d'` ; \
for mlib in $$MLIBS ; do \
$(STRIP) -o $(@)_T$${mlib} \
-s $(SHLIB_VERPFX).$(*).ver -c -u \
../$${mlib}/libgcc/$${mlib}/libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT).tmp || exit 1 ; \
done
$(LIPO) -output $@ -create $(@)_T*
rm $(@)_T*
libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT): all-multi libgcc_s$(SHLIB_EXT) \
libgcc_s.10.4.dylib libgcc_s.10.5.dylib
cp libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT).tmp \
./libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T_ || exit 1 ; \
MLIBS=`$(CC) --print-multi-lib \
| sed -e 's/;.*$$//' -e '/^\.$$/d'` ; \
for mlib in $$MLIBS ; do \
cp ../$${mlib}/libgcc/$${mlib}/libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT).tmp \
./libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T_$${mlib} || exit 1 ; \
done
$(LIPO) -output libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT) \
-create libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T*
rm libgcc_s.$(SHLIB_SOVERSION)$(SHLIB_EXT)_T*
install-darwin-libgcc-stubs : $(INSTALL_FILES)
$(mkinstalldirs) $(DESTDIR)$(slibdir)
for d in $(INSTALL_FILES) ; do \
$(INSTALL_DATA) $$d $(DESTDIR)$(slibdir)/$$d || exit 1 ; \
done
if [ -f $(DESTDIR)$(slibdir)/libgcc_s_ppc64.1.dylib ]; then \
rm -f $(DESTDIR)$(slibdir)/libgcc_s_ppc64.1.dylib; \
else true; fi
$(LN_S) libgcc_s.1.dylib \
$(DESTDIR)$(slibdir)/libgcc_s_ppc64.1.dylib
if [ -f $(DESTDIR)$(slibdir)/libgcc_s_x86_64.1.dylib ]; then \
rm -f $(DESTDIR)$(slibdir)/libgcc_s_x86_64.1.dylib; \
else true; fi
$(LN_S) libgcc_s.1.dylib \
$(DESTDIR)$(slibdir)/libgcc_s_x86_64.1.dylib
else
# Do not install shared libraries for any other multilibs. Unless
# we're putting them in the gcc directory during a build, for
# compatibility with the pre-top-level layout. In that case we
# need symlinks.
SHLIB_INSTALL =
ifeq ($(enable_shared),yes)
all: install-darwin-libgcc-links
endif
install-darwin-libgcc-links:
$(mkinstalldirs) $(gcc_objdir)$(MULTISUBDIR)
for file in $(INSTALL_FILES); do \
rm -f $(gcc_objdir)$(MULTISUBDIR)/$$file; \
$(LN_S) ../$$file $(gcc_objdir)$(MULTISUBDIR)/; \
done
rm -f $(gcc_objdir)$(MULTISUBDIR)/libgcc_s_x86_64.1.dylib
$(LN_S) libgcc_s.1.dylib \
$(gcc_objdir)$(MULTISUBDIR)/libgcc_s_x86_64.1.dylib
rm -f $(gcc_objdir)$(MULTISUBDIR)/libgcc_s_ppc64.1.dylib
$(LN_S) libgcc_s.1.dylib \
$(gcc_objdir)$(MULTISUBDIR)/libgcc_s_ppc64.1.dylib
endif

4379
libgcc/configure vendored Normal file

File diff suppressed because it is too large Load Diff

157
libgcc/configure.ac Normal file
View File

@ -0,0 +1,157 @@
dnl Process this file with autoconf to produce a configure script.
sinclude(../config/acx.m4)
sinclude(../config/no-executables.m4)
AC_PREREQ(2.59)
AC_INIT([GNU C Runtime Library], 1.0,,[libgcc])
AC_CONFIG_SRCDIR([static-object.mk])
AC_ARG_WITH(target-subdir,
[ --with-target-subdir=SUBDIR Configuring in a subdirectory for target])
AC_ARG_WITH(cross-host,
[ --with-cross-host=HOST Configuring with a cross compiler])
AC_ARG_WITH(ld,
[ --with-ld arrange to use the specified ld (full pathname)])
if test "${srcdir}" = "."; then
if test -n "${with_build_subdir}"; then
libgcc_topdir="${srcdir}/../.."
with_target_subdir=
elif test -z "${with_target_subdir}"; then
libgcc_topdir="${srcdir}/.."
else
if test "${with_target_subdir}" != "."; then
libgcc_topdir="${srcdir}/${with_multisrctop}../.."
else
libgcc_topdir="${srcdir}/${with_multisrctop}.."
fi
fi
else
libgcc_topdir="${srcdir}/.."
fi
AC_SUBST(libgcc_topdir)
AC_CONFIG_AUX_DIR($libgcc_topdir)
AC_ARG_ENABLE(shared,
[ --disable-shared don't provide a shared libgcc],
[
case $enable_shared in
yes | no) ;;
*)
enable_shared=no
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
for pkg in $enableval; do
if test "X$pkg" = "Xgcc" || test "X$pkg" = "Xlibgcc"; then
enable_shared=yes
fi
done
IFS="$ac_save_ifs"
;;
esac
], [enable_shared=yes])
AC_SUBST(enable_shared)
AC_ARG_WITH(slibdir,
[ --with-slibdir=DIR shared libraries in DIR [LIBDIR]],
slibdir="$with_slibdir",
if test "${enable_version_specific_runtime_libs+set}" = set; then
slibdir='$(libsubdir)'
elif test "$host" != "$target"; then
slibdir='$(build_tooldir)/lib'
else
slibdir='$(libdir)'
fi)
AC_SUBST(slibdir)
AC_PROG_INSTALL
AC_PROG_AWK
# We need awk; bail out if it's missing.
case ${AWK} in
"") AC_MSG_ERROR([can't build without awk, bailing out]) ;;
esac
AC_CANONICAL_HOST
ACX_NONCANONICAL_HOST
dnl These must be called before AM_PROG_LIBTOOL, because it may want
dnl to call AC_CHECK_PROG.
AC_CHECK_TOOL(AR, ar)
AC_CHECK_TOOL(LIPO, lipo, :)
AC_CHECK_TOOL(NM, nm)
AC_CHECK_TOOL(RANLIB, ranlib, :)
AC_CHECK_TOOL(STRIP, strip, :)
AC_PROG_LN_S
GCC_NO_EXECUTABLES
AC_PROG_CC
AC_PROG_CPP_WERROR
# Check for decimal float support.
AC_CACHE_CHECK([whether decimal floating point is supported], [libgcc_cv_dfp],
[AC_COMPILE_IFELSE([_Decimal32 x;], [libgcc_cv_dfp=yes],
[libgcc_cv_dfp=no])])
decimal_float=$libgcc_cv_dfp
AC_SUBST(decimal_float)
# Collect host-machine-specific information.
. ${srcdir}/config.host
# Check for visibility support. This is after config.host so that
# we can check for asm_hidden_op.
AC_CACHE_CHECK([for __attribute__((visibility("hidden")))],
libgcc_cv_hidden_visibility_attribute, [
echo 'int __attribute__ ((visibility ("hidden"))) foo (void) { return 1; }' > conftest.c
libgcc_cv_hidden_visibility_attribute=no
if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then
if grep "\\$asm_hidden_op.*foo" conftest.s >/dev/null; then
libgcc_cv_hidden_visibility_attribute=yes
fi
fi
rm -f conftest.*
])
if test $libgcc_cv_hidden_visibility_attribute = yes; then
vis_hide='-fvisibility=hidden -DHIDE_EXPORTS'
else
vis_hide=
fi
AC_SUBST(vis_hide)
# Conditionalize the makefile for this target machine.
tmake_file_=
for f in ${tmake_file}
do
if test -f ${srcdir}/config/$f
then
tmake_file_="${tmake_file_} \$(srcdir)/config/$f"
fi
done
tmake_file="${tmake_file_}"
AC_SUBST(tmake_file)
# Substitute configuration variables
AC_SUBST(extra_parts)
AC_SUBST(asm_hidden_op)
# We need multilib support.
AC_CONFIG_FILES([Makefile])
AC_CONFIG_COMMANDS([default],
[[test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h
if test -n "$CONFIG_FILES"; then
# FIXME: We shouldn't need to set ac_file
ac_file=Makefile
. ${libgcc_topdir}/config-ml.in
fi]],
[[srcdir=${srcdir}
host=${host}
target=${target}
with_target_subdir=${with_target_subdir}
with_multisubdir=${with_multisubdir}
ac_configure_args="--enable-multilib ${ac_configure_args}"
CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
libgcc_topdir=${libgcc_topdir}
CC="${CC}"
]])
AC_OUTPUT

2
libgcc/empty.mk Normal file
View File

@ -0,0 +1,2 @@
# Empty. This file exists to suppress errors in the parent Makefile
# when a variable (e.g. LIB2ADD) is empty.

34
libgcc/shared-object.mk Normal file
View File

@ -0,0 +1,34 @@
# This file is included several times in a row, once for each element of
# $(iter-items). On each inclusion, we advance $o to the next element.
o := $(firstword $(iter-items))
iter-items := $(filter-out $o,$(iter-items))
base := $(basename $(notdir $o))
ifeq ($(suffix $o),.c)
$(base)$(objext): $o
$(gcc_compile) $(c_flags) -c $< $(vis_hide)
$(base)_s$(objext): $o
$(gcc_s_compile) $(c_flags) -c $<
else
ifneq ($(suffix $o),.S)
ifneq ($(suffix $o),.asm)
$(error Unsupported file type: $o)
endif
endif
$(base)$(objext): $o $(base).vis
$(gcc_compile) -c -xassembler-with-cpp -include $*.vis $<
$(base).vis: $(base)_s$(objext)
$(gen-hide-list)
$(base)_s$(objext): $o
$(gcc_s_compile) -c -xassembler-with-cpp $<
endif

22
libgcc/siditi-object.mk Normal file
View File

@ -0,0 +1,22 @@
# This file is included several times in a row, once for each element of
# $(iter-items). On each inclusion, we advance $o to the next element.
# $(iter-labels) and $(iter-sizes) are also advanced.
o := $(firstword $(iter-items))
iter-items := $(filter-out $o,$(iter-items))
$o-label := $(firstword $(iter-labels))
iter-labels := $(wordlist 2,$(words $(iter-labels)),$(iter-labels))
$o-size := $(firstword $(iter-sizes))
iter-sizes := $(wordlist 2,$(words $(iter-sizes)),$(iter-sizes))
$o$(objext): %$(objext): $(gcc_srcdir)/libgcc2.c
$(gcc_compile) -DL$($*-label) -c $(gcc_srcdir)/libgcc2.c $(vis_hide) \
-DLIBGCC2_UNITS_PER_WORD=$($*-size)
ifeq ($(enable_shared),yes)
$(o)_s$(objext): %_s$(objext): $(gcc_srcdir)/libgcc2.c
$(gcc_s_compile) -DL$($*-label) -c $(gcc_srcdir)/libgcc2.c \
-DLIBGCC2_UNITS_PER_WORD=$($*-size)
endif

25
libgcc/static-object.mk Normal file
View File

@ -0,0 +1,25 @@
# This file is included several times in a row, once for each element of
# $(iter-items). On each inclusion, we advance $o to the next element.
o := $(firstword $(iter-items))
iter-items := $(filter-out $o,$(iter-items))
base := $(basename $(notdir $o))
ifeq ($(suffix $o),.c)
$(base)$(objext): $o
$(gcc_compile) $(c_flags) -c $< $(vis_hide)
else
ifneq ($(suffix $o),.S)
ifneq ($(suffix $o),.asm)
$(error Unsupported file type: $o)
endif
endif
$(base)$(objext): $o
$(gcc_compile) -c -xassembler-with-cpp $<
endif