freebsd-dev/contrib/arm-optimized-routines/string/Dir.mk
Alex Richardson 31914882fc Import Arm Optimized Routines v21.02
This is the new replacement for the existing cortex-strings code which will
be replaced in a follow-up commit.
We should also be able to use some of the math functions to allow the
tests to pass on AArch64 (and other architectures) instead of just x86.
We might also be able to reuse some of the tests for the kyua testsuite.

Imported using
```
curl -L e823e3abf5 | tar --strip-components=1 -xvzf -
git add .
```

Differential Revision: https://reviews.freebsd.org/D29035
git-subtree-dir: contrib/arm-optimized-routines
git-subtree-mainline: e34c713b0e
git-subtree-split: f9f37c002a
2021-07-06 11:05:34 +01:00

114 lines
2.8 KiB
Makefile

# 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