Commit ee3239f9 authored by Cyrill Gorcunov's avatar Cyrill Gorcunov Committed by Pavel Emelyanov

make: protobuf -- Rework build procedure

Instead of generating intermideate files with .SECONDARY
helper lets calculate proto deps on the fly.
Signed-off-by: 's avatarCyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent c864a31f
##
##
## Unfortunately protobuf-c compiler is extremely dumb
## one, and I'm that ->.<- close to rewrite it on plain
## C language.
##
## Meanwhile, we need to carry own rules instead of reusing
## our build farm.
CFLAGS += -I$(obj)/
proto-obj-y += stats.o proto-obj-y += stats.o
proto-obj-y += core.o proto-obj-y += core.o
proto-obj-y += core-x86.o proto-obj-y += core-x86.o
...@@ -64,56 +53,46 @@ proto-obj-y += ext-file.o ...@@ -64,56 +53,46 @@ proto-obj-y += ext-file.o
proto-obj-y += cgroup.o proto-obj-y += cgroup.o
proto-obj-y += userns.o proto-obj-y += userns.o
proto-obj-y += google/protobuf/descriptor.o # To make protoc-c happy and compile opts.proto proto-obj-y += google/protobuf/descriptor.o # To make protoc-c happy and compile opts.proto
proto-pbj-y += opts.o proto-obj-y += opts.o
proto := $(proto-obj-y:.o=)
proto-c := $(proto-obj-y:.o=.pb-c.c)
proto-h := $(proto-obj-y:.o=.pb-c.h)
.SECONDARY:
$(obj)/%.proto.d: $(obj)/%.proto CFLAGS += -I$(obj)/
$(E) " PB DDEP " $@
$(Q) grep "^[[:blank:]]*import[[:blank:]]" $^ | sed \
-e 's/[[:blank:]]*import[[:blank:]]*//' \
-e 's/[\";]//g' \
-e 's/.*/$(subst /,\/,$^):$(subst /,\/,$(obj))\/&/' | \
uniq > $@
$(obj)/%.proto.c.d: $(obj)/%.proto | $(obj)/%.proto.d #
$(E) " PB DEP " $@ # Generates a set of names from protobuf "import" directive.
$(Q) grep "^[[:blank:]]*import[[:blank:]]" $< | sed \ # The names are bare, ie no suffixes.
-e 's/[[:blank:]]*import[[:blank:]]*//' \ define gen-proto-dep-names
-e 's/.proto/.pb-c.c/' \ $(shell grep "^[[:blank:]]*import[[:blank:]]" $(1) | \
-e 's/[\";]//g' \ sed -e 's/[[:blank:]]*import[[:blank:]]*//' \
-e 's/.*/$(subst .proto,.pb-c.c,$(subst /,\/,$<)):$(subst /,\/,$(obj))\/&/' | \ -e 's/[\";]//g' \
uniq > $@ -e 's/\.proto//g' | \
sort | uniq)
endef
$(obj)/%.pb-c.c $(obj)/%.pb-c.h: $(obj)/%.proto $(obj)/%.proto.c.d $(obj)/opts.pb-c.c #
$(E) " PBCC " $@ # Generates rules needed to compile protobuf files.
$(Q) protoc-c --proto_path=$(obj)/ --c_out=$(obj)/ $< define gen-proto-rules
$(obj)/$(1).pb-c.c $(obj)/$(1).pb-c.h: $(obj)/$(1).proto $(addsuffix .pb-c.c,$(addprefix $(obj)/,$(2)))
$$(E) " PBCC " $$@
$$(Q) protoc-c --proto_path=$(obj)/ --c_out=$(obj)/ $$<
ifeq ($(SRCARCH),arm) ifeq ($(SRCARCH),arm)
$(Q) sed -i -e 's/4294967295/0xFFFFFFFF/g' $@ $$(Q) sed -i -e 's/4294967295/0xFFFFFFFF/g' $$@
$(Q) sed -i -e 's/4294967295/0xFFFFFFFF/g' $(patsubst %.c,%.h,$@) $$(Q) sed -i -e 's/4294967295/0xFFFFFFFF/g' $$(patsubst %.c,%.h,$$@)
$(Q) sed -i -e 's/4294967295/0xFFFFFFFF/g' $(patsubst %.h,%.c,$@) $$(Q) sed -i -e 's/4294967295/0xFFFFFFFF/g' $$(patsubst %.h,%.c,$$@)
endif endif
$(obj)/$(1).pb-c.d: $(obj)/$(1).pb-c.c $(addsuffix .pb-c.d,$(addprefix $(obj)/,$(2)))
$$(E) " DEP " $$@
$$(Q) $$(CC) -M -MT $$@ -MT $(patsubst %.d,%.o,$$@) $$(CFLAGS) $$< -o $$@
endef
_first_stage := $(addprefix $(obj)/,$(proto-obj-y:.o=.pb-c.c)) $(foreach file, $(proto-obj-y), \
_first_stage += $(addprefix $(obj)/,$(proto-obj-y:.o=.pb-c.h)) $(eval $(call gen-proto-rules,$(file:.o=), \
$(obj)/%.pb-c.d: $(_first_stage) $(call gen-proto-dep-names, \
$(addprefix $(obj)/,$(file:.o=.proto))))))
$(obj)/%.o: $(obj)/%.pb-c.c $(obj)/%.pb-c.h $(obj)/%.pb-c.d $(obj)/%.o: $(obj)/%.pb-c.c $(obj)/%.pb-c.h
$(E) " CC " $@ $(E) " CC " $@
$(Q) $(CC) -c $(CFLAGS) $< -o $@ $(Q) $(CC) -c $(CFLAGS) $< -o $@
$(obj)/%.pb-c.d: $(obj)/%.pb-c.c $(obj)/%.pb-c.h
$(E) " DEP " $@
$(Q) $(CC) -M -MT $@ -MT $(patsubst %.d,%.o,$@) $(CFLAGS) $< -o $@
$(obj)/%.pb-c.i: $(obj)/%.pb-c.c $(obj)/%.pb-c.h
$(E) " CC " $@
$(Q) $(CC) -E $(CFLAGS) $< -o $@
$(obj)/built-in.o: $(addprefix $(obj)/,$(proto-obj-y)) $(obj)/built-in.o: $(addprefix $(obj)/,$(proto-obj-y))
$(E) " LINK " $@ $(E) " LINK " $@
$(Q) $(LD) -r -o $@ $^ $(Q) $(LD) -r -o $@ $^
...@@ -121,8 +100,7 @@ $(obj)/built-in.o: $(addprefix $(obj)/,$(proto-obj-y)) ...@@ -121,8 +100,7 @@ $(obj)/built-in.o: $(addprefix $(obj)/,$(proto-obj-y))
_all += $(obj)/built-in.o _all += $(obj)/built-in.o
ifneq ($(MAKECMDGOALS),clean) ifneq ($(MAKECMDGOALS),clean)
-include $(addprefix $(obj)/,$(proto-obj-y:.o=.proto.d)) -include $(addprefix $(obj)/,$(proto-obj-y:.o=.pb-c.d))
-include $(addprefix $(obj)/,$(proto-obj-y:.o=.proto.c.d))
endif endif
cleanup-y += $(obj)/*.c.d $(obj)/*.pb-c.c $(obj)/*.pb-c.h cleanup-y += $(obj)/*.c.d $(obj)/*.pb-c.c $(obj)/*.pb-c.h
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment