From e25b3984ff5c74aa2a49d14b7df7aa9527096c32 Mon Sep 17 00:00:00 2001 From: Ying Wang Date: Thu, 26 Feb 2015 18:47:21 -0800 Subject: [PATCH] Improved nothing-to-do-build - Removed unnecessary dependency of "$(my_symlink) : $(LOCAL_INSTALLED_MODULE)" We can generate symlink to nonexistent file. Actually in multilib build $(LOCAL_INSTALLED_MODULE) points to file that may not be the target file of the symlink and leads to always obsolete $(my_symlink) in the above dependnecy. - Touch by-product in the dummy rule, to make sure the by-product is newer than the main-product. Change-Id: I2f0e0cc197c49f920fa1f6794083b21cdc333c20 --- core/binary.mk | 2 ++ core/executable_prefer_symlink.mk | 5 ++++- core/host_dalvik_java_library.mk | 8 ++++---- core/java.mk | 9 ++++----- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/core/binary.mk b/core/binary.mk index 56f8da869c..a9b9e65b19 100644 --- a/core/binary.mk +++ b/core/binary.mk @@ -483,6 +483,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) @@ -535,6 +536,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 diff --git a/core/executable_prefer_symlink.mk b/core/executable_prefer_symlink.mk index 2326e83a0d..fc97ad310e 100644 --- a/core/executable_prefer_symlink.mk +++ b/core/executable_prefer_symlink.mk @@ -39,7 +39,10 @@ $(my_symlink): PRIVATE_SRC_BINARY_NAME := $(LOCAL_MODULE_STEM_32) endif endif -$(my_symlink): $(LOCAL_INSTALLED_MODULE) $(LOCAL_MODULE_MAKEFILE) +# $(my_symlink) doesn't need to depend on $(PRIVATE_SRC_BINARY_NAME): we can generate symlink to nonexistent file. +# If you add the dependency, make would compare the timestamp of a file against that of its symlink: +# they are always equal, because make follows symlink. +$(my_symlink): $(LOCAL_MODULE_MAKEFILE) @echo "Symlink: $@ -> $(PRIVATE_SRC_BINARY_NAME)" @mkdir -p $(dir $@) @rm -rf $@ diff --git a/core/host_dalvik_java_library.mk b/core/host_dalvik_java_library.mk index 502016b037..9ee1183925 100644 --- a/core/host_dalvik_java_library.mk +++ b/core/host_dalvik_java_library.mk @@ -133,11 +133,11 @@ $(built_dex): $(java_sources) $(java_resource_sources) $(full_jack_lib_deps) \ @echo Building with Jack: $@ $(jack-java-to-dex) -# The empty command was added because, without it, make misses the fact the $(built_dex) also -# change $(full_classes_jack). Looks like it would test the date before running $(built_dex) -# command. +# $(full_classes_jack) is just by-product of $(built_dex). +# The dummy command was added because, without it, make misses the fact the $(built_dex) also +# change $(full_classes_jack). $(full_classes_jack): $(built_dex) - @echo + $(hide) touch $@ $(LOCAL_BUILT_MODULE): PRIVATE_DEX_FILE := $(built_dex) $(LOCAL_BUILT_MODULE): $(built_dex) $(java_resource_sources) diff --git a/core/java.mk b/core/java.mk index 6eb224795e..1494c4b4a1 100644 --- a/core/java.mk +++ b/core/java.mk @@ -611,13 +611,12 @@ $(built_dex_intermediate): $(jack_all_deps) @echo Building with Jack: $@ $(jack-java-to-dex) -# The empty command was added because, without it, make misses the fact the $(built_dex) also -# change $(full_classes_jack). Looks like it would test the date before running $(built_dex) -# command. +# $(full_classes_jack) is just by-product of $(built_dex_intermediate). +# The dummy command was added because, without it, make misses the fact the $(built_dex) also +# change $(full_classes_jack). $(full_classes_jack): $(built_dex_intermediate) - @echo + $(hide) touch $@ -# nothing to do it's built as a side effect of $(built_dex_intermediate) endif #LOCAL_IS_STATIC_JAVA_LIBRARY $(noshrob_classes_jack): PRIVATE_JACK_INTERMEDIATES_DIR := $(intermediates.COMMON)/jack-noshrob-rsc