blob: c487896728c2cd3c877dad0f52256ddd1e5ebbe8 [file] [log] [blame]
Szabolcs Nagy78892282018-04-24 17:10:05 +01001# Makefile - requires GNU make
2#
Szabolcs Nagy1eb5d7c2023-01-24 13:24:09 +00003# Copyright (c) 2018-2022, Arm Limited.
Szabolcs Nagy189dfef2022-02-10 10:32:35 +00004# SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception
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
Pierre Blanchard82c8c8a2022-03-25 15:04:38 +000014PLSUBS = math
Szabolcs Nagy78892282018-04-24 17:10:05 +010015HOST_CC = cc
Szabolcs Nagya2027462018-07-27 11:14:11 +010016HOST_CFLAGS = -std=c99 -O2
17HOST_LDFLAGS =
Szabolcs Nagy0af9fce2019-07-18 10:21:43 +010018HOST_LDLIBS =
Szabolcs Nagy78892282018-04-24 17:10:05 +010019EMULATOR =
Szabolcs Nagy1fd2aaa2019-11-20 18:05:06 +000020CPPFLAGS =
Szabolcs Nagy78892282018-04-24 17:10:05 +010021CFLAGS = -std=c99 -O2
Szabolcs Nagy1fd2aaa2019-11-20 18:05:06 +000022CFLAGS_SHARED = -fPIC
23CFLAGS_ALL = -Ibuild/include $(CPPFLAGS) $(CFLAGS)
Pierre Blanchard82c8c8a2022-03-25 15:04:38 +000024CFLAGS_PL = -Ibuild/pl/include $(CPPFLAGS) $(CFLAGS) -DPL
Szabolcs Nagy78892282018-04-24 17:10:05 +010025LDFLAGS =
Szabolcs Nagy0af9fce2019-07-18 10:21:43 +010026LDLIBS =
Szabolcs Nagy78892282018-04-24 17:10:05 +010027AR = $(CROSS_COMPILE)ar
28RANLIB = $(CROSS_COMPILE)ranlib
29INSTALL = install
30
Szabolcs Nagy0af9fce2019-07-18 10:21:43 +010031all:
32
Szabolcs Nagy78892282018-04-24 17:10:05 +010033-include config.mk
34
Szabolcs Nagydec9ffe2019-11-26 11:52:25 +000035$(foreach sub,$(SUBS),$(eval include $(srcdir)/$(sub)/Dir.mk))
Szabolcs Nagy0af9fce2019-07-18 10:21:43 +010036
Szabolcs Nagy1fd2aaa2019-11-20 18:05:06 +000037# Required targets of subproject foo:
38# all-foo
39# check-foo
40# clean-foo
41# install-foo
42# Required make variables of subproject foo:
43# foo-files: Built files (all in build/).
44# Make variables used by subproject foo:
45# foo-...: Variables defined in foo/Dir.mk or by config.mk.
Szabolcs Nagy78892282018-04-24 17:10:05 +010046
Szabolcs Nagy1fd2aaa2019-11-20 18:05:06 +000047all: $(SUBS:%=all-%)
Szabolcs Nagy78892282018-04-24 17:10:05 +010048
Szabolcs Nagy1fd2aaa2019-11-20 18:05:06 +000049ALL_FILES = $(foreach sub,$(SUBS),$($(sub)-files))
50DIRS = $(sort $(patsubst %/,%,$(dir $(ALL_FILES))))
51$(ALL_FILES): | $(DIRS)
52$(DIRS):
Szabolcs Nagy78892282018-04-24 17:10:05 +010053 mkdir -p $@
54
Szabolcs Nagy1fd2aaa2019-11-20 18:05:06 +000055$(filter %.os,$(ALL_FILES)): CFLAGS_ALL += $(CFLAGS_SHARED)
Pierre Blanchard82c8c8a2022-03-25 15:04:38 +000056$(filter %.os,$(ALL_FILES)): CFLAGS_PL += $(CFLAGS_SHARED)
Szabolcs Nagy78892282018-04-24 17:10:05 +010057
Szabolcs Nagy78892282018-04-24 17:10:05 +010058build/%.o: $(srcdir)/%.S
59 $(CC) $(CFLAGS_ALL) -c -o $@ $<
60
61build/%.o: $(srcdir)/%.c
62 $(CC) $(CFLAGS_ALL) -c -o $@ $<
63
64build/%.os: $(srcdir)/%.S
65 $(CC) $(CFLAGS_ALL) -c -o $@ $<
66
67build/%.os: $(srcdir)/%.c
68 $(CC) $(CFLAGS_ALL) -c -o $@ $<
69
Szabolcs Nagy1fd2aaa2019-11-20 18:05:06 +000070clean: $(SUBS:%=clean-%)
Szabolcs Nagy78892282018-04-24 17:10:05 +010071 rm -rf build
72
73distclean: clean
74 rm -f config.mk
75
76$(DESTDIR)$(bindir)/%: build/bin/%
77 $(INSTALL) -D $< $@
78
79$(DESTDIR)$(libdir)/%.so: build/lib/%.so
80 $(INSTALL) -D $< $@
81
82$(DESTDIR)$(libdir)/%: build/lib/%
83 $(INSTALL) -m 644 -D $< $@
84
85$(DESTDIR)$(includedir)/%: build/include/%
86 $(INSTALL) -m 644 -D $< $@
87
Szabolcs Nagy1fd2aaa2019-11-20 18:05:06 +000088install: $(SUBS:%=install-%)
Szabolcs Nagy78892282018-04-24 17:10:05 +010089
Szabolcs Nagy1fd2aaa2019-11-20 18:05:06 +000090check: $(SUBS:%=check-%)
Szabolcs Nagy78892282018-04-24 17:10:05 +010091
Szabolcs Nagy1fd2aaa2019-11-20 18:05:06 +000092.PHONY: all clean distclean install check