glibc/sysdeps/ieee754/ldbl-128ibm-compat/Makefile

353 lines
13 KiB
Makefile
Raw Normal View History

ifeq ($(subdir),libio)
ldbl-extra-routines += fwscanf \
swscanf \
wscanf \
vswscanf \
vwscanf
endif
ifeq ($(subdir),wcsmbs)
ldbl-extra-routines += isoc99_fwscanf \
isoc99_swscanf \
isoc99_wscanf \
isoc99_vfwscanf \
isoc99_vswscanf \
isoc99_vwscanf
tests-internal += test-wcstold-ibm128 test-wcstold-ieee128
CFLAGS-test-wcstold-ieee128.c += -mfloat128 -mabi=ieeelongdouble -Wno-psabi
CFLAGS-test-wcstold-ibm128.c += -mabi=ibmlongdouble -Wno-psabi
$(objpfx)test-wcstold-ieee128: gnulib-tests += $(f128-loader-link)
endif
ifeq ($(subdir),stdio-common)
ldbl-extra-routines += printf_size \
asprintf \
dprintf \
fprintf \
printf \
snprintf \
sprintf \
vasprintf \
vdprintf \
vfprintf \
vprintf \
vsnprintf \
vsprintf \
fwprintf \
swprintf \
wprintf \
vfwprintf \
vswprintf \
vwprintf \
fscanf \
scanf \
sscanf \
vfscanf \
vscanf \
vsscanf \
vfwscanf \
obprintf \
obstack_chk \
vobstack_chk \
isoc99_fscanf \
isoc99_scanf \
isoc99_sscanf \
isoc99_vfscanf \
isoc99_vscanf \
isoc99_vsscanf
# Printing long double values with IEEE binary128 format reuses part
# of the internal float128 implementation (__printf_fp, __printf_fphex,
# and __float128 variables and union members). Likewise, reading these
# values reuses __strtof128_internal. Thus, the compilation of the
# following functions, must have -mfloat128 and -mabi=ibmlongdouble
# passed to the compiler.
CFLAGS-vfprintf-internal.c += -mfloat128 -mabi=ibmlongdouble
CFLAGS-vfwprintf-internal.c += -mfloat128 -mabi=ibmlongdouble
CFLAGS-vfscanf-internal.c += -mfloat128 -mabi=ibmlongdouble
CFLAGS-vfwscanf-internal.c += -mfloat128 -mabi=ibmlongdouble
# Basic tests for the implementation of long double with IEEE binary128
# format and for the related redirections in installed headers.
tests-internal += test-printf-ieee128 test-printf-ibm128
CFLAGS-test-printf-ieee128.c += -mfloat128 -mabi=ieeelongdouble -Wno-psabi
CFLAGS-test-printf-ibm128.c += -mabi=ibmlongdouble -Wno-psabi
tests-internal += test-wprintf-ieee128 test-wprintf-ibm128
CFLAGS-test-wprintf-ieee128.c += -mfloat128 -mabi=ieeelongdouble -Wno-psabi
CFLAGS-test-wprintf-ibm128.c += -mabi=ibmlongdouble -Wno-psabi
tests-internal += test-obstack-ieee128 test-obstack-ibm128
CFLAGS-test-obstack-ieee128.c += -mfloat128 -mabi=ieeelongdouble -Wno-psabi
CFLAGS-test-obstack-ibm128.c += -mabi=ibmlongdouble -Wno-psabi
tests-internal += test-obstack-chk-ieee128 test-obstack-chk-ibm128
CFLAGS-test-obstack-chk-ieee128.c += -mfloat128 -mabi=ieeelongdouble -Wno-psabi
CFLAGS-test-obstack-chk-ibm128.c += -mabi=ibmlongdouble -Wno-psabi
tests-internal += test-scanf-ieee128 test-scanf-ibm128
CFLAGS-test-scanf-ieee128.c += -mfloat128 -mabi=ieeelongdouble -Wno-psabi -std=c89 -D_GNU_SOURCE
CFLAGS-test-scanf-ibm128.c += -mabi=ibmlongdouble -Wno-psabi -std=c89 -D_GNU_SOURCE
$(objpfx)test-scanf-ieee128: gnulib-tests += $(f128-loader-link)
tests-internal += test-wscanf-ieee128 test-wscanf-ibm128
CFLAGS-test-wscanf-ieee128.c += -mfloat128 -mabi=ieeelongdouble -Wno-psabi -std=c89 -D_GNU_SOURCE
CFLAGS-test-wscanf-ibm128.c += -mabi=ibmlongdouble -Wno-psabi -std=c89 -D_GNU_SOURCE
$(objpfx)test-wscanf-ieee128: gnulib-tests += $(f128-loader-link)
tests-internal += test-isoc99-scanf-ieee128 test-isoc99-scanf-ibm128
CFLAGS-test-isoc99-scanf-ieee128.c += -mfloat128 -mabi=ieeelongdouble -Wno-psabi -std=c99
CFLAGS-test-isoc99-scanf-ibm128.c += -mabi=ibmlongdouble -Wno-psabi -std=c99
$(objpfx)test-isoc99-scanf-ieee128: gnulib-tests += $(f128-loader-link)
tests-internal += test-isoc99-wscanf-ieee128 test-isoc99-wscanf-ibm128
CFLAGS-test-isoc99-wscanf-ieee128.c += -mfloat128 -mabi=ieeelongdouble -Wno-psabi -std=c99
CFLAGS-test-isoc99-wscanf-ibm128.c += -mabi=ibmlongdouble -Wno-psabi -std=c99
$(objpfx)test-isoc99-wscanf-ieee128: gnulib-tests += $(f128-loader-link)
ifeq ($(run-built-tests),yes)
tests-special += $(objpfx)test-scanf-ieee128.out
tests-special += $(objpfx)test-scanf-ibm128.out
tests-special += $(objpfx)test-wscanf-ieee128.out
tests-special += $(objpfx)test-wscanf-ibm128.out
tests-special += $(objpfx)test-isoc99-scanf-ieee128.out
tests-special += $(objpfx)test-isoc99-scanf-ibm128.out
tests-special += $(objpfx)test-isoc99-wscanf-ieee128.out
tests-special += $(objpfx)test-isoc99-wscanf-ibm128.out
endif
$(objpfx)test-scanf-ieee128.out: \
../sysdeps/ieee754/ldbl-128ibm-compat/test-scanf-ldbl-compat.sh \
$(objpfx)test-scanf-ieee128
$(SHELL) $^ '$(test-program-prefix)' $@; \
$(evaluate-test)
$(objpfx)test-scanf-ibm128.out: \
../sysdeps/ieee754/ldbl-128ibm-compat/test-scanf-ldbl-compat.sh \
$(objpfx)test-scanf-ibm128
$(SHELL) $^ '$(test-program-prefix)' $@; \
$(evaluate-test)
$(objpfx)test-wscanf-ieee128.out: \
../sysdeps/ieee754/ldbl-128ibm-compat/test-scanf-ldbl-compat.sh \
$(objpfx)test-wscanf-ieee128
$(SHELL) $^ '$(test-program-prefix)' $@; \
$(evaluate-test)
$(objpfx)test-wscanf-ibm128.out: \
../sysdeps/ieee754/ldbl-128ibm-compat/test-scanf-ldbl-compat.sh \
$(objpfx)test-wscanf-ibm128
$(SHELL) $^ '$(test-program-prefix)' $@; \
$(evaluate-test)
$(objpfx)test-isoc99-scanf-ieee128.out: \
../sysdeps/ieee754/ldbl-128ibm-compat/test-scanf-ldbl-compat.sh \
$(objpfx)test-isoc99-scanf-ieee128
$(SHELL) $^ '$(test-program-prefix)' $@; \
$(evaluate-test)
$(objpfx)test-isoc99-scanf-ibm128.out: \
../sysdeps/ieee754/ldbl-128ibm-compat/test-scanf-ldbl-compat.sh \
$(objpfx)test-isoc99-scanf-ibm128
$(SHELL) $^ '$(test-program-prefix)' $@; \
$(evaluate-test)
$(objpfx)test-isoc99-wscanf-ieee128.out: \
../sysdeps/ieee754/ldbl-128ibm-compat/test-scanf-ldbl-compat.sh \
$(objpfx)test-isoc99-wscanf-ieee128
$(SHELL) $^ '$(test-program-prefix)' $@; \
$(evaluate-test)
$(objpfx)test-isoc99-wscanf-ibm128.out: \
../sysdeps/ieee754/ldbl-128ibm-compat/test-scanf-ldbl-compat.sh \
$(objpfx)test-isoc99-wscanf-ibm128
$(SHELL) $^ '$(test-program-prefix)' $@; \
$(evaluate-test)
tests-internal += test-printf-size-ieee128 test-printf-size-ibm128
CFLAGS-test-printf-size-ieee128.c += -mfloat128 -mabi=ieeelongdouble -Wno-psabi
CFLAGS-test-printf-size-ibm128.c += -mabi=ibmlongdouble -Wno-psabi
ifeq ($(run-built-tests),yes)
tests-special += $(objpfx)test-printf-size-ieee128.out
tests-special += $(objpfx)test-printf-size-ibm128.out
endif
$(objpfx)test-printf-size-ieee128.out: \
tst-printfsz-islongdouble.sh $(objpfx)test-printf-size-ieee128
$(SHELL) $^ '$(test-program-prefix)' $@; \
$(evaluate-test)
$(objpfx)test-printf-size-ibm128.out: \
tst-printfsz-islongdouble.sh $(objpfx)test-printf-size-ibm128
$(SHELL) $^ '$(test-program-prefix)' $@; \
$(evaluate-test)
endif
ifeq ($(subdir),debug)
ldbl-extra-routines += asprintf_chk \
dprintf_chk \
fprintf_chk \
printf_chk \
snprintf_chk \
sprintf_chk \
vasprintf_chk \
vdprintf_chk \
vfprintf_chk \
vprintf_chk \
vsnprintf_chk \
vsprintf_chk \
fwprintf_chk \
swprintf_chk \
wprintf_chk \
vfwprintf_chk \
vswprintf_chk \
vwprintf_chk
tests-internal += test-printf-chk-ieee128 test-printf-chk-ibm128
CFLAGS-test-printf-chk-ieee128.c += -mfloat128 -mabi=ieeelongdouble -Wno-psabi
CFLAGS-test-printf-chk-ibm128.c += -mabi=ibmlongdouble -Wno-psabi
tests-internal += test-printf-chk-redir-ieee128 test-printf-chk-redir-ibm128
CFLAGS-test-printf-chk-redir-ieee128.c += -mfloat128 -mabi=ieeelongdouble \
-Wno-psabi -Wno-unused-result
CFLAGS-test-printf-chk-redir-ibm128.c += -mabi=ibmlongdouble -Wno-psabi \
-Wno-unused-result
tests-internal += test-wprintf-chk-ieee128 test-wprintf-chk-ibm128
CFLAGS-test-wprintf-chk-ieee128.c += -mfloat128 -mabi=ieeelongdouble -Wno-psabi
CFLAGS-test-wprintf-chk-ibm128.c += -mabi=ibmlongdouble -Wno-psabi
tests-internal += test-wprintf-chk-redir-ieee128 test-wprintf-chk-redir-ibm128
CFLAGS-test-wprintf-chk-redir-ieee128.c += -mfloat128 -mabi=ieeelongdouble \
-Wno-psabi -Wno-unused-result
CFLAGS-test-wprintf-chk-redir-ibm128.c += -mabi=ibmlongdouble -Wno-psabi \
-Wno-unused-result
endif
ifeq ($(subdir),argp)
ldbl-extra-routines += argp-help
$(objpfx)tst-ieee128-argp.c: tst-ldbl-argp.c
cp $< $@
$(objpfx)tst-ibm128-argp.c: tst-ldbl-argp.c
cp $< $@
tests-internal += tst-ieee128-argp tst-ibm128-argp
CFLAGS-tst-ieee128-argp.c += -mfloat128 -mabi=ieeelongdouble -Wno-psabi
CFLAGS-tst-ibm128-argp.c += -mabi=ibmlongdouble -Wno-psabi
endif
ifeq ($(subdir),misc)
ldbl-extra-routines += err \
error \
syslog \
qefgcvt \
qefgcvt_r
CFLAGS-ieee128-qefgcvt.c += -mabi=ieeelongdouble -Wno-psabi -mno-gnu-attribute
CFLAGS-ieee128-qefgcvt_r.c += -mabi=ieeelongdouble -Wno-psabi -mno-gnu-attribute
# Remove -mlong-double-128 because it does not work correctly with
# -mabi=ibmlongdoule in some GCC versions, e.g. GCC 7.
$(foreach o,$(all-object-suffixes),$(objpfx)ieee128-qefgcvt$(o)): \
sysdep-CFLAGS := $(filter-out -mlong-double-128, $(sysdep-CFLAGS))
$(foreach o,$(all-object-suffixes),$(objpfx)ieee128-qefgcvt_r$(o)): \
sysdep-CFLAGS := $(filter-out -mlong-double-128, $(sysdep-CFLAGS))
tests-internal += tst-ibm128-warn tst-ieee128-warn
tests-internal += tst-ibm128-error tst-ieee128-error
tests-internal += tst-ibm128-efgcvt tst-ieee128-efgcvt
$(objpfx)tst-ieee128-efgcvt: gnulib-tests += $(f128-loader-link)
$(objpfx)tst-ibm128-%.c: tst-ldbl-%.c
cp $< $@
$(objpfx)tst-ieee128-%.c: tst-ldbl-%.c
cp $< $@
CFLAGS-tst-ibm128-warn.c += -mabi=ibmlongdouble -Wno-psabi
CFLAGS-tst-ibm128-error.c += -mabi=ibmlongdouble -Wno-psabi
CFLAGS-tst-ibm128-efgcvt.c += -mabi=ibmlongdouble -Wno-psabi
CFLAGS-tst-ieee128-warn.c += -mfloat128 -mabi=ieeelongdouble -Wno-psabi
CFLAGS-tst-ieee128-error.c += -mfloat128 -mabi=ieeelongdouble -Wno-psabi
CFLAGS-tst-ieee128-efgcvt.c += -mfloat128 -mabi=ieeelongdouble -Wno-psabi
tests-container += test-syslog-ieee128 test-syslog-ibm128
CFLAGS-test-syslog-ieee128.c += -mfloat128 -mabi=ieeelongdouble -Wno-psabi
CFLAGS-test-syslog-ibm128.c += -mabi=ibmlongdouble -Wno-psabi
tests-container += test-syslog-chk-ieee128 test-syslog-chk-ibm128
CFLAGS-test-syslog-chk-ieee128.c += -mfloat128 -mabi=ieeelongdouble -Wno-psabi
CFLAGS-test-syslog-chk-ibm128.c += -mabi=ibmlongdouble -Wno-psabi
endif
ifeq ($(subdir),stdlib)
ldbl-extra-routines += strfmon strfmon_l
# Printing long double values with IEEE binary128 format reuses part
# of the internal float128 implementation (__printf_fp, __printf_fphex,
# and __float128 variables and union members). Thus, the compilation of
# the following files, must have -mfloat128 passed to the compiler.
# Also, guarantee that they are compiled in IBM long double mode.
CFLAGS-strfmon.c += -mfloat128 -mabi=ibmlongdouble
CFLAGS-strfmon_l.c += -mfloat128 -mabi=ibmlongdouble
tests-internal += test-strfmon-ibm128 test-strfmon-ieee128
CFLAGS-test-strfmon-ibm128.c += -mabi=ibmlongdouble -Wno-psabi
CFLAGS-test-strfmon-ieee128.c += -mfloat128 -mabi=ieeelongdouble -Wno-psabi
$(objpfx)tst-strfmon-ibm128.out: $(gen-locales)
$(objpfx)tst-strfmon-ieee128.out: $(gen-locales)
tests-internal += test-strfrom-ibm128 test-strfrom-ieee128
CFLAGS-test-strfrom-ieee128.c += -mfloat128 -mabi=ieeelongdouble -Wno-psabi
CFLAGS-test-strfrom-ibm128.c += -mabi=ibmlongdouble -Wno-psabi
$(objpfx)test-strfrom-ieee128: gnulib-tests += $(f128-loader-link)
endif
# Add IEEE binary128 files as make targets.
routines += $(foreach r,$(ldbl-extra-routines),ieee128-$(r))
# On powerpc64le, the routines responsible for converting between long
# double and string (e.g.: printf, scanf, strtold, strfroml) default to
# IBM long double mode. When support for TS 18661-3 was added, several
# internal functions were modified so that they could also handle
# floating-point variables with IEEE binary128 format, but as an
# additional type, _Float128.
#
# The following rule ensures that the string conversion routines will
# always be built in IBM long double mode, with additional support for
# IEEE binary128, through the use of -mabi=ibmlongdouble and -mfloat128.
ldbl-ibm128-files := $(objpfx)test-%-ibm128^ \
$(objpfx)iovdprintf^ \
$(objpfx)iovsprintf^ \
$(objpfx)iovsscanf^ \
$(objpfx)iovswscanf^ \
$(objpfx)iovfscanf^ \
$(objpfx)iovfwscanf^ \
$(foreach r,$(ldbl-extra-routines),$(objpfx)$(r)^) \
$(foreach r,$(ldbl-extra-routines),$(objpfx)$(r)-internal^)
obj-suf-foreach = $(foreach suf,$(all-object-suffixes),$(subst ^,$(suf),$(1)))
# Remove -mlong-double-128 because it does not work correctly with
# -mabi=ibmlongdoule in some GCC versions, e.g. GCC 7.
$(call obj-suf-foreach,$(ldbl-ibm128-files)): \
sysdep-CFLAGS := $(filter-out -mlong-double-128, $(sysdep-CFLAGS))
# Explicitly add -mabi=ibm-long-double to required files.
$(call obj-suf-foreach,$(ldbl-ibm128-files)): \
sysdep-CFLAGS += -mabi=ibmlongdouble