blob: c54eaf1f9d60ec9825e7dc0948b53a05e4b61d00 [file] [log] [blame]
# Makefile - requires GNU make
#
# Copyright (c) 2018, Arm Limited.
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
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