blob: 3b841ab71955cc69efff77a1e1fee21938422371 [file] [log] [blame]
Szabolcs Nagy0af9fce2019-07-18 10:21:43 +01001# Makefile fragment - requires GNU make
2#
3# Copyright (c) 2019, Arm Limited.
4# SPDX-License-Identifier: MIT
5
Szabolcs Nagy1fd2aaa2019-11-20 18:05:06 +00006S := $(srcdir)/math
7B := build/math
Szabolcs Nagy0af9fce2019-07-18 10:21:43 +01008
Szabolcs Nagy1fd2aaa2019-11-20 18:05:06 +00009math-lib-srcs := $(wildcard $(S)/*.[cS])
10math-test-srcs := \
11 $(S)/test/mathtest.c \
12 $(S)/test/mathbench.c \
13 $(S)/test/ulp.c \
14
15math-test-host-srcs := $(wildcard $(S)/test/rtest/*.[cS])
16
17math-includes := $(patsubst $(S)/%,build/%,$(wildcard $(S)/include/*.h))
Szabolcs Nagy0af9fce2019-07-18 10:21:43 +010018
19math-libs := \
20 build/lib/libmathlib.so \
21 build/lib/libmathlib.a \
22
23math-tools := \
24 build/bin/mathtest \
25 build/bin/mathbench \
26 build/bin/mathbench_libc \
27 build/bin/runulp.sh \
28 build/bin/ulp \
29
30math-host-tools := \
31 build/bin/rtest \
32
Szabolcs Nagy1fd2aaa2019-11-20 18:05:06 +000033math-lib-objs := $(patsubst $(S)/%,$(B)/%.o,$(basename $(math-lib-srcs)))
34math-test-objs := $(patsubst $(S)/%,$(B)/%.o,$(basename $(math-test-srcs)))
35math-host-objs := $(patsubst $(S)/%,$(B)/%.o,$(basename $(math-test-host-srcs)))
36math-target-objs := $(math-lib-objs) $(math-test-objs)
37math-objs := $(math-target-objs) $(math-target-objs:%.o=%.os) $(math-host-objs)
Szabolcs Nagy0af9fce2019-07-18 10:21:43 +010038
Szabolcs Nagy1fd2aaa2019-11-20 18:05:06 +000039math-files := \
40 $(math-objs) \
41 $(math-libs) \
42 $(math-tools) \
43 $(math-host-tools) \
44 $(math-includes) \
Szabolcs Nagy0af9fce2019-07-18 10:21:43 +010045
46all-math: $(math-libs) $(math-tools) $(math-includes)
47
Szabolcs Nagy1fd2aaa2019-11-20 18:05:06 +000048$(math-objs): $(math-includes)
49$(math-objs): CFLAGS_ALL += $(math-cflags)
50$(B)/test/mathtest.o: CFLAGS_ALL += -fmath-errno
51$(math-host-objs): CC = $(HOST_CC)
52$(math-host-objs): CFLAGS_ALL = $(HOST_CFLAGS)
Szabolcs Nagy0af9fce2019-07-18 10:21:43 +010053
Szabolcs Nagy1fd2aaa2019-11-20 18:05:06 +000054$(B)/test/ulp.o: $(S)/test/ulp.h
Szabolcs Nagy0af9fce2019-07-18 10:21:43 +010055
56build/lib/libmathlib.so: $(math-lib-objs:%.o=%.os)
Szabolcs Nagy1fd2aaa2019-11-20 18:05:06 +000057 $(CC) $(CFLAGS_ALL) $(LDFLAGS) -shared -o $@ $^
Szabolcs Nagy0af9fce2019-07-18 10:21:43 +010058
59build/lib/libmathlib.a: $(math-lib-objs)
60 rm -f $@
61 $(AR) rc $@ $^
62 $(RANLIB) $@
63
64$(math-host-tools): HOST_LDLIBS += -lm -lmpfr -lmpc
Szabolcs Nagy1fd2aaa2019-11-20 18:05:06 +000065$(math-tools): LDLIBS += $(math-ldlibs) -lm
Szabolcs Nagy0af9fce2019-07-18 10:21:43 +010066
Szabolcs Nagy1fd2aaa2019-11-20 18:05:06 +000067build/bin/rtest: $(math-host-objs)
Szabolcs Nagy0af9fce2019-07-18 10:21:43 +010068 $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ $^ $(HOST_LDLIBS)
69
Szabolcs Nagy1fd2aaa2019-11-20 18:05:06 +000070build/bin/mathtest: $(B)/test/mathtest.o build/lib/libmathlib.a
71 $(CC) $(CFLAGS_ALL) $(LDFLAGS) -static -o $@ $^ $(LDLIBS)
Szabolcs Nagy0af9fce2019-07-18 10:21:43 +010072
Szabolcs Nagy1fd2aaa2019-11-20 18:05:06 +000073build/bin/mathbench: $(B)/test/mathbench.o build/lib/libmathlib.a
74 $(CC) $(CFLAGS_ALL) $(LDFLAGS) -static -o $@ $^ $(LDLIBS)
Szabolcs Nagy0af9fce2019-07-18 10:21:43 +010075
Szabolcs Nagya88f3f62019-10-14 11:55:14 +010076# This is not ideal, but allows custom symbols in mathbench to get resolved.
Szabolcs Nagy1fd2aaa2019-11-20 18:05:06 +000077build/bin/mathbench_libc: $(B)/test/mathbench.o build/lib/libmathlib.a
78 $(CC) $(CFLAGS_ALL) $(LDFLAGS) -static -o $@ $< $(LDLIBS) -lc build/lib/libmathlib.a -lm
Szabolcs Nagy0af9fce2019-07-18 10:21:43 +010079
Szabolcs Nagy1fd2aaa2019-11-20 18:05:06 +000080build/bin/ulp: $(B)/test/ulp.o build/lib/libmathlib.a
81 $(CC) $(CFLAGS_ALL) $(LDFLAGS) -static -o $@ $^ $(LDLIBS)
Szabolcs Nagy0af9fce2019-07-18 10:21:43 +010082
Szabolcs Nagy1fd2aaa2019-11-20 18:05:06 +000083build/include/%.h: $(S)/include/%.h
Szabolcs Nagy0af9fce2019-07-18 10:21:43 +010084 cp $< $@
85
Szabolcs Nagy1fd2aaa2019-11-20 18:05:06 +000086build/bin/%.sh: $(S)/test/%.sh
Szabolcs Nagy0af9fce2019-07-18 10:21:43 +010087 cp $< $@
88
Szabolcs Nagy1fd2aaa2019-11-20 18:05:06 +000089math-tests := $(wildcard $(S)/test/testcases/directed/*.tst)
90math-rtests := $(wildcard $(S)/test/testcases/random/*.tst)
91
Szabolcs Nagy0af9fce2019-07-18 10:21:43 +010092check-math-test: $(math-tools)
Szabolcs Nagy1fd2aaa2019-11-20 18:05:06 +000093 cat $(math-tests) | $(EMULATOR) build/bin/mathtest $(math-testflags)
Szabolcs Nagy0af9fce2019-07-18 10:21:43 +010094
95check-math-rtest: $(math-host-tools) $(math-tools)
Szabolcs Nagy1fd2aaa2019-11-20 18:05:06 +000096 cat $(math-rtests) | build/bin/rtest | $(EMULATOR) build/bin/mathtest $(math-testflags)
Szabolcs Nagy0af9fce2019-07-18 10:21:43 +010097
98check-math-ulp: $(math-tools)
Szabolcs Nagy1fd2aaa2019-11-20 18:05:06 +000099 ULPFLAGS="$(math-ulpflags)" build/bin/runulp.sh $(EMULATOR)
Szabolcs Nagy0af9fce2019-07-18 10:21:43 +0100100
101check-math: check-math-test check-math-rtest check-math-ulp
102
Szabolcs Nagy1fd2aaa2019-11-20 18:05:06 +0000103install-math: \
104 $(math-libs:build/lib/%=$(DESTDIR)$(libdir)/%) \
105 $(math-includes:build/include/%=$(DESTDIR)$(includedir)/%)
106
107clean-math:
108 rm -f $(math-files)
109
110.PHONY: all-math check-math-test check-math-rtest check-math-ulp check-math install-math clean-math