mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-04 02:40:06 +00:00
076d06e849
Ensure the correct ldouble abi flags are applied to ibm128 files and nldbl files. Remove the IEEE options if used, and apply the flags used to build ldouble files which are ibm128 abi. nldbl tests are a little tricky. To use the support, we must remove all ldouble abi flags, and ensure -mlong-double-64 is used. Co-authored-by: Rajalakshmi Srinivasaraghavan <raji@linux.vnet.ibm.com> Co-authored-by: Tulio Magno Quites Machado Filho <tuliom@linux.vnet.ibm.com> Co-authored-by: Paul E. Murphy <murphyp@linux.vnet.ibm.com>
141 lines
5.7 KiB
Makefile
141 lines
5.7 KiB
Makefile
# When building float128 we need to ensure -mfloat128 is
|
|
# passed to all such object files.
|
|
|
|
# libgcc requires __tcb_parse_hwcap_and_convert_at_platform when built with
|
|
# a binary128 type. That symbol is provided by the loader on dynamically
|
|
# linked executables, forcing to link the loader after libgcc link.
|
|
f128-loader-link = -Wl,--as-needed $(elf-objpfx)ld.so -Wl,--no-as-needed
|
|
|
|
# Bootstrapping code for enabling IEEE 128. This can be removed and
|
|
# any indirections simplified once IEEE 128 long double is enabled.
|
|
type-ldouble-CFLAGS =
|
|
ifeq ($(ibm128-fcts),yes)
|
|
type-ldouble-CFLAGS += -mabi=ibmlongdouble
|
|
endif
|
|
|
|
ifeq ($(subdir),math)
|
|
# sqrtf128 requires emulation before POWER9.
|
|
CPPFLAGS += -I../soft-fp
|
|
|
|
# float128 requires adding a handful of extra flags.
|
|
$(foreach suf,$(all-object-suffixes),%f128$(suf)): CFLAGS += -mfloat128
|
|
$(foreach suf,$(all-object-suffixes),%f128_r$(suf)): CFLAGS += -mfloat128
|
|
$(foreach suf,$(all-object-suffixes),$(objpfx)test-float128%$(suf)): CFLAGS += -mfloat128
|
|
$(foreach suf,$(all-object-suffixes),$(objpfx)test-float64x%$(suf)): CFLAGS += -mfloat128
|
|
# Pairs of types with _Float128 / _Float64x as the wider type but not
|
|
# the narrower one.
|
|
f128-pairs = float32-float64x float32-float128 float64-float64x \
|
|
float64-float128 float32x-float64x float32x-float128
|
|
$(foreach suf,$(all-object-suffixes),$(foreach pair,$(f128-pairs),$(objpfx)test-$(pair)%$(suf))): CFLAGS += -mfloat128
|
|
CFLAGS-libm-test-support-float128.c += -mfloat128
|
|
CFLAGS-libm-test-support-float64x.c += -mfloat128
|
|
CFLAGS-test-math-iscanonical.cc += -mfloat128
|
|
CFLAGS-test-math-iseqsig.cc += -mfloat128
|
|
CFLAGS-test-math-issignaling.cc += -mfloat128
|
|
CFLAGS-test-math-iszero.cc += -mfloat128
|
|
$(foreach test, \
|
|
test-float128% test-float64x% \
|
|
$(foreach pair,$(f128-pairs),test-$(pair)%) \
|
|
test-math-iscanonical test-math-iseqsig test-math-issignaling \
|
|
test-math-iszero, \
|
|
$(objpfx)$(test)): \
|
|
gnulib-tests += $(f128-loader-link)
|
|
|
|
CFLAGS-s_logbl-power7.c += $(type-ldouble-CFLAGS)
|
|
CFLAGS-s_logbl-ppc64.c += $(type-ldouble-CFLAGS)
|
|
|
|
$(foreach suf,$(all-object-suffixes),\
|
|
$(objpfx)s_copysignl$(suf) \
|
|
$(objpfx)s_fabsl$(suf)): \
|
|
ASFLAGS += $(type-ldouble-CFLAGS)
|
|
|
|
$(foreach suf,$(all-object-suffixes),\
|
|
$(objpfx)libm-test-%ibm128$(suf) \
|
|
$(objpfx)test-iibm128%$(suf) $(objpfx)test-ibm128%$(suf)): \
|
|
CFLAGS += $(type-ldouble-CFLAGS)
|
|
|
|
# Newer GCC (>7) doesn't like -mabi=* and -mlong-double-64
|
|
$(foreach suf,$(all-object-suffixes),\
|
|
$(objpfx)test-narrow-macros-ldbl-64$(suf) \
|
|
$(objpfx)test-nldbl-redirect$(suf) \
|
|
$(objpfx)test-redirection-ldbl-64$(suf) \
|
|
): sysdep-CFLAGS := $(filter-out -mabi=ieeelongdouble,$(sysdep-CFLAGS))
|
|
|
|
endif
|
|
|
|
# Newer GCC (>7) doesn't like -mabi=* and -mlong-double-64
|
|
ifeq ($(subdir),misc)
|
|
$(foreach suf,$(all-object-suffixes),\
|
|
$(objpfx)tst-nldbl-warn$(suf) \
|
|
$(objpfx)tst-nldbl-error$(suf) \
|
|
): sysdep-CFLAGS := $(filter-out -mabi=ieeelongdouble,$(sysdep-CFLAGS))
|
|
endif
|
|
|
|
# Newer GCC (>7) doesn't like -mabi=* and -mlong-double-64
|
|
ifeq ($(subdir),argp)
|
|
$(foreach suf,$(all-object-suffixes),\
|
|
$(objpfx)tst-nldbl-argp$(suf) \
|
|
): sysdep-CFLAGS := $(filter-out -mabi=ieeelongdouble,$(sysdep-CFLAGS))
|
|
endif
|
|
|
|
# Append flags to string <-> _Float128 routines.
|
|
ifneq ($(filter $(subdir),wcsmbs stdlib),)
|
|
$(foreach suf,$(all-object-suffixes),%f128$(suf)): CFLAGS += -mfloat128
|
|
$(foreach suf,$(all-object-suffixes),%f128_l$(suf)): CFLAGS += -mfloat128
|
|
$(foreach suf,$(all-object-suffixes),%f128_nan$(suf)): CFLAGS += -mfloat128
|
|
$(foreach suf,$(all-object-suffixes),%float1282mpn$(suf)): CFLAGS += -mfloat128
|
|
$(foreach suf,$(all-object-suffixes),%mpn2float128$(suf)): CFLAGS += -mfloat128
|
|
CFLAGS-bug-strtod.c += -mfloat128
|
|
CFLAGS-bug-strtod2.c += -mfloat128
|
|
CFLAGS-tst-strtod-round.c += -mfloat128
|
|
CFLAGS-tst-wcstod-round.c += -mfloat128
|
|
CFLAGS-tst-strtod-nan-locale.c += -mfloat128
|
|
CFLAGS-tst-wcstod-nan-locale.c += -mfloat128
|
|
CFLAGS-tst-strtod6.c += -mfloat128
|
|
CFLAGS-tst-strfrom.c += -mfloat128
|
|
CFLAGS-tst-strfrom-locale.c += -mfloat128
|
|
CFLAGS-strfrom-skeleton.c += -mfloat128
|
|
CFLAGS-tst-strtod-nan-sign.c += -mfloat128
|
|
CFLAGS-tst-wcstod-nan-sign.c += -mfloat128
|
|
$(foreach test,bug-strtod bug-strtod2 bug-strtod2 tst-strtod-round \
|
|
tst-wcstod-round tst-strtod6 tst-strrom tst-strfrom-locale \
|
|
tst-strtod-nan-locale tst-wcstod-nan-locale \
|
|
strfrom-skeleton tst-strtod-nan-sign tst-wcstod-nan-sign, \
|
|
$(objpfx)$(test)): gnulib-tests += $(f128-loader-link)
|
|
|
|
# When building glibc with support for _Float128, the powers of ten tables in
|
|
# fpioconst.c and in the string conversion functions must be extended. Some
|
|
# Makefiles (e.g.: wcsmbs/Makefile) override CFLAGS defined by the Makefiles in
|
|
# sysdeps. This is avoided with the use sysdep-CFLAGS instead of CFLAGS.
|
|
sysdep-CFLAGS += $(sysdep-CFLAGS-$(<F))
|
|
sysdep-CFLAGS-fpioconst.c += -mfloat128
|
|
sysdep-CFLAGS-strtod_l.c += -mfloat128
|
|
sysdep-CFLAGS-strtof_l.c += -mfloat128
|
|
sysdep-CFLAGS-strtold_l.c += -mfloat128
|
|
sysdep-CFLAGS-wcstod_l.c += -mfloat128
|
|
sysdep-CFLAGS-wcstof_l.c += -mfloat128
|
|
sysdep-CFLAGS-wcstold_l.c += -mfloat128
|
|
endif
|
|
|
|
# Append flags to printf routines.
|
|
ifeq ($(subdir),stdio-common)
|
|
CFLAGS-printf_fp.c = -mfloat128
|
|
CFLAGS-printf_fphex.c = -mfloat128
|
|
CFLAGS-printf_size.c = -mfloat128
|
|
endif
|
|
|
|
|
|
$(foreach suf,$(all-object-suffixes),$(objpfx)nldbl-%$(suf)): \
|
|
CFLAGS += $(type-ldouble-CFLAGS)
|
|
|
|
ldbl-ibm128-files = $(objpfx)nldbl-%$(suf) \
|
|
$(objpfx)libm-test-%ibm128$(suf) \
|
|
$(objpfx)test-iibm128%$(suf) $(objpfx)test-ibm128%$(suf) \
|
|
$(objpfx)test-tgmath3-%$(suf)
|
|
|
|
# Remove -mabi=ieeelongdouble from ldbl-ibm128 files.
|
|
$(foreach suf,$(all-object-suffixes), $(ldbl-ibm128-files)) \
|
|
$(foreach r,$(ldbl-128ibm-routines) $(ldbl-tests), \
|
|
$(objpfx)$(r)$(suf)): \
|
|
sysdep-CFLAGS := $(filter-out -mabi=ieeelongdouble,$(sysdep-CFLAGS))
|