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