From: "H.J. Lu" <hjl.tools@gmail.com>
To: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Cc: libc-alpha@sourceware.org
Subject: Re: [PATCH v4 1/5] math: Add support for auto static math tests
Date: Tue, 21 May 2024 12:12:35 -0700 [thread overview]
Message-ID: <CAMe9rOp4XLtsnntkQ0UPn6kRycwnAEaDr4Noxqxi_KxUktFSTQ@mail.gmail.com> (raw)
In-Reply-To: <20240521165430.2998944-2-adhemerval.zanella@linaro.org>
On Tue, May 21, 2024 at 9:54 AM Adhemerval Zanella
<adhemerval.zanella@linaro.org> wrote:
>
> It basically copy the already in place rules for dynamic tests for
> auto-generated math functions for all support types. To avoid the
> need to duplicate .inc files, a .SECONDEXPANSION rules is adeed for
> the gen-libm-test.py generation.
>
> New tests are added on the new rules 'libm-test-funcs-auto-static',
> 'libm-test-funcs-noauto-static', and 'libm-test-funcs-narrow-static';
> similar to the non-static counterparts.
>
> To avoid add extra build and disk requirement, the new math static
> tests are only enable with a new define 'build-math-static-tests'.
> ---
> Makeconfig | 5 ++
> Makefile.help | 4 ++
> math/Makefile | 120 ++++++++++++++++++++++++++++++++++--
> math/test-double-static.h | 1 +
> math/test-float-static.h | 1 +
> math/test-float128-static.h | 1 +
> math/test-float32-static.h | 1 +
> math/test-float32x-static.h | 1 +
> math/test-float64-static.h | 1 +
> math/test-float64x-static.h | 1 +
> math/test-ibm128-static.h | 1 +
> math/test-ldouble-static.h | 1 +
> 12 files changed, 133 insertions(+), 5 deletions(-)
> create mode 100644 math/test-double-static.h
> create mode 100644 math/test-float-static.h
> create mode 100644 math/test-float128-static.h
> create mode 100644 math/test-float32-static.h
> create mode 100644 math/test-float32x-static.h
> create mode 100644 math/test-float64-static.h
> create mode 100644 math/test-float64x-static.h
> create mode 100644 math/test-ibm128-static.h
> create mode 100644 math/test-ldouble-static.h
>
> diff --git a/Makeconfig b/Makeconfig
> index 9fe664ae3a..29819363da 100644
> --- a/Makeconfig
> +++ b/Makeconfig
> @@ -768,6 +768,11 @@ run-built-tests = yes
> endif
> endif
>
> +# Whether to build the static math tests
> +ifndef build-math-static-tests
> +build-math-static-tests = no
> +endif
> +
> # Whether to stop immediately when a test fails. Nonempty means to
> # stop, empty means not to stop.
> ifndef stop-on-test-failure
> diff --git a/Makefile.help b/Makefile.help
> index b49df9c5c9..17e7154797 100644
> --- a/Makefile.help
> +++ b/Makefile.help
> @@ -33,6 +33,10 @@ test
> Note that this will rebuild the test if needed, but will not
> rebuild what "make all" would have rebuilt.
>
> +build-math-static-tests
> + Enable extra math tests for static linking. Use like this:
> + make test t=math/test-float-exp10-static build-math-static-tests=yes
> +
> --
> Other useful hints:
>
> diff --git a/math/Makefile b/math/Makefile
> index 36024a5039..58e5c070cf 100644
> --- a/math/Makefile
> +++ b/math/Makefile
> @@ -593,8 +593,10 @@ endif
>
> libm-vec-tests = $(addprefix test-,$(libmvec-tests))
> libm-test-support = $(foreach t,$(test-types),libm-test-support-$(t))
> -test-extras += $(libm-test-support)
> -extra-test-objs += $(addsuffix .o, $(libm-test-support))
> +libm-test-support-static = $(foreach t,$(test-types),libm-test-support-$(t)-static)
> +test-extras += $(libm-test-support) $(libm-test-support-static)
> +extra-test-objs += $(addsuffix .o, $(libm-test-support)) \
> + $(addsuffix .o, $(libm-test-support-static))
> libm-vec-test-wrappers = $(addsuffix -wrappers, $(libm-vec-tests))
> test-extras += $(libm-vec-test-wrappers)
> extra-test-objs += $(addsuffix .o, $(libm-vec-test-wrappers))
> @@ -664,12 +666,10 @@ libm-test-funcs-auto = \
> y1 \
> yn \
> # libm-test-funcs-auto
> -libm-test-funcs-noauto = \
> +libm-test-funcs-noauto-base = \
> canonicalize \
> ceil \
> cimag \
> - compat_totalorder \
> - compat_totalordermag \
> conj \
> copysign \
> cproj \
> @@ -740,6 +740,11 @@ libm-test-funcs-noauto = \
> trunc \
> ufromfp \
> ufromfpx \
> + # libm-test-funcs-noauto-base
> +libm-test-funcs-noauto = \
> + $(libm-test-funcs-noauto-base) \
> + compat_totalorder \
> + compat_totalordermag \
> # libm-test-funcs-noauto
> libm-test-funcs-compat = \
> compat_totalorder \
> @@ -816,6 +821,71 @@ $(libm-test-c-narrow-obj): $(objpfx)libm-test%.c: libm-test%.inc \
> $(make-target-directory)
> $(PYTHON) gen-libm-test.py -c $< -a auto-libm-test-out$* -C $@
>
> +
> +libm-test-funcs-auto-static = \
> + $(libm-test-funcs-auto) \
> + # libm-test-funcs-auto-static
> +libm-test-funcs-noauto-static = \
> + $(libm-test-funcs-noauto-base) \
> + # libm-test-funcs-noauto-static
> +libm-test-funcs-narrow-static = \
> + $(libm-test-funcs-narrow) \
> + # libm-test-funcs-narrow-static
> +libm-test-funcs-all-static = $(libm-test-funcs-auto-static) $(libm-test-funcs-noauto-static)
> +
> +libm-test-c-auto-static = $(foreach f,$(libm-test-funcs-auto-static),libm-test-$(f)-static.c)
> +libm-test-c-noauto-static = $(foreach f,$(libm-test-funcs-noauto-static),libm-test-$(f)-static.c)
> +libm-test-c-narrow-static = $(foreach f,$(libm-test-funcs-narrow-static),\
> + libm-test-narrow-$(f)-static.c)
> +generated += $(libm-test-c-auto-static) $(libm-test-c-noauto-static) $(libm-test-c-narrow-static)
> +
> +libm-tests-normal-static = $(foreach t,$(libm-tests-base-normal),\
> + $(foreach f,$(libm-test-funcs-all-static),\
> + $(t)-$(f)-static))
> +libm-tests-narrow-static = $(foreach t,$(libm-tests-base-narrow-static),\
> + $(foreach f,$(libm-test-funcs-narrow-static),\
> + $(t)-$(f)-static))
> +libm-tests-vector-static = $(foreach t,$(libmvec-tests-static),\
> + $(foreach f,$($(t)-funcs),test-$(t)-$(f)-static))
> +libm-tests-static = $(libm-tests-normal-static) $(libm-tests-narrow-static) $(libm-tests-vector-static)
> +libm-tests-for-type-static = $(foreach f,$(libm-test-funcs-all-static),\
> + test-$(1)-$(f)-static test-i$(1)-$(f)-static) \
> + $(filter test-$(1)-%,$(libm-tests-vector-static) \
> + $(libm-tests-narrow-static))
> +
> +libm-tests.o += $(addsuffix .o,$(libm-tests-static))
> +
> +ifeq ($(build-math-static-tests),yes)
> +tests-static += $(libm-tests-static)
> +generated += $(addsuffix .c,$(libm-tests)) \
> + $(foreach t,$(test-types),libm-test-support-$(t)-static.c)
> +endif
> +
> +libm-test-c-auto-obj-static = $(addprefix $(objpfx),$(libm-test-c-auto-static))
> +libm-test-c-noauto-obj-static = $(addprefix $(objpfx),$(libm-test-c-noauto-static))
> +libm-test-c-narrow-obj-static = $(addprefix $(objpfx),$(libm-test-c-narrow-static))
> +
> +# Use the same input test definitions for both dynamic and static tests.
> +.SECONDEXPANSION:
> +$(libm-test-c-noauto-obj-static): $(objpfx)libm-test%.c: libm-test$$(subst -static,,%).inc \
> + gen-libm-test.py
> + $(make-target-directory)
> + $(PYTHON) gen-libm-test.py -c $< -a /dev/null -C $@
> +
> +.SECONDEXPANSION:
> +$(libm-test-c-auto-obj-static): $(objpfx)libm-test%.c: libm-test$$(subst -static,,%).inc \
> + gen-libm-test.py \
> + auto-libm-test-out$$(subst -static,,%)
> + $(make-target-directory)
> + $(PYTHON) gen-libm-test.py -c $< -a auto-libm-test-out`echo $* | sed 's/-static//'` -C $@
> +
> +.SECONDEXPANSION:
> +$(libm-test-c-narrow-obj-static): $(objpfx)libm-test%.c: libm-test$$(subst -static,,%).inc \
> + gen-libm-test.py \
> + auto-libm-test-out$$(subst -static,,%)
> + $(make-target-directory)
> + $(PYTHON) gen-libm-test.py -c $< -a auto-libm-test-out`echo $* | sed 's/-static//'` -C $@
> +
> # Tests for totalorder compat symbols reuse the table of tests as
> # processed by gen-libm-test.py, so add dependencies on the generated
> # .c files.
> @@ -1044,6 +1114,18 @@ $(foreach t,$(libm-tests-normal),$(objpfx)$(t).c): $(objpfx)test-%.c:
> echo "#include <libm-test-$$func.c>"; \
> ) > $@
>
> +$(foreach t,$(libm-tests-normal-static),$(objpfx)$(t).c): $(objpfx)test-%.c:
> + type_func=$*; \
> + type=$${type_func%%-*}; \
> + func=$${type_func#*-}; \
> + ( \
> + echo "#include <test-$$type.h>"; \
> + echo "#include <test-math-exceptions.h>"; \
> + echo "#include <test-math-errno.h>"; \
> + echo "#include <test-math-scalar.h>"; \
> + echo "#include <libm-test-$$func.c>"; \
> + ) > $@
> +
> $(foreach t,$(libm-tests-narrow),$(objpfx)$(t).c): $(objpfx)test-%.c:
> type_pair_func=$*; \
> type_pair=$${type_pair_func%-*}; \
> @@ -1078,6 +1160,13 @@ $(foreach t,$(test-types),\
> echo "#include <libm-test-support.c>"; \
> ) > $@
>
> +$(foreach t,$(test-types),\
> + $(objpfx)libm-test-support-$(t)-static.c): $(objpfx)libm-test-support-%.c:
> + ( \
> + echo "#include <test-$*.h>"; \
> + echo "#include <libm-test-support.c>"; \
> + ) > $@
> +
> $(addprefix $(objpfx), $(libm-tests.o)): $(objpfx)libm-test-ulps.h
>
> define o-iterator-doit
> @@ -1087,6 +1176,13 @@ endef
> object-suffixes-left := $(libm-tests-base)
> include $(o-iterator)
>
> +define o-iterator-doit
> +$(foreach f,$(libm-test-funcs-all-static),\
> + $(objpfx)$(o)-$(f)-static.o): $(objpfx)$(o)%.o: $(objpfx)libm-test%.c
> +endef
> +object-suffixes-left := $(libm-tests-base)
> +include $(o-iterator)
> +
> define o-iterator-doit
> $(foreach f,$(libm-test-funcs-narrow),\
> $(objpfx)$(o)-$(f).o): $(objpfx)$(o)%.o: \
> @@ -1102,6 +1198,13 @@ endef
> object-suffixes-left := $(libm-tests-base-normal)
> include $(o-iterator)
>
> +define o-iterator-doit
> +$(foreach f,$(libm-test-funcs-all-static),\
> + $(objpfx)$(o)-$(f)-static.o): CFLAGS += $(libm-test-no-inline-cflags)
> +endef
> +object-suffixes-left := $(libm-tests-base-normal)
> +include $(o-iterator)
> +
> define o-iterator-doit
> $(foreach f,$(libm-test-funcs-narrow),\
> $(objpfx)$(o)-$(f).o): CFLAGS += $(libm-test-no-inline-cflags)
> @@ -1123,6 +1226,13 @@ endef
> object-suffixes-left := $(test-types)
> include $(o-iterator)
>
> +define o-iterator-doit
> +$(addprefix $(objpfx),\
> + $(call libm-tests-for-type-static,$(o))): $(objpfx)libm-test-support-$(o)-static.o
> +endef
> +object-suffixes-left := $(test-types)
> +include $(o-iterator)
> +
> define o-iterator-doit
> $(objpfx)libm-test-support-$(o).o: CFLAGS += $(libm-test-no-inline-cflags)
> endef
> diff --git a/math/test-double-static.h b/math/test-double-static.h
> new file mode 100644
> index 0000000000..d53f46819f
> --- /dev/null
> +++ b/math/test-double-static.h
> @@ -0,0 +1 @@
> +#include "test-double.h"
> diff --git a/math/test-float-static.h b/math/test-float-static.h
> new file mode 100644
> index 0000000000..7834c9e1f1
> --- /dev/null
> +++ b/math/test-float-static.h
> @@ -0,0 +1 @@
> +#include "test-float.h"
> diff --git a/math/test-float128-static.h b/math/test-float128-static.h
> new file mode 100644
> index 0000000000..5f8206456a
> --- /dev/null
> +++ b/math/test-float128-static.h
> @@ -0,0 +1 @@
> +#include "test-float128.h"
> diff --git a/math/test-float32-static.h b/math/test-float32-static.h
> new file mode 100644
> index 0000000000..2df27d1ca0
> --- /dev/null
> +++ b/math/test-float32-static.h
> @@ -0,0 +1 @@
> +#include "test-float32.h"
> diff --git a/math/test-float32x-static.h b/math/test-float32x-static.h
> new file mode 100644
> index 0000000000..62f78b49d8
> --- /dev/null
> +++ b/math/test-float32x-static.h
> @@ -0,0 +1 @@
> +#include "test-float32x.h"
> diff --git a/math/test-float64-static.h b/math/test-float64-static.h
> new file mode 100644
> index 0000000000..807c174df1
> --- /dev/null
> +++ b/math/test-float64-static.h
> @@ -0,0 +1 @@
> +#include "test-float64.h"
> diff --git a/math/test-float64x-static.h b/math/test-float64x-static.h
> new file mode 100644
> index 0000000000..a7801dbc10
> --- /dev/null
> +++ b/math/test-float64x-static.h
> @@ -0,0 +1 @@
> +#include "test-float64x.h"
> diff --git a/math/test-ibm128-static.h b/math/test-ibm128-static.h
> new file mode 100644
> index 0000000000..b66a57050b
> --- /dev/null
> +++ b/math/test-ibm128-static.h
> @@ -0,0 +1 @@
> +#include "test-ibm128.h"
> diff --git a/math/test-ldouble-static.h b/math/test-ldouble-static.h
> new file mode 100644
> index 0000000000..beabedb817
> --- /dev/null
> +++ b/math/test-ldouble-static.h
> @@ -0,0 +1 @@
> +#include "test-ldouble.h"
> --
> 2.43.0
>
LGTM.
Reviewed-by: H.J. Lu <hjl.tools@gmail.com>
Thanks.
--
H.J.
next prev parent reply other threads:[~2024-05-21 19:13 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-21 16:52 [PATCH v4 0/5] Improve libm.a static coverage Adhemerval Zanella
2024-05-21 16:52 ` [PATCH v4 1/5] math: Add support for auto static math tests Adhemerval Zanella
2024-05-21 19:12 ` H.J. Lu [this message]
2024-05-21 16:52 ` [PATCH v4 2/5] math: Fix isnanf128 static build (BZ 31774) Adhemerval Zanella
2024-05-21 17:32 ` H.J. Lu
2024-05-21 16:52 ` [PATCH v4 3/5] math: Provided copysignf128 for static libm on alpha, s390, and sparcv9 Adhemerval Zanella
2024-05-21 17:34 ` H.J. Lu
2024-05-21 19:52 ` Adhemerval Zanella Netto
2024-05-21 20:05 ` H.J. Lu
2024-05-21 16:52 ` [PATCH v4 4/5] math: Provide frexpf128 " Adhemerval Zanella
2024-05-21 16:52 ` [PATCH v4 5/5] math: Provide modf128 " Adhemerval Zanella
2024-05-21 17:35 ` H.J. Lu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAMe9rOp4XLtsnntkQ0UPn6kRycwnAEaDr4Noxqxi_KxUktFSTQ@mail.gmail.com \
--to=hjl.tools@gmail.com \
--cc=adhemerval.zanella@linaro.org \
--cc=libc-alpha@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).