blob: f814aa2e1f68ee6410f6c82a89027d21f28ea7d3 [file] [log] [blame]
Amit Pundird477f822020-02-07 22:26:08 +05301proj := qrtr
2proj-major := 1
3proj-minor := 0
4proj-version := $(proj-major).$(proj-minor)
5
6CFLAGS := -Wall -g
7LDFLAGS :=
8
9prefix := /usr/local
10bindir := $(prefix)/bin
11libdir := $(prefix)/lib
12includedir := $(prefix)/include
13servicedir := $(prefix)/lib/systemd/system
14
15ifneq ($(CROSS_COMPILE),)
16CC := $(CROSS_COMPILE)gcc
17endif
18SFLAGS := -I$(shell $(CC) -print-file-name=include) -Wno-non-pointer-null
19
20$(proj)-cfg-srcs := \
21 lib/logging.c \
22 src/addr.c \
23 src/cfg.c \
24
25$(proj)-cfg-cflags := -Ilib
26
27$(proj)-ns-srcs := \
28 lib/logging.c \
29 src/addr.c \
30 src/ns.c \
31 src/map.c \
32 src/hash.c \
33 src/waiter.c \
34 src/util.c \
35
36$(proj)-ns-cflags := -Ilib
37
38$(proj)-lookup-srcs := \
39 lib/logging.c \
40 src/lookup.c \
41 src/util.c \
42
43$(proj)-lookup-cflags := -Ilib
44
45lib$(proj).so-srcs := \
46 lib/logging.c \
47 lib/qrtr.c \
48 lib/qmi.c
49
50lib$(proj).so-cflags := -fPIC -Isrc
51
52targets := $(proj)-ns $(proj)-cfg $(proj)-lookup lib$(proj).so
53
54out := out
55src_to_obj = $(patsubst %.c,$(out)/obj/%.o,$(1))
56src_to_dep = $(patsubst %.c,$(out)/dep/%.d,$(1))
57
58all-srcs :=
59all-objs :=
60all-deps :=
61all-clean := $(out)
62all-install :=
63
64all: $(targets)
65
66$(out)/obj/%.o: %.c
67ifneq ($C,)
68 @echo "CHECK $<"
69 @sparse $< $(patsubst -iquote=%,-I%,$(CFLAGS)) $(SFLAGS)
70endif
71 @echo "CC $<"
72 @$(CC) -MM -MF $(call src_to_dep,$<) -MP -MT "$@ $(call src_to_dep,$<)" $(CFLAGS) $(_CFLAGS) $<
73 @$(CC) -o $@ -c $< $(CFLAGS) $(_CFLAGS)
74
75define add-inc-target
76$(DESTDIR)$(includedir)/$2: $1/$2
77 @echo "INSTALL $$<"
78 @install -D -m 755 $$< $$@
79
80all-install += $(DESTDIR)$(includedir)/$2
81endef
82
83define add-target-deps
84all-srcs += $($1-srcs)
85all-objs += $(call src_to_obj,$($1-srcs))
86all-deps += $(call src_to_dep,$($1-srcs))
87all-clean += $1
88$(call src_to_obj,$($1-srcs)): _CFLAGS := $($1-cflags)
89endef
90
91define add-bin-target
92
93$(call add-target-deps,$1)
94
95$1: $(call src_to_obj,$($1-srcs))
96 @echo "LD $$@"
97 $$(CC) -o $$@ $$(filter %.o,$$^) $(LDFLAGS)
98
99$(DESTDIR)$(bindir)/$1: $1
100 @echo "INSTALL $$<"
101 @install -D -m 755 $$< $$@
102
103all-install += $(DESTDIR)$(bindir)/$1
104endef
105
106define add-lib-target
107
108$(call add-target-deps,$1)
109
110$1: $(call src_to_obj,$($1-srcs))
111 @echo "LD $$@"
112 $$(CC) -o $$@ $$(filter %.o,$$^) $(LDFLAGS) -shared -Wl,-soname,$1.$(proj-major)
113
114$(DESTDIR)$(libdir)/$1.$(proj-version): $1
115 @echo "INSTALL $$<"
116 @install -D -m 755 $$< $$@
117 @ln -sf $1.$(proj-version) $(DESTDIR)$(libdir)/$1.$(proj-major)
118 @ln -sf $1.$(proj-major) $(DESTDIR)$(libdir)/$1
119
120all-install += $(DESTDIR)$(libdir)/$1.$(proj-version)
121endef
122
123define add-systemd-service-target
124$1: $1.in
125 sed 's+QRTR_NS_PATH+$(bindir)+g' $$< > $$@
126
127$(DESTDIR)$(servicedir)/$1: $1
128 @echo "INSTALL $$<"
129 @install -D -m 755 $$< $$@
130
131all-install += $(DESTDIR)$(servicedir)/$1
132endef
133
134$(foreach v,$(filter-out %.so,$(targets)),$(eval $(call add-bin-target,$v)))
135$(foreach v,$(filter %.so,$(targets)),$(eval $(call add-lib-target,$v)))
136$(eval $(call add-inc-target,lib,libqrtr.h))
137$(eval $(call add-systemd-service-target,qrtr-ns.service))
138
139install: $(all-install)
140
141clean:
142 @echo CLEAN
143 @$(RM) -r $(all-clean)
144
145$(call src_to_obj,$(all-srcs)): Makefile
146
147ifneq ("$(MAKECMDGOALS)","clean")
148cmd-goal-1 := $(shell mkdir -p $(sort $(dir $(all-objs) $(all-deps))))
149-include $(all-deps)
150endif