From a5afbe8ac666615058e200ecf8fbc4908eadb95d Mon Sep 17 00:00:00 2001 From: "Torne (Richard Coles)" Date: Thu, 29 Aug 2013 15:36:34 +0100 Subject: [PATCH] Fix handling of .o files in LOCAL_GENERATED_SOURCES. Rule-generated .o files (in gen_o_objects) were being given a dependency on everything in LOCAL_GENERATED_SOURCES (except for other .o files); unfortunately this can still create cycles in cases where there are explicit dependencies between entries in LOCAL_GENERATED_SOURCES. Instead, make handling of generated .o files consistent with other generated files (which don't automatically get any dependencies on other generated files) by excluding them from the target side of the rule. Change-Id: I3fb5652dc3d85012c179a03b81887d16a85ab3bf --- core/binary.mk | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/core/binary.mk b/core/binary.mk index 3b3557dc8..554b8c71a 100644 --- a/core/binary.mk +++ b/core/binary.mk @@ -602,7 +602,7 @@ endif # some rules depend on asm_objects being first. If your code depends on # being first, it's reasonable to require it to be assembly -all_objects := \ +normal_objects := \ $(asm_objects) \ $(cpp_objects) \ $(gen_cpp_objects) \ @@ -613,8 +613,9 @@ all_objects := \ $(yacc_objects) \ $(lex_objects) \ $(proto_generated_objects) \ - $(addprefix $(TOPDIR)$(LOCAL_PATH)/,$(LOCAL_PREBUILT_OBJ_FILES)) \ - $(gen_o_objects) + $(addprefix $(TOPDIR)$(LOCAL_PATH)/,$(LOCAL_PREBUILT_OBJ_FILES)) + +all_objects := $(normal_objects) $(gen_o_objects) LOCAL_C_INCLUDES += $(TOPDIR)$(LOCAL_PATH) $(intermediates) @@ -622,9 +623,12 @@ ifndef LOCAL_SDK_VERSION LOCAL_C_INCLUDES += $(JNI_H_INCLUDE) endif -# .o files need to be filtered out of LOCAL_GENERATED_SOURCES -# to avoid creating circular dependencies. -$(all_objects) : | $(filter-out %.o,$(LOCAL_GENERATED_SOURCES)) $(import_includes) +# all_objects includes gen_o_objects which were part of LOCAL_GENERATED_SOURCES; +# use normal_objects here to avoid creating circular dependencies. This assumes +# that custom build rules which generate .o files don't consume other generated +# sources as input (or if they do they take care of that dependency themselves). +$(normal_objects) : | $(LOCAL_GENERATED_SOURCES) +$(all_objects) : | $(import_includes) ALL_C_CPP_ETC_OBJECTS += $(all_objects) ###########################################################