1118611Snjl# Makefile - requires GNU make
2118611Snjl#
3118611Snjl# Copyright (c) 2018-2022, Arm Limited.
4118611Snjl# SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception
5118611Snjl
6118611Snjlsrcdir = .
7118611Snjlprefix = /usr
8217365Sjkimbindir = $(prefix)/bin
9217365Sjkimlibdir = $(prefix)/lib
10118611Snjlincludedir = $(prefix)/include
11118611Snjl
12217365Sjkim# Configure these in config.mk, do not make changes in this file.
13217365SjkimSUBS = math string networking
14217365SjkimPLSUBS = math
15217365SjkimHOST_CC = cc
16217365SjkimHOST_CFLAGS = -std=c99 -O2
17217365SjkimHOST_LDFLAGS =
18217365SjkimHOST_LDLIBS =
19217365SjkimEMULATOR =
20217365SjkimCPPFLAGS =
21217365SjkimCFLAGS = -std=c99 -O2
22217365SjkimCFLAGS_SHARED = -fPIC
23217365SjkimCFLAGS_ALL = -Ibuild/include $(CPPFLAGS) $(CFLAGS)
24217365SjkimCFLAGS_PL = -Ibuild/pl/include $(CPPFLAGS) $(CFLAGS) -DPL
25217365SjkimLDFLAGS =
26118611SnjlLDLIBS =
27217365SjkimAR = $(CROSS_COMPILE)ar
28217365SjkimRANLIB = $(CROSS_COMPILE)ranlib
29217365SjkimINSTALL = install
30118611Snjl
31217365Sjkimall:
32217365Sjkim
33217365Sjkim-include config.mk
34217365Sjkim
35217365Sjkim$(foreach sub,$(SUBS),$(eval include $(srcdir)/$(sub)/Dir.mk))
36217365Sjkim
37217365Sjkim# Required targets of subproject foo:
38217365Sjkim#   all-foo
39217365Sjkim#   check-foo
40217365Sjkim#   clean-foo
41217365Sjkim#   install-foo
42217365Sjkim# Required make variables of subproject foo:
43217365Sjkim#   foo-files: Built files (all in build/).
44118611Snjl# Make variables used by subproject foo:
45151937Sjkim#   foo-...: Variables defined in foo/Dir.mk or by config.mk.
46193529Sjkim
47193529Sjkimall: $(SUBS:%=all-%)
48193529Sjkim
49193529SjkimALL_FILES = $(foreach sub,$(SUBS),$($(sub)-files))
50197107SjkimDIRS = $(sort $(patsubst %/,%,$(dir $(ALL_FILES))))
51118611Snjl$(ALL_FILES): | $(DIRS)
52118611Snjl$(DIRS):
53118611Snjl	mkdir -p $@
54118611Snjl
55118611Snjl$(filter %.os,$(ALL_FILES)): CFLAGS_ALL += $(CFLAGS_SHARED)
56118611Snjl$(filter %.os,$(ALL_FILES)): CFLAGS_PL += $(CFLAGS_SHARED)
57118611Snjl
58118611Snjlbuild/%.o: $(srcdir)/%.S
59118611Snjl	$(CC) $(CFLAGS_ALL) -c -o $@ $<
60118611Snjl
61167802Sjkimbuild/%.o: $(srcdir)/%.c
62118611Snjl	$(CC) $(CFLAGS_ALL) -c -o $@ $<
63167802Sjkim
64118611Snjlbuild/%.os: $(srcdir)/%.S
65167802Sjkim	$(CC) $(CFLAGS_ALL) -c -o $@ $<
66118611Snjl
67118611Snjlbuild/%.os: $(srcdir)/%.c
68197104Sjkim	$(CC) $(CFLAGS_ALL) -c -o $@ $<
69197104Sjkim
70197104Sjkimclean: $(SUBS:%=clean-%)
71197104Sjkim	rm -rf build
72197104Sjkim
73197104Sjkimdistclean: clean
74118611Snjl	rm -f config.mk
75193529Sjkim
76193529Sjkim$(DESTDIR)$(bindir)/%: build/bin/%
77193529Sjkim	$(INSTALL) -D $< $@
78193529Sjkim
79193529Sjkim$(DESTDIR)$(libdir)/%.so: build/lib/%.so
80193529Sjkim	$(INSTALL) -D $< $@
81193529Sjkim
82193529Sjkim$(DESTDIR)$(libdir)/%: build/lib/%
83193529Sjkim	$(INSTALL) -m 644 -D $< $@
84193529Sjkim
85193529Sjkim$(DESTDIR)$(includedir)/%: build/include/%
86193529Sjkim	$(INSTALL) -m 644 -D $< $@
87193529Sjkim
88193529Sjkiminstall: $(SUBS:%=install-%)
89193529Sjkim
90193529Sjkimcheck: $(SUBS:%=check-%)
91193529Sjkim
92193529Sjkim.PHONY: all clean distclean install check
93167802Sjkim