blob: 169f89e2c9d6be3f53a91780447652ee7917b28e [file] [log] [blame]
Szabolcs Nagy78892282018-04-24 17:10:05 +01001# Makefile - requires GNU make
2#
Szabolcs Nagye823e3a2021-02-17 14:28:25 +00003# Copyright (c) 2018-2020, Arm Limited.
Szabolcs Nagy11253b02018-11-12 11:10:57 +00004# SPDX-License-Identifier: MIT
Szabolcs Nagy78892282018-04-24 17:10:05 +01005
6srcdir = .
7prefix = /usr
8bindir = $(prefix)/bin
9libdir = $(prefix)/lib
10includedir = $(prefix)/include
11
Szabolcs Nagy78892282018-04-24 17:10:05 +010012# Configure these in config.mk, do not make changes in this file.
Ola Liljedahl6a988f62020-02-27 15:10:03 +010013SUBS = math string networking
Szabolcs Nagy78892282018-04-24 17:10:05 +010014HOST_CC = cc
Szabolcs Nagya2027462018-07-27 11:14:11 +010015HOST_CFLAGS = -std=c99 -O2
16HOST_LDFLAGS =
Szabolcs Nagy0af9fce2019-07-18 10:21:43 +010017HOST_LDLIBS =
Szabolcs Nagy78892282018-04-24 17:10:05 +010018EMULATOR =
Szabolcs Nagy1fd2aaa2019-11-20 18:05:06 +000019CPPFLAGS =
Szabolcs Nagy78892282018-04-24 17:10:05 +010020CFLAGS = -std=c99 -O2
Szabolcs Nagy1fd2aaa2019-11-20 18:05:06 +000021CFLAGS_SHARED = -fPIC
22CFLAGS_ALL = -Ibuild/include $(CPPFLAGS) $(CFLAGS)
Szabolcs Nagy78892282018-04-24 17:10:05 +010023LDFLAGS =
Szabolcs Nagy0af9fce2019-07-18 10:21:43 +010024LDLIBS =
Szabolcs Nagy78892282018-04-24 17:10:05 +010025AR = $(CROSS_COMPILE)ar
26RANLIB = $(CROSS_COMPILE)ranlib
27INSTALL = install
28
Szabolcs Nagy0af9fce2019-07-18 10:21:43 +010029all:
30
Szabolcs Nagy78892282018-04-24 17:10:05 +010031-include config.mk
32
Szabolcs Nagydec9ffe2019-11-26 11:52:25 +000033$(foreach sub,$(SUBS),$(eval include $(srcdir)/$(sub)/Dir.mk))
Szabolcs Nagy0af9fce2019-07-18 10:21:43 +010034
Szabolcs Nagy1fd2aaa2019-11-20 18:05:06 +000035# 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.
Szabolcs Nagy78892282018-04-24 17:10:05 +010044
Szabolcs Nagy1fd2aaa2019-11-20 18:05:06 +000045all: $(SUBS:%=all-%)
Szabolcs Nagy78892282018-04-24 17:10:05 +010046
Szabolcs Nagy1fd2aaa2019-11-20 18:05:06 +000047ALL_FILES = $(foreach sub,$(SUBS),$($(sub)-files))
48DIRS = $(sort $(patsubst %/,%,$(dir $(ALL_FILES))))
49$(ALL_FILES): | $(DIRS)
50$(DIRS):
Szabolcs Nagy78892282018-04-24 17:10:05 +010051 mkdir -p $@
52
Szabolcs Nagy1fd2aaa2019-11-20 18:05:06 +000053$(filter %.os,$(ALL_FILES)): CFLAGS_ALL += $(CFLAGS_SHARED)
Szabolcs Nagy78892282018-04-24 17:10:05 +010054
Szabolcs Nagy78892282018-04-24 17:10:05 +010055build/%.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
Szabolcs Nagy1fd2aaa2019-11-20 18:05:06 +000067clean: $(SUBS:%=clean-%)
Szabolcs Nagy78892282018-04-24 17:10:05 +010068 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
Szabolcs Nagy1fd2aaa2019-11-20 18:05:06 +000085install: $(SUBS:%=install-%)
Szabolcs Nagy78892282018-04-24 17:10:05 +010086
Szabolcs Nagy1fd2aaa2019-11-20 18:05:06 +000087check: $(SUBS:%=check-%)
Szabolcs Nagy78892282018-04-24 17:10:05 +010088
Szabolcs Nagy1fd2aaa2019-11-20 18:05:06 +000089.PHONY: all clean distclean install check