# Makefile - requires GNU make
|
#
|
# Copyright (c) 2018, Arm Limited.
|
# SPDX-License-Identifier: MIT
|
|
srcdir = .
|
prefix = /usr
|
bindir = $(prefix)/bin
|
libdir = $(prefix)/lib
|
includedir = $(prefix)/include
|
|
MATH_SRCS = $(wildcard $(srcdir)/math/*.[cS])
|
MATH_BASE = $(basename $(MATH_SRCS))
|
MATH_OBJS = $(MATH_BASE:$(srcdir)/%=build/%.o)
|
RTEST_SRCS = $(wildcard $(srcdir)/test/rtest/*.[cS])
|
RTEST_BASE = $(basename $(RTEST_SRCS))
|
RTEST_OBJS = $(RTEST_BASE:$(srcdir)/%=build/%.o)
|
ALL_OBJS = $(MATH_OBJS) \
|
$(RTEST_OBJS) \
|
build/test/mathtest.o \
|
build/test/mathbench.o \
|
|
INCLUDES = $(wildcard $(srcdir)/math/include/*.h)
|
ALL_INCLUDES = $(INCLUDES:$(srcdir)/math/%=build/%)
|
|
ALL_LIBS = \
|
build/lib/libmathlib.so \
|
build/lib/libmathlib.a \
|
|
ALL_TOOLS = \
|
build/bin/mathtest \
|
build/bin/mathbench \
|
build/bin/mathbench_libc \
|
|
HOST_TOOLS = \
|
build/bin/rtest \
|
|
TESTS = $(wildcard $(srcdir)/test/testcases/directed/*.tst)
|
RTESTS = $(wildcard $(srcdir)/test/testcases/random/*.tst)
|
|
# Configure these in config.mk, do not make changes in this file.
|
HOST_CC = cc
|
HOST_CFLAGS = -std=c99 -O2
|
HOST_LDFLAGS =
|
HOST_LDLIBS = -lm -lmpfr -lmpc
|
EMULATOR =
|
CFLAGS = -std=c99 -O2
|
LDFLAGS =
|
LDLIBS = -lm
|
CPPFLAGS =
|
AR = $(CROSS_COMPILE)ar
|
RANLIB = $(CROSS_COMPILE)ranlib
|
INSTALL = install
|
|
CFLAGS_ALL = -I$(srcdir)/math/include $(CPPFLAGS) $(CFLAGS)
|
LDFLAGS_ALL = $(LDFLAGS)
|
|
-include config.mk
|
|
all: $(ALL_LIBS) $(ALL_TOOLS) $(ALL_INCLUDES)
|
|
DIRS = $(dir $(ALL_LIBS) $(ALL_TOOLS) $(ALL_OBJS) $(ALL_INCLUDES))
|
ALL_DIRS = $(sort $(DIRS:%/=%))
|
|
$(ALL_LIBS) $(ALL_TOOLS) $(ALL_OBJS) $(ALL_OBJS:%.o=%.os) $(ALL_INCLUDES): | $(ALL_DIRS)
|
|
$(ALL_DIRS):
|
mkdir -p $@
|
|
$(ALL_OBJS:%.o=%.os): CFLAGS_ALL += -fPIC
|
|
$(RTEST_OBJS): CC = $(HOST_CC)
|
$(RTEST_OBJS): CFLAGS_ALL = $(HOST_CFLAGS)
|
|
build/test/mathtest.o: CFLAGS_ALL += -fmath-errno
|
|
build/%.o: $(srcdir)/%.S
|
$(CC) $(CFLAGS_ALL) -c -o $@ $<
|
|
build/%.o: $(srcdir)/%.c
|
$(CC) $(CFLAGS_ALL) -c -o $@ $<
|
|
build/%.os: $(srcdir)/%.S
|
$(CC) $(CFLAGS_ALL) -c -o $@ $<
|
|
build/%.os: $(srcdir)/%.c
|
$(CC) $(CFLAGS_ALL) -c -o $@ $<
|
|
build/lib/libmathlib.so: $(MATH_OBJS:%.o=%.os)
|
$(CC) $(CFLAGS_ALL) $(LDFLAGS_ALL) -shared -o $@ $^
|
|
build/lib/libmathlib.a: $(MATH_OBJS)
|
rm -f $@
|
$(AR) rc $@ $^
|
$(RANLIB) $@
|
|
build/bin/rtest: $(RTEST_OBJS)
|
$(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ $^ $(HOST_LDLIBS)
|
|
build/bin/mathtest: build/test/mathtest.o build/lib/libmathlib.a
|
$(CC) $(CFLAGS_ALL) $(LDFLAGS_ALL) -static -o $@ $^ $(LDLIBS)
|
|
build/bin/mathbench: build/test/mathbench.o build/lib/libmathlib.a
|
$(CC) $(CFLAGS_ALL) $(LDFLAGS_ALL) -static -o $@ $^ $(LDLIBS)
|
|
build/bin/mathbench_libc: build/test/mathbench.o
|
$(CC) $(CFLAGS_ALL) $(LDFLAGS_ALL) -static -o $@ $^ $(LDLIBS)
|
|
build/include/%.h: $(srcdir)/math/include/%.h
|
cp $< $@
|
|
clean:
|
rm -rf build
|
|
distclean: clean
|
rm -f config.mk
|
|
$(DESTDIR)$(bindir)/%: build/bin/%
|
$(INSTALL) -D $< $@
|
|
$(DESTDIR)$(libdir)/%.so: build/lib/%.so
|
$(INSTALL) -D $< $@
|
|
$(DESTDIR)$(libdir)/%: build/lib/%
|
$(INSTALL) -m 644 -D $< $@
|
|
$(DESTDIR)$(includedir)/%: build/include/%
|
$(INSTALL) -m 644 -D $< $@
|
|
install-tools: $(ALL_TOOLS:build/bin/%=$(DESTDIR)$(bindir)/%)
|
|
install-libs: $(ALL_LIBS:build/lib/%=$(DESTDIR)$(libdir)/%)
|
|
install-headers: $(ALL_INCLUDES:build/include/%=$(DESTDIR)$(includedir)/%)
|
|
install: install-libs install-headers
|
|
check: $(ALL_TOOLS)
|
cat $(TESTS) | $(EMULATOR) build/bin/mathtest
|
|
rcheck: $(HOST_TOOLS) $(ALL_TOOLS)
|
cat $(RTESTS) | build/bin/rtest | $(EMULATOR) build/bin/mathtest
|
|
check-all: check rcheck
|
|
.PHONY: all clean distclean install install-tools install-libs install-headers check rcheck check-all
|