# Makefile fragment - requires GNU make # # Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. # See https://llvm.org/LICENSE.txt for license information. # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception S := $(srcdir)/string B := build/string ifeq ($(ARCH),) all-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-includes := $(patsubst $(S)/%,build/%,$(wildcard $(S)/include/*.h)) string-libs := \ build/lib/libstringlib.so \ build/lib/libstringlib.a \ string-tools := \ build/bin/test/memcpy \ build/bin/test/memmove \ build/bin/test/memset \ build/bin/test/memchr \ build/bin/test/memcmp \ 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-lib-objs := $(patsubst $(S)/%,$(B)/%.o,$(basename $(string-lib-srcs))) string-test-objs := $(patsubst $(S)/%,$(B)/%.o,$(basename $(string-test-srcs))) string-objs := \ $(string-lib-objs) \ $(string-lib-objs:%.o=%.os) \ $(string-test-objs) \ string-files := \ $(string-objs) \ $(string-libs) \ $(string-tools) \ $(string-includes) \ all-string: $(string-libs) $(string-tools) $(string-includes) $(string-objs): $(string-includes) $(string-objs): CFLAGS_ALL += $(string-cflags) 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/include/%.h: $(S)/include/%.h cp $< $@ build/bin/%.sh: $(S)/test/%.sh cp $< $@ check-string: $(string-tools) $(EMULATOR) build/bin/test/memcpy $(EMULATOR) build/bin/test/memmove $(EMULATOR) build/bin/test/memset $(EMULATOR) build/bin/test/memchr $(EMULATOR) build/bin/test/memcmp $(EMULATOR) build/bin/test/strcpy $(EMULATOR) build/bin/test/stpcpy $(EMULATOR) build/bin/test/strcmp $(EMULATOR) build/bin/test/strchr $(EMULATOR) build/bin/test/strrchr $(EMULATOR) build/bin/test/strchrnul $(EMULATOR) build/bin/test/strlen $(EMULATOR) build/bin/test/strnlen $(EMULATOR) build/bin/test/strncmp install-string: \ $(string-libs:build/lib/%=$(DESTDIR)$(libdir)/%) \ $(string-includes:build/include/%=$(DESTDIR)$(includedir)/%) clean-string: rm -f $(string-files) endif .PHONY: all-string check-string install-string clean-string