summaryrefslogtreecommitdiffstats
path: root/core/binary.mk
diff options
context:
space:
mode:
Diffstat (limited to 'core/binary.mk')
-rw-r--r--core/binary.mk62
1 files changed, 59 insertions, 3 deletions
diff --git a/core/binary.mk b/core/binary.mk
index 69131c3..a45e439 100644
--- a/core/binary.mk
+++ b/core/binary.mk
@@ -475,6 +475,7 @@ rs_generated_cpps := $(addprefix \
# This is just a dummy rule to make sure gmake doesn't skip updating the dependents.
$(rs_generated_cpps) : $(RenderScript_file_stamp)
@echo "Updated RS generated cpp file $@."
+ $(hide) touch $@
my_c_includes += $(renderscript_intermediate)
my_generated_sources += $(rs_generated_cpps)
@@ -498,6 +499,18 @@ my_generated_sources := $(patsubst $(generated_sources_dir)/%,$(intermediates)/%
ALL_GENERATED_SOURCES += $(my_generated_sources)
###########################################################
+# PROTOC transforms
+###########################################################
+
+proto_sources := $(filter %.proto,$(LOCAL_SRC_FILES))
+
+proto_generated_objects :=
+proto_generated_headers :=
+nanopb_c_generated_objects :=
+nanopb_c_generated_headers :=
+ifeq (,$(filter nanopb-c nanopb-c-enable_malloc, $(LOCAL_PROTOC_OPTIMIZE_TYPE)))
+
+###########################################################
## Compile the .proto files to .cc and then to .o
###########################################################
proto_sources := $(filter %.proto,$(my_src_files))
@@ -527,6 +540,7 @@ $(proto_generated_cc_sources): $(proto_generated_cc_sources_dir)/%.pb.cc: %.prot
# This is just a dummy rule to make sure gmake doesn't skip updating the dependents.
$(proto_generated_headers): $(proto_generated_cc_sources_dir)/%.pb.h: $(proto_generated_cc_sources_dir)/%.pb.cc
@echo "Updated header file $@."
+ $(hide) touch $@
$(my_prefix)_$(LOCAL_MODULE_CLASS)_$(LOCAL_MODULE)_proto_defined := true
endif # transform-proto-to-cc rule included only once
@@ -555,6 +569,47 @@ endif
endif # $(proto_sources) non-empty
+else
+
+###########################################################
+## Compile the .proto files to .c from nanopb-c and then to .o
+###########################################################
+ifneq ($(proto_sources),)
+nanopb_c_sources_fullpath := $(addprefix $(LOCAL_PATH)/, $(proto_sources))
+nanopb_c_generated_sources_dir := $(intermediates)/proto
+nanopb_c_generated_sources := $(addprefix $(nanopb_c_generated_sources_dir)/, \
+ $(patsubst %.proto,%.pb.c,$(nanopb_c_sources_fullpath)))
+nanopb_c_generated_objects := $(patsubst %.c,%.o, $(nanopb_c_generated_sources))
+
+# Auto-export the generated proto source dir.
+LOCAL_EXPORT_C_INCLUDE_DIRS += $(nanopb_c_generated_sources_dir)
+
+$(nanopb_c_generated_sources): PRIVATE_NANOPB_C_INCLUDES := $(TOP)
+$(nanopb_c_generated_sources): PRIVATE_NANOPB_C_OUTPUT_DIR := $(nanopb_c_generated_sources_dir)
+$(nanopb_c_generated_sources): PRIVATE_NANOPB_C_FLAGS := $(LOCAL_PROTOC_FLAGS)
+
+$(nanopb_c_generated_sources): $(nanopb_c_generated_sources_dir)/%.pb.c: %.proto $(PROTOC)
+ $(transform-nanopb_c-to-c)
+
+nanopb_c_generated_headers := $(patsubst %.pb.c,%.pb.h, $(nanopb_c_generated_sources))
+$(nanopb_c_generated_headers): $(nanopb_c_generated_sources_dir)/%.pb.h: $(nanopb_c_generated_sources_dir)/%.pb.c
+
+$(nanopb_c_generated_objects): PRIVATE_ARM_MODE := $(normal_objects_mode)
+$(nanopb_c_generated_objects): PRIVATE_ARM_CFLAGS := $(normal_objects_cflags)
+$(nanopb_c_generated_objects): $(nanopb_c_generated_sources_dir)/%.o: $(nanopb_c_generated_sources_dir)/%.c $(nanopb_c_generated_headers)
+ $(transform-$(PRIVATE_HOST)c-to-o)
+-include $(nanopb_c_generated_objects:%.o=%.P)
+
+LOCAL_C_INCLUDES += external/nanopb-c $(dir $(nanopb_c_generated_headers))
+ifeq ($(LOCAL_PROTOC_OPTIMIZE_TYPE),nanopb-c-enable_malloc)
+LOCAL_STATIC_LIBRARIES += libnanopb-c-2.8.0-enable_malloc
+else
+LOCAL_STATIC_LIBRARIES += libnanopb-c-2.8.0
+endif
+endif
+
+endif
+
###########################################################
## YACC: Compile .y and .yy files to .cpp and the to .o.
###########################################################
@@ -765,7 +820,7 @@ $(dotdot_objects) $(c_normal_objects): PRIVATE_ARM_CFLAGS := $(normal_objects_cf
c_objects := $(c_arm_objects) $(c_normal_objects)
ifneq ($(strip $(c_objects)),)
-$(c_objects): $(intermediates)/%.o: $(TOPDIR)$(LOCAL_PATH)/%.c $(yacc_cpps) $(proto_generated_headers) \
+$(c_objects): $(intermediates)/%.o: $(TOPDIR)$(LOCAL_PATH)/%.c $(yacc_cpps) $(proto_generated_headers) $(nanopb_c_generated_headers) \
$(my_additional_dependencies)
$(transform-$(PRIVATE_HOST)c-to-o)
-include $(c_objects:%.o=%.P)
@@ -785,7 +840,7 @@ ifneq ($(strip $(gen_c_objects)),)
# TODO: support compiling certain generated files as arm.
$(gen_c_objects): PRIVATE_ARM_MODE := $(normal_objects_mode)
$(gen_c_objects): PRIVATE_ARM_CFLAGS := $(normal_objects_cflags)
-$(gen_c_objects): $(intermediates)/%.o: $(intermediates)/%.c $(yacc_cpps) $(proto_generated_headers) \
+$(gen_c_objects): $(intermediates)/%.o: $(intermediates)/%.c $(yacc_cpps) $(proto_generated_headers) $(nanopb_c_generated_headers) \
$(my_additional_dependencies)
$(transform-$(PRIVATE_HOST)c-to-o)
-include $(gen_c_objects:%.o=%.P)
@@ -920,6 +975,7 @@ normal_objects := \
$(objc_objects) \
$(yacc_objects) \
$(lex_objects) \
+ $(nanopb_c_generated_objects) \
$(proto_generated_objects) \
$(addprefix $(TOPDIR)$(LOCAL_PATH)/,$(LOCAL_PREBUILT_OBJ_FILES))
@@ -1088,7 +1144,7 @@ $(LOCAL_INSTALLED_MODULE): | $(installed_static_library_notice_file_targets)
export_includes := $(intermediates)/export_includes
$(export_includes): PRIVATE_EXPORT_C_INCLUDE_DIRS := $(LOCAL_EXPORT_C_INCLUDE_DIRS)
# Make sure .pb.h are already generated before any dependent source files get compiled.
-$(export_includes) : $(LOCAL_MODULE_MAKEFILE) $(proto_generated_headers)
+$(export_includes) : $(LOCAL_MODULE_MAKEFILE) $(proto_generated_headers) $(nanopb_c_generated_headers)
@echo Export includes file: $< -- $@
$(hide) mkdir -p $(dir $@) && rm -f $@
ifdef LOCAL_EXPORT_C_INCLUDE_DIRS