* do_compile of gcc-cross-sdk-4.5 fails with -mfloat-abi=hard
@ 2011-03-29 13:33 Julian Pietron
2011-03-29 14:22 ` Julian Pietron
` (3 more replies)
0 siblings, 4 replies; 8+ messages in thread
From: Julian Pietron @ 2011-03-29 13:33 UTC (permalink / raw)
To: openembedded-devel
[-- Attachment #1: Type: text/plain, Size: 757 bytes --]
Hallo,
I encountered a problem on bitbaking meta-toolchain for a Cortex A8 CPU
with hardfp enabled. I'm using a modified cm-t35 machine which enables
ARM_FP_MODE="hardfp" to enforce using the hardware FPU. Up to
compilation of gcc-cross-sdk-4.5 everything is fine, but the build
process fails on linking some files to libgcc_s.so.1.tmp, please see
attached log.do_compile for more information.
Currently I'm trying to build with ARM_FP_MODE="softfp" to see whether
the problem persists, but I don't think so as it seems to be related to
the VFP instructions. My guess is that somewhere in the build process
the TARGET_CC_ARCH flags are not applied where they should have been
applied.
Thanks for your help,
Julian
[-- Attachment #2: log.do_compile.16581.bz2 --]
[-- Type: application/x-bzip2, Size: 32500 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: do_compile of gcc-cross-sdk-4.5 fails with -mfloat-abi=hard
2011-03-29 13:33 do_compile of gcc-cross-sdk-4.5 fails with -mfloat-abi=hard Julian Pietron
@ 2011-03-29 14:22 ` Julian Pietron
2011-03-29 21:15 ` Julian Pietron
` (2 subsequent siblings)
3 siblings, 0 replies; 8+ messages in thread
From: Julian Pietron @ 2011-03-29 14:22 UTC (permalink / raw)
To: openembedded-devel
On Tue, 29 Mar 2011 15:33:11 +0200, Julian Pietron
<julian@whisper-net.de> wrote:
> Currently I'm trying to build with ARM_FP_MODE="softfp" to see
> whether the problem persists, but I don't think so as it seems to be
> related to the VFP instructions.
As expected, a build in softfp mode works without errors and completes
successfully.
Best regards,
Julian
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: do_compile of gcc-cross-sdk-4.5 fails with -mfloat-abi=hard
2011-03-29 13:33 do_compile of gcc-cross-sdk-4.5 fails with -mfloat-abi=hard Julian Pietron
2011-03-29 14:22 ` Julian Pietron
@ 2011-03-29 21:15 ` Julian Pietron
2011-03-29 21:54 ` Julian Pietron
2011-03-29 22:05 ` Khem Raj
3 siblings, 0 replies; 8+ messages in thread
From: Julian Pietron @ 2011-03-29 21:15 UTC (permalink / raw)
To: openembedded-devel
[-- Attachment #1: Type: text/plain, Size: 1044 bytes --]
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Also fails with release-2011.03, same errors.
Best Regards,
Julian
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.16 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
iQIcBAEBAgAGBQJNkkwDAAoJENidYKvYQHlQm14QAKRLhG/PL9ApQskmMhbUXXMk
B9/s5lFjlrZHl/sMjh5fPDOMsYJkZHklMf1lb3eP0Xi3O/Vg7jE4ts7+lHPCwlds
baMMGaqktgZnMVxxfMM3tcmo2FPjPQDDjveoLokTYv3F55zYItfqm2/+y35+Yhbw
SVq+3Uqjc2F3a9G+grbViCnqdXlCm5EiQjPWrHziNhmZRNr28qCyHkTVmyQ1RNJQ
EpIaz8YZx3N2+7AUQyci6OdeZ+P6K9ehx86DPga/gpOYJ9PIdmFz+2ORck18RotH
xWws/GUlZaxcwKv2HeWTOwYWY1Tn1Lb5ijucBSU64+qQ+pHlpua2kVnuJ2oCem0P
Jl+4DwaSr5dOjMAI8FHg5wDNqX4vbTKpMOEV/4Kb7DB/srbejcdbtjheIdB/KInG
0GB+y/A40neXwM5WJX0o/YyqyFmjfqmHqgcfp/R0WP6DaCIN7qjPSUxsYNUoUyBk
2Q6bcUoTxeni63Fk4anNxxJVQy6qgpVI8UQVb0QB6phcfid9Dadts+MnKPwp0D8R
QqQG4GF2xo9NOq77oI6U65aLDwyQZBWzLG9JRWsHZm4WHM+MiIcEB+fl7ctqRpjG
/UIlCBs66Ptw08RJooGNoWHhvRJyJ6wrmOSM+eKVgbh83QXqrnqELGNDP6YQvg06
pElED6adUooPXQf0CdNP
=ncrm
-----END PGP SIGNATURE-----
[-- Attachment #2: 0xD8407950.asc --]
[-- Type: application/pgp-keys, Size: 9859 bytes --]
[-- Attachment #3: 0xD8407950.asc.sig --]
[-- Type: application/pgp-signature, Size: 543 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: do_compile of gcc-cross-sdk-4.5 fails with -mfloat-abi=hard
2011-03-29 13:33 do_compile of gcc-cross-sdk-4.5 fails with -mfloat-abi=hard Julian Pietron
2011-03-29 14:22 ` Julian Pietron
2011-03-29 21:15 ` Julian Pietron
@ 2011-03-29 21:54 ` Julian Pietron
2011-03-29 22:39 ` Khem Raj
2011-03-29 22:05 ` Khem Raj
3 siblings, 1 reply; 8+ messages in thread
From: Julian Pietron @ 2011-03-29 21:54 UTC (permalink / raw)
To: openembedded-devel
[-- Attachment #1: Type: text/plain, Size: 1740 bytes --]
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hey,
some more information for you in the hope that it will help you to
find the cause for these problems. I attached the Makefile from the
gcc-cross-4.5 build, libgcc-subdirectory, and the Makefile from the
gcc-cross-sdk-4.5, libgcc subdirectory. As you can see in line 67
where CC is set, the former Makefile includes the correct
TARGET_CC_ARCH (-mtune=armv7-a etc.), while the latter doesn't contain
this and especially doesn't contain the -mfloat-abi=hard which would
be required to perform the correct hard float compilation. I guess
there is something missing in the call to ./configure for the
gcc-cross-sdk-build, perhaps you could point me to the directive that
has to be added to have the correct CFLAGS for building libgcc.
Thanks,
Julian
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.16 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
iQIcBAEBAgAGBQJNklUFAAoJENidYKvYQHlQSswP/0+um3OoYQOSd7OXS+o4TMI3
zsOKoqmbVCN+k9YiaQ5KT6scf2lxI38dOq1M4Bi5An8sibo1yR9OuM2YilWqqu5U
zp0U3HRpggeUw4jkm1ZRLlw6NyY9aW9eTzYAUBiuy/HRqekdtkRhJQFoHJ075th7
qL7bKFzwQaCnEWX0jFRJ8zRviiLj7cXHdBb/Lx0eweBL344v3XNStLprHUXGt+je
I+BQzJt7eFf8VKtJzDVV9JFNYXauBZPCMZgfdQY0GSIdsArROmjEYbAl5qsOFaDZ
75lcHOVEt4zHpqBQ9f4lU6MeGHc9LYGb84k4YUch4z/zxxxA7FxNh4cVKUyENm09
PCE0UPEStRUrBAJye/ZWVyeoNSSCKDBHE7mf1OCSBffrXIrHrkvWqzJAvcm7Svd+
JC79h1UNxM3BERJyk1EQVLm8haeEW1Xx/NQEf9VmAclk85mwhLil1bS7aP+ll3Ty
qWifJEGXvFz1hDc8nXg4FXIeaJywfF7/n1rEyKXYM4LcklTQ8quWovhN7XUU0o92
MOhCmHkkJrzH3vIqZQ04vatKHsmDv/6uxYPIfeXbjsGMERsA0V2FL0gdFM1xPR/o
xEhgT4FPgLSi7xIPwHUB19aDAFyKS1yPi92C3MO7mn1zyL6IN0xj4XQ6xxdAEDIQ
wO1fPo7nQxSc9I9ghoN6
=+wXY
-----END PGP SIGNATURE-----
[-- Attachment #2: 0xD8407950.asc --]
[-- Type: application/pgp-keys, Size: 9859 bytes --]
[-- Attachment #3: Makefile-gcc-cross-sdk --]
[-- Type: text/plain, Size: 32776 bytes --]
# Makefile.in
# Copyright (C) 2005, 2006, 2009 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 3 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 COPYING3. If not see
# <http://www.gnu.org/licenses/>.
#
libgcc_topdir = /home/jupi/openembedded/tmp/work/x86_64-armv7a-hardfp-sdk-oe-linux-gnueabi/gcc-cross-sdk-4.5-r33.2+svnr170443/gcc-4_5-branch/libgcc/..
host_subdir = .
gcc_srcdir = $(libgcc_topdir)/gcc
gcc_objdir = $(MULTIBUILDTOP)../../$(host_subdir)/gcc
srcdir = /home/jupi/openembedded/tmp/work/x86_64-armv7a-hardfp-sdk-oe-linux-gnueabi/gcc-cross-sdk-4.5-r33.2+svnr170443/gcc-4_5-branch/libgcc
prefix = /usr/local/ibert/arm
exec_prefix = /usr/local/ibert/arm
libdir = /usr/local/ibert/arm/lib
shlib_slibdir = $(exec_prefix)/$(host_noncanonical)/lib
SHELL = /bin/sh
enable_shared = yes
decimal_float = no
enable_decimal_float = no
fixed_point = no
host_noncanonical = arm-oe-linux-gnueabi
# 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 = crtbegin.o crtbeginS.o crtbeginT.o crtend.o crtendS.o
# Multilib support variables.
MULTISRCTOP =
MULTIBUILDTOP =
MULTIDIRS =
MULTISUBDIR =
MULTIDO = true
MULTICLEAN = true
INSTALL = /home/jupi/openembedded/openembedded//bin/install -c
INSTALL_PROGRAM = /home/jupi/openembedded/openembedded//bin/install -c
INSTALL_DATA = /home/jupi/openembedded/openembedded//bin/install -c -m 644
mkinstalldirs = $(SHELL) $(libgcc_topdir)/mkinstalldirs
objext = .o
AR = /home/jupi/openembedded/tmp/sysroots/x86_64-linux/usr/armv7a-hardfp/arm-oe-linux-gnueabi/bin/ar
AR_FLAGS = rc
CC = /home/jupi/openembedded/tmp/work/x86_64-armv7a-hardfp-sdk-oe-linux-gnueabi/gcc-cross-sdk-4.5-r33.2+svnr170443/gcc-4_5-branch/build.x86_64-linux.arm-oe-linux-gnueabi/./gcc/xgcc -B/home/jupi/openembedded/tmp/work/x86_64-armv7a-hardfp-sdk-oe-linux-gnueabi/gcc-cross-sdk-4.5-r33.2+svnr170443/gcc-4_5-branch/build.x86_64-linux.arm-oe-linux-gnueabi/./gcc/ --sysroot=/home/jupi/openembedded/tmp/sysroots/armv7a-hardfp-oe-linux-gnueabi -B/usr/local/ibert/arm/arm-oe-linux-gnueabi/bin/ -B/usr/local/ibert/arm/arm-oe-linux-gnueabi/lib/ -isystem /usr/local/ibert/arm/arm-oe-linux-gnueabi/include -isystem /usr/local/ibert/arm/arm-oe-linux-gnueabi/sys-include --sysroot=/home/jupi/openembedded/tmp/sysroots/armv7a-hardfp-oe-linux-gnueabi
CFLAGS = -g -Os
RANLIB = /home/jupi/openembedded/tmp/sysroots/x86_64-linux/usr/armv7a-hardfp/arm-oe-linux-gnueabi/bin/ranlib
LN_S = ln -s
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-leaf 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 $(srcdir)/config.host
$(SHELL) ./config.status --recheck
AUTOCONF = autoconf
configure_deps = \
$(srcdir)/../config/enable.m4 \
$(srcdir)/../config/tls.m4 \
$(srcdir)/../config/acx.m4 \
$(srcdir)/../config/no-executables.m4 \
$(srcdir)/../config/override.m4 \
$(srcdir)/configure: # $(srcdir)/configure.ac $(configure_deps)
cd $(srcdir) && $(AUTOCONF)
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 = gawk
GCC_FOR_TARGET = $(CC)
LIPO = /home/jupi/openembedded/tmp/sysroots/x86_64-linux/usr/armv7a-hardfp/arm-oe-linux-gnueabi/bin/lipo
LIPO_FOR_TARGET = $(LIPO)
MACHMODE_H = machmode.h mode-classes.def insn-modes.h
NM = /home/jupi/openembedded/tmp/work/x86_64-armv7a-hardfp-sdk-oe-linux-gnueabi/gcc-cross-sdk-4.5-r33.2+svnr170443/gcc-4_5-branch/build.x86_64-linux.arm-oe-linux-gnueabi/./gcc/nm
NM_FOR_TARGET = $(NM)
RANLIB_FOR_TARGET = $(RANLIB)
STRIP = /home/jupi/openembedded/tmp/sysroots/x86_64-linux/usr/armv7a-hardfp/arm-oe-linux-gnueabi/bin/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 = $(exec_prefix)/$(host_noncanonical)/lib
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
version := $(shell $(CC) -dumpversion)
ifeq ($(decimal_float),yes)
ifeq ($(enable_decimal_float),bid)
DECNUMINC = -I$(srcdir)/config/libbid -DENABLE_DECIMAL_BID_FORMAT
else
DECNUMINC = -I$(srcdir)/../libdecnumber/$(enable_decimal_float) \
-I$(srcdir)/../libdecnumber
endif
else
DECNUMINC =
endif
# 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)
# Forcibly remove any profiling-related flags. There is no point
# in supporting profiled bootstrap in this library.
override CFLAGS := $(filter-out -fprofile-generate -fprofile-use,$(CFLAGS))
# 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) -DHAVE_CC_TLS
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 = $(srcdir)/config/arm/t-divmod-ef
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 = -fvisibility=hidden -DHIDE_EXPORTS
ifneq (,$(vis_hide))
# If we have -fvisibility=hidden, then we need to generate hide
# lists for object files implemented in assembly.
ASM_HIDDEN_OP = .hidden
define gen-hide-list
$(NM) -pg $< | \
$(AWK) 'NF == 3 && $$2 !~ /^[UN]$$/ && $$3 !~ /.*_compat/ \
&& $$3 !~ /.*@.*/ \
{ 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
ifeq ($(LIB2_DIVMOD_EXCEPTION_FLAGS),)
# Provide default flags for compiling divmod functions, if they haven't been
# set already by a target-specific Makefile fragment.
LIB2_DIVMOD_EXCEPTION_FLAGS := -fexceptions -fnon-call-exceptions
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 \
$(LIB2_DIVMOD_EXCEPTION_FLAGS) $(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 \
$(LIB2_DIVMOD_EXCEPTION_FLAGS)
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
dfp-filenames =
ifneq ($(D32PBIT)$(D64PBIT)$(D128PBIT),)
ifeq ($(enable_decimal_float),bid)
dfp-filenames += bid_decimal_globals bid_decimal_data \
bid_binarydecimal bid_convert_data \
_isinfd32 _isinfd64 _isinfd128 bid64_noncomp \
bid128_noncomp bid128_fma bid_round bid_from_int \
bid64_add bid128_add bid64_div bid128_div \
bid64_mul bid128_mul bid64_compare bid128_compare \
bid128 bid32_to_bid64 bid32_to_bid128 bid64_to_bid128 \
bid64_to_int32 bid64_to_int64 \
bid64_to_uint32 bid64_to_uint64 \
bid128_to_int32 bid128_to_int64 \
bid128_to_uint32 bid128_to_uint64
else
dfp-filenames += decContext decNumber decExcept decRound decLibrary decDouble decPacked decQuad decSingle
endif
endif
dfp-objects = $(patsubst %,%$(objext),$(dfp-filenames))
ifeq ($(enable_decimal_float),bid)
$(dfp-objects): %$(objext): $(srcdir)/config/libbid/%.c
else
$(dfp-objects): %$(objext): $(srcdir)/../libdecnumber/%.c
endif
$(gcc_compile) -c $<
libgcc-objects += $(dfp-objects)
decbits-filenames =
ifneq ($(enable_decimal_float),bid)
ifneq ($(D32PBIT),)
decbits-filenames += decimal32
endif
ifneq ($(D64PBIT),)
decbits-filenames += decimal64
endif
ifneq ($(D128PBIT),)
decbits-filenames += decimal128
endif
endif
decbits-objects = $(patsubst %,%$(objext),$(decbits-filenames))
ifeq ($(enable_decimal_float),bid)
$(decbits-objects): %$(objext): $(srcdir)/config/libbid/%.c
else
$(decbits-objects): %$(objext): $(srcdir)/../libdecnumber/$(enable_decimal_float)/%.c
endif
$(gcc_compile) -c $<
libgcc-objects += $(decbits-objects)
# Next build individual support functions.
ifeq ($(enable_decimal_float),bid)
ifneq ($(D32PBIT),)
D32PBIT_FUNCS:=$(filter-out _plus_sd _minus_sd _conv_sd, $(D32PBIT_FUNCS))
endif
ifneq ($(D64PBIT),)
D64PBIT_FUNCS:=$(filter-out _plus_dd _minus_dd _conv_dd, $(D64PBIT_FUNCS))
endif
ifneq ($(D128PBIT),)
D128PBIT_FUNCS:=$(filter-out _plus_td _minus_td _conv_td, $(D128PBIT_FUNCS))
endif
endif
ifneq ($(D32PBIT),)
d32pbit-o = $(patsubst %,%$(objext),$(D32PBIT_FUNCS))
ifeq ($(enable_decimal_float),bid)
$(d32pbit-o): %$(objext): $(srcdir)/config/libbid/%.c
else
$(d32pbit-o): %$(objext): $(gcc_srcdir)/config/dfp-bit.c
endif
$(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* -DWIDTH=32 -c $<
libgcc-objects += $(d32pbit-o)
endif
ifneq ($(D64PBIT),)
d64pbit-o = $(patsubst %,%$(objext),$(D64PBIT_FUNCS))
ifeq ($(enable_decimal_float),bid)
$(d64pbit-o): %$(objext): $(srcdir)/config/libbid/%.c
else
$(d64pbit-o): %$(objext): $(gcc_srcdir)/config/dfp-bit.c
endif
$(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* -DWIDTH=64 -c $<
libgcc-objects += $(d64pbit-o)
endif
ifneq ($(D128PBIT),)
d128pbit-o = $(patsubst %,%$(objext),$(D128PBIT_FUNCS))
ifeq ($(enable_decimal_float),bid)
$(d128pbit-o): %$(objext): $(srcdir)/config/libbid/%.c
else
$(d128pbit-o): %$(objext): $(gcc_srcdir)/config/dfp-bit.c
endif
$(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* -DWIDTH=128 -c $<
libgcc-objects += $(d128pbit-o)
endif
endif
ifeq ($(LIBGCC_SYNC),yes)
libgcc-sync-size-funcs := $(foreach op, add sub or and xor nand, \
sync_fetch_and_$(op) \
sync_$(op)_and_fetch) \
sync_bool_compare_and_swap \
sync_val_compare_and_swap \
sync_lock_test_and_set
libgcc-sync-size-funcs := $(foreach prefix, $(libgcc-sync-size-funcs), \
$(foreach suffix, 1 2 4 8 16, \
$(prefix)_$(suffix)))
libgcc-sync-size-funcs-o = $(patsubst %,%$(objext),$(libgcc-sync-size-funcs))
$(libgcc-sync-size-funcs-o): %$(objext): $(gcc_srcdir)/config/sync.c
$(gcc_compile) $(LIBGCC_SYNC_CFLAGS) \
-DFN=`echo "$*" | sed 's/_[^_]*$$//'` \
-DSIZE=`echo "$*" | sed 's/.*_//'` \
-c $(gcc_srcdir)/config/sync.c $(vis_hide)
libgcc-objects += $(libgcc-sync-size-funcs-o)
libgcc-sync-funcs := sync_synchronize
libgcc-sync-funcs-o = $(patsubst %,%$(objext),$(libgcc-sync-funcs))
$(libgcc-sync-funcs-o): %$(objext): $(gcc_srcdir)/config/sync.c
$(gcc_compile) $(LIBGCC_SYNC_CFLAGS) \
-DL$* \
-c $(gcc_srcdir)/config/sync.c $(vis_hide)
libgcc-objects += $(libgcc-sync-funcs-o)
ifeq ($(enable_shared),yes)
libgcc-sync-size-funcs-s-o = $(patsubst %,%_s$(objext), \
$(libgcc-sync-size-funcs))
$(libgcc-sync-size-funcs-s-o): %_s$(objext): $(gcc_srcdir)/config/sync.c
$(gcc_s_compile) $(LIBGCC_SYNC_CFLAGS) \
-DFN=`echo "$*" | sed 's/_[^_]*$$//'` \
-DSIZE=`echo "$*" | sed 's/.*_//'` \
-c $(gcc_srcdir)/config/sync.c
libgcc-s-objects += $(libgcc-sync-size-funcs-s-o)
libgcc-sync-funcs-s-o = $(patsubst %,%_s$(objext),$(libgcc-sync-funcs))
$(libgcc-sync-funcs-s-o): %_s$(objext): $(gcc_srcdir)/config/sync.c
$(gcc_s_compile) $(LIBGCC_SYNC_CFLAGS) \
-DL$* \
-c $(gcc_srcdir)/config/sync.c
libgcc-s-objects += $(libgcc-sync-funcs-s-o)
endif
endif
# Build fixed-point support.
ifeq ($(fixed_point),yes)
# Generate permutations of function name and mode
fixed-labels := $(shell $(SHELL) $(srcdir)/gen-fixed.sh arith labels)
fixed-funcs := $(shell $(SHELL) $(srcdir)/gen-fixed.sh arith funcs)
fixed-modes := $(shell $(SHELL) $(srcdir)/gen-fixed.sh arith modes)
# Generate the rules for each arithmetic function
iter-items := $(fixed-funcs)
iter-labels := $(fixed-labels)
iter-from := $(fixed-modes)
iter-to := $(fixed-modes)
include $(srcdir)/empty.mk $(patsubst %,$(srcdir)/fixed-obj.mk,$(iter-items))
# Add arithmetic functions to list of objects to be built
libgcc-objects += $(patsubst %,%$(objext),$(fixed-funcs))
ifeq ($(enable_shared),yes)
libgcc-s-objects += $(patsubst %,%_s$(objext),$(fixed-funcs))
endif
# Convert from or to fractional
fixed-conv-funcs := $(shell $(SHELL) $(srcdir)/gen-fixed.sh conv funcs)
fixed-conv-labels := $(shell $(SHELL) $(srcdir)/gen-fixed.sh conv labels)
fixed-conv-from := $(shell $(SHELL) $(srcdir)/gen-fixed.sh conv from)
fixed-conv-to := $(shell $(SHELL) $(srcdir)/gen-fixed.sh conv to)
# Generate the make rules for each conversion function
iter-items := $(fixed-conv-funcs)
iter-labels := $(fixed-conv-labels)
iter-from := $(fixed-conv-from)
iter-to := $(fixed-conv-to)
include $(srcdir)/empty.mk $(patsubst %,$(srcdir)/fixed-obj.mk,$(iter-items))
# Add conversion functions to list of objects to be built
libgcc-objects += $(patsubst %,%$(objext),$(fixed-conv-funcs))
ifeq ($(enable_shared),yes)
libgcc-s-objects += $(patsubst %,%_s$(objext),$(fixed-conv-funcs))
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
libgcc_s$(SHLIB_EXT): libunwind$(SHLIB_EXT)
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) -B./,$(subst \
@multilib_dir@,$(MULTIDIR),$(subst \
@shlib_objs@,$(objects),$(subst \
@shlib_base_name@,libgcc_s,$(subst \
@shlib_map_file@,$(mapfile),$(subst \
@shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(subst \
@shlib_slibdir@,$(shlib_slibdir),$(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) -B./,$(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)
# Documentation targets (empty).
.PHONY: info html dvi pdf install-info install-html install-pdf
info:
install-info:
html:
install-html:
dvi:
pdf:
install-pdf:
# 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-leaf: $(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
install: install-leaf
@: $(MAKE) ; $(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=install
.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.
[-- Attachment #4: Makefile-gcc-cross --]
[-- Type: text/plain, Size: 33058 bytes --]
# Makefile.in
# Copyright (C) 2005, 2006, 2009 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 3 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 COPYING3. If not see
# <http://www.gnu.org/licenses/>.
#
libgcc_topdir = /home/jupi/openembedded/tmp/work/armv7a-hardfp-oe-linux-gnueabi/gcc-cross-4.5-r33.1+svnr170443/gcc-4_5-branch/libgcc/..
host_subdir = .
gcc_srcdir = $(libgcc_topdir)/gcc
gcc_objdir = $(MULTIBUILDTOP)../../$(host_subdir)/gcc
srcdir = /home/jupi/openembedded/tmp/work/armv7a-hardfp-oe-linux-gnueabi/gcc-cross-4.5-r33.1+svnr170443/gcc-4_5-branch/libgcc
prefix = /home/jupi/openembedded/tmp/sysroots/x86_64-linux/usr/armv7a-hardfp
exec_prefix = /home/jupi/openembedded/tmp/sysroots/x86_64-linux/usr/armv7a-hardfp
libdir = /home/jupi/openembedded/tmp/sysroots/x86_64-linux/usr/armv7a-hardfp/lib
shlib_slibdir = $(exec_prefix)/$(host_noncanonical)/lib
SHELL = /bin/sh
enable_shared = yes
decimal_float = no
enable_decimal_float = no
fixed_point = no
host_noncanonical = arm-oe-linux-gnueabi
# 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 = crtbegin.o crtbeginS.o crtbeginT.o crtend.o crtendS.o
# Multilib support variables.
MULTISRCTOP =
MULTIBUILDTOP =
MULTIDIRS =
MULTISUBDIR =
MULTIDO = true
MULTICLEAN = true
INSTALL = /home/jupi/openembedded/openembedded//bin/install -c
INSTALL_PROGRAM = /home/jupi/openembedded/openembedded//bin/install -c
INSTALL_DATA = /home/jupi/openembedded/openembedded//bin/install -c -m 644
mkinstalldirs = $(SHELL) $(libgcc_topdir)/mkinstalldirs
objext = .o
AR = /home/jupi/openembedded/tmp/sysroots/x86_64-linux/usr/armv7a-hardfp/arm-oe-linux-gnueabi/bin/ar
AR_FLAGS = rc
CC = /home/jupi/openembedded/tmp/work/armv7a-hardfp-oe-linux-gnueabi/gcc-cross-4.5-r33.1+svnr170443/gcc-4_5-branch/build.x86_64-linux.arm-oe-linux-gnueabi/./gcc/xgcc -B/home/jupi/openembedded/tmp/work/armv7a-hardfp-oe-linux-gnueabi/gcc-cross-4.5-r33.1+svnr170443/gcc-4_5-branch/build.x86_64-linux.arm-oe-linux-gnueabi/./gcc/ -march=armv7-a -mtune=cortex-a8 -mfloat-abi=hard -mfpu=vfpv3 -mthumb-interwork -mno-thumb -isystem/home/jupi/openembedded/tmp/sysroots/armv7a-hardfp-oe-linux-gnueabi/usr/include -B/home/jupi/openembedded/tmp/sysroots/x86_64-linux/usr/armv7a-hardfp/arm-oe-linux-gnueabi/bin/ -B/home/jupi/openembedded/tmp/sysroots/x86_64-linux/usr/armv7a-hardfp/arm-oe-linux-gnueabi/lib/ -isystem /home/jupi/openembedded/tmp/sysroots/x86_64-linux/usr/armv7a-hardfp/arm-oe-linux-gnueabi/include -isystem /home/jupi/openembedded/tmp/sysroots/x86_64-linux/usr/armv7a-hardfp/arm-oe-linux-gnueabi/sys-include --sysroot=/home/jupi/openembedded/tmp/sysroots/armv7a-hardfp-oe-linux-gnueabi
CFLAGS = -g -Os
RANLIB = /home/jupi/openembedded/tmp/sysroots/x86_64-linux/usr/armv7a-hardfp/arm-oe-linux-gnueabi/bin/ranlib
LN_S = ln -s
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-leaf 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 $(srcdir)/config.host
$(SHELL) ./config.status --recheck
AUTOCONF = autoconf
configure_deps = \
$(srcdir)/../config/enable.m4 \
$(srcdir)/../config/tls.m4 \
$(srcdir)/../config/acx.m4 \
$(srcdir)/../config/no-executables.m4 \
$(srcdir)/../config/override.m4 \
$(srcdir)/configure: # $(srcdir)/configure.ac $(configure_deps)
cd $(srcdir) && $(AUTOCONF)
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 = gawk
GCC_FOR_TARGET = $(CC)
LIPO = arm-oe-linux-gnueabi-lipo
LIPO_FOR_TARGET = $(LIPO)
MACHMODE_H = machmode.h mode-classes.def insn-modes.h
NM = /home/jupi/openembedded/tmp/work/armv7a-hardfp-oe-linux-gnueabi/gcc-cross-4.5-r33.1+svnr170443/gcc-4_5-branch/build.x86_64-linux.arm-oe-linux-gnueabi/./gcc/nm
NM_FOR_TARGET = $(NM)
RANLIB_FOR_TARGET = $(RANLIB)
STRIP = /home/jupi/openembedded/tmp/sysroots/x86_64-linux/usr/armv7a-hardfp/arm-oe-linux-gnueabi/bin/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 = $(exec_prefix)/$(host_noncanonical)/lib
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
version := $(shell $(CC) -dumpversion)
ifeq ($(decimal_float),yes)
ifeq ($(enable_decimal_float),bid)
DECNUMINC = -I$(srcdir)/config/libbid -DENABLE_DECIMAL_BID_FORMAT
else
DECNUMINC = -I$(srcdir)/../libdecnumber/$(enable_decimal_float) \
-I$(srcdir)/../libdecnumber
endif
else
DECNUMINC =
endif
# 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)
# Forcibly remove any profiling-related flags. There is no point
# in supporting profiled bootstrap in this library.
override CFLAGS := $(filter-out -fprofile-generate -fprofile-use,$(CFLAGS))
# 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) -DHAVE_CC_TLS
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 = $(srcdir)/config/arm/t-divmod-ef
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 = -fvisibility=hidden -DHIDE_EXPORTS
ifneq (,$(vis_hide))
# If we have -fvisibility=hidden, then we need to generate hide
# lists for object files implemented in assembly.
ASM_HIDDEN_OP = .hidden
define gen-hide-list
$(NM) -pg $< | \
$(AWK) 'NF == 3 && $$2 !~ /^[UN]$$/ && $$3 !~ /.*_compat/ \
&& $$3 !~ /.*@.*/ \
{ 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
ifeq ($(LIB2_DIVMOD_EXCEPTION_FLAGS),)
# Provide default flags for compiling divmod functions, if they haven't been
# set already by a target-specific Makefile fragment.
LIB2_DIVMOD_EXCEPTION_FLAGS := -fexceptions -fnon-call-exceptions
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 \
$(LIB2_DIVMOD_EXCEPTION_FLAGS) $(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 \
$(LIB2_DIVMOD_EXCEPTION_FLAGS)
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
dfp-filenames =
ifneq ($(D32PBIT)$(D64PBIT)$(D128PBIT),)
ifeq ($(enable_decimal_float),bid)
dfp-filenames += bid_decimal_globals bid_decimal_data \
bid_binarydecimal bid_convert_data \
_isinfd32 _isinfd64 _isinfd128 bid64_noncomp \
bid128_noncomp bid128_fma bid_round bid_from_int \
bid64_add bid128_add bid64_div bid128_div \
bid64_mul bid128_mul bid64_compare bid128_compare \
bid128 bid32_to_bid64 bid32_to_bid128 bid64_to_bid128 \
bid64_to_int32 bid64_to_int64 \
bid64_to_uint32 bid64_to_uint64 \
bid128_to_int32 bid128_to_int64 \
bid128_to_uint32 bid128_to_uint64
else
dfp-filenames += decContext decNumber decExcept decRound decLibrary decDouble decPacked decQuad decSingle
endif
endif
dfp-objects = $(patsubst %,%$(objext),$(dfp-filenames))
ifeq ($(enable_decimal_float),bid)
$(dfp-objects): %$(objext): $(srcdir)/config/libbid/%.c
else
$(dfp-objects): %$(objext): $(srcdir)/../libdecnumber/%.c
endif
$(gcc_compile) -c $<
libgcc-objects += $(dfp-objects)
decbits-filenames =
ifneq ($(enable_decimal_float),bid)
ifneq ($(D32PBIT),)
decbits-filenames += decimal32
endif
ifneq ($(D64PBIT),)
decbits-filenames += decimal64
endif
ifneq ($(D128PBIT),)
decbits-filenames += decimal128
endif
endif
decbits-objects = $(patsubst %,%$(objext),$(decbits-filenames))
ifeq ($(enable_decimal_float),bid)
$(decbits-objects): %$(objext): $(srcdir)/config/libbid/%.c
else
$(decbits-objects): %$(objext): $(srcdir)/../libdecnumber/$(enable_decimal_float)/%.c
endif
$(gcc_compile) -c $<
libgcc-objects += $(decbits-objects)
# Next build individual support functions.
ifeq ($(enable_decimal_float),bid)
ifneq ($(D32PBIT),)
D32PBIT_FUNCS:=$(filter-out _plus_sd _minus_sd _conv_sd, $(D32PBIT_FUNCS))
endif
ifneq ($(D64PBIT),)
D64PBIT_FUNCS:=$(filter-out _plus_dd _minus_dd _conv_dd, $(D64PBIT_FUNCS))
endif
ifneq ($(D128PBIT),)
D128PBIT_FUNCS:=$(filter-out _plus_td _minus_td _conv_td, $(D128PBIT_FUNCS))
endif
endif
ifneq ($(D32PBIT),)
d32pbit-o = $(patsubst %,%$(objext),$(D32PBIT_FUNCS))
ifeq ($(enable_decimal_float),bid)
$(d32pbit-o): %$(objext): $(srcdir)/config/libbid/%.c
else
$(d32pbit-o): %$(objext): $(gcc_srcdir)/config/dfp-bit.c
endif
$(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* -DWIDTH=32 -c $<
libgcc-objects += $(d32pbit-o)
endif
ifneq ($(D64PBIT),)
d64pbit-o = $(patsubst %,%$(objext),$(D64PBIT_FUNCS))
ifeq ($(enable_decimal_float),bid)
$(d64pbit-o): %$(objext): $(srcdir)/config/libbid/%.c
else
$(d64pbit-o): %$(objext): $(gcc_srcdir)/config/dfp-bit.c
endif
$(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* -DWIDTH=64 -c $<
libgcc-objects += $(d64pbit-o)
endif
ifneq ($(D128PBIT),)
d128pbit-o = $(patsubst %,%$(objext),$(D128PBIT_FUNCS))
ifeq ($(enable_decimal_float),bid)
$(d128pbit-o): %$(objext): $(srcdir)/config/libbid/%.c
else
$(d128pbit-o): %$(objext): $(gcc_srcdir)/config/dfp-bit.c
endif
$(gcc_compile) -DFINE_GRAINED_LIBRARIES -DL$* -DWIDTH=128 -c $<
libgcc-objects += $(d128pbit-o)
endif
endif
ifeq ($(LIBGCC_SYNC),yes)
libgcc-sync-size-funcs := $(foreach op, add sub or and xor nand, \
sync_fetch_and_$(op) \
sync_$(op)_and_fetch) \
sync_bool_compare_and_swap \
sync_val_compare_and_swap \
sync_lock_test_and_set
libgcc-sync-size-funcs := $(foreach prefix, $(libgcc-sync-size-funcs), \
$(foreach suffix, 1 2 4 8 16, \
$(prefix)_$(suffix)))
libgcc-sync-size-funcs-o = $(patsubst %,%$(objext),$(libgcc-sync-size-funcs))
$(libgcc-sync-size-funcs-o): %$(objext): $(gcc_srcdir)/config/sync.c
$(gcc_compile) $(LIBGCC_SYNC_CFLAGS) \
-DFN=`echo "$*" | sed 's/_[^_]*$$//'` \
-DSIZE=`echo "$*" | sed 's/.*_//'` \
-c $(gcc_srcdir)/config/sync.c $(vis_hide)
libgcc-objects += $(libgcc-sync-size-funcs-o)
libgcc-sync-funcs := sync_synchronize
libgcc-sync-funcs-o = $(patsubst %,%$(objext),$(libgcc-sync-funcs))
$(libgcc-sync-funcs-o): %$(objext): $(gcc_srcdir)/config/sync.c
$(gcc_compile) $(LIBGCC_SYNC_CFLAGS) \
-DL$* \
-c $(gcc_srcdir)/config/sync.c $(vis_hide)
libgcc-objects += $(libgcc-sync-funcs-o)
ifeq ($(enable_shared),yes)
libgcc-sync-size-funcs-s-o = $(patsubst %,%_s$(objext), \
$(libgcc-sync-size-funcs))
$(libgcc-sync-size-funcs-s-o): %_s$(objext): $(gcc_srcdir)/config/sync.c
$(gcc_s_compile) $(LIBGCC_SYNC_CFLAGS) \
-DFN=`echo "$*" | sed 's/_[^_]*$$//'` \
-DSIZE=`echo "$*" | sed 's/.*_//'` \
-c $(gcc_srcdir)/config/sync.c
libgcc-s-objects += $(libgcc-sync-size-funcs-s-o)
libgcc-sync-funcs-s-o = $(patsubst %,%_s$(objext),$(libgcc-sync-funcs))
$(libgcc-sync-funcs-s-o): %_s$(objext): $(gcc_srcdir)/config/sync.c
$(gcc_s_compile) $(LIBGCC_SYNC_CFLAGS) \
-DL$* \
-c $(gcc_srcdir)/config/sync.c
libgcc-s-objects += $(libgcc-sync-funcs-s-o)
endif
endif
# Build fixed-point support.
ifeq ($(fixed_point),yes)
# Generate permutations of function name and mode
fixed-labels := $(shell $(SHELL) $(srcdir)/gen-fixed.sh arith labels)
fixed-funcs := $(shell $(SHELL) $(srcdir)/gen-fixed.sh arith funcs)
fixed-modes := $(shell $(SHELL) $(srcdir)/gen-fixed.sh arith modes)
# Generate the rules for each arithmetic function
iter-items := $(fixed-funcs)
iter-labels := $(fixed-labels)
iter-from := $(fixed-modes)
iter-to := $(fixed-modes)
include $(srcdir)/empty.mk $(patsubst %,$(srcdir)/fixed-obj.mk,$(iter-items))
# Add arithmetic functions to list of objects to be built
libgcc-objects += $(patsubst %,%$(objext),$(fixed-funcs))
ifeq ($(enable_shared),yes)
libgcc-s-objects += $(patsubst %,%_s$(objext),$(fixed-funcs))
endif
# Convert from or to fractional
fixed-conv-funcs := $(shell $(SHELL) $(srcdir)/gen-fixed.sh conv funcs)
fixed-conv-labels := $(shell $(SHELL) $(srcdir)/gen-fixed.sh conv labels)
fixed-conv-from := $(shell $(SHELL) $(srcdir)/gen-fixed.sh conv from)
fixed-conv-to := $(shell $(SHELL) $(srcdir)/gen-fixed.sh conv to)
# Generate the make rules for each conversion function
iter-items := $(fixed-conv-funcs)
iter-labels := $(fixed-conv-labels)
iter-from := $(fixed-conv-from)
iter-to := $(fixed-conv-to)
include $(srcdir)/empty.mk $(patsubst %,$(srcdir)/fixed-obj.mk,$(iter-items))
# Add conversion functions to list of objects to be built
libgcc-objects += $(patsubst %,%$(objext),$(fixed-conv-funcs))
ifeq ($(enable_shared),yes)
libgcc-s-objects += $(patsubst %,%_s$(objext),$(fixed-conv-funcs))
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
libgcc_s$(SHLIB_EXT): libunwind$(SHLIB_EXT)
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) -B./,$(subst \
@multilib_dir@,$(MULTIDIR),$(subst \
@shlib_objs@,$(objects),$(subst \
@shlib_base_name@,libgcc_s,$(subst \
@shlib_map_file@,$(mapfile),$(subst \
@shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(subst \
@shlib_slibdir@,$(shlib_slibdir),$(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) -B./,$(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)
# Documentation targets (empty).
.PHONY: info html dvi pdf install-info install-html install-pdf
info:
install-info:
html:
install-html:
dvi:
pdf:
install-pdf:
# 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-leaf: $(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
install: install-leaf
@: $(MAKE) ; $(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=install
.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.
[-- Attachment #5: 0xD8407950.asc.sig --]
[-- Type: application/pgp-signature, Size: 543 bytes --]
[-- Attachment #6: Makefile-gcc-cross-sdk.sig --]
[-- Type: application/pgp-signature, Size: 543 bytes --]
[-- Attachment #7: Makefile-gcc-cross.sig --]
[-- Type: application/pgp-signature, Size: 543 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: do_compile of gcc-cross-sdk-4.5 fails with -mfloat-abi=hard
2011-03-29 13:33 do_compile of gcc-cross-sdk-4.5 fails with -mfloat-abi=hard Julian Pietron
` (2 preceding siblings ...)
2011-03-29 21:54 ` Julian Pietron
@ 2011-03-29 22:05 ` Khem Raj
3 siblings, 0 replies; 8+ messages in thread
From: Khem Raj @ 2011-03-29 22:05 UTC (permalink / raw)
To: openembedded-devel
On Tue, Mar 29, 2011 at 6:33 AM, Julian Pietron <julian@whisper-net.de> wrote:
> Hallo,
>
> I encountered a problem on bitbaking meta-toolchain for a Cortex A8 CPU with
> hardfp enabled. I'm using a modified cm-t35 machine which enables
> ARM_FP_MODE="hardfp" to enforce using the hardware FPU. Up to compilation of
> gcc-cross-sdk-4.5 everything is fine, but the build process fails on linking
> some files to libgcc_s.so.1.tmp, please see attached log.do_compile for more
> information.
> Currently I'm trying to build with ARM_FP_MODE="softfp" to see whether the
> problem persists, but I don't think so as it seems to be related to the VFP
> instructions. My guess is that somewhere in the build process the
> TARGET_CC_ARCH flags are not applied where they should have been applied.
>
Only if life was so simple. We do not support multilib in OE which
means the default multilib becomes
all more important since thats what we will build and link. So it
seems that the default multilib for gcc
runtime support is still soft-fp and hence the problem. Please send
your run.do_configure as well as log.do_configure
and lets see whats in there
> Thanks for your help,
> Julian
>
>
> _______________________________________________
> Openembedded-devel mailing list
> Openembedded-devel@lists.openembedded.org
> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-devel
>
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: do_compile of gcc-cross-sdk-4.5 fails with -mfloat-abi=hard
2011-03-29 21:54 ` Julian Pietron
@ 2011-03-29 22:39 ` Khem Raj
2011-03-29 23:15 ` Julian Pietron
0 siblings, 1 reply; 8+ messages in thread
From: Khem Raj @ 2011-03-29 22:39 UTC (permalink / raw)
To: openembedded-devel
[-- Attachment #1: Type: text/plain, Size: 1060 bytes --]
On (29/03/11 23:54), Julian Pietron wrote:
>
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Hey,
>
> some more information for you in the hope that it will help you to
> find the cause for these problems. I attached the Makefile from the
> gcc-cross-4.5 build, libgcc-subdirectory, and the Makefile from the
> gcc-cross-sdk-4.5, libgcc subdirectory. As you can see in line 67
> where CC is set, the former Makefile includes the correct
> TARGET_CC_ARCH (-mtune=armv7-a etc.), while the latter doesn't contain
> this and especially doesn't contain the -mfloat-abi=hard which would
> be required to perform the correct hard float compilation. I guess
> there is something missing in the call to ./configure for the
> gcc-cross-sdk-build, perhaps you could point me to the directive that
> has to be added to have the correct CFLAGS for building libgcc.
OK here is untested patch. Please apply it on top of current OE and
rebuild from scratch to make sure it builds new toolchain correctly.
and let me know if it helps
-Khem
[-- Attachment #2: armfp.patch --]
[-- Type: text/x-diff, Size: 1933 bytes --]
diff --git a/conf/machine/include/tune-cortexa8.inc b/conf/machine/include/tune-cortexa8.inc
index 2ac0ebf..e07bf16 100644
--- a/conf/machine/include/tune-cortexa8.inc
+++ b/conf/machine/include/tune-cortexa8.inc
@@ -4,9 +4,9 @@
# [3] https://support.codesourcery.com/GNUToolchain/kbentry29
# Can be 'softfp' or 'hardfp'
-ARM_FP_MODE ?= "softfp"
+ARM_FP_ABI ?= "softfp"
-ARM_FP_OPT = "${@['-mfloat-abi=softfp', '-mfloat-abi=hard'][bb.data.getVar('ARM_FP_MODE', d, 1) == 'hardfp']}"
+ARM_FP_OPT = "${@['-mfloat-abi=softfp', '-mfloat-abi=hard'][bb.data.getVar('ARM_FP_ABI', d, 1) == 'hardfp']}"
ARM_FP_PACKAGESUFFIX = "${@['', '-hardfp'][bb.data.getVar('ARM_FP_MODE', d, 1) == 'hardfp']}"
TARGET_CC_ARCH = "-march=armv7-a -mtune=cortex-a8 -mfpu=neon ${ARM_FP_OPT}"
diff --git a/recipes/gcc/gcc-common.inc b/recipes/gcc/gcc-common.inc
index 9fd433b..d32b2ba 100644
--- a/recipes/gcc/gcc-common.inc
+++ b/recipes/gcc/gcc-common.inc
@@ -15,8 +15,16 @@ COMPATIBLE_TARGET_SYS ?= "(?!nios2)"
# for building for the new host part. So only obey TARGET_FPU for the
# real target.
def get_gcc_fpu_setting(bb, d):
- if bb.data.getVar('TARGET_FPU', d, 1) in [ 'soft' ] and bb.data.getVar('TARGET_OS', d, 1).find('linux') >= 0 :
- return "--with-float=soft"
+ if bb.data.getVar('TARGET_FPU', d, True) in [ 'soft', 'hard'] and bb.data.getVar('TARGET_OS', d, True).find('linux') >= 0 :
+ # ARM_FP_ABI could be either 'hardfp' or 'softfp'
+ arm_fpabi = bb.data.getVar('ARM_FP_ABI', d, True) or ""
+ if arm_fpabi != "":
+ if arm_fpabi == "hardfp":
+ # reset it to whatever gcc --with-float configure expects which is either 'softfp' or 'hard'
+ arm_fpabi = "hard"
+ return "--with-float=" + arm_fpabi
+ else:
+ return "--with-float=" + bb.data.getVar('TARGET_FPU', d, True)
return ""
def get_gcc_mips_plt_setting(bb, d):
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: do_compile of gcc-cross-sdk-4.5 fails with -mfloat-abi=hard
2011-03-29 22:39 ` Khem Raj
@ 2011-03-29 23:15 ` Julian Pietron
0 siblings, 0 replies; 8+ messages in thread
From: Julian Pietron @ 2011-03-29 23:15 UTC (permalink / raw)
To: openembedded-devel
[-- Attachment #1: Type: text/plain, Size: 1214 bytes --]
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hallo,
please see the patch in reply to your other response and tell me
whether the fix is correct. For me it works at least, as I have a
working toolchain now and bitbake meta-toolchain completed successfully.
Best Regards,
Julian
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.16 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
iQIcBAEBAgAGBQJNkmgUAAoJENidYKvYQHlQjgEP/iNU3Bwi0L80TWzdg+JnaqGN
DAAxRY3Q1FQiohtYdTA+28fq6PquJ57+RtUri4wsqval9tUDu5CX9Pj1+tj4btYk
77rulmkmbIbWpYNlaMsMPKr1Ag46YIHmXHwwJVikpLBd+wNWMFvlPliiv69KT7Q9
TH/LgfVNmRMchAVoqPoEQ8WZu4Sqqaf7ZrQJdN+nCcVW5muytFD0ATHoNyffn0pU
r07VS0vimlNQQzXmBEZalBaRlcJGd2CxSrFioPgmr0O3V/zR3sLRorru+sDVM6vc
dFuBnHTQdIKgWwOCFnSQrR1Z/4OGqmXXH+8kT64Wu+GtWFXG7LP0if7luZj1Lzvj
4WPmLPYMlsWX8NNMi+/eYU1QP4lEBaybE5r2kt9dGOrFyqwiuWdIzT3iwUAIcaln
BhhdZ7IBuIJ/Caw+/A0GgQTb1D1i3tBXhx8QcgKgzNouu+SaRbJ0ZkG4kgByjcEt
Hoswy0cNJqW9dzbcpdjxoMi0Chy39Akdn73n8ycUzuQxxhcyuFeS+Q9QYj+hsjEc
6C+9zrXHt1+PvbpppEwDQPJrRJdZ7yLPj8Mt0auaRB3oBzgkxUqUQuCLDkcx4JcJ
3VIoDDxoaHIltGROfgpQxN6IuFg9BFxD2mTwA4zcgr+8lhzyTvs7xrS68VJ9QIN1
4OWlLlgJkoWFOfP5+Rwb
=EiSW
-----END PGP SIGNATURE-----
[-- Attachment #2: 0xD8407950.asc --]
[-- Type: application/pgp-keys, Size: 9859 bytes --]
[-- Attachment #3: 0xD8407950.asc.sig --]
[-- Type: application/pgp-signature, Size: 543 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: do_compile of gcc-cross-sdk-4.5 fails with -mfloat-abi=hard
@ 2011-03-29 23:20 Julian Pietron
0 siblings, 0 replies; 8+ messages in thread
From: Julian Pietron @ 2011-03-29 23:20 UTC (permalink / raw)
To: openembedded-devel
[-- Attachment #1: Type: text/plain, Size: 1188 bytes --]
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
I've appended a patch for gcc-configure-sdk.inc that fixes the problem
for me and builds a working toolchain. It is based on my assumption
that somewhere TARGET_CC_ARCH had been left out.
Best Regards,
Julian
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.16 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
iQIcBAEBAgAGBQJNkmkjAAoJENidYKvYQHlQwmkQAMNjNg/WrG1rxm/vsMFhguGt
ZVonT4sngk18gZ5DsrZhfVkxwz2WCnRbM9rR/pb9Mfqq9e6YN580QKXjdUUgB/EW
bf1hrn7w7YFlWTgrBEbLBsiVeX2ndSdPbsoyL08HDrhL5+I7UEWaXWpSuO+g5Dqa
iOTr/iWnFsw6C91ZsxCkD9feEpCKyRpaO75Hj/ljUpz325uUv5a5aiW7yx96A0vd
UxdyDMLPTBjA0x8ULSSAiac46ZhXQmULSRecTrNlZ3N45XWdpZBeeDPoY3yHyNve
3b/knLHDvNW7dO7w8D7pkjMBI6Y5Fz5aM8pA25Hl+u9OHV6qyU1wa+qhNuOJuNdG
OXftJ+4MoUOzHJm0y/hTew+QAV+8k9P7YtISZuc1c7ZCNeRzml3kWGHXtzGEsceH
Qt9ZPjD3028m9xABBsJFb1vPRu66lhCxNoE5gBVX4GDKUXfltpmIZbGBzD1S3yxD
Ray+rjKDQpmFe0mn7t9SmTWTpvcGjZp5RsApIucWgEN5qJDSwKTq1QhK3v2hn1o1
VObbjcoDkPpkYzOgIb9LUnGAo6WXQ5Vh1unW2BW3nOfL4b9WTmKzF+P/Mw2g4wJw
cL2hEODdErqy59yU2X0ujE2hYKbOJcaNtoJuZybwrfZQUp2rmP092vWX5D+IEhwK
Hlx7N9Raz/hIqjCpQLeC
=UACM
-----END PGP SIGNATURE-----
[-- Attachment #2: build-gcc-cross-sdk-hardfp.patch --]
[-- Type: text/plain, Size: 695 bytes --]
*** release-2011.03/recipes/gcc/gcc-configure-sdk.inc 2011-03-01 22:03:49.000000000 +0100
--- openembedded/recipes/gcc/gcc-configure-sdk.inc 2011-03-30 00:03:53.238003541 +0200
***************
*** 24,30 ****
#
# We need to override this and make sure the compiler can find staging
#
! export ARCH_FLAGS_FOR_TARGET = "--sysroot=${STAGING_DIR_TARGET}"
do_configure_prepend (){
# Make sure we use GMP/MPFR statically
--- 24,30 ----
#
# We need to override this and make sure the compiler can find staging
#
! export ARCH_FLAGS_FOR_TARGET = "--sysroot=${STAGING_DIR_TARGET} ${TARGET_CC_ARCH}"
do_configure_prepend (){
# Make sure we use GMP/MPFR statically
[-- Attachment #3: 0xD8407950.asc --]
[-- Type: application/pgp-keys, Size: 9861 bytes --]
[-- Attachment #4: build-gcc-cross-sdk-hardfp.patch.sig --]
[-- Type: application/pgp-signature, Size: 543 bytes --]
[-- Attachment #5: 0xD8407950.asc.sig --]
[-- Type: application/pgp-signature, Size: 543 bytes --]
[-- Attachment #6: 0xD8407950.asc --]
[-- Type: application/pgp-keys, Size: 9859 bytes --]
[-- Attachment #7: build-gcc-cross-sdk-hardfp.patch.sig --]
[-- Type: application/pgp-signature, Size: 543 bytes --]
[-- Attachment #8: 0xD8407950.asc.sig --]
[-- Type: application/pgp-signature, Size: 543 bytes --]
[-- Attachment #9: build-gcc-cross-sdk-hardfp.patch.sig.sig --]
[-- Type: application/pgp-signature, Size: 543 bytes --]
[-- Attachment #10: 0xD8407950.asc.sig.sig --]
[-- Type: application/pgp-signature, Size: 543 bytes --]
[-- Attachment #11: 0xD8407950.asc.sig --]
[-- Type: application/pgp-signature, Size: 543 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2011-03-29 23:22 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-03-29 13:33 do_compile of gcc-cross-sdk-4.5 fails with -mfloat-abi=hard Julian Pietron
2011-03-29 14:22 ` Julian Pietron
2011-03-29 21:15 ` Julian Pietron
2011-03-29 21:54 ` Julian Pietron
2011-03-29 22:39 ` Khem Raj
2011-03-29 23:15 ` Julian Pietron
2011-03-29 22:05 ` Khem Raj
-- strict thread matches above, loose matches on Subject: below --
2011-03-29 23:20 Julian Pietron
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.