From 7650ddad013dc0bad6d0d614c08a504345a9ee90 Mon Sep 17 00:00:00 2001 From: Jooyung Han Date: Wed, 5 Jul 2023 15:58:53 +0900 Subject: [PATCH 1/3] Install vintf_fragments even when they are shared Vintf_fragments should be installed regardless when they are shared with other modules or not. cc_binary { name: "foo", vintf_fragments: ["shared.xml"], } cc_binary { name: "bar", vintf_fragments: ["shared.xml"], } Either `m bar` or `m foo` should install `shared.xml`. Previously, only *new* vintf_fragments were installed, which means, one of "foo" or "bar" didn't trigger the installation of "shared.xml". Bug: 198818343 Test: (see above) Change-Id: I52b831df046b585db41449f06a6f9c684d623468 --- core/base_rules.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/base_rules.mk b/core/base_rules.mk index 9ad1cc5251..bb69149f29 100644 --- a/core/base_rules.mk +++ b/core/base_rules.mk @@ -578,7 +578,7 @@ ifneq (true,$(LOCAL_UNINSTALLABLE_MODULE)) ALL_VINTF_MANIFEST_FRAGMENTS_LIST += $(my_vintf_new_pairs) - $(my_all_targets) : $(my_vintf_new_installed) + $(my_all_targets) : $(my_vintf_installed) endif # my_vintf_fragments # Rule to install the module's companion init.rc. From b14b4cd6a551a8de01ae155b02e01ca4a8ca0af0 Mon Sep 17 00:00:00 2001 From: Jooyung Han Date: Wed, 5 Jul 2023 15:59:28 +0900 Subject: [PATCH 2/3] Install vintf_fragments/init_rc along with targets Even though `m foo` installs vintf_fragments and init_rc files. There was no direct dependency from the installed target to vintf_fragments/init_rc files. With the following: cc_binary { name: "foo", vintf_fragments: ["foo.xml"] } `m out/target/product/vsoc_x86_64/system/bin/foo` didn't install foo.xml. This change adds the order-only deps from the target install to vintf_fragments/init_fc files. Bug: 198818343 Test: (see above) Change-Id: I4656d43d15407a85fea7c95b22e4bbe19fb86aee --- core/base_rules.mk | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/core/base_rules.mk b/core/base_rules.mk index bb69149f29..3fef1e486f 100644 --- a/core/base_rules.mk +++ b/core/base_rules.mk @@ -579,6 +579,8 @@ ifneq (true,$(LOCAL_UNINSTALLABLE_MODULE)) ALL_VINTF_MANIFEST_FRAGMENTS_LIST += $(my_vintf_new_pairs) $(my_all_targets) : $(my_vintf_installed) + # Install fragments together with the target + $(LOCAL_INSTALLED_MODULE) : | $(my_vintf_installed) endif # my_vintf_fragments # Rule to install the module's companion init.rc. @@ -615,6 +617,8 @@ ifneq (true,$(LOCAL_UNINSTALLABLE_MODULE)) ALL_INIT_RC_INSTALLED_PAIRS += $(my_init_rc_new_pairs) $(my_all_targets) : $(my_init_rc_installed) + # Install init_rc together with the target + $(LOCAL_INSTALLED_MODULE) : | $(my_init_rc_installed) endif # my_init_rc endif # !LOCAL_IS_HOST_MODULE From 2ecded04a604c9d36a32e2900e55009f9db88cef Mon Sep 17 00:00:00 2001 From: Jooyung Han Date: Wed, 5 Jul 2023 16:00:36 +0900 Subject: [PATCH 3/3] Do not install required modules from order-only deps When a vintf_fragments or init_rc file is shared by two modules, unintended modules are installed due to the shared file. This was caused by add-all-target-to-target-required-modules-deps. With the following definitions: cc_binary { name: "foo", vintf_fragments: ["shared.xml"], required: ["foo-req"], } cc_binary { name: "bar", vintf_fragments: ["shared.xml"], } When installing "bar", surprisingly, "foo-req" is installed due to the link between "shared.xml" and "foo-req" added by add-all-target-to-target-required-modules-deps. To fix that, in this change, vintf_fragments and init_rc files are marked as "order-only" deps. In add-all-target-to-target-required-modules-deps, order-only deps are not used to add links to "required" modules. Now, with the same definitions, installing "bar" won't installs "foo-req". Bug: 198818343 Test: (see above) Change-Id: I16be0dcb84564c559cb2f4223e2812321ee14729 --- core/base_rules.mk | 9 +++++++++ core/main.mk | 2 ++ 2 files changed, 11 insertions(+) diff --git a/core/base_rules.mk b/core/base_rules.mk index 3fef1e486f..998cb0d3fd 100644 --- a/core/base_rules.mk +++ b/core/base_rules.mk @@ -979,6 +979,11 @@ ifneq (,$(LOCAL_SOONG_INSTALLED_MODULE)) $(my_init_rc_pairs) \ $(my_test_data_pairs) \ $(my_vintf_pairs)) + # Store the list of vintf/init_rc as order-only dependencies + ALL_MODULES.$(my_register_name).ORDERONLY_INSTALLED := \ + $(strip $(ALL_MODULES.$(my_register_name).ORDERONLY_INSTALLED) \ + $(my_init_rc_installed) \ + $(my_vintf_installed)) else ifneq (true,$(LOCAL_UNINSTALLABLE_MODULE)) ALL_MODULES.$(my_register_name).INSTALLED := \ $(strip $(ALL_MODULES.$(my_register_name).INSTALLED) \ @@ -988,6 +993,10 @@ else ifneq (true,$(LOCAL_UNINSTALLABLE_MODULE)) $(strip $(ALL_MODULES.$(my_register_name).BUILT_INSTALLED) \ $(LOCAL_BUILT_MODULE):$(LOCAL_INSTALLED_MODULE) \ $(my_init_rc_pairs) $(my_test_data_pairs) $(my_vintf_pairs)) + ALL_MODULES.$(my_register_name).ORDERONLY_INSTALLED := \ + $(strip $(ALL_MODULES.$(my_register_name).ORDERONLY_INSTALLED) \ + $(my_init_rc_installed) \ + $(my_vintf_installed)) endif ifdef LOCAL_PICKUP_FILES # Files or directories ready to pick up by the build system diff --git a/core/main.mk b/core/main.mk index 5a591f914f..058a1a8f87 100644 --- a/core/main.mk +++ b/core/main.mk @@ -810,12 +810,14 @@ $(call add-all-host-cross-to-host-cross-required-modules-deps) # Sets up dependencies such that whenever a target module is installed, # any other target modules listed in $(ALL_MODULES.$(m).REQUIRED_FROM_TARGET) will also be installed +# This doesn't apply to ORDERONLY_INSTALLED items. define add-all-target-to-target-required-modules-deps $(foreach m,$(ALL_MODULES), \ $(eval r := $(ALL_MODULES.$(m).REQUIRED_FROM_TARGET)) \ $(if $(r), \ $(eval r := $(call module-installed-files,$(r))) \ $(eval t_m := $(filter $(TARGET_OUT_ROOT)/%, $(ALL_MODULES.$(m).INSTALLED))) \ + $(eval t_m := $(filter-out $(ALL_MODULES.$(m).ORDERONLY_INSTALLED), $(ALL_MODULES.$(m).INSTALLED))) \ $(eval t_r := $(filter $(TARGET_OUT_ROOT)/%, $(r))) \ $(eval t_r := $(filter-out $(t_m), $(t_r))) \ $(if $(t_m), $(eval $(call add-required-deps, $(t_m),$(t_r)))) \