-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathmakefile
More file actions
82 lines (68 loc) · 1.98 KB
/
makefile
File metadata and controls
82 lines (68 loc) · 1.98 KB
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
CC=gcc
OPT=-O2
GPROF=#-pg
GDB=#-g
W= \
-Warray-bounds\
-Wfloat-equal\
-Wimplicit\
-Wmaybe-uninitialized\
-Wmissing-braces\
-Wparentheses\
-Wsequence-point\
-Wtype-limits\
-Wundef\
-Wuninitialized\
-Wmisleading-indentation\
-Wempty-body\
-Wmemset-elt-size\
-Wduplicated-branches\
-Wswitch-unreachable\
-Wunused\
-Wunused-but-set-variable\
-Wunused-parameter\
#-Winline\
#-Wunsafe-loop-optimizations\
#-W -Wall\
-Wswitch\
-Wno-format\
-Wconversion\
-Wsign-compare\
-Wjump-misses-init\
#-Werror\
export VERSION_FLAGS=-DGIT_HASH="\"$(shell git rev-parse HEAD 2> /dev/null || echo --)\""\
-DGIT_BRANCH="\"$(shell git rev-parse --abbrev-ref HEAD 2> /dev/null || echo --)\""\
-DBUILD_USER="\"$(USER)@$(HOSTNAME)\""\
-DBUILD_DIRECTORY="\"$(PWD)\""
CFLAGS= -c -std=gnu11 $(OPT) $(GPROF) $(W) $(GDB)
OFLAGS= -lm $(GPROF) -lX11 -lXpm
SRCDIR=src
OBJDIR=obj
PICDIR=obj-pic
SRCDIRS=$(shell find $(SRCDIR) -type d)
INCL=$(SRCDIRS:%=-I./%)
allsrc=$(shell find $(SRCDIR) -type f -name '*.c')
allobj=$(allsrc:$(SRCDIR)/%.c=$(OBJDIR)/%.o)
allpic=$(allsrc:$(SRCDIR)/%.c=$(PICDIR)/%.o)
allmmd=$(allsrc:$(SRCDIR)/%.c=$(OBJDIR)/%.d)
OBJDIRS=$(SRCDIRS:$(SRCDIR)%=$(OBJDIR)%)
PICDIRS=$(SRCDIRS:$(SRCDIR)%=$(PICDIR)%)
_=$(shell for i in $(OBJDIRS) $(PICDIRS); do mkdir -p $$i ; done)
default : v
all : v v.so
v : $(allobj)
$(CC) $^ -o $@ $(OFLAGS)
v.so: $(allpic)
$(CC) $^ -shared -Wl,-soname,$@ $(OFLAGS) -o $@
$(OBJDIR)/%.o : $(SRCDIR)/%.c
$(CC) $(CFLAGS) $< -o $@ $(INCL) $(VERSION_FLAGS) -MMD -MT "$@ $(patsubst $(OBJDIR)%,$(PICDIR)%,$@)"
$(PICDIR)/%.o : $(SRCDIR)/%.c
$(CC) $(CFLAGS) -fPIC $< -o $@ $(INCL) $(VERSION_FLAGS) -MMD -MT "$(patsubst $(PICDIR)%,$(OBJDIR)%,$@) $@" -MF $(patsubst $(PICDIR)/%.o,$(OBJDIR)/%.d,$@)
clean:
rm -f $(allobj) $(allpic) v v.so
cleand:
rm -f $(allmmd)
cleantags:
rm -f ./.tags ./.types.vim
cleanall: clean cleand cleantags
include $(allmmd)