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