-
Notifications
You must be signed in to change notification settings - Fork 12
/
Makefile
104 lines (77 loc) · 2.13 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
101
102
103
104
#
# Makefile for BFD protocol application
#
OUTDIR = build
AVL_TARFILE = src/core/avl-1.4.0.tar.gz
AVL_DIR = $(OUTDIR)/avl-1.4.0
CC = cc
RANLIB = ranlib
GEN_CFLAGS = -g -Wall -Wconversion -Werror
GEN_CFLAGS += $(shell pkg-config --cflags json-c)
INC = -Isrc/inc -I$(AVL_DIR)
override CFLAGS := $(GEN_CFLAGS) $(INC) $(CFLAGS)
CC_LINK = $(CC) -L$(OUTDIR) -L$(AVL_DIR)
LIBS = -lavl
LIBS += $(shell pkg-config --libs json-c)
EXE_FILES = $(OUTDIR)/bfd
EXE_FILES += $(OUTDIR)/bfdd
EXE_FILES += $(OUTDIR)/bfdmontest
LIB_FILES = $(OUTDIR)/libbfdmon.a
TARFILE = bfd.tar.gz
DEPDIR := $(OUTDIR)/.deps
GEN_DEPS = -Wp,-M,-MP,-MT,$@,-MF,$(DEPDIR)/$(*F).d
# Use 'make V=1' to see compile command.
ifeq ("$(V)", "1")
Q =
else
Q = @
endif
SRCDIRS := core
SRCDIRS += monitor
SRCDIRS += bfd
SRCDIRS += bfdd
SRCDIRS += libbfdmon
SRCDIRS += bfdmontest
define do_include
SRCS :=
include src/$(1)/make.mk
$(1)_SRCS := $$(SRCS)
$(1)_OBJS := $$($(1)_SRCS:%.c=$(OUTDIR)/%.o)
endef
$(foreach srcdir,$(SRCDIRS),$(eval $(call do_include,$(srcdir))))
EMPTY :=
SPACE := $(EMPTY) $(EMPTY)
VPATH = $(subst $(SPACE),:,$(addprefix src/,$(SRCDIRS)))
$(OUTDIR)/%.o: %.c
@echo CC $@
@$(CC) $(CFLAGS) -E $(GEN_DEPS) -o /dev/null $< || exit 0
$(Q)$(CC) $(CFLAGS) -c -o $@ $<
.DEFAULT_GOAL:=all
.PHONY: all
all: $(AVL_DIR)/libavl.a $(EXE_FILES)
$(AVL_DIR)/README:
mkdir -p $(OUTDIR)
tar -C $(OUTDIR) -xvzf $(AVL_TARFILE)
$(AVL_DIR)/libavl.a: $(AVL_DIR)/README
cd $(AVL_DIR) && ./configure && make
$(OUTDIR)/bfd: $(core_OBJS) $(bfd_OBJS)
@echo "LINK $@"
$(Q)$(CC_LINK) -o $@ $^ $(LIBS)
$(OUTDIR)/bfdd: $(core_OBJS) $(monitor_OBJS) $(bfdd_OBJS)
@echo "LINK $@"
$(Q)$(CC_LINK) -o $@ $^ $(LIBS) -lconfig
$(OUTDIR)/libbfdmon.a: $(libbfdmon_OBJS)
@rm -rf $@
@echo AR $@
$(Q)$(AR) cru $@ $(libbfdmon_OBJS)
$(Q)$(RANLIB) $@
$(OUTDIR)/bfdmontest: $(bfdmontest_OBJS) $(core_OBJS) $(OUTDIR)/libbfdmon.a
@echo "LINK $@"
$(Q)$(CC_LINK) -o $@ $(bfdmontest_OBJS) -lbfdmon $(LIBS)
clean:
rm -f $(OUTDIR)/*.o $(OUTDIR)/*.a $(EXE_FILES)
realclean:
rm -rf $(OUTDIR) *~ *.bak
showvar:
@echo $(var)=$($(var))
-include $(shell mkdir -p $(DEPDIR) 2>/dev/null) $(wildcard $(DEPDIR)/*)