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