Szabolcs Nagy | 7889228 | 2018-04-24 17:10:05 +0100 | [diff] [blame] | 1 | # Makefile - requires GNU make |
| 2 | # |
| 3 | # Copyright (c) 2018, Arm Limited. |
Szabolcs Nagy | 11253b0 | 2018-11-12 11:10:57 +0000 | [diff] [blame] | 4 | # SPDX-License-Identifier: MIT |
Szabolcs Nagy | 7889228 | 2018-04-24 17:10:05 +0100 | [diff] [blame] | 5 | |
| 6 | srcdir = . |
| 7 | prefix = /usr |
| 8 | bindir = $(prefix)/bin |
| 9 | libdir = $(prefix)/lib |
| 10 | includedir = $(prefix)/include |
| 11 | |
Szabolcs Nagy | 6752e61 | 2018-04-25 10:05:07 +0100 | [diff] [blame] | 12 | MATH_SRCS = $(wildcard $(srcdir)/math/*.[cS]) |
Szabolcs Nagy | 7889228 | 2018-04-24 17:10:05 +0100 | [diff] [blame] | 13 | MATH_BASE = $(basename $(MATH_SRCS)) |
| 14 | MATH_OBJS = $(MATH_BASE:$(srcdir)/%=build/%.o) |
| 15 | RTEST_SRCS = $(wildcard $(srcdir)/test/rtest/*.[cS]) |
| 16 | RTEST_BASE = $(basename $(RTEST_SRCS)) |
| 17 | RTEST_OBJS = $(RTEST_BASE:$(srcdir)/%=build/%.o) |
Szabolcs Nagy | 764b4bf | 2018-06-08 19:08:48 +0100 | [diff] [blame] | 18 | ALL_OBJS = $(MATH_OBJS) \ |
| 19 | $(RTEST_OBJS) \ |
| 20 | build/test/mathtest.o \ |
| 21 | build/test/mathbench.o \ |
Szabolcs Nagy | 7889228 | 2018-04-24 17:10:05 +0100 | [diff] [blame] | 22 | |
| 23 | INCLUDES = $(wildcard $(srcdir)/math/include/*.h) |
| 24 | ALL_INCLUDES = $(INCLUDES:$(srcdir)/math/%=build/%) |
| 25 | |
| 26 | ALL_LIBS = \ |
| 27 | build/lib/libmathlib.so \ |
| 28 | build/lib/libmathlib.a \ |
| 29 | |
| 30 | ALL_TOOLS = \ |
Szabolcs Nagy | 7889228 | 2018-04-24 17:10:05 +0100 | [diff] [blame] | 31 | build/bin/mathtest \ |
Szabolcs Nagy | 764b4bf | 2018-06-08 19:08:48 +0100 | [diff] [blame] | 32 | build/bin/mathbench \ |
| 33 | build/bin/mathbench_libc \ |
Szabolcs Nagy | 7889228 | 2018-04-24 17:10:05 +0100 | [diff] [blame] | 34 | |
Szabolcs Nagy | c5a8042 | 2018-07-11 10:01:24 +0100 | [diff] [blame] | 35 | HOST_TOOLS = \ |
| 36 | build/bin/rtest \ |
| 37 | |
| 38 | TESTS = $(wildcard $(srcdir)/test/testcases/directed/*.tst) |
| 39 | RTESTS = $(wildcard $(srcdir)/test/testcases/random/*.tst) |
Szabolcs Nagy | 7889228 | 2018-04-24 17:10:05 +0100 | [diff] [blame] | 40 | |
| 41 | # Configure these in config.mk, do not make changes in this file. |
| 42 | HOST_CC = cc |
Szabolcs Nagy | a202746 | 2018-07-27 11:14:11 +0100 | [diff] [blame] | 43 | HOST_CFLAGS = -std=c99 -O2 |
| 44 | HOST_LDFLAGS = |
| 45 | HOST_LDLIBS = -lm -lmpfr -lmpc |
Szabolcs Nagy | 7889228 | 2018-04-24 17:10:05 +0100 | [diff] [blame] | 46 | EMULATOR = |
| 47 | CFLAGS = -std=c99 -O2 |
| 48 | LDFLAGS = |
Szabolcs Nagy | a202746 | 2018-07-27 11:14:11 +0100 | [diff] [blame] | 49 | LDLIBS = -lm |
Szabolcs Nagy | 7889228 | 2018-04-24 17:10:05 +0100 | [diff] [blame] | 50 | CPPFLAGS = |
| 51 | AR = $(CROSS_COMPILE)ar |
| 52 | RANLIB = $(CROSS_COMPILE)ranlib |
| 53 | INSTALL = install |
| 54 | |
| 55 | CFLAGS_ALL = -I$(srcdir)/math/include $(CPPFLAGS) $(CFLAGS) |
| 56 | LDFLAGS_ALL = $(LDFLAGS) |
| 57 | |
| 58 | -include config.mk |
| 59 | |
| 60 | all: $(ALL_LIBS) $(ALL_TOOLS) $(ALL_INCLUDES) |
| 61 | |
Szabolcs Nagy | c5a8042 | 2018-07-11 10:01:24 +0100 | [diff] [blame] | 62 | DIRS = $(dir $(ALL_LIBS) $(ALL_TOOLS) $(ALL_OBJS) $(ALL_INCLUDES)) |
Szabolcs Nagy | 7889228 | 2018-04-24 17:10:05 +0100 | [diff] [blame] | 63 | ALL_DIRS = $(sort $(DIRS:%/=%)) |
| 64 | |
Szabolcs Nagy | c5a8042 | 2018-07-11 10:01:24 +0100 | [diff] [blame] | 65 | $(ALL_LIBS) $(ALL_TOOLS) $(ALL_OBJS) $(ALL_OBJS:%.o=%.os) $(ALL_INCLUDES): | $(ALL_DIRS) |
Szabolcs Nagy | 7889228 | 2018-04-24 17:10:05 +0100 | [diff] [blame] | 66 | |
| 67 | $(ALL_DIRS): |
| 68 | mkdir -p $@ |
| 69 | |
| 70 | $(ALL_OBJS:%.o=%.os): CFLAGS_ALL += -fPIC |
| 71 | |
| 72 | $(RTEST_OBJS): CC = $(HOST_CC) |
Szabolcs Nagy | a202746 | 2018-07-27 11:14:11 +0100 | [diff] [blame] | 73 | $(RTEST_OBJS): CFLAGS_ALL = $(HOST_CFLAGS) |
Szabolcs Nagy | 7889228 | 2018-04-24 17:10:05 +0100 | [diff] [blame] | 74 | |
Szabolcs Nagy | 21f6356 | 2018-06-12 16:43:34 +0100 | [diff] [blame] | 75 | build/test/mathtest.o: CFLAGS_ALL += -fmath-errno |
| 76 | |
Szabolcs Nagy | 7889228 | 2018-04-24 17:10:05 +0100 | [diff] [blame] | 77 | build/%.o: $(srcdir)/%.S |
| 78 | $(CC) $(CFLAGS_ALL) -c -o $@ $< |
| 79 | |
| 80 | build/%.o: $(srcdir)/%.c |
| 81 | $(CC) $(CFLAGS_ALL) -c -o $@ $< |
| 82 | |
| 83 | build/%.os: $(srcdir)/%.S |
| 84 | $(CC) $(CFLAGS_ALL) -c -o $@ $< |
| 85 | |
| 86 | build/%.os: $(srcdir)/%.c |
| 87 | $(CC) $(CFLAGS_ALL) -c -o $@ $< |
| 88 | |
| 89 | build/lib/libmathlib.so: $(MATH_OBJS:%.o=%.os) |
| 90 | $(CC) $(CFLAGS_ALL) $(LDFLAGS_ALL) -shared -o $@ $^ |
| 91 | |
| 92 | build/lib/libmathlib.a: $(MATH_OBJS) |
| 93 | rm -f $@ |
| 94 | $(AR) rc $@ $^ |
| 95 | $(RANLIB) $@ |
| 96 | |
| 97 | build/bin/rtest: $(RTEST_OBJS) |
Szabolcs Nagy | a202746 | 2018-07-27 11:14:11 +0100 | [diff] [blame] | 98 | $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ $^ $(HOST_LDLIBS) |
Szabolcs Nagy | 7889228 | 2018-04-24 17:10:05 +0100 | [diff] [blame] | 99 | |
| 100 | build/bin/mathtest: build/test/mathtest.o build/lib/libmathlib.a |
Szabolcs Nagy | a202746 | 2018-07-27 11:14:11 +0100 | [diff] [blame] | 101 | $(CC) $(CFLAGS_ALL) $(LDFLAGS_ALL) -static -o $@ $^ $(LDLIBS) |
Szabolcs Nagy | 7889228 | 2018-04-24 17:10:05 +0100 | [diff] [blame] | 102 | |
Szabolcs Nagy | 764b4bf | 2018-06-08 19:08:48 +0100 | [diff] [blame] | 103 | build/bin/mathbench: build/test/mathbench.o build/lib/libmathlib.a |
Szabolcs Nagy | a202746 | 2018-07-27 11:14:11 +0100 | [diff] [blame] | 104 | $(CC) $(CFLAGS_ALL) $(LDFLAGS_ALL) -static -o $@ $^ $(LDLIBS) |
Szabolcs Nagy | 764b4bf | 2018-06-08 19:08:48 +0100 | [diff] [blame] | 105 | |
| 106 | build/bin/mathbench_libc: build/test/mathbench.o |
Szabolcs Nagy | a202746 | 2018-07-27 11:14:11 +0100 | [diff] [blame] | 107 | $(CC) $(CFLAGS_ALL) $(LDFLAGS_ALL) -static -o $@ $^ $(LDLIBS) |
Szabolcs Nagy | 764b4bf | 2018-06-08 19:08:48 +0100 | [diff] [blame] | 108 | |
Szabolcs Nagy | 7889228 | 2018-04-24 17:10:05 +0100 | [diff] [blame] | 109 | build/include/%.h: $(srcdir)/math/include/%.h |
| 110 | cp $< $@ |
| 111 | |
Szabolcs Nagy | 7889228 | 2018-04-24 17:10:05 +0100 | [diff] [blame] | 112 | clean: |
| 113 | rm -rf build |
| 114 | |
| 115 | distclean: 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 | |
| 130 | install-tools: $(ALL_TOOLS:build/bin/%=$(DESTDIR)$(bindir)/%) |
| 131 | |
| 132 | install-libs: $(ALL_LIBS:build/lib/%=$(DESTDIR)$(libdir)/%) |
| 133 | |
| 134 | install-headers: $(ALL_INCLUDES:build/include/%=$(DESTDIR)$(includedir)/%) |
| 135 | |
| 136 | install: install-libs install-headers |
| 137 | |
Szabolcs Nagy | c5a8042 | 2018-07-11 10:01:24 +0100 | [diff] [blame] | 138 | check: $(ALL_TOOLS) |
| 139 | cat $(TESTS) | $(EMULATOR) build/bin/mathtest |
Szabolcs Nagy | 7889228 | 2018-04-24 17:10:05 +0100 | [diff] [blame] | 140 | |
Szabolcs Nagy | c5a8042 | 2018-07-11 10:01:24 +0100 | [diff] [blame] | 141 | rcheck: $(HOST_TOOLS) $(ALL_TOOLS) |
| 142 | cat $(RTESTS) | build/bin/rtest | $(EMULATOR) build/bin/mathtest |
| 143 | |
| 144 | check-all: check rcheck |
| 145 | |
| 146 | .PHONY: all clean distclean install install-tools install-libs install-headers check rcheck check-all |