summaryrefslogtreecommitdiff
path: root/Makefile
blob: d2a0221911ef89d14e6f493b17ce29edae096e2f (plain) (blame)
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
BINARY ?= obj/lprotoc
CXXFLAGS += -Isrc -I. $(shell pkg-config --cflags protobuf)
LDFLAGS  += $(shell pkg-config --libs protobuf)

# Echo function
<< := @echo
ifneq ($(shell eval 'echo -e'),-e)
	<< += -e
endif


<<objects>> := obj/system.lex.o obj/system.tab.o obj/system.pb.o


all: $(BINARY) doc

%.lex.cc: %.flex
	$(<<) "  LEX\t" $(<:src/%=%)
	@flex -+ -o $(@) $(<)

%.tab.cc: %.yy
	$(<<) "BISON\t" $(<:src/%=%) $(@:src/%=%)
	@bison -o $(@) $(<)

%.tab.hh: %.yy
	$(<<) "BISON\t" $(<:src/%=%) $(@:src/%=%)
	@bison -o /dev/null --header=$(@) $(<)


%.pb.cc %.pb.h: %.proto
	$(<<) "PROTOC" $(<)
	@protoc --cpp_out=. $(<)

src/system.lex.cc: src/system.tab.hh
src/system.tab.cc: src/system.pb.h

obj/%.o: src/%.cc
	$(<<) "  CXX\t" $(<:src/%=%)
	@mkdir -p $(shell dirname $(@))
	@$(CXX) -c $(<) -o $(@) $(CXXFLAGS)

doc/%.tab.gv: src/%.yy
	$(<<) "BISON\t" $(<:src/%=%) $(@:doc/%=%)
	@mkdir -p $(shell dirname $(@))
	@bison -o $(<:src/%.yy=.%.gv.tab) --graph=$(@) $(<)
	@$(RM) $(<:src/%.yy=.%.gv.tab)

doc/%.tab.html: src/%.yy
	$(<<) "BISON\t" $(<:src/%=%) $(@:doc/%=%)
	@mkdir -p $(shell dirname $(@))
	@bison -o $(<:src/%.yy=.%.html.tab) --html=$(@) $(<)
	@$(RM) $(<:src/%.yy=.%.html.tab) $(<:src/%.yy=.%.html.xml)

doc/%.tab.xml: src/%.yy
	$(<<) "BISON\t" $(<:src/%=%) $(@:doc/%=%)
	@mkdir -p $(shell dirname $(@))
	@bison -o $(<:src/%.yy=.%.xml.tab) --xml=$(@) $(<)
	@$(RM) $(<:src/%.yy=.%.xml.tab)

$(BINARY): $(<<objects>>)
	$(<<) "LINK\t" $(^:obj/%=%)
	@$(CXX) $(^) -o $(@) $(LDFLAGS)

clean:
	$(<<) "  RM\t" $(wildcard obj/** doc/**)
	@$(RM) -f $(wildcard obj/** doc/**)

doc: doc/system.tab.gv doc/system.tab.html doc/system.tab.xml

.PHONY: all clean install uninstall test doc
.INTERMEDIATE: src/system.lex.cc src/system.pb.h src/system.tab.cc src/system.tab.hh