OSDN Git Service

Compile each proto file separately
authorBjorn Bringert <bringert@android.com>
Tue, 18 Oct 2011 15:08:27 +0000 (16:08 +0100)
committerBjorn Bringert <bringert@android.com>
Tue, 18 Oct 2011 15:08:27 +0000 (16:08 +0100)
Before, if a module had several proto source files,
they would all be compiled in a single invocation
of aprotoc. If any of the files imported one of the
other files, you got an aprotoc error about duplicates.
And if you removed the files that were imported
from the list of source files, no Java code
would be generated for the imported files,
causing a Java compile time error.

This changes compiles each proto file separately, which
avoids both of the problems above. It's slightly more
inefficient, but aprotoc is really fast.

Change-Id: I7bd8092ec2953c20269367a1c68ff84acceea3be

core/definitions.mk

index 1afc0f4..f385b74 100644 (file)
@@ -843,11 +843,13 @@ define transform-proto-to-java
 @echo "Protoc: $@ <= $(PRIVATE_PROTO_SRC_FILES)"
 @rm -rf $(PRIVATE_PROTO_JAVA_OUTPUT_DIR)
 @mkdir -p $(PRIVATE_PROTO_JAVA_OUTPUT_DIR)
-$(hide) $(PROTOC) \
-       $(addprefix --proto_path=, $(PRIVATE_PROTO_INCLUDES)) \
-       $(PRIVATE_PROTO_JAVA_OUTPUT_OPTION)=$(PRIVATE_PROTO_JAVA_OUTPUT_DIR) \
-       $(PRIVATE_PROTOC_FLAGS) \
-       $(PRIVATE_PROTO_SRC_FILES)
+$(hide) for f in $(PRIVATE_PROTO_SRC_FILES); do \
+        $(PROTOC) \
+        $(addprefix --proto_path=, $(PRIVATE_PROTO_INCLUDES)) \
+        $(PRIVATE_PROTO_JAVA_OUTPUT_OPTION)=$(PRIVATE_PROTO_JAVA_OUTPUT_DIR) \
+        $(PRIVATE_PROTOC_FLAGS) \
+        $$f; \
+        done
 $(hide) touch $@
 endef