Merge "Harden dependency on generated sources."
This commit is contained in:
commit
622b3c2764
2 changed files with 47 additions and 51 deletions
|
@ -654,59 +654,57 @@ endif
|
|||
## Compile the .proto files to .cc (or .c) and then to .o
|
||||
###########################################################
|
||||
proto_sources := $(filter %.proto,$(my_src_files))
|
||||
proto_generated_objects :=
|
||||
proto_generated_headers :=
|
||||
ifneq ($(proto_sources),)
|
||||
proto_generated_sources_dir := $(generated_sources_dir)/proto
|
||||
proto_generated_obj_dir := $(intermediates)/proto
|
||||
proto_gen_dir := $(generated_sources_dir)/proto
|
||||
proto_sources_fullpath := $(addprefix $(LOCAL_PATH)/, $(proto_sources))
|
||||
|
||||
my_rename_cpp_ext :=
|
||||
ifneq (,$(filter nanopb-c nanopb-c-enable_malloc, $(LOCAL_PROTOC_OPTIMIZE_TYPE)))
|
||||
my_proto_source_suffix := .c
|
||||
my_proto_c_includes := external/nanopb-c
|
||||
my_protoc_flags := --nanopb_out=$(proto_generated_sources_dir) \
|
||||
my_protoc_flags := --nanopb_out=$(proto_gen_dir) \
|
||||
--plugin=external/nanopb-c/generator/protoc-gen-nanopb
|
||||
my_protoc_deps := $(NANOPB_SRCS) $(proto_sources_fullpath:%.proto=%.options)
|
||||
else
|
||||
my_proto_source_suffix := .cc
|
||||
my_proto_source_suffix := $(LOCAL_CPP_EXTENSION)
|
||||
ifneq ($(my_proto_source_suffix),.cc)
|
||||
# aprotoc is hardcoded to write out only .cc file.
|
||||
# We need to rename the extension to $(LOCAL_CPP_EXTENSION) if it's not .cc.
|
||||
my_rename_cpp_ext := true
|
||||
endif
|
||||
my_proto_c_includes := external/protobuf/src
|
||||
my_cflags += -DGOOGLE_PROTOBUF_NO_RTTI
|
||||
my_protoc_flags := --cpp_out=$(proto_generated_sources_dir)
|
||||
my_protoc_flags := --cpp_out=$(proto_gen_dir)
|
||||
my_protoc_deps :=
|
||||
endif
|
||||
my_proto_c_includes += $(proto_generated_sources_dir)
|
||||
my_proto_c_includes += $(proto_gen_dir)
|
||||
|
||||
proto_generated_sources := $(addprefix $(proto_generated_sources_dir)/, \
|
||||
proto_generated_cpps := $(addprefix $(proto_gen_dir)/, \
|
||||
$(patsubst %.proto,%.pb$(my_proto_source_suffix),$(proto_sources_fullpath)))
|
||||
proto_generated_headers := $(patsubst %.pb$(my_proto_source_suffix),%.pb.h, $(proto_generated_sources))
|
||||
proto_generated_objects := $(addprefix $(proto_generated_obj_dir)/, \
|
||||
$(patsubst %.proto,%.pb.o,$(proto_sources_fullpath)))
|
||||
$(call track-src-file-obj,$(proto_sources),$(proto_generated_objects))
|
||||
|
||||
# Ensure the transform-proto-to-cc rule is only defined once in multilib build.
|
||||
ifndef $(my_prefix)_$(LOCAL_MODULE_CLASS)_$(LOCAL_MODULE)_proto_defined
|
||||
$(proto_generated_sources): PRIVATE_PROTO_INCLUDES := $(TOP)
|
||||
$(proto_generated_sources): PRIVATE_PROTOC_FLAGS := $(LOCAL_PROTOC_FLAGS) $(my_protoc_flags)
|
||||
$(proto_generated_sources): $(proto_generated_sources_dir)/%.pb$(my_proto_source_suffix): %.proto $(my_protoc_deps) $(PROTOC)
|
||||
ifndef $(my_host)$(LOCAL_MODULE_CLASS)_$(LOCAL_MODULE)_proto_defined
|
||||
$(proto_generated_cpps): PRIVATE_PROTO_INCLUDES := $(TOP)
|
||||
$(proto_generated_cpps): PRIVATE_PROTOC_FLAGS := $(LOCAL_PROTOC_FLAGS) $(my_protoc_flags)
|
||||
$(proto_generated_cpps): PRIVATE_RENAME_CPP_EXT := $(my_rename_cpp_ext)
|
||||
$(proto_generated_cpps): $(proto_gen_dir)/%.pb$(my_proto_source_suffix): %.proto $(my_protoc_deps) $(PROTOC)
|
||||
$(transform-proto-to-cc)
|
||||
|
||||
# This is just a dummy rule to make sure gmake doesn't skip updating the dependents.
|
||||
$(proto_generated_headers): $(proto_generated_sources_dir)/%.pb.h: $(proto_generated_sources_dir)/%.pb$(my_proto_source_suffix)
|
||||
@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
|
||||
|
||||
$(proto_generated_objects): PRIVATE_ARM_MODE := $(normal_objects_mode)
|
||||
$(proto_generated_objects): PRIVATE_ARM_CFLAGS := $(normal_objects_cflags)
|
||||
$(proto_generated_objects): $(proto_generated_obj_dir)/%.o: $(proto_generated_sources_dir)/%$(my_proto_source_suffix) $(proto_generated_headers)
|
||||
ifeq ($(my_proto_source_suffix),.c)
|
||||
$(transform-$(PRIVATE_HOST)c-to-o)
|
||||
else
|
||||
$(transform-$(PRIVATE_HOST)cpp-to-o)
|
||||
$(my_host)$(LOCAL_MODULE_CLASS)_$(LOCAL_MODULE)_proto_defined := true
|
||||
endif
|
||||
$(call include-depfiles-for-objs, $(proto_generated_objects))
|
||||
# Ideally we can generate the source directly into $(intermediates).
|
||||
# But many Android.mks assume the .pb.hs are in $(generated_sources_dir).
|
||||
# As a workaround, we make a copy in the $(intermediates).
|
||||
proto_intermediate_dir := $(intermediates)/proto
|
||||
proto_intermediate_cpps := $(patsubst $(proto_gen_dir)/%,$(proto_intermediate_dir)/%,\
|
||||
$(proto_generated_cpps))
|
||||
$(proto_intermediate_cpps) : $(proto_intermediate_dir)/% : $(proto_gen_dir)/%
|
||||
@echo "Copy: $@"
|
||||
$(copy-file-to-target)
|
||||
$(hide) cp $(basename $<).h $(basename $@).h
|
||||
$(call track-src-file-gen,$(proto_sources),$(proto_intermediate_cpps))
|
||||
|
||||
my_generated_sources += $(proto_intermediate_cpps)
|
||||
|
||||
my_c_includes += $(my_proto_c_includes)
|
||||
# Auto-export the generated proto source dir.
|
||||
|
@ -892,7 +890,7 @@ $(call track-src-file-obj,$(patsubst %,%.arm,$(cpp_arm_sources)),$(cpp_arm_objec
|
|||
dotdot_arm_objects :=
|
||||
$(foreach s,$(dotdot_arm_sources),\
|
||||
$(eval $(call compile-dotdot-cpp-file,$(s),\
|
||||
$(yacc_cpps) $(proto_generated_headers) $(my_additional_dependencies),\
|
||||
$(my_additional_dependencies),\
|
||||
dotdot_arm_objects)))
|
||||
$(call track-src-file-obj,$(patsubst %,%.arm,$(dotdot_arm_sources)),$(dotdot_arm_objects))
|
||||
|
||||
|
@ -900,7 +898,7 @@ dotdot_sources := $(filter ../%$(LOCAL_CPP_EXTENSION),$(my_src_files))
|
|||
dotdot_objects :=
|
||||
$(foreach s,$(dotdot_sources),\
|
||||
$(eval $(call compile-dotdot-cpp-file,$(s),\
|
||||
$(yacc_cpps) $(proto_generated_headers) $(my_additional_dependencies),\
|
||||
$(my_additional_dependencies),\
|
||||
dotdot_objects)))
|
||||
$(call track-src-file-obj,$(dotdot_sources),$(dotdot_objects))
|
||||
|
||||
|
@ -918,7 +916,6 @@ cpp_objects := $(cpp_arm_objects) $(cpp_normal_objects)
|
|||
ifneq ($(strip $(cpp_objects)),)
|
||||
$(cpp_objects): $(intermediates)/%.o: \
|
||||
$(TOPDIR)$(LOCAL_PATH)/%$(LOCAL_CPP_EXTENSION) \
|
||||
$(yacc_cpps) $(proto_generated_headers) \
|
||||
$(my_additional_dependencies)
|
||||
$(transform-$(PRIVATE_HOST)cpp-to-o)
|
||||
$(call include-depfiles-for-objs, $(cpp_objects))
|
||||
|
@ -940,8 +937,7 @@ ifneq ($(strip $(gen_cpp_objects)),)
|
|||
$(gen_cpp_objects): PRIVATE_ARM_MODE := $(normal_objects_mode)
|
||||
$(gen_cpp_objects): PRIVATE_ARM_CFLAGS := $(normal_objects_cflags)
|
||||
$(gen_cpp_objects): $(intermediates)/%.o: \
|
||||
$(intermediates)/%$(LOCAL_CPP_EXTENSION) $(yacc_cpps) \
|
||||
$(proto_generated_headers) \
|
||||
$(intermediates)/%$(LOCAL_CPP_EXTENSION) \
|
||||
$(my_additional_dependencies)
|
||||
$(transform-$(PRIVATE_HOST)cpp-to-o)
|
||||
$(call include-depfiles-for-objs, $(gen_cpp_objects))
|
||||
|
@ -996,7 +992,7 @@ $(call track-src-file-obj,$(patsubst %,%.arm,$(c_arm_sources)),$(c_arm_objects))
|
|||
dotdot_arm_objects :=
|
||||
$(foreach s,$(dotdot_arm_sources),\
|
||||
$(eval $(call compile-dotdot-c-file,$(s),\
|
||||
$(yacc_cpps) $(proto_generated_headers) $(my_additional_dependencies),\
|
||||
$(my_additional_dependencies),\
|
||||
dotdot_arm_objects)))
|
||||
$(call track-src-file-obj,$(patsubst %,%.arm,$(dotdot_arm_sources)),$(dotdot_arm_objects))
|
||||
|
||||
|
@ -1004,7 +1000,7 @@ dotdot_sources := $(filter ../%.c, $(my_src_files))
|
|||
dotdot_objects :=
|
||||
$(foreach s, $(dotdot_sources),\
|
||||
$(eval $(call compile-dotdot-c-file,$(s),\
|
||||
$(yacc_cpps) $(proto_generated_headers) $(my_additional_dependencies),\
|
||||
$(my_additional_dependencies),\
|
||||
dotdot_objects)))
|
||||
$(call track-src-file-obj,$(dotdot_sources),$(dotdot_objects))
|
||||
|
||||
|
@ -1020,7 +1016,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 \
|
||||
$(my_additional_dependencies)
|
||||
$(transform-$(PRIVATE_HOST)c-to-o)
|
||||
$(call include-depfiles-for-objs, $(c_objects))
|
||||
|
@ -1041,7 +1037,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 \
|
||||
$(my_additional_dependencies)
|
||||
$(transform-$(PRIVATE_HOST)c-to-o)
|
||||
$(call include-depfiles-for-objs, $(gen_c_objects))
|
||||
|
@ -1056,7 +1052,7 @@ objc_objects := $(addprefix $(intermediates)/,$(objc_sources:.m=.o))
|
|||
$(call track-src-file-obj,$(objc_sources),$(objc_objects))
|
||||
|
||||
ifneq ($(strip $(objc_objects)),)
|
||||
$(objc_objects): $(intermediates)/%.o: $(TOPDIR)$(LOCAL_PATH)/%.m $(yacc_cpps) $(proto_generated_headers) \
|
||||
$(objc_objects): $(intermediates)/%.o: $(TOPDIR)$(LOCAL_PATH)/%.m \
|
||||
$(my_additional_dependencies)
|
||||
$(transform-$(PRIVATE_HOST)m-to-o)
|
||||
$(call include-depfiles-for-objs, $(objc_objects))
|
||||
|
@ -1071,7 +1067,7 @@ objcpp_objects := $(addprefix $(intermediates)/,$(objcpp_sources:.mm=.o))
|
|||
$(call track-src-file-obj,$(objcpp_sources),$(objcpp_objects))
|
||||
|
||||
ifneq ($(strip $(objcpp_objects)),)
|
||||
$(objcpp_objects): $(intermediates)/%.o: $(TOPDIR)$(LOCAL_PATH)/%.mm $(yacc_cpps) $(proto_generated_headers) \
|
||||
$(objcpp_objects): $(intermediates)/%.o: $(TOPDIR)$(LOCAL_PATH)/%.mm \
|
||||
$(my_additional_dependencies)
|
||||
$(transform-$(PRIVATE_HOST)mm-to-o)
|
||||
$(call include-depfiles-for-objs, $(objcpp_objects))
|
||||
|
@ -1201,8 +1197,7 @@ normal_objects := \
|
|||
$(c_objects) \
|
||||
$(gen_c_objects) \
|
||||
$(objc_objects) \
|
||||
$(objcpp_objects) \
|
||||
$(proto_generated_objects)
|
||||
$(objcpp_objects)
|
||||
|
||||
new_order_normal_objects := $(foreach f,$(my_src_files),$(my_src_file_obj_$(f)))
|
||||
new_order_normal_objects += $(foreach f,$(my_gen_src_files),$(my_src_file_obj_$(f)))
|
||||
|
@ -1483,11 +1478,9 @@ export_include_deps += $(strip \
|
|||
$(foreach l,$(LOCAL_EXPORT_STATIC_LIBRARY_HEADERS), \
|
||||
$(call intermediates-dir-for,STATIC_LIBRARIES,$(l),$(LOCAL_IS_HOST_MODULE),,$(LOCAL_2ND_ARCH_VAR_PREFIX),$(my_host_cross))/export_includes))
|
||||
$(export_includes): PRIVATE_REEXPORTED_INCLUDES := $(export_include_deps)
|
||||
# Make sure .pb.h are already generated before any dependent source files get compiled.
|
||||
# Similarly, the generated DBus headers need to exist before we export their location.
|
||||
# People are not going to consume the aidl generated cpp file, but the cpp file is
|
||||
# generated after the headers, so this is a convenient way to ensure the headers exist.
|
||||
$(export_includes) : $(proto_generated_headers) $(dbus_generated_headers) $(aidl_gen_cpp) $(export_include_deps)
|
||||
# By adding $(my_generated_sources) it makes sure the headers get generated
|
||||
# before any dependent source files get compiled.
|
||||
$(export_includes) : $(my_generated_sources) $(export_include_deps)
|
||||
@echo Export includes file: $< -- $@
|
||||
$(hide) mkdir -p $(dir $@) && rm -f $@.tmp && touch $@.tmp
|
||||
ifdef my_export_c_include_dirs
|
||||
|
|
|
@ -1109,6 +1109,9 @@ $(hide) $(PROTOC) \
|
|||
$(addprefix --proto_path=, $(PRIVATE_PROTO_INCLUDES)) \
|
||||
$(PRIVATE_PROTOC_FLAGS) \
|
||||
$<
|
||||
@# aprotoc outputs only .cc. Rename it to .cpp if necessary.
|
||||
$(if $(PRIVATE_RENAME_CPP_EXT),\
|
||||
$(hide) mv $(basename $@).cc $@)
|
||||
endef
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue