From c67e769b8c44eeb9bb851f20003b63d35193e155 Mon Sep 17 00:00:00 2001 From: Cole Faust Date: Fri, 1 Sep 2023 16:15:00 -0700 Subject: [PATCH] Install LOCAL_SOONG_INSTALL_SYMLINKS even if LOCAL_SOONG_INSTALLED_MODULE isn't set LOCAL_SOONG_INSTALL_SYMLINKS can now be set by the install_symlink module type. The install_symlink module type doesn't set LOCAL_SOONG_INSTALLED_MODULE because make tries to copy that file around, which doesn't work with a symlink. Bug: 205632228 Test: built and ran the emulator observed the /system/bin/hwservicemanager symlink is still there Change-Id: I1ec355b5ae057d0b7fe167674d70da6a4d03f6b5 --- core/Makefile | 6 ------ core/base_rules.mk | 23 +++++++++++++++++++---- core/definitions.mk | 4 ++++ target/product/generic_system.mk | 4 ++++ 4 files changed, 27 insertions(+), 10 deletions(-) diff --git a/core/Makefile b/core/Makefile index b715ac3c7f..a1294417ca 100644 --- a/core/Makefile +++ b/core/Makefile @@ -3331,12 +3331,6 @@ ifdef BOARD_USES_SYSTEM_EXTIMAGE ALL_DEFAULT_INSTALLED_MODULES += $(_systemext_symlink) endif -# Create symlink /system/bin/hwservicemanager -> /system/system_ext/bin/hwservicemanager -# Old vendor libraries (like libhidlbase) may require /system/bin/hwservicemanager to be present -$(call symlink-file,$(TARGET_OUT_SYSTEM_EXT)/bin/hwservicemanager,/system/system_ext/bin/hwservicemanager, $(TARGET_OUT)/bin/hwservicemanager) -INTERNAL_SYSTEMIMAGE_FILES += \ - $(TARGET_OUT)/bin/hwservicemanager - # ----------------------------------------------------------------- # system_dlkm partition image diff --git a/core/base_rules.mk b/core/base_rules.mk index b3c5b946fa..3313b5fa8c 100644 --- a/core/base_rules.mk +++ b/core/base_rules.mk @@ -521,10 +521,6 @@ ifneq (,$(LOCAL_SOONG_INSTALLED_MODULE)) # copy of the intermediates for now, as some rules that collect intermediates may expect # them to exist. $(LOCAL_INSTALLED_MODULE): $(LOCAL_BUILT_MODULE) - - $(foreach symlink, $(LOCAL_SOONG_INSTALL_SYMLINKS), \ - $(call declare-0p-target,$(symlink))) - $(my_all_targets) : | $(LOCAL_SOONG_INSTALL_SYMLINKS) else ifneq (true,$(LOCAL_UNINSTALLABLE_MODULE)) $(LOCAL_INSTALLED_MODULE): PRIVATE_POST_INSTALL_CMD := $(LOCAL_POST_INSTALL_CMD) $(LOCAL_INSTALLED_MODULE): $(LOCAL_BUILT_MODULE) @@ -546,6 +542,15 @@ else ifneq (true,$(LOCAL_UNINSTALLABLE_MODULE)) endif # !LOCAL_UNINSTALLABLE_MODULE +# Add dependencies on LOCAL_SOONG_INSTALL_SYMLINKS if we're installing any kind of module, not just +# ones that set LOCAL_SOONG_INSTALLED_MODULE. This is so we can have a soong module that only +# installs symlinks (e.g. install_symlink). We can't set LOCAL_SOONG_INSTALLED_MODULE to a symlink +# because cp commands will fail on symlinks. +ifneq (,$(or $(LOCAL_SOONG_INSTALLED_MODULE),$(call boolean-not,$(LOCAL_UNINSTALLABLE_MODULE)))) + $(foreach symlink, $(LOCAL_SOONG_INSTALL_SYMLINKS), $(call declare-0p-target,$(symlink))) + $(my_all_targets) : | $(LOCAL_SOONG_INSTALL_SYMLINKS) +endif + ########################################################### ## VINTF manifest fragment and init.rc goals ########################################################### @@ -1001,6 +1006,16 @@ else ifneq (true,$(LOCAL_UNINSTALLABLE_MODULE)) $(my_init_rc_installed) \ $(my_vintf_installed)) endif + +# Mark LOCAL_SOONG_INSTALL_SYMLINKS as installed if we're installing any kind of module, not just +# ones that set LOCAL_SOONG_INSTALLED_MODULE. This is so we can have a soong module that only +# installs symlinks (e.g. installed_symlink). We can't set LOCAL_SOONG_INSTALLED_MODULE to a symlink +# because cp commands will fail on symlinks. +ifneq (,$(or $(LOCAL_SOONG_INSTALLED_MODULE),$(call boolean-not,$(LOCAL_UNINSTALLABLE_MODULE)))) + ALL_MODULES.$(my_register_name).INSTALLED += $(LOCAL_SOONG_INSTALL_SYMLINKS) + ALL_MODULES.$(my_register_name).INSTALLED_SYMLINKS := $(LOCAL_SOONG_INSTALL_SYMLINKS) +endif + ifdef LOCAL_PICKUP_FILES # Files or directories ready to pick up by the build system # when $(LOCAL_BUILT_MODULE) is done. diff --git a/core/definitions.mk b/core/definitions.mk index 07779040f6..909357ce2b 100644 --- a/core/definitions.mk +++ b/core/definitions.mk @@ -147,6 +147,10 @@ define true-or-empty $(filter true, $(1)) endef +define boolean-not +$(if $(filter true,$(1)),,true) +endef + ########################################################### ## Rule for touching GCNO files. ########################################################### diff --git a/target/product/generic_system.mk b/target/product/generic_system.mk index f194d8b7fe..dc9324cf0c 100644 --- a/target/product/generic_system.mk +++ b/target/product/generic_system.mk @@ -131,6 +131,10 @@ PRODUCT_SYSTEM_DEVICE := generic _base_mk_allowed_list := +# TODO(b/299166571) Remove this after the artifact path requirements checker picks up +# hwservicemanager correctly. +PRODUCT_ARTIFACT_PATH_REQUIREMENT_ALLOWED_LIST += $(TARGET_COPY_OUT_SYSTEM)/bin/hwservicemanager + _my_allowed_list := $(_base_mk_allowed_list) # For mainline, system.img should be mounted at /, so we include ROOT here.