Lines Matching +full:sig +full:- +full:dir

1 # Makefile fragment - requires GNU make
3 # Copyright (c) 2019-2024, Arm Limited.
4 # SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception
13 $(warning WARNING: Double-precision ULP tests will not be usable without MPFR)
16 $(error Can only generate special GLIBC symbols on Linux - please disable USE_GLIBC_ABI)
29 math-src-dir := $(srcdir)/math
30 math-build-dir := build/math
32 math-lib-srcs := $(wildcard $(math-src-dir)/*.[cS])
33 math-lib-srcs += $(wildcard $(math-src-dir)/$(ARCH)/*.[cS])
36 math-lib-srcs += $(wildcard $(math-src-dir)/$(ARCH)/*/*.[cS])
42 math-lib-srcs += $(wildcard $(math-src-dir)/$(ARCH)/experimental/*/*.[cS])
44 math-lib-srcs += $(wildcard $(math-src-dir)/$(ARCH)/experimental/*.[cS])
48 math-lib-srcs := $(filter-out $(math-src-dir)/aarch64/experimental/%, $(math-lib-srcs))
51 math-test-srcs := \
52 $(math-src-dir)/test/mathtest.c \
53 $(math-src-dir)/test/mathbench.c \
54 $(math-src-dir)/test/ulp.c \
56 math-test-host-srcs := $(wildcard $(math-src-dir)/test/rtest/*.[cS])
58 math-includes := $(patsubst $(math-src-dir)/%,build/%,$(wildcard $(math-src-dir)/include/*.h))
60 math-libs := \
64 math-tools := \
71 math-host-tools := \
74 math-lib-objs := $(patsubst $(math-src-dir)/%,$(math-build-dir)/%.o,$(basename $(math-lib-srcs)))
75 math-test-objs := $(patsubst $(math-src-dir)/%,$(math-build-dir)/%.o,$(basename $(math-test-srcs)))
76 math-host-objs := $(patsubst $(math-src-dir)/%,$(math-build-dir)/%.o,$(basename $(math-test-host-sr…
77 math-target-objs := $(math-lib-objs) $(math-test-objs)
78 math-objs := $(math-target-objs) $(math-target-objs:%.o=%.os) $(math-host-objs)
80 math-files := \
81 $(math-objs) \
82 $(math-libs) \
83 $(math-tools) \
84 $(math-host-tools) \
85 $(math-includes)
87 all-math: $(math-libs) $(math-tools) $(math-includes)
89 $(math-objs): $(math-includes)
90 $(math-objs): CFLAGS_ALL += $(math-cflags)
91 $(math-build-dir)/test/mathtest.o: CFLAGS_ALL += -fmath-errno
92 $(math-host-objs): CC = $(HOST_CC)
93 $(math-host-objs): CFLAGS_ALL = $(HOST_CFLAGS)
95 # Add include path for experimental routines so they can share helpers with non-experimental
96 $(math-build-dir)/aarch64/experimental/advsimd/%: CFLAGS_ALL += -I$(math-src-dir)/aarch64/advsimd
97 $(math-build-dir)/aarch64/experimental/sve/%: CFLAGS_ALL += -I$(math-src-dir)/aarch64/sve
99 $(math-objs): CFLAGS_ALL += -I$(math-src-dir)
101 ulp-funcs-dir = build/test/ulp-funcs/
102 ulp-wrappers-dir = build/test/ulp-wrappers/
103 mathbench-funcs-dir = build/test/mathbench-funcs/
104 test-sig-dirs = $(ulp-funcs-dir) $(ulp-wrappers-dir) $(mathbench-funcs-dir)
105 build/include/test $(test-sig-dirs) $(addsuffix /$(ARCH),$(test-sig-dirs)) $(addsuffix /aarch64/exp…
106 …addsuffix /aarch64/experimental/advsimd,$(test-sig-dirs)) $(addsuffix /aarch64/experimental/sve,$(…
107 $(addsuffix /aarch64/advsimd,$(test-sig-dirs)) $(addsuffix /aarch64/sve,$(test-sig-dirs)):
108 mkdir -p $@
110 ulp-funcs = $(patsubst $(math-src-dir)/%,$(ulp-funcs-dir)/%,$(basename $(math-lib-srcs)))
111 ulp-wrappers = $(patsubst $(math-src-dir)/%,$(ulp-wrappers-dir)/%,$(basename $(math-lib-srcs)))
112 mathbench-funcs = $(patsubst $(math-src-dir)/%,$(mathbench-funcs-dir)/%,$(basename $(math-lib-srcs)…
116 ulp-funcs := $(foreach a,$(ulp-funcs),$(if $(findstring sve,$a),,$a))
117 ulp-wrappers := $(foreach a,$(ulp-wrappers),$(if $(findstring sve,$a),,$a))
118 mathbench-funcs := $(foreach a,$(mathbench-funcs),$(if $(findstring sve,$a),,$a))
122 $1/aarch64/experimental/sve/%.i: EXTRA_INC = -I$(math-src-dir)/aarch64/sve
123 $1/aarch64/experimental/advsimd/%.i: EXTRA_INC = -I$(math-src-dir)/aarch64/advsimd
124 $1/%.i: $(math-src-dir)/%.c | $$$$(@D)
125 $(CC) $$< $(math-cflags) -I$(math-src-dir)/include -I$(math-src-dir) $$(EXTRA_INC) -D$2 -E -o $$@
127 { grep TEST_SIG $$< || true; } | cut -f 2- -d ' ' > $$@
130 $(eval $(call emit_sig,$(ulp-funcs-dir),EMIT_ULP_FUNCS))
131 $(eval $(call emit_sig,$(ulp-wrappers-dir),EMIT_ULP_WRAPPERS))
132 $(eval $(call emit_sig,$(mathbench-funcs-dir),EMIT_MATHBENCH_FUNCS))
134 ulp-funcs-gen = build/include/test/ulp_funcs_gen.h
135 ulp-wrappers-gen = build/include/test/ulp_wrappers_gen.h
136 mathbench-funcs-gen = build/include/test/mathbench_funcs_gen.h
137 math-tools-autogen-headers = $(ulp-funcs-gen) $(ulp-wrappers-gen) $(mathbench-funcs-gen)
139 $(ulp-funcs-gen): $(ulp-funcs) | $$(@D)
140 $(ulp-wrappers-gen): $(ulp-wrappers) | $$(@D)
141 $(mathbench-funcs-gen): $(mathbench-funcs) | $$(@D)
143 $(math-tools-autogen-headers): | $$(@D)
144 cat $^ | sort -u > $@
146 $(math-build-dir)/test/mathbench.o: $(mathbench-funcs-gen)
147 $(math-build-dir)/test/ulp.o: $(math-src-dir)/test/ulp.h $(ulp-funcs-gen) $(ulp-wrappers-gen)
149 build/lib/libmathlib.so: $(math-lib-objs:%.o=%.os)
150 $(CC) $(CFLAGS_ALL) $(LDFLAGS) -shared -o $@ $^
152 build/lib/libmathlib.a: $(math-lib-objs)
153 rm -f $@
157 $(math-host-tools): HOST_LDLIBS += $(libm-libs) $(mpfr-libs) $(mpc-libs)
158 $(math-tools): LDLIBS += $(math-ldlibs) $(libm-libs)
161 $(math-tools): LDFLAGS += -static
164 build/bin/rtest: $(math-host-objs)
165 $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ $^ $(HOST_LDLIBS)
167 build/bin/mathtest: $(math-build-dir)/test/mathtest.o build/lib/libmathlib.a
168 $(CC) $(CFLAGS_ALL) $(LDFLAGS) -o $@ $^ $(libm-libs)
170 build/bin/mathbench: $(math-build-dir)/test/mathbench.o build/lib/libmathlib.a
171 $(CC) $(CFLAGS_ALL) $(LDFLAGS) -o $@ $^ $(libm-libs)
174 build/bin/mathbench_libc: $(math-build-dir)/test/mathbench.o build/lib/libmathlib.a
175 …$(CC) $(CFLAGS_ALL) $(LDFLAGS) -o $@ $< $(libm-libs) $(libc-libs) build/lib/libmathlib.a $(libm-li…
177 build/bin/ulp: $(math-build-dir)/test/ulp.o build/lib/libmathlib.a
178 $(CC) $(CFLAGS_ALL) $(LDFLAGS) -o $@ $^ $(LDLIBS)
180 build/include/%.h: $(math-src-dir)/include/%.h
183 build/bin/%.sh: $(math-src-dir)/test/%.sh
186 math-tests := $(wildcard $(math-src-dir)/test/testcases/directed/*.tst)
188 math-tests := $(filter-out %exp10.tst, $(math-tests))
190 math-rtests := $(wildcard $(math-src-dir)/test/testcases/random/*.tst)
192 check-math-test: $(math-tools)
193 cat $(math-tests) | $(EMULATOR) build/bin/mathtest $(math-testflags)
195 check-math-rtest: $(math-host-tools) $(math-tools)
196 cat $(math-rtests) | build/bin/rtest | $(EMULATOR) build/bin/mathtest $(math-testflags)
198 ulp-input-dir = $(math-build-dir)/test/inputs
199 $(ulp-input-dir) $(ulp-input-dir)/$(ARCH) $(ulp-input-dir)/aarch64/sve $(ulp-input-dir)/aarch64/adv…
200 $(ulp-input-dir)/aarch64/experimental $(ulp-input-dir)/aarch64/experimental/advsimd $(ulp-input-dir
201 mkdir -p $@
203 math-lib-lims = $(patsubst $(math-src-dir)/%.c,$(ulp-input-dir)/%.ulp,$(math-lib-srcs))
204 math-lib-lims-nn = $(patsubst $(math-src-dir)/%.c,$(ulp-input-dir)/%.ulp_nn,$(math-lib-srcs))
205 math-lib-fenvs = $(patsubst $(math-src-dir)/%.c,$(ulp-input-dir)/%.fenv,$(math-lib-srcs))
206 math-lib-itvs = $(patsubst $(math-src-dir)/%.c,$(ulp-input-dir)/%.itv,$(math-lib-srcs))
207 math-lib-cvals = $(patsubst $(math-src-dir)/%.c,$(ulp-input-dir)/%.cval,$(math-lib-srcs))
209 ulp-inputs = $(math-lib-lims) $(math-lib-lims-nn) $(math-lib-fenvs) $(math-lib-itvs) $(math-lib-cva…
210 $(ulp-inputs): CFLAGS = -I$(math-src-dir)/test -I$(math-src-dir)/include -I$(math-src-dir) $(math-c…
211 -I$(math-src-dir)/aarch64/advsimd -I$(math-src-dir)/aarch64/sve
213 $(ulp-input-dir)/%.ulp.i: $(math-src-dir)/%.c | $$(@D)
214 $(CC) $(CFLAGS) $< -E -o $@
216 $(ulp-input-dir)/%.ulp: $(ulp-input-dir)/%.ulp.i
219 $(ulp-input-dir)/%.ulp_nn.i: $(math-src-dir)/%.c | $$(@D)
220 $(CC) $(CFLAGS) $< -E -o $@
222 $(ulp-input-dir)/%.ulp_nn: $(ulp-input-dir)/%.ulp_nn.i
225 $(ulp-input-dir)/%.fenv.i: $(math-src-dir)/%.c | $$(@D)
226 $(CC) $(CFLAGS) $< -E -o $@
228 $(ulp-input-dir)/%.fenv: $(ulp-input-dir)/%.fenv.i
231 $(ulp-input-dir)/%.itv.i: $(math-src-dir)/%.c | $$(@D)
232 $(CC) $(CFLAGS) $< -E -o $@
234 $(ulp-input-dir)/%.itv: $(ulp-input-dir)/%.itv.i
237 $(ulp-input-dir)/%.cval.i: $(math-src-dir)/%.c | $$(@D)
238 $(CC) $(CFLAGS) $< -E -o $@
240 $(ulp-input-dir)/%.cval: $(ulp-input-dir)/%.cval.i
243 ulp-lims = $(ulp-input-dir)/limits
244 $(ulp-lims): $(math-lib-lims)
246 ulp-lims-nn = $(ulp-input-dir)/limits_nn
247 $(ulp-lims-nn): $(math-lib-lims-nn)
249 fenv-exps := $(ulp-input-dir)/fenv
250 $(fenv-exps): $(math-lib-fenvs)
252 generic-itvs = $(ulp-input-dir)/itvs
253 $(generic-itvs): $(filter-out $(ulp-input-dir)/$(ARCH)/%,$(math-lib-itvs))
255 arch-itvs = $(ulp-input-dir)/$(ARCH)/itvs
256 $(arch-itvs): $(filter $(ulp-input-dir)/$(ARCH)/%,$(math-lib-itvs))
258 ulp-cvals := $(ulp-input-dir)/cvals
259 $(ulp-cvals): $(math-lib-cvals)
262 $(ulp-lims) $(ulp-lims-nn) $(fenv-exps) $(arch-itvs) $(generic-itvs) $(ulp-cvals): | $$(@D)
263 sed "s/TEST_[^ ]* //g" $^ | sort -u > $@
265 check-math-ulp: $(ulp-lims) $(ulp-lims-nn)
266 check-math-ulp: $(fenv-exps) $(ulp-cvals)
267 check-math-ulp: $(generic-itvs) $(arch-itvs)
268 check-math-ulp: $(math-tools)
269 ULPFLAGS="$(math-ulpflags)" \
270 LIMITS=../../$(ulp-lims) \
271 ARCH_ITVS=../../$(arch-itvs) \
272 GEN_ITVS=../../$(generic-itvs) \
273 DISABLE_FENV=../../$(fenv-exps) \
274 CVALS=../../$(ulp-cvals) \
281 check-math: check-math-test check-math-rtest check-math-ulp
283 install-math: \
284 $(math-libs:build/lib/%=$(DESTDIR)$(libdir)/%) \
285 $(math-includes:build/include/%=$(DESTDIR)$(includedir)/%)
287 clean-math:
288 rm -f $(math-files)
290 .PHONY: all-math check-math-test check-math-rtest check-math-ulp check-math install-math clean-math