summaryrefslogtreecommitdiff
path: root/sysdeps/ieee754/ldbl-128ibm-compat/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/ieee754/ldbl-128ibm-compat/Makefile')
-rw-r--r--sysdeps/ieee754/ldbl-128ibm-compat/Makefile302
1 files changed, 301 insertions, 1 deletions
diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/Makefile b/sysdeps/ieee754/ldbl-128ibm-compat/Makefile
index 412beb5b5c..6d5414c54a 100644
--- a/sysdeps/ieee754/ldbl-128ibm-compat/Makefile
+++ b/sysdeps/ieee754/ldbl-128ibm-compat/Makefile
@@ -1,5 +1,177 @@
+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)
-routines += ieee128-printf_size
+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
@@ -20,3 +192,131 @@ $(objpfx)test-printf-size-ibm128.out: \
$(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
+
+tests-internal += tst-ibm128-warn tst-ieee128-warn
+tests-internal += tst-ibm128-error tst-ieee128-error
+
+$(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-ieee128-warn.c += -mfloat128 -mabi=ieeelongdouble -Wno-psabi
+CFLAGS-tst-ieee128-error.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^ \
+ $(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)))
+$(call obj-suf-foreach,$(ldbl-ibm128-files)): \
+ sysdep-CFLAGS += -mabi=ibmlongdouble