blob: cf3453f7580d381464b4ebb5eacfe1306a427822 [file] [log] [blame]
# Makefile fragment - requires GNU make
#
# Copyright (c) 2019-2021, Arm Limited.
# SPDX-License-Identifier: MIT
S := $(srcdir)/string
B := build/string
ifeq ($(ARCH),)
all-string bench-string check-string install-string clean-string:
@echo "*** Please set ARCH in config.mk. ***"
@exit 1
else
string-lib-srcs := $(wildcard $(S)/$(ARCH)/*.[cS])
string-test-srcs := $(wildcard $(S)/test/*.c)
string-bench-srcs := $(wildcard $(S)/bench/*.c)
string-includes := $(patsubst $(S)/%,build/%,$(wildcard $(S)/include/*.h))
string-libs := \
build/lib/libstringlib.so \
build/lib/libstringlib.a \
string-tests := \
build/bin/test/memcpy \
build/bin/test/memmove \
build/bin/test/memset \
build/bin/test/memchr \
build/bin/test/memrchr \
build/bin/test/memcmp \
build/bin/test/__mtag_tag_region \
build/bin/test/__mtag_tag_zero_region \
build/bin/test/strcpy \
build/bin/test/stpcpy \
build/bin/test/strcmp \
build/bin/test/strchr \
build/bin/test/strrchr \
build/bin/test/strchrnul \
build/bin/test/strlen \
build/bin/test/strnlen \
build/bin/test/strncmp
string-benches := \
build/bin/bench/memcpy \
build/bin/bench/strlen
string-lib-objs := $(patsubst $(S)/%,$(B)/%.o,$(basename $(string-lib-srcs)))
string-test-objs := $(patsubst $(S)/%,$(B)/%.o,$(basename $(string-test-srcs)))
string-bench-objs := $(patsubst $(S)/%,$(B)/%.o,$(basename $(string-bench-srcs)))
string-objs := \
$(string-lib-objs) \
$(string-lib-objs:%.o=%.os) \
$(string-test-objs) \
$(string-bench-objs)
string-files := \
$(string-objs) \
$(string-libs) \
$(string-tests) \
$(string-benches) \
$(string-includes) \
all-string: $(string-libs) $(string-tests) $(string-benches) $(string-includes)
$(string-objs): $(string-includes)
$(string-objs): CFLAGS_ALL += $(string-cflags)
$(string-test-objs): CFLAGS_ALL += -D_GNU_SOURCE
build/lib/libstringlib.so: $(string-lib-objs:%.o=%.os)
$(CC) $(CFLAGS_ALL) $(LDFLAGS) -shared -o $@ $^
build/lib/libstringlib.a: $(string-lib-objs)
rm -f $@
$(AR) rc $@ $^
$(RANLIB) $@
build/bin/test/%: $(B)/test/%.o build/lib/libstringlib.a
$(CC) $(CFLAGS_ALL) $(LDFLAGS) -static -o $@ $^ $(LDLIBS)
build/bin/bench/%: $(B)/bench/%.o build/lib/libstringlib.a
$(CC) $(CFLAGS_ALL) $(LDFLAGS) -static -o $@ $^ $(LDLIBS)
build/include/%.h: $(S)/include/%.h
cp $< $@
build/bin/%.sh: $(S)/test/%.sh
cp $< $@
string-tests-out = $(string-tests:build/bin/test/%=build/string/test/%.out)
build/string/test/%.out: build/bin/test/%
$(EMULATOR) $^ | tee $@.tmp
mv $@.tmp $@
check-string: $(string-tests-out)
! grep FAIL $^
bench-string: $(string-benches)
$(EMULATOR) build/bin/bench/strlen
$(EMULATOR) build/bin/bench/memcpy
install-string: \
$(string-libs:build/lib/%=$(DESTDIR)$(libdir)/%) \
$(string-includes:build/include/%=$(DESTDIR)$(includedir)/%)
clean-string:
rm -f $(string-files)
endif
.PHONY: all-string bench-string check-string install-string clean-string