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