enable_shared = @enable_shared@
decimal_float = @decimal_float@
+enable_decimal_float = @enable_decimal_float@
host_noncanonical = @host_noncanonical@
version := $(shell $(CC) -dumpversion)
-DECNUMINC = -I$(srcdir)/../libdecnumber -I$(MULTIBUILDTOP)../../libdecnumber
+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 \
+ -I$(MULTIBUILDTOP)../../libdecnumber
+endif
+else
+DECNUMINC =
+endif
# Specify the directories to be searched for header files.
# Both . and srcdir are used, in that order,
-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)
+INTERNAL_CFLAGS = $(CFLAGS) $(LIBGCC2_CFLAGS) $(HOST_LIBGCC2_CFLAGS) \
+ $(INCLUDES) @set_have_cc_tls@
MULTIDIR := $(shell $(CC) $(CFLAGS) -print-multi-directory)
MULTIOSDIR := $(shell $(CC) $(CFLAGS) -print-multi-os-directory)
D128PBIT = 1
endif
-dec-filenames =
+dfp-filenames =
ifneq ($(D32PBIT)$(D64PBIT)$(D128PBIT),)
-dec-filenames += decContext decNumber decRound decLibrary decUtility
+ifeq ($(enable_decimal_float),bid)
+dfp-filenames += decimal_globals decimal_data binarydecimal \
+ _isinfd32 _isinfd64 _isinfd128 bid64_noncomp \
+ bid128_fma bid_round bid_from_int convert_data \
+ 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 decUtility
+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),)
-dec-filenames += decimal32
+decbits-filenames += decimal32
endif
ifneq ($(D64PBIT),)
-dec-filenames += decimal64
+decbits-filenames += decimal64
endif
ifneq ($(D128PBIT),)
-dec-filenames += decimal128
+decbits-filenames += decimal128
+endif
endif
-dec-objects = $(patsubst %,%$(objext),$(dec-filenames))
-$(dec-objects): %$(objext): $(srcdir)/../libdecnumber/%.c
+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 += $(dec-objects)
+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
ifneq ($(LIBUNWIND),)
all: libunwind.a
+libgcc_s$(SHLIB_EXT): libunwind$(SHLIB_EXT)
endif
ifeq ($(enable_shared),yes)
# @multilib_dir@ is not really necessary, but sometimes it has
# more uses than just a directory name.
$(mkinstalldirs) $(MULTIDIR)
- $(subst @multilib_flags@,$(CFLAGS),$(subst \
+ $(subst @multilib_flags@,$(CFLAGS) -B./,$(subst \
@multilib_dir@,$(MULTIDIR),$(subst \
@shlib_objs@,$(objects),$(subst \
@shlib_base_name@,libgcc_s,$(subst \
# @multilib_dir@ is not really necessary, but sometimes it has
# more uses than just a directory name.
$(mkinstalldirs) $(MULTIDIR)
- $(subst @multilib_flags@,$(CFLAGS),$(subst \
+ $(subst @multilib_flags@,$(CFLAGS) -B./,$(subst \
@multilib_dir@,$(MULTIDIR),$(subst \
@shlib_objs@,$(objects),$(subst \
@shlib_base_name@,libunwind,$(subst \
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:
$(INSTALL_DATA) $$file $(DESTDIR)$(inst_libdir)/; \
done
+ @$(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