-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathMakefile
127 lines (105 loc) · 3.53 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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
SRCDIR := src
INCDIR := include
OUTDIR := dist
RELDIR := ../../services/Sanromolo
LIBCOMMON_SRCDIR := $(SRCDIR)/common
LIBCOMMON_A := $(LIBCOMMON_SRCDIR)/libcommon.a
LIBCOMMON_SRCS := $(wildcard $(LIBCOMMON_SRCDIR)/*.c)
LIBCOMMON_OBJS := $(patsubst $(LIBCOMMON_SRCDIR)/%.c,$(LIBCOMMON_SRCDIR)/%.o,$(LIBCOMMON_SRCS))
LIBCOMMON_DEPS := $(LIBCOMMON_OBJS:.o=.d)
# Simplify reversing a bit here with no fortify builtins
LIBCOMMON_CFLAGS := -D_FORTIFY_SOURCE=0
MGMT_SRCDIR := $(SRCDIR)/event_management
MGMT_BINARY := $(OUTDIR)/event-management
MGMT_SRCS := $(wildcard $(MGMT_SRCDIR)/*.c)
MGMT_OBJS := $(patsubst $(MGMT_SRCDIR)/%.c,$(MGMT_SRCDIR)/%.o,$(MGMT_SRCS))
MGMT_DEPS := $(MGMT_OBJS:.o=.d)
WALLET_SRCDIR := $(SRCDIR)/wallet
WALLET_BINARY := $(OUTDIR)/wallet
WALLET_SRCS := $(wildcard $(WALLET_SRCDIR)/*.c)
WALLET_OBJS := $(patsubst $(WALLET_SRCDIR)/%.c,$(WALLET_SRCDIR)/%.o,$(WALLET_SRCS))
WALLET_DEPS := $(WALLET_OBJS:.o=.d)
WALLET_CLIENT_SRCDIR := $(SRCDIR)/wallet_client
WALLET_CLIENT_BINARY := $(OUTDIR)/wallet-client
WALLET_CLIENT_SRCS := $(wildcard $(WALLET_CLIENT_SRCDIR)/*.c)
WALLET_CLIENT_OBJS := $(patsubst $(WALLET_CLIENT_SRCDIR)/%.c,$(WALLET_CLIENT_SRCDIR)/%.o,$(WALLET_CLIENT_SRCS))
WALLET_CLIENT_DEPS := $(WALLET_CLIENT_OBJS:.o=.d)
WALLET_CLIENT_LDLIBS := $(shell pkg-config --libs ncurses)
BINARIES = $(MGMT_BINARY) $(WALLET_BINARY) $(WALLET_CLIENT_BINARY)
CC := gcc
LD := ld
CFLAGS := -O1 -std=gnu99 -MMD -Wall -Wextra \
-ffunction-sections -fdata-sections \
-fno-asynchronous-unwind-tables -fstack-protector-strong \
-fno-builtin-memcpy \
-Iinclude
LDFLAGS := -Wl,-z,relro,-z,now,--gc-sections
ifeq ($(DEBUG),1)
CFLAGS += -g -DDEBUG
endif
ifneq ($(V),1)
MAKEFLAGS += --silent
endif
.PHONY: all clean release clean-release
all: $(BINARIES)
-include $(LIBCOMMON_DEPS) $(MGMT_DEPS) $(WALLET_DEPS) $(WALLET_CLIENT_DEPS)
$(LIBCOMMON_A): $(LIBCOMMON_OBJS)
echo 'LD $@'
$(LD) -r -o $@ $^
$(MGMT_BINARY): $(MGMT_OBJS) $(LIBCOMMON_A) | $(OUTDIR)
echo 'CCLD $@'
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^
ifneq ($(DEBUG),1)
echo 'STRIP $@'
strip $@
endif
$(WALLET_BINARY): ./check_stack.py $(WALLET_OBJS) $(LIBCOMMON_A) | $(OUTDIR)
echo 'CCLD $@'
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(filter-out $<,$^)
echo 'CHECK $@'
./$< $@
ifneq ($(DEBUG),1)
echo 'STRIP $@'
strip $@
endif
$(WALLET_CLIENT_BINARY): $(WALLET_CLIENT_OBJS) $(LIBCOMMON_A) | $(OUTDIR)
echo 'CCLD $@'
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(WALLET_CLIENT_LDLIBS)
ifneq ($(DEBUG),1)
echo 'STRIP $@'
strip $@
endif
$(LIBCOMMON_SRCDIR)/%.o: $(LIBCOMMON_SRCDIR)/%.c
echo 'CC $@'
$(CC) $(CFLAGS) $(LIBCOMMON_CFLAGS) -c -o $@ $<
$(MGMT_SRCDIR)/%.o: $(MGMT_SRCDIR)/%.c
echo 'CC $@'
$(CC) $(CFLAGS) -c -o $@ $<
$(WALLET_SRCDIR)/%.o: $(WALLET_SRCDIR)/%.c
echo 'CC $@'
$(CC) $(CFLAGS) -c -o $@ $<
$(WALLET_CLIENT_SRCDIR)/%.o: $(WALLET_CLIENT_SRCDIR)/%.c
echo 'CC $@'
$(CC) $(CFLAGS) -c -o $@ $<
$(OUTDIR):
echo 'MKDIR $@'
mkdir -p $@
clean:
echo 'CLEAN $(OUTDIR)'
rm -fr '$(OUTDIR)'/*
echo 'CLEAN $(LIBCOMMON_SRCDIR)'
rm -f $(LIBCOMMON_A) $(LIBCOMMON_OBJS) $(LIBCOMMON_DEPS)
echo 'CLEAN $(MGMT_SRCDIR)'
rm -f $(MGMT_OBJS) $(MGMT_DEPS)
echo 'CLEAN $(WALLET_SRCDIR)'
rm -f $(WALLET_OBJS) $(WALLET_DEPS)
echo 'CLEAN $(WALLET_CLIENT_SRCDIR)'
rm -f $(WALLET_CLIENT_OBJS) $(WALLET_CLIENT_DEPS)
# Lazy, I know
release: docker-compose.yml deploy.sh $(BINARIES) | $(RELDIR)
echo 'RELEASE'
cp docker-compose.yml deploy.sh $(RELDIR)
cp -r $(OUTDIR) $(RELDIR)/
clean-release:
echo 'CLEAN RELEASE'
rm -rf $(RELDIR)/*