summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile51
1 files changed, 51 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..2b2ccce
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,51 @@
+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
+
+
+<<sources>> := src/system.l src/system.proto src/system.yy
+<<objects>> := obj/system.lex.o obj/system.tab.o obj/system.pb.o
+
+all: $(BINARY)
+
+%.lex.cc: %.l
+ $(<<) " 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.tab.cc: src/system.pb.h
+
+obj/%.o: src/%.cc
+ $(<<) " CXX\t" $(<:src/%=%)
+ @mkdir -p $(shell dirname $(@))
+ @$(CXX) -c $(<) -o $(@) $(CXXFLAGS)
+
+
+$(BINARY): $(<<objects>>)
+ $(<<) "LINK\t" $(^:obj/%=%)
+ @$(CXX) $(^) -o $(@) $(LDFLAGS)
+
+clean:
+ $(<<) " RM\t" $(<<objects>>:obj/%=%) $(BINARY)
+ @$(RM) -f $(<<objects>>) $(BINARY)
+
+.PHONY: all clean install uninstall test
+.INTERMEDIATE: src/system.lex.cc src/system.pb.h src/system.tab.cc src/system.tab.hh