diff --git a/core/base_rules.mk b/core/base_rules.mk index 56df2a918c..13d20e073f 100644 --- a/core/base_rules.mk +++ b/core/base_rules.mk @@ -269,9 +269,6 @@ LOCAL_INTERMEDIATE_TARGETS += $(LOCAL_BUILT_MODULE) # dependent binaries of a .toc file will be rebuilt only when the content of # the .toc file is changed. ########################################################### -ifndef LOCAL_IS_HOST_MODULE -# Disable .toc optimization for host modules: we may run the host binaries during the build process -# and the libraries' implementation matters. ifeq ($(LOCAL_MODULE_CLASS),SHARED_LIBRARIES) LOCAL_INTERMEDIATE_TARGETS += $(LOCAL_BUILT_MODULE).toc $(LOCAL_BUILT_MODULE).toc: $(LOCAL_BUILT_MODULE) @@ -283,7 +280,6 @@ $(LOCAL_BUILT_MODULE).toc: $(LOCAL_BUILT_MODULE) # Build .toc file when using mm, mma, or make $(my_register_name) $(my_all_targets): $(LOCAL_BUILT_MODULE).toc endif -endif ########################################################### ## logtags: Add .logtags files to global list diff --git a/core/binary.mk b/core/binary.mk index 6413153ebd..4dcb152b74 100644 --- a/core/binary.mk +++ b/core/binary.mk @@ -1507,13 +1507,7 @@ built_shared_libraries := \ $(addprefix $($(LOCAL_2ND_ARCH_VAR_PREFIX)$(my_prefix)OUT_INTERMEDIATE_LIBRARIES)/, \ $(addsuffix $(so_suffix), \ $(installed_shared_library_module_names))) -ifdef LOCAL_IS_HOST_MODULE -# Disable .toc optimization for host modules: we may run the host binaries during the build process -# and the libraries' implementation matters. -built_shared_library_deps := $(built_shared_libraries) -else built_shared_library_deps := $(addsuffix .toc, $(built_shared_libraries)) -endif my_system_shared_libraries_fullpath := endif diff --git a/core/main.mk b/core/main.mk index e1f0a1d278..48dbf158c6 100644 --- a/core/main.mk +++ b/core/main.mk @@ -661,6 +661,14 @@ define add-required-deps $(1): | $(2) endef +# Use a normal dependency instead of an order-only dependency when installing +# host dynamic binaries so that the timestamp of the final binary always +# changes, even if the toc optimization has skipped relinking the binary +# and its dependant shared libraries. +define add-required-host-so-deps +$(1): $(2) +endef + $(foreach m,$(ALL_MODULES), \ $(eval r := $(ALL_MODULES.$(m).REQUIRED)) \ $(if $(r), \ @@ -703,7 +711,9 @@ $(foreach m,$($(if $(2),$($(1)2ND_ARCH_VAR_PREFIX))$(1)DEPENDENCIES_ON_SHARED_LI $(if $(3),$(eval deps := $(addprefix host_cross_,$(deps))))\ $(eval r := $(filter $($(root))/%,$(call module-installed-files,\ $(deps))))\ - $(eval $(call add-required-deps,$(word 2,$(p)),$(r)))\ + $(if $(filter $(1),HOST_),\ + $(eval $(call add-required-host-so-deps,$(word 2,$(p)),$(r))),\ + $(eval $(call add-required-deps,$(word 2,$(p)),$(r))))\ $(eval ALL_MODULES.$(mod).REQUIRED += $(deps))) endef