blob: f5b5d3ba4696b5c8861bbb03217342c598350e00 [file] [log] [blame]
Szabolcs Nagy78892282018-04-24 17:10:05 +01001# Makefile - requires GNU make
2#
3# Copyright (c) 2018, Arm Limited.
Szabolcs Nagy11253b02018-11-12 11:10:57 +00004# SPDX-License-Identifier: MIT
Szabolcs Nagy78892282018-04-24 17:10:05 +01005
6srcdir = .
7prefix = /usr
8bindir = $(prefix)/bin
9libdir = $(prefix)/lib
10includedir = $(prefix)/include
11
Szabolcs Nagy6752e612018-04-25 10:05:07 +010012MATH_SRCS = $(wildcard $(srcdir)/math/*.[cS])
Szabolcs Nagy78892282018-04-24 17:10:05 +010013MATH_BASE = $(basename $(MATH_SRCS))
14MATH_OBJS = $(MATH_BASE:$(srcdir)/%=build/%.o)
15RTEST_SRCS = $(wildcard $(srcdir)/test/rtest/*.[cS])
16RTEST_BASE = $(basename $(RTEST_SRCS))
17RTEST_OBJS = $(RTEST_BASE:$(srcdir)/%=build/%.o)
Szabolcs Nagy764b4bf2018-06-08 19:08:48 +010018ALL_OBJS = $(MATH_OBJS) \
19 $(RTEST_OBJS) \
20 build/test/mathtest.o \
21 build/test/mathbench.o \
Szabolcs Nagy78892282018-04-24 17:10:05 +010022
23INCLUDES = $(wildcard $(srcdir)/math/include/*.h)
24ALL_INCLUDES = $(INCLUDES:$(srcdir)/math/%=build/%)
25
26ALL_LIBS = \
27 build/lib/libmathlib.so \
28 build/lib/libmathlib.a \
29
30ALL_TOOLS = \
Szabolcs Nagy78892282018-04-24 17:10:05 +010031 build/bin/mathtest \
Szabolcs Nagy764b4bf2018-06-08 19:08:48 +010032 build/bin/mathbench \
33 build/bin/mathbench_libc \
Szabolcs Nagy78892282018-04-24 17:10:05 +010034
Szabolcs Nagyc5a80422018-07-11 10:01:24 +010035HOST_TOOLS = \
36 build/bin/rtest \
37
38TESTS = $(wildcard $(srcdir)/test/testcases/directed/*.tst)
39RTESTS = $(wildcard $(srcdir)/test/testcases/random/*.tst)
Szabolcs Nagy78892282018-04-24 17:10:05 +010040
41# Configure these in config.mk, do not make changes in this file.
42HOST_CC = cc
Szabolcs Nagya2027462018-07-27 11:14:11 +010043HOST_CFLAGS = -std=c99 -O2
44HOST_LDFLAGS =
45HOST_LDLIBS = -lm -lmpfr -lmpc
Szabolcs Nagy78892282018-04-24 17:10:05 +010046EMULATOR =
47CFLAGS = -std=c99 -O2
48LDFLAGS =
Szabolcs Nagya2027462018-07-27 11:14:11 +010049LDLIBS = -lm
Szabolcs Nagy78892282018-04-24 17:10:05 +010050CPPFLAGS =
51AR = $(CROSS_COMPILE)ar
52RANLIB = $(CROSS_COMPILE)ranlib
53INSTALL = install
54
55CFLAGS_ALL = -I$(srcdir)/math/include $(CPPFLAGS) $(CFLAGS)
56LDFLAGS_ALL = $(LDFLAGS)
57
58-include config.mk
59
60all: $(ALL_LIBS) $(ALL_TOOLS) $(ALL_INCLUDES)
61
Szabolcs Nagyc5a80422018-07-11 10:01:24 +010062DIRS = $(dir $(ALL_LIBS) $(ALL_TOOLS) $(ALL_OBJS) $(ALL_INCLUDES))
Szabolcs Nagy78892282018-04-24 17:10:05 +010063ALL_DIRS = $(sort $(DIRS:%/=%))
64
Szabolcs Nagyc5a80422018-07-11 10:01:24 +010065$(ALL_LIBS) $(ALL_TOOLS) $(ALL_OBJS) $(ALL_OBJS:%.o=%.os) $(ALL_INCLUDES): | $(ALL_DIRS)
Szabolcs Nagy78892282018-04-24 17:10:05 +010066
67$(ALL_DIRS):
68 mkdir -p $@
69
70$(ALL_OBJS:%.o=%.os): CFLAGS_ALL += -fPIC
71
72$(RTEST_OBJS): CC = $(HOST_CC)
Szabolcs Nagya2027462018-07-27 11:14:11 +010073$(RTEST_OBJS): CFLAGS_ALL = $(HOST_CFLAGS)
Szabolcs Nagy78892282018-04-24 17:10:05 +010074
Szabolcs Nagy21f63562018-06-12 16:43:34 +010075build/test/mathtest.o: CFLAGS_ALL += -fmath-errno
76
Szabolcs Nagy78892282018-04-24 17:10:05 +010077build/%.o: $(srcdir)/%.S
78 $(CC) $(CFLAGS_ALL) -c -o $@ $<
79
80build/%.o: $(srcdir)/%.c
81 $(CC) $(CFLAGS_ALL) -c -o $@ $<
82
83build/%.os: $(srcdir)/%.S
84 $(CC) $(CFLAGS_ALL) -c -o $@ $<
85
86build/%.os: $(srcdir)/%.c
87 $(CC) $(CFLAGS_ALL) -c -o $@ $<
88
89build/lib/libmathlib.so: $(MATH_OBJS:%.o=%.os)
90 $(CC) $(CFLAGS_ALL) $(LDFLAGS_ALL) -shared -o $@ $^
91
92build/lib/libmathlib.a: $(MATH_OBJS)
93 rm -f $@
94 $(AR) rc $@ $^
95 $(RANLIB) $@
96
97build/bin/rtest: $(RTEST_OBJS)
Szabolcs Nagya2027462018-07-27 11:14:11 +010098 $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ $^ $(HOST_LDLIBS)
Szabolcs Nagy78892282018-04-24 17:10:05 +010099
100build/bin/mathtest: build/test/mathtest.o build/lib/libmathlib.a
Szabolcs Nagya2027462018-07-27 11:14:11 +0100101 $(CC) $(CFLAGS_ALL) $(LDFLAGS_ALL) -static -o $@ $^ $(LDLIBS)
Szabolcs Nagy78892282018-04-24 17:10:05 +0100102
Szabolcs Nagy764b4bf2018-06-08 19:08:48 +0100103build/bin/mathbench: build/test/mathbench.o build/lib/libmathlib.a
Szabolcs Nagya2027462018-07-27 11:14:11 +0100104 $(CC) $(CFLAGS_ALL) $(LDFLAGS_ALL) -static -o $@ $^ $(LDLIBS)
Szabolcs Nagy764b4bf2018-06-08 19:08:48 +0100105
106build/bin/mathbench_libc: build/test/mathbench.o
Szabolcs Nagya2027462018-07-27 11:14:11 +0100107 $(CC) $(CFLAGS_ALL) $(LDFLAGS_ALL) -static -o $@ $^ $(LDLIBS)
Szabolcs Nagy764b4bf2018-06-08 19:08:48 +0100108
Szabolcs Nagy78892282018-04-24 17:10:05 +0100109build/include/%.h: $(srcdir)/math/include/%.h
110 cp $< $@
111
Szabolcs Nagy78892282018-04-24 17:10:05 +0100112clean:
113 rm -rf build
114
115distclean: clean
116 rm -f config.mk
117
118$(DESTDIR)$(bindir)/%: build/bin/%
119 $(INSTALL) -D $< $@
120
121$(DESTDIR)$(libdir)/%.so: build/lib/%.so
122 $(INSTALL) -D $< $@
123
124$(DESTDIR)$(libdir)/%: build/lib/%
125 $(INSTALL) -m 644 -D $< $@
126
127$(DESTDIR)$(includedir)/%: build/include/%
128 $(INSTALL) -m 644 -D $< $@
129
130install-tools: $(ALL_TOOLS:build/bin/%=$(DESTDIR)$(bindir)/%)
131
132install-libs: $(ALL_LIBS:build/lib/%=$(DESTDIR)$(libdir)/%)
133
134install-headers: $(ALL_INCLUDES:build/include/%=$(DESTDIR)$(includedir)/%)
135
136install: install-libs install-headers
137
Szabolcs Nagyc5a80422018-07-11 10:01:24 +0100138check: $(ALL_TOOLS)
139 cat $(TESTS) | $(EMULATOR) build/bin/mathtest
Szabolcs Nagy78892282018-04-24 17:10:05 +0100140
Szabolcs Nagyc5a80422018-07-11 10:01:24 +0100141rcheck: $(HOST_TOOLS) $(ALL_TOOLS)
142 cat $(RTESTS) | build/bin/rtest | $(EMULATOR) build/bin/mathtest
143
144check-all: check rcheck
145
146.PHONY: all clean distclean install install-tools install-libs install-headers check rcheck check-all