]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - string/Dir.mk
Import Arm Optimized Routines v21.02
[FreeBSD/FreeBSD.git] / string / Dir.mk
1 # Makefile fragment - requires GNU make
2 #
3 # Copyright (c) 2019-2021, Arm Limited.
4 # SPDX-License-Identifier: MIT
5
6 S := $(srcdir)/string
7 B := build/string
8
9 ifeq ($(ARCH),)
10 all-string bench-string check-string install-string clean-string:
11         @echo "*** Please set ARCH in config.mk. ***"
12         @exit 1
13 else
14
15 string-lib-srcs := $(wildcard $(S)/$(ARCH)/*.[cS])
16 string-test-srcs := $(wildcard $(S)/test/*.c)
17 string-bench-srcs := $(wildcard $(S)/bench/*.c)
18
19 string-includes := $(patsubst $(S)/%,build/%,$(wildcard $(S)/include/*.h))
20
21 string-libs := \
22         build/lib/libstringlib.so \
23         build/lib/libstringlib.a \
24
25 string-tests := \
26         build/bin/test/memcpy \
27         build/bin/test/memmove \
28         build/bin/test/memset \
29         build/bin/test/memchr \
30         build/bin/test/memrchr \
31         build/bin/test/memcmp \
32         build/bin/test/__mtag_tag_region \
33         build/bin/test/__mtag_tag_zero_region \
34         build/bin/test/strcpy \
35         build/bin/test/stpcpy \
36         build/bin/test/strcmp \
37         build/bin/test/strchr \
38         build/bin/test/strrchr \
39         build/bin/test/strchrnul \
40         build/bin/test/strlen \
41         build/bin/test/strnlen \
42         build/bin/test/strncmp
43
44 string-benches := \
45         build/bin/bench/memcpy \
46         build/bin/bench/strlen
47
48 string-lib-objs := $(patsubst $(S)/%,$(B)/%.o,$(basename $(string-lib-srcs)))
49 string-test-objs := $(patsubst $(S)/%,$(B)/%.o,$(basename $(string-test-srcs)))
50 string-bench-objs := $(patsubst $(S)/%,$(B)/%.o,$(basename $(string-bench-srcs)))
51
52 string-objs := \
53         $(string-lib-objs) \
54         $(string-lib-objs:%.o=%.os) \
55         $(string-test-objs) \
56         $(string-bench-objs)
57
58 string-files := \
59         $(string-objs) \
60         $(string-libs) \
61         $(string-tests) \
62         $(string-benches) \
63         $(string-includes) \
64
65 all-string: $(string-libs) $(string-tests) $(string-benches) $(string-includes)
66
67 $(string-objs): $(string-includes)
68 $(string-objs): CFLAGS_ALL += $(string-cflags)
69
70 $(string-test-objs): CFLAGS_ALL += -D_GNU_SOURCE
71
72 build/lib/libstringlib.so: $(string-lib-objs:%.o=%.os)
73         $(CC) $(CFLAGS_ALL) $(LDFLAGS) -shared -o $@ $^
74
75 build/lib/libstringlib.a: $(string-lib-objs)
76         rm -f $@
77         $(AR) rc $@ $^
78         $(RANLIB) $@
79
80 build/bin/test/%: $(B)/test/%.o build/lib/libstringlib.a
81         $(CC) $(CFLAGS_ALL) $(LDFLAGS) -static -o $@ $^ $(LDLIBS)
82
83 build/bin/bench/%: $(B)/bench/%.o build/lib/libstringlib.a
84         $(CC) $(CFLAGS_ALL) $(LDFLAGS) -static -o $@ $^ $(LDLIBS)
85
86 build/include/%.h: $(S)/include/%.h
87         cp $< $@
88
89 build/bin/%.sh: $(S)/test/%.sh
90         cp $< $@
91
92 string-tests-out = $(string-tests:build/bin/test/%=build/string/test/%.out)
93
94 build/string/test/%.out: build/bin/test/%
95         $(EMULATOR) $^ | tee $@.tmp
96         mv $@.tmp $@
97
98 check-string: $(string-tests-out)
99         ! grep FAIL $^
100
101 bench-string: $(string-benches)
102         $(EMULATOR) build/bin/bench/strlen
103         $(EMULATOR) build/bin/bench/memcpy
104
105 install-string: \
106  $(string-libs:build/lib/%=$(DESTDIR)$(libdir)/%) \
107  $(string-includes:build/include/%=$(DESTDIR)$(includedir)/%)
108
109 clean-string:
110         rm -f $(string-files)
111 endif
112
113 .PHONY: all-string bench-string check-string install-string clean-string