#Protobuf Compilation PROTOCC := protoc-c PROTOLIBS := proto PBUFV := 2.5.0 #Proto Module Compile rules PROTOFLAGS += $(patsubst %,--proto_path=%,$(PROTOLIBS)) APP_RULES += gen_proto CLEAN_RULES += protoclean SCRUB_RULES += protoscrub PROTO_SRC := $(wildcard proto/*.proto) PROTO_TARG := $(PROTO_SRC:.proto=.pb-c.c) PROTO_TARG := $(PROTO_TARG) $(PROTO_TARG:.c=.h) .PHONY: protoclean protoscrub gen_proto gen_proto: $(PROTO_TARG) #download protobuf and move the google proto files. proto/google: @mkdir tmp # @git clone git@github.com:google/protobuf.git tmp @curl https://protobuf.googlecode.com/files/protobuf-$(PBUFV).tar.gz | tar xz --directory=tmp @mv tmp/protobuf-$(PBUFV)/src/google proto/google @$(PROTOCC) --proto_path=proto/google/protobuf --c_out=proto/google/protobuf proto/google/protobuf/descriptor.proto @echo "google" > proto/.gitignore @echo "*.pb-c.*" >> proto/.gitignore @rm -Rf tmp #default rule for making protobuf-compiled C code %.pb-c.h %.pb-c.c: %.proto proto/google @$(PROTOCC) $(PROTOFLAGS) --c_out=$(@D) $< %.pb-c.h %.pb-c.c: proto/%.proto proto/google @$(PROTOCC) $(PROTOFLAGS) --c_out=proto $< %.pb-c.o %.pb-c.bc: %.pb-c.h %.pb-c.c @$(CC) -c -static $(CPPFLAGS) $(CFLAGS) -I/usr/include/google $< -o $@ protoclean: rm -f proto/*.pb-c.* protoscrub: rm -Rf proto/google rm -f proto/.gitignore