1# Makefile - requires GNU make 2# 3# Copyright (c) 2018-2022, Arm Limited. 4# SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception 5 6srcdir = . 7prefix = /usr 8bindir = $(prefix)/bin 9libdir = $(prefix)/lib 10includedir = $(prefix)/include 11 12# Configure these in config.mk, do not make changes in this file. 13SUBS = math string networking 14PLSUBS = math 15HOST_CC = cc 16HOST_CFLAGS = -std=c99 -O2 17HOST_LDFLAGS = 18HOST_LDLIBS = 19EMULATOR = 20CPPFLAGS = 21CFLAGS = -std=c99 -O2 22CFLAGS_SHARED = -fPIC 23CFLAGS_ALL = -Ibuild/include $(CPPFLAGS) $(CFLAGS) 24CFLAGS_PL = -Ibuild/pl/include $(CPPFLAGS) $(CFLAGS) -DPL 25LDFLAGS = 26LDLIBS = 27AR = $(CROSS_COMPILE)ar 28RANLIB = $(CROSS_COMPILE)ranlib 29INSTALL = install 30 31all: 32 33-include config.mk 34 35$(foreach sub,$(SUBS),$(eval include $(srcdir)/$(sub)/Dir.mk)) 36 37# Required targets of subproject foo: 38# all-foo 39# check-foo 40# clean-foo 41# install-foo 42# Required make variables of subproject foo: 43# foo-files: Built files (all in build/). 44# Make variables used by subproject foo: 45# foo-...: Variables defined in foo/Dir.mk or by config.mk. 46 47all: $(SUBS:%=all-%) 48 49ALL_FILES = $(foreach sub,$(SUBS),$($(sub)-files)) 50DIRS = $(sort $(patsubst %/,%,$(dir $(ALL_FILES)))) 51$(ALL_FILES): | $(DIRS) 52$(DIRS): 53 mkdir -p $@ 54 55$(filter %.os,$(ALL_FILES)): CFLAGS_ALL += $(CFLAGS_SHARED) 56$(filter %.os,$(ALL_FILES)): CFLAGS_PL += $(CFLAGS_SHARED) 57 58build/%.o: $(srcdir)/%.S 59 $(CC) $(CFLAGS_ALL) -c -o $@ $< 60 61build/%.o: $(srcdir)/%.c 62 $(CC) $(CFLAGS_ALL) -c -o $@ $< 63 64build/%.os: $(srcdir)/%.S 65 $(CC) $(CFLAGS_ALL) -c -o $@ $< 66 67build/%.os: $(srcdir)/%.c 68 $(CC) $(CFLAGS_ALL) -c -o $@ $< 69 70clean: $(SUBS:%=clean-%) 71 rm -rf build 72 73distclean: clean 74 rm -f config.mk 75 76$(DESTDIR)$(bindir)/%: build/bin/% 77 $(INSTALL) -D $< $@ 78 79$(DESTDIR)$(libdir)/%.so: build/lib/%.so 80 $(INSTALL) -D $< $@ 81 82$(DESTDIR)$(libdir)/%: build/lib/% 83 $(INSTALL) -m 644 -D $< $@ 84 85$(DESTDIR)$(includedir)/%: build/include/% 86 $(INSTALL) -m 644 -D $< $@ 87 88install: $(SUBS:%=install-%) 89 90check: $(SUBS:%=check-%) 91 92.PHONY: all clean distclean install check 93