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