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
This commit is contained in:
Torne (Richard Coles) 2013-08-29 15:36:34 +01:00
parent 5430aeab36
commit a5afbe8ac6
1 changed files with 10 additions and 6 deletions

View File

@ -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)
###########################################################