diff mbox series

[v3,1/7] math: Add support for auto static math tests

Message ID 20240402140644.2172819-2-adhemerval.zanella@linaro.org
State New
Headers show
Series Fix some libm static issues | expand

Commit Message

Adhemerval Zanella April 2, 2024, 2:06 p.m. UTC
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               | 113 +++++++++++++++++++++++++++++++++++-
 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, 128 insertions(+), 3 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

Comments

H.J. Lu May 20, 2024, 4:48 p.m. UTC | #1
On Tue, Apr 2, 2024 at 7:06 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               | 113 +++++++++++++++++++++++++++++++++++-
>  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, 128 insertions(+), 3 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 85e00cef94..9d287da67b 100644
> --- a/Makeconfig
> +++ b/Makeconfig
> @@ -742,6 +742,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 79ef4ebb65..98a98d6851 100644
> --- a/math/Makefile
> +++ b/math/Makefile
> @@ -274,8 +274,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))
> @@ -305,7 +307,7 @@ libm-test-funcs-noauto = canonicalize ceil cimag conj copysign cproj creal \
>                          nextup remainder remquo rint round roundeven scalb \
>                          scalbln scalbn setpayload setpayloadsig signbit \
>                          significand totalorder totalordermag trunc ufromfp \
> -                        ufromfpx compat_totalorder compat_totalordermag
> +                        ufromfpx

Please submit a separate patch to sort Makefile first.

>  libm-test-funcs-compat = compat_totalorder compat_totalordermag
>  libm-test-funcs-narrow = add div fma mul sqrt sub
>  libm-test-funcs-all = $(libm-test-funcs-auto) $(libm-test-funcs-noauto)
> @@ -364,6 +366,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) \
> +  # 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.
> @@ -505,6 +572,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%-*}; \
> @@ -539,6 +618,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
> @@ -548,6 +634,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: \
> @@ -563,6 +656,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)
> @@ -584,6 +684,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.34.1
>
Adhemerval Zanella May 20, 2024, 5:21 p.m. UTC | #2
On 20/05/24 13:48, H.J. Lu wrote:
> On Tue, Apr 2, 2024 at 7:06 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               | 113 +++++++++++++++++++++++++++++++++++-
>>  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, 128 insertions(+), 3 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 85e00cef94..9d287da67b 100644
>> --- a/Makeconfig
>> +++ b/Makeconfig
>> @@ -742,6 +742,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 79ef4ebb65..98a98d6851 100644
>> --- a/math/Makefile
>> +++ b/math/Makefile
>> @@ -274,8 +274,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))
>> @@ -305,7 +307,7 @@ libm-test-funcs-noauto = canonicalize ceil cimag conj copysign cproj creal \
>>                          nextup remainder remquo rint round roundeven scalb \
>>                          scalbln scalbn setpayload setpayloadsig signbit \
>>                          significand totalorder totalordermag trunc ufromfp \
>> -                        ufromfpx compat_totalorder compat_totalordermag
>> +                        ufromfpx
> 
> Please submit a separate patch to sort Makefile first.

The Makefile is already sorted since c0d59e3e0da12b294b85acf055e6e75b18d8dd2a,
I will rebase and send a new version.

> 
>>  libm-test-funcs-compat = compat_totalorder compat_totalordermag
>>  libm-test-funcs-narrow = add div fma mul sqrt sub
>>  libm-test-funcs-all = $(libm-test-funcs-auto) $(libm-test-funcs-noauto)
>> @@ -364,6 +366,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) \
>> +  # 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.
>> @@ -505,6 +572,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%-*}; \
>> @@ -539,6 +618,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
>> @@ -548,6 +634,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: \
>> @@ -563,6 +656,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)
>> @@ -584,6 +684,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.34.1
>>
> 
>
diff mbox series

Patch

diff --git a/Makeconfig b/Makeconfig
index 85e00cef94..9d287da67b 100644
--- a/Makeconfig
+++ b/Makeconfig
@@ -742,6 +742,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 79ef4ebb65..98a98d6851 100644
--- a/math/Makefile
+++ b/math/Makefile
@@ -274,8 +274,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))
@@ -305,7 +307,7 @@  libm-test-funcs-noauto = canonicalize ceil cimag conj copysign cproj creal \
 			 nextup remainder remquo rint round roundeven scalb \
 			 scalbln scalbn setpayload setpayloadsig signbit \
 			 significand totalorder totalordermag trunc ufromfp \
-			 ufromfpx compat_totalorder compat_totalordermag
+			 ufromfpx
 libm-test-funcs-compat = compat_totalorder compat_totalordermag
 libm-test-funcs-narrow = add div fma mul sqrt sub
 libm-test-funcs-all = $(libm-test-funcs-auto) $(libm-test-funcs-noauto)
@@ -364,6 +366,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) \
+  # 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.
@@ -505,6 +572,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%-*}; \
@@ -539,6 +618,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
@@ -548,6 +634,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: \
@@ -563,6 +656,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)
@@ -584,6 +684,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"