Message ID | 20240402140644.2172819-2-adhemerval.zanella@linaro.org |
---|---|
State | New |
Headers | show |
Series | Fix some libm static issues | expand |
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 >
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 --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"