-
Notifications
You must be signed in to change notification settings - Fork 97
/
Makefile
100 lines (78 loc) · 2.14 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# Makefile - requires GNU make
#
# Copyright (c) 2018-2024, Arm Limited.
# SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception
srcdir = .
prefix = /usr
bindir = $(prefix)/bin
libdir = $(prefix)/lib
includedir = $(prefix)/include
# Configure these in config.mk, do not make changes in this file.
SUBS = math string networking
HOST_CC = cc
HOST_CFLAGS = -std=c99 -O2
HOST_LDFLAGS =
HOST_LDLIBS =
EMULATOR =
CPPFLAGS =
CFLAGS = -std=c99 -O2
CFLAGS_SHARED = -fPIC
CFLAGS_ALL = -Ibuild/include $(CPPFLAGS) $(CFLAGS)
LDFLAGS =
LDLIBS =
AR = $(CROSS_COMPILE)ar
RANLIB = $(CROSS_COMPILE)ranlib
INSTALL = install
# Detect OS.
# Assume Unix environment: Linux, Darwin, or Msys.
OS := $(shell uname -s)
OS := $(patsubst MSYS%,Msys,$(OS))
# Following math dependencies can be adjusted in config file
# if necessary, e.g. for Msys.
libm-libs = -lm
libc-libs = -lc
mpfr-libs = -lmpfr
gmp-libs = -lgmp
mpc-libs = -lmpc
all:
-include config.mk
$(foreach sub,$(SUBS),$(eval include $(srcdir)/$(sub)/Dir.mk))
# Required targets of subproject foo:
# all-foo
# check-foo
# clean-foo
# install-foo
# Required make variables of subproject foo:
# foo-files: Built files (all in build/).
# Make variables used by subproject foo:
# foo-...: Variables defined in foo/Dir.mk or by config.mk.
all: $(SUBS:%=all-%)
ALL_FILES = $(foreach sub,$(SUBS),$($(sub)-files))
DIRS = $(sort $(patsubst %/,%,$(dir $(ALL_FILES))))
$(ALL_FILES): | $(DIRS)
$(DIRS):
mkdir -p $@
$(filter %.os,$(ALL_FILES)): CFLAGS_ALL += $(CFLAGS_SHARED)
build/%.o: $(srcdir)/%.S
$(CC) $(CFLAGS_ALL) -c -o $@ $<
build/%.o: $(srcdir)/%.c
$(CC) $(CFLAGS_ALL) -c -o $@ $<
build/%.os: $(srcdir)/%.S
$(CC) $(CFLAGS_ALL) -c -o $@ $<
build/%.os: $(srcdir)/%.c
$(CC) $(CFLAGS_ALL) -c -o $@ $<
clean: $(SUBS:%=clean-%)
rm -rf build
distclean: clean
rm -f config.mk
$(DESTDIR)$(bindir)/%: build/bin/%
$(INSTALL) -D $< $@
$(DESTDIR)$(libdir)/%.so: build/lib/%.so
$(INSTALL) -D $< $@
$(DESTDIR)$(libdir)/%: build/lib/%
$(INSTALL) -m 644 -D $< $@
$(DESTDIR)$(includedir)/%: build/include/%
$(INSTALL) -m 644 -D $< $@
install: $(SUBS:%=install-%)
check: $(SUBS:%=check-%)
.PHONY: all clean distclean install check