# Copyright (C) 1996-2018 Free Software Foundation, Inc.
# This file is part of the GNU C Library.

# The GNU C Library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.

# The GNU C Library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.

# You should have received a copy of the GNU Lesser General Public
# License along with the GNU C Library; if not, see
# <http://www.gnu.org/licenses/>.

# Makefile for the math library.

subdir		:= math

include ../Makeconfig

# Installed header files.
headers		:= math.h bits/mathcalls.h bits/mathinline.h \
		   fpu_control.h complex.h bits/cmathcalls.h fenv.h \
		   bits/fenv.h bits/fenvinline.h bits/mathdef.h tgmath.h \
		   bits/math-finite.h bits/math-vector.h \
		   bits/libm-simd-decl-stubs.h bits/iscanonical.h \
		   bits/flt-eval-method.h bits/fp-fast.h bits/fp-logb.h \
		   bits/long-double.h bits/mathcalls-helper-functions.h \
		   bits/floatn.h bits/floatn-common.h

# FPU support code.
aux		:= setfpucw fpu_control

# Build the -lm library.

extra-libs	:= libm
extra-libs-others = $(extra-libs)

libm-support = s_lib_version s_matherr s_signgam			\
	       fclrexcpt fgetexcptflg fraiseexcpt fsetexcptflg		\
	       ftestexcept fegetround fesetround fegetenv feholdexcpt	\
	       fesetenv feupdateenv t_exp fedisblxcpt feenablxcpt	\
	       fegetexcept fesetexcept fetestexceptflag fegetmode	\
	       fesetmode

# Wrappers for these functions generated per type using a file named
# <func>_template.c and the appropriate math-type-macros-<TYPE>.h.
gen-libm-calls = cargF conjF cimagF crealF cabsF s_cacosF		  \
	         s_cacoshF s_ccosF s_ccoshF s_casinF s_csinF s_casinhF	  \
		 k_casinhF s_csinhF k_casinhF s_csinhF s_catanhF s_catanF \
		 s_ctanF s_ctanhF s_cexpF s_clogF s_cprojF s_csqrtF	  \
		 s_cpowF s_clog10F s_fdimF s_nextdownF s_fmaxF s_fminF	  \
		 s_nanF s_iseqsigF s_canonicalizeF w_ilogbF w_llogbF	  \
		 w_log1pF w_scalblnF s_fmaxmagF s_fminmagF w_acosF	  \
		 w_acoshF w_asinF w_atan2F w_atanhF w_coshF w_exp10F	  \
		 w_exp2F w_fmodF w_hypotF w_j0F w_j1F w_jnF w_logF	  \
		 w_log10F w_log2F w_powF w_remainderF w_sinhF w_sqrtF	  \
		 w_tgammaF w_lgammaF w_lgammaF_r w_expF e_exp2F

libm-calls =								  \
	e_acosF e_acoshF e_asinF e_atan2F e_atanhF e_coshF e_expF e_fmodF \
	e_hypotF e_j0F e_j1F e_jnF e_lgammaF_r e_logF e_log10F e_powF	  \
	e_rem_pio2F e_remainderF e_scalbF e_sinhF e_sqrtF e_gammaF_r	  \
	e_ilogbF							  \
	k_cosF k_sinF k_tanF s_asinhF s_atanF s_cbrtF			  \
	s_ceilF s_cosF s_erfF s_expm1F s_fabsF				  \
	s_floorF s_log1pF s_logbF				  \
	s_nextafterF s_nexttowardF s_rintF s_scalblnF			  \
	s_significandF s_sinF s_tanF s_tanhF				  \
	s_fpclassifyF s_truncF						  \
	s_remquoF e_log2F s_roundF s_nearbyintF s_sincosF		  \
	s_fmaF s_lrintF s_llrintF s_lroundF s_llroundF e_exp10F		  \
	s_issignalingF $(calls:s_%=m_%) x2y2m1F				  \
	gamma_productF lgamma_negF lgamma_productF			  \
	s_nextupF s_totalorderF s_totalordermagF s_getpayloadF		  \
	s_setpayloadF s_setpayloadsigF s_roundevenF s_fromfpF s_ufromfpF  \
	s_fromfpxF s_ufromfpxF $(gen-libm-calls)

libm-compat-calls =							\
	w_acosF_compat w_acoshF_compat w_asinF_compat w_atan2F_compat	\
	w_atanhF_compat w_coshF_compat w_exp2F_compat w_exp10F_compat	\
	w_fmodF_compat w_hypotF_compat w_j0F_compat w_j1F_compat	\
	w_jnF_compat w_log2F_compat w_log10F_compat w_logF_compat	\
	w_powF_compat w_remainderF_compat w_scalbF_compat		\
	w_sinhF_compat w_sqrtF_compat w_tgammaF_compat			\
	w_lgammaF_r_compat w_lgammaF_compat2 w_expF_compat		\
	w_lgamma_compatF k_standardF

# Type specific routine support.
#
# The following three variables control what is included for each type:
#
# type-floatN-suffix = The suffix of the type
# type-floatN-routines = Type specific support objects
# type-floatN-yes = If the type is supported, evaluates to floatN
#
# Finally, note that types is an intentionally recursive variable.
# We only know the full set of supported types for the target machine
# after the Rules makefile has been parsed.
types-basic = $(type-ldouble-$(long-double-fcts)) double float

# Like types, but includes types whose functions alias those for
# another type.
test-types-basic = ldouble double float

# long double support
type-ldouble-suffix := l
type-ldouble-routines := t_sincosl k_sincosl s_iscanonicall
type-ldouble-yes := ldouble

# double support
type-double-suffix :=
type-double-routines := branred doasin dosincos halfulp mpa mpatan2	\
		       mpatan mpexp mplog mpsqrt mptan sincos32 slowexp	\
		       slowpow sincostab k_rem_pio2

# float support
type-float-suffix := f
type-float-routines := k_rem_pio2f math_errf e_exp2f_data e_logf_data	\
		       e_log2f_data e_powf_log2_data

# _Float128 support
type-float128-suffix := f128
type-float128-routines := t_sincosf128 k_sincosf128
type-float128-yes := float128

# _Float64x may be supported, only as an alias type.
type-float64x-yes := float64x

types = $(types-basic) $(type-float128-$(float128-fcts))
test-types = $(test-types-basic) $(type-float128-$(float128-fcts)) \
	     float32 float64 $(type-float128-$(float128-alias-fcts)) \
	     float32x $(type-float64x-$(float64x-alias-fcts))

# For each of the basic types (float, double, long double), replace the
# occurrences of 'F' in arg 1 with the appropriate suffix for the type.
type-basic-foreach = $(foreach t, $(types-basic), \
		       $(subst F,$(type-$(t)-suffix),$(1)))

# Apply suffix to each type in arg 1
type-foreach = $(foreach t,$(types),$(subst F,$(type-$(t)-suffix),$(1)))

libm-routines = $(strip $(libm-support)					\
			$(call type-basic-foreach,			\
			       $(libm-compat-calls))			\
			$(call type-foreach, $(libm-calls))		\
			$(foreach t, $(types), $(type-$(t)-routines))) 	\

# These functions are in libc instead of libm because __printf_fp
# calls them, so any program using printf will need them linked in,
# and we don't want to have to link every program with -lm.
# In libm-calls (above), list m_foo in place of s_foo for any
# routine that should be compiled separately for its libc and libm versions.
calls = s_isinfF s_isnanF s_finiteF s_copysignF s_modfF s_scalbnF s_frexpF \
	s_signbitF $(gen-calls)
gen-calls = s_ldexpF
generated += $(foreach s,.c .S,$(call type-foreach, $(calls:s_%=m_%$(s))))
routines = $(call type-foreach, $(calls))

ifeq ($(build-mathvec),yes)
# We need to install libm.so and libm.a as linker scripts
# for transparent use of vector math library.
install-lib-ldscripts := libm.so libm.a
install-others = $(inst_libdir)/libm.so $(inst_libdir)/libm.a
$(inst_libdir)/libm.so: $(common-objpfx)format.lds \
			$(libm) \
			$(libmvec) \
			$(+force)
	(echo '/* GNU ld script'; echo '*/';\
	 cat $<; \
	 echo 'GROUP ( $(slibdir)/libm.so$(libm.so-version) ' \
	      'AS_NEEDED ( $(libdir)/libmvec_nonshared.a $(slibdir)/libmvec.so$(libmvec.so-version) ) )' \
	) > $@.new
	mv -f $@.new $@

$(inst_libdir)/libm-$(version).a: $(objpfx)libm.a \
				  $(+force)
	$(do-install)

$(inst_libdir)/libm.a: $(common-objpfx)format.lds \
		       $(inst_libdir)/libm-$(version).a \
		       $(objpfx)../mathvec/libmvec.a \
		       $(+force)
	(echo '/* GNU ld script'; echo '*/';\
	 cat $<; \
	 echo 'GROUP ( $(libdir)/libm-$(version).a $(libdir)/libmvec.a )' \
	) > $@.new
	mv -f $@.new $@
endif

# Rules for the test suite.
tests = test-matherr-3 test-fenv basic-test \
	test-misc test-fpucw test-fpucw-ieee tst-definitions test-tgmath \
	test-tgmath-ret bug-nextafter bug-nexttoward bug-tgmath1 \
	test-tgmath-int test-tgmath2 test-powl tst-CMPLX tst-CMPLX2 test-snan \
	test-fenv-tls test-fenv-preserve test-fenv-return test-fenvinline \
	test-nearbyint-except test-fenv-clear test-signgam-finite \
	test-signgam-finite-c99 test-signgam-finite-c11 \
	test-nearbyint-except-2 test-signgam-uchar test-signgam-uchar-init \
	test-signgam-uint test-signgam-uint-init test-signgam-ullong \
	test-signgam-ullong-init test-nan-overflow test-nan-payload \
	test-fexcept test-fexcept-traps test-fesetexcept \
	test-fesetexcept-traps test-fetestexceptflag test-femode \
	test-femode-traps test-iszero-excess-precision \
	test-iseqsig-excess-precision test-flt-eval-method \
	test-fp-ilogb-constants test-fp-llogb-constants \
	test-fe-snans-always-signal test-finite-macros $(tests-static)
tests-static = test-fpucw-static test-fpucw-ieee-static \
	       test-signgam-uchar-static test-signgam-uchar-init-static \
	       test-signgam-uint-static test-signgam-uint-init-static \
	       test-signgam-ullong-static test-signgam-ullong-init-static
tests-internal = test-matherr test-matherr-2

# These tests use internal (unexported) GMP functions and are linked
# statically to obtain access to these functions.
tests-static += atest-exp atest-sincos atest-exp2

ifneq (,$(CXX))
tests += test-math-isinff test-math-iszero test-math-issignaling \
	 test-math-iscanonical test-math-cxx11 test-math-iseqsig
endif

ifneq (no,$(PERL))
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-vec-test-wrappers = $(addsuffix -wrappers, $(libm-vec-tests))
test-extras += $(libm-vec-test-wrappers)
extra-test-objs += $(addsuffix .o, $(libm-vec-test-wrappers))

ulps-file = $(firstword $(wildcard $(sysdirs:%=%/libm-test-ulps)))

$(objpfx)libm-test-ulps.h: $(ulps-file) gen-libm-test.pl
	$(make-target-directory)
	$(PERL) gen-libm-test.pl -u $< -H $@

libm-test-funcs-auto = acos acosh asin asinh atan atan2 atanh cabs cacos \
		       cacosh carg casin casinh catan catanh cbrt ccos ccosh \
		       cexp clog clog10 cos cosh cpow csin csinh csqrt ctan \
		       ctanh erf erfc exp exp10 exp2 expm1 fma hypot j0 j1 jn \
		       lgamma log log10 log1p log2 pow sin sincos sinh sqrt \
		       tan tanh tgamma y0 y1 yn
libm-test-funcs-noauto = canonicalize ceil cimag conj copysign cproj creal \
			 fabs fdim floor fmax fmaxmag fmin fminmag fmod \
			 fpclassify frexp fromfp fromfpx getpayload ilogb \
			 iscanonical iseqsig isfinite isgreater \
			 isgreaterequal isinf isless islessequal \
			 islessgreater isnan isnormal issignaling issubnormal \
			 isunordered iszero llogb llrint llround logb lrint \
			 lround modf nearbyint nextafter nextdown nexttoward \
			 nextup remainder remquo rint round roundeven scalb \
			 scalbln scalbn setpayload setpayloadsig signbit \
			 significand totalorder totalordermag trunc ufromfp \
			 ufromfpx
libm-test-funcs-all = $(libm-test-funcs-auto) $(libm-test-funcs-noauto)
libm-test-c-auto = $(foreach f,$(libm-test-funcs-auto),libm-test-$(f).c)
libm-test-c-noauto = $(foreach f,$(libm-test-funcs-noauto),libm-test-$(f).c)
generated += libm-test-ulps.h $(libm-test-c-auto) $(libm-test-c-noauto)

libm-tests-base-normal = $(foreach t,$(test-types),test-$(t))
libm-tests-base-finite = $(foreach t,$(test-types),test-$(t)-finite)
libm-tests-base-inline = $(foreach t,$(test-types),test-i$(t))
libm-tests-base = $(libm-tests-base-normal) $(libm-tests-base-finite) \
		  $(libm-tests-base-inline) $(libm-vec-tests)
libm-tests-normal = $(foreach t,$(libm-tests-base-normal),\
				$(foreach f,$(libm-test-funcs-all),\
					    $(t)-$(f)))
libm-tests-finite = $(foreach t,$(libm-tests-base-finite),\
				$(foreach f,$(libm-test-funcs-all),\
					    $(t)-$(f)))
libm-tests-inline = $(foreach t,$(libm-tests-base-inline),\
				$(foreach f,$(libm-test-funcs-all),\
					    $(t)-$(f)))
libm-tests-vector = $(foreach t,$(libmvec-tests),\
				$(foreach f,$($(t)-funcs),test-$(t)-$(f)))
libm-tests = $(libm-tests-normal) $(libm-tests-finite) $(libm-tests-inline) \
	     $(libm-tests-vector)
libm-tests-for-type = $(foreach f,$(libm-test-funcs-all),\
				  test-$(1)-$(f) test-$(1)-finite-$(f) \
				  test-i$(1)-$(f)) \
		      $(filter test-$(1)-%,$(libm-tests-vector))

libm-tests.o = $(addsuffix .o,$(libm-tests))

tests += $(libm-tests)
generated += $(addsuffix .c,$(libm-tests)) \
	     $(foreach t,$(test-types),libm-test-support-$(t).c)

libm-test-c-auto-obj = $(addprefix $(objpfx),$(libm-test-c-auto))
libm-test-c-noauto-obj = $(addprefix $(objpfx),$(libm-test-c-noauto))

$(libm-test-c-noauto-obj): $(objpfx)libm-test%.c: libm-test%.inc \
						  gen-libm-test.pl
	$(make-target-directory)
	$(PERL) gen-libm-test.pl -c $< -a /dev/null -C $@

$(libm-test-c-auto-obj): $(objpfx)libm-test%.c: libm-test%.inc \
						gen-libm-test.pl \
						auto-libm-test-out%
	$(make-target-directory)
	$(PERL) gen-libm-test.pl -c $< -a auto-libm-test-out$* -C $@

libm-test-incs = $(foreach f,$(libm-test-funcs-all),libm-test-$(f).inc)
endif

ifdef PYTHON
# Suppress these tests with clang for now, multiple issues
ifneq ($(with-clang),yes)
tests += test-tgmath3
generated += test-tgmath3.c
endif
CFLAGS-test-tgmath3.c += -fno-builtin

$(objpfx)test-tgmath3.c: gen-tgmath-tests.py
	$(PYTHON) $< > $@
endif

libm-test-fast-math-cflags = -fno-builtin -D__FAST_MATH__ -DTEST_FAST_MATH
libm-test-vec-cflags = $(libm-test-fast-math-cflags) -fno-inline \
		       -ffloat-store -D_OPENMP=201307 -Wno-unknown-pragmas

CFLAGS-test-double-vlen4-wrappers.c += $(double-vlen4-arch-ext-cflags)

CFLAGS-test-double-vlen8-wrappers.c += $(double-vlen8-arch-ext-cflags)

CFLAGS-test-float-vlen8-wrappers.c += $(float-vlen8-arch-ext-cflags)

CFLAGS-test-float-vlen16-wrappers.c += $(float-vlen16-arch-ext-cflags)

# The no-inline tests use -fsignaling-nans, and thereby use the
# versions of classification macros that support sNaNs.  The inline
# function tests use the versions of classification macros that may
# raise spurious exceptions for sNaNs, but also do not test for
# exceptions.  Thus both versions of the classification macros are
# validated.
libm-test-no-inline-cflags = -fno-inline -ffloat-store -fno-builtin \
			     -fsignaling-nans
libm-test-finite-cflags = $(libm-test-no-inline-cflags) \
			  -U__FINITE_MATH_ONLY__ -D__FINITE_MATH_ONLY__=1
libm-test-inline-cflags = $(libm-test-fast-math-cflags)
CFLAGS-test-tgmath.c += -fno-builtin
# The following testcase uses very long lines (>3 million), so it may take a
# while to compile it. See: http://llvm.org/bugs/show_bug.cgi?id=14106 and
# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54402
CFLAGS-test-tgmath2.c += -fno-builtin
CFLAGS-test-tgmath-ret.c += -fno-builtin
CFLAGS-test-powl.c += -fno-builtin

CFLAGS-test-snan.c += -fsignaling-nans

CFLAGS-test-signgam-finite.c += -ffinite-math-only
CFLAGS-test-signgam-finite-c99.c += -ffinite-math-only -std=c99
CFLAGS-test-signgam-finite-c11.c += -ffinite-math-only -std=c11
CFLAGS-test-signgam-uchar.c += -std=c99
CFLAGS-test-signgam-uchar-init.c += -std=c99
CFLAGS-test-signgam-uchar-static.c += -std=c99
CFLAGS-test-signgam-uchar-init-static.c += -std=c99
CFLAGS-test-signgam-uint.c += -std=c99
CFLAGS-test-signgam-uint-init.c += -std=c99
CFLAGS-test-signgam-uint-static.c += -std=c99
CFLAGS-test-signgam-uint-init-static.c += -std=c99
CFLAGS-test-signgam-ullong.c += -std=c99
CFLAGS-test-signgam-ullong-init.c += -std=c99
CFLAGS-test-signgam-ullong-static.c += -std=c99
CFLAGS-test-signgam-ullong-init-static.c += -std=c99

CFLAGS-test-math-cxx11.cc += -std=c++11

CFLAGS-test-math-isinff.cc += -std=gnu++11
CFLAGS-test-math-iszero.cc += -std=gnu++11
CFLAGS-test-math-issignaling.cc += -std=gnu++11
CFLAGS-test-math-iscanonical.cc += -std=gnu++11

CFLAGS-test-iszero-excess-precision.c += -fexcess-precision=standard
CFLAGS-test-iseqsig-excess-precision.c += -fexcess-precision=standard
CFLAGS-test-flt-eval-method.c += -fexcess-precision=standard

CFLAGS-test-fe-snans-always-signal.c += -fsignaling-nans

CFLAGS-test-finite-macros.c += -ffinite-math-only

include ../Rules

gen-all-calls = $(gen-libm-calls) $(gen-calls)

generated += $(addsuffix .c,$(call type-foreach,$(gen-all-calls))) \
	     gen-libm-templates.stmp

# Create wrappers in the math build directory.
$(objpfx)gen-libm-templates.stmp: Makefile
	$(make-target-directory)
	for gcall in $(gen-all-calls); do                                 \
	  func=$${gcall%F*}$${gcall#*F};                                  \
	  for type in $(foreach t,$(types),$(t)__$(type-$(t)-suffix)); do \
	    suff=$${type#*__};                                            \
	    type=$${type%__*};                                            \
	    file=$(objpfx)$${gcall%F*}$${suff}$${gcall#*F}.c;             \
	    (                                                             \
	      echo "#include <math-type-macros-$${type}.h>";              \
	      echo "#include <$${func}_template.c>";                      \
	    ) > $${file};                                                 \
	  done;                                                           \
	done;                                                             \
	echo > $(@)

# Add dependency to ensure the generator runs prior.
$(foreach t, $(call type-foreach, $(gen-all-calls)), \
             $(objpfx)$(t).c): $(objpfx)gen-libm-templates.stmp

ifneq (no,$(PERL))
# This must come after the inclusion of sysdeps Makefiles via Rules.

$(foreach t,$(libm-tests-normal),$(objpfx)$(t).c): $(objpfx)test-%.c:
	type_func=$*; \
	type=$${type_func%%-*}; \
	func=$${type_func#*-}; \
	( \
	  echo "#include <test-$$type.h>"; \
	  echo "#include <test-math-no-finite.h>"; \
	  echo "#include <test-math-no-inline.h>"; \
	  echo "#include <test-math-errno.h>"; \
	  echo "#include <test-math-scalar.h>"; \
	  echo "#include <libm-test-$$func.c>"; \
	) > $@

$(foreach t,$(libm-tests-finite),$(objpfx)$(t).c): $(objpfx)test-%.c:
	type_func=$*; \
	type=$${type_func%%-*}; \
	func=$${type_func#*-finite-}; \
	( \
	  echo "#include <test-$$type.h>"; \
	  echo "#include <test-math-finite.h>"; \
	  echo "#include <test-math-no-inline.h>"; \
	  echo "#include <test-math-scalar.h>"; \
	  echo "#include <libm-test-$$func.c>"; \
	) > $@

$(foreach t,$(libm-tests-inline),$(objpfx)$(t).c): $(objpfx)test-i%.c:
	type_func=$*; \
	type=$${type_func%%-*}; \
	func=$${type_func#*-}; \
	( \
	  echo "#include <test-$$type.h>"; \
	  echo "#include <test-math-inline.h>"; \
	  echo "#include <test-math-scalar.h>"; \
	  echo "#include <libm-test-$$func.c>"; \
	) > $@

$(foreach t,$(libm-tests-vector),$(objpfx)$(t).c): $(objpfx)test-%.c:
	type_func=$*; \
	type=$${type_func%-*}; \
	func=$${type_func##*-}; \
	func_args=$$(grep ALL_RM_TEST libm-test-$$func.inc \
		     | sed 's/.*RUN_TEST_LOOP_//;s/_.*//'); \
	( \
	  echo "#include <test-$$type.h>"; \
	  echo "WRAPPER_DECL_$$func_args (WRAPPER_NAME (FUNC ($$func)))"; \
	  echo "#include <libm-test-$$func.c>"; \
	) > $@

$(foreach t,$(test-types),\
	    $(objpfx)libm-test-support-$(t).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
$(foreach f,$(libm-test-funcs-all),\
	    $(objpfx)$(o)-$(f).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-all),\
	    $(objpfx)$(o)-$(f).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-all),\
	    $(objpfx)$(o)-$(f).o): CFLAGS += $(libm-test-finite-cflags)
endef
object-suffixes-left := $(libm-tests-base-finite)
include $(o-iterator)

define o-iterator-doit
$(foreach f,$(libm-test-funcs-all),\
	    $(objpfx)$(o)-$(f).o): CFLAGS += $(libm-test-inline-cflags)
endef
object-suffixes-left := $(libm-tests-base-inline)
include $(o-iterator)

define o-iterator-doit
$(foreach f,$($(o)-funcs),\
	    $(objpfx)test-$(o)-$(f).o): CFLAGS += $(libm-test-vec-cflags)
endef
object-suffixes-left := $(libmvec-tests)
include $(o-iterator)

define o-iterator-doit
$(addprefix $(objpfx),\
	    $(call libm-tests-for-type,$(o))): $(objpfx)libm-test-support-$(o).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
object-suffixes-left := $(test-types)
include $(o-iterator)

# Run the math programs to automatically generate ULPs files.
.PHONY: regen-ulps

run-regen-ulps = $(test-wrapper-env) \
	    $(run-program-env) \
	    $($*-ENV) $(rtld-prefix) $(objpfx)$${run}

regen-ulps: $(addprefix $(objpfx),$(libm-tests))
	rm -f $(objpfx)ULPs; rm -f $(objpfx)NewUlps; \
	cp $(ulps-file) $(objpfx)libm-test-ulps; \
	for run in $(libm-tests); do \
	  echo "Regenerating ULPs for $${run}"; \
	  $(run-regen-ulps) -u -o $(objpfx); \
	  cat $(objpfx)ULPs >> $(objpfx)libm-test-ulps; \
	  rm $(objpfx)ULPs; \
	done; \
	$(PERL) gen-libm-test.pl -n $(objpfx)NewUlps \
				 -u $(objpfx)libm-test-ulps; \
	echo "Automatic regeneration of ULPs complete."; \
	echo "Difference between the current baseline and the new baseline is:";\
	diff -urN $(ulps-file) $(objpfx)NewUlps; \
	echo "Copy $(objpfx)NewUlps to $(ulps-file) (relative to source)."
else
regen-ulps:
	@echo "Automatic regeneration of ULPs requires perl."; \
	exit 1;
endif

# The generated sysd-rules file defines rules like this for sources
# coming from sysdeps/ directories.  These rules find the generic sources.
define o-iterator-doit
$(objpfx)m_%$o: s_%.c $(before-compile); $$(compile-command.c)
endef
object-suffixes-left := $(all-object-suffixes)
include $(o-iterator)

# Likewise, for those generated files shared with libc.
define o-iterator-doit
$(objpfx)m_%$o: $(objpfx)s_%.c $(before-compile); $$(compile-command.c)
endef
object-suffixes-left := $(all-object-suffixes)
include $(o-iterator)

# We don't want the fdlibm code to use the inline math functions,
# only the fdlibm code.
math-CPPFLAGS += -D__NO_MATH_INLINES -D__LIBC_INTERNAL_MATH_INLINES

ifneq ($(long-double-fcts),yes)
# The `double' and `long double' types are the same on this machine.
# We won't compile the `long double' code at all.  Tell the `double' code
# to define aliases for the `FUNCl' names.
math-CPPFLAGS += -DNO_LONG_DOUBLE
endif

# These files quiet sNaNs in a way that is optimized away without
# -fsignaling-nans.
CFLAGS-s_modf.c += -fsignaling-nans
CFLAGS-s_modff.c += -fsignaling-nans
CFLAGS-s_modfl.c += -fsignaling-nans
CFLAGS-s_modff128.c += -fsignaling-nans

$(addprefix $(objpfx),\
	    $(filter-out $(tests-static) $(libm-tests-vector),\
			 $(tests) $(tests-internal))): $(libm)
$(addprefix $(objpfx),$(tests-static)): $(objpfx)libm.a
define o-iterator-doit
$(foreach f,$($(o)-funcs),\
	    $(objpfx)test-$(o)-$(f)): $(objpfx)test-$(o)-wrappers.o \
				      $(libm) $(libmvec)
endef
object-suffixes-left := $(libmvec-tests)
include $(o-iterator)

$(objpfx)test-fenv-tls: $(shared-thread-library)
