Add missing vndk-sp libs to the VNDK-SP list

For the Treble devices without BOARD_VNDK_VERSION, we must have a
list of vndk-sp libs.
If there are some missing vndk-sp libs in the list, add them to the
list automatically.

Bug: 72470805
Bug: 69526027
Test: build sailfish/marlin and check boot
Change-Id: Ifc30ae32b6353141954bdcb8b0e40940382eb8a4
diff --git a/device-common.mk b/device-common.mk
index f23bcf6..d4c739c 100644
--- a/device-common.mk
+++ b/device-common.mk
@@ -609,30 +609,7 @@
     device/google/marlin/permissions/privapp-permissions-marlin.xml:system/etc/permissions/privapp-permissions-marlin.xml
 
 PRODUCT_PACKAGES += \
-    android.hardware.renderscript@1.0.vndk-sp\
-    android.hardware.graphics.allocator@2.0.vndk-sp\
-    android.hardware.graphics.mapper@2.0.vndk-sp\
-    android.hardware.graphics.common@1.0.vndk-sp\
-    libhwbinder.vndk-sp\
-    libbase.vndk-sp\
-    libcutils.vndk-sp\
-    libhardware.vndk-sp\
-    libhidlbase.vndk-sp\
-    libhidltransport.vndk-sp\
-    libutils.vndk-sp\
-    libc++.vndk-sp\
-    libRS_internal.vndk-sp\
-    libRSDriver.vndk-sp\
-    libRSCpuRef.vndk-sp\
-    libbcinfo.vndk-sp\
-    libblas.vndk-sp\
-    libcompiler_rt.vndk-sp\
-    libbacktrace.vndk-sp\
-    libunwind.vndk-sp\
-    libunwindstack.vndk-sp\
-    liblzma.vndk-sp\
-    libutilscallstack.vndk-sp\
-    libdexfile.vndk-sp\
+    vndk-sp
 
 # Marlin/Sailfish kernel doesn't have HEH filename encryption
 PRODUCT_PROPERTY_OVERRIDES += \
diff --git a/vndk/Android.mk b/vndk/Android.mk
index 1cdc43b..eb1e048 100644
--- a/vndk/Android.mk
+++ b/vndk/Android.mk
@@ -1,56 +1,64 @@
 LOCAL_PATH := $(call my-dir)
 
+# b/69526027: This VNDK-SP install routine must be removed. Instead, we must
+# build vendor variants of the VNDK-SP modules.
+
 ifndef BOARD_VNDK_VERSION
+# The libs with "vndk: {enabled: true, support_system_process: true}" will be
+# added VNDK_SP_LIBRARIES automatically. And the core variants of the VNDK-SP
+# libs will be copied to vndk-sp directory.
+# However, some of those libs need FWK-ONLY libs, which must be listed here
+# manually.
 VNDK_SP_LIBRARIES := \
-    android.hardware.renderscript@1.0\
-    android.hardware.graphics.mapper@2.0\
-    android.hardware.graphics.common@1.0\
-    libhwbinder\
-    libbase\
-    libcutils\
-    libhardware\
-    libhidlbase\
-    libhidltransport\
-    libutils\
-    libc++\
-    libRS_internal\
-    libRSDriver\
-    libRSCpuRef\
-    libbcinfo\
-    libblas\
-    libcompiler_rt\
-    libbacktrace\
-    libunwind\
-    libunwindstack\
-    liblzma\
-    libutilscallstack\
-    libdexfile\
+    libdexfile
 
-endif
+install_in_hw_dir := \
+   android.hidl.memory@1.0-impl
 
-define add-vndk-sp-lib
+define define-vndk-sp-lib
 include $$(CLEAR_VARS)
-LOCAL_MODULE := $1.vndk-sp
+LOCAL_MODULE := $1.vndk-sp-gen
 LOCAL_MODULE_CLASS := SHARED_LIBRARIES
-LOCAL_PREBUILT_MODULE_FILE := $$(TARGET_OUT)/lib/$1.so
+LOCAL_PREBUILT_MODULE_FILE := $$(call intermediates-dir-for,SHARED_LIBRARIES,$1,,,,)/$1.so
+LOCAL_STRIP_MODULE := false
+LOCAL_MULTILIB := first
+LOCAL_MODULE_TAGS := optional
+LOCAL_INSTALLED_MODULE_STEM := $1.so
+LOCAL_MODULE_SUFFIX := .so
+LOCAL_MODULE_RELATIVE_PATH := vndk-sp$(if $(filter $1,$(install_in_hw_dir)),/hw)
+include $$(BUILD_PREBUILT)
+
+ifneq ($$(TARGET_2ND_ARCH),)
+ifneq ($$(TARGET_TRANSLATE_2ND_ARCH),true)
+include $$(CLEAR_VARS)
+LOCAL_MODULE := $1.vndk-sp-gen
+LOCAL_MODULE_CLASS := SHARED_LIBRARIES
+LOCAL_PREBUILT_MODULE_FILE := $$(call intermediates-dir-for,SHARED_LIBRARIES,$1,,,$$(TARGET_2ND_ARCH_VAR_PREFIX),)/$1.so
+LOCAL_STRIP_MODULE := false
 LOCAL_MULTILIB := 32
 LOCAL_MODULE_TAGS := optional
 LOCAL_INSTALLED_MODULE_STEM := $1.so
 LOCAL_MODULE_SUFFIX := .so
-LOCAL_MODULE_RELATIVE_PATH := vndk-sp
+LOCAL_MODULE_RELATIVE_PATH := vndk-sp$(if $(filter $1,$(install_in_hw_dir)),/hw)
 include $$(BUILD_PREBUILT)
-
-include $$(CLEAR_VARS)
-LOCAL_MODULE := $1.vndk-sp
-LOCAL_MODULE_CLASS := SHARED_LIBRARIES
-LOCAL_PREBUILT_MODULE_FILE := $$(TARGET_OUT)/lib64/$1.so
-LOCAL_MULTILIB := 64
-LOCAL_MODULE_TAGS := optional
-LOCAL_INSTALLED_MODULE_STEM := $1.so
-LOCAL_MODULE_SUFFIX := .so
-LOCAL_MODULE_RELATIVE_PATH := vndk-sp
-include $$(BUILD_PREBUILT)
+endif # TARGET_TRANSLATE_2ND_ARCH is not true
+endif # TARGET_2ND_ARCH is not empty
 endef
 
+# Add VNDK-SP libs to the list if they are missing
+$(foreach lib,$(VNDK_SAMEPROCESS_LIBRARIES),\
+    $(if $(filter $(lib),$(VNDK_SP_LIBRARIES)),,\
+    $(eval VNDK_SP_LIBRARIES += $(lib))))
+
 $(foreach lib,$(VNDK_SP_LIBRARIES),\
-    $(eval $(call add-vndk-sp-lib,$(lib))))
+    $(eval $(call define-vndk-sp-lib,$(lib))))
+
+install_in_hw_dir :=
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := vndk-sp
+LOCAL_MODULE_OWNER := google
+LOCAL_MODULE_TAGS := optional
+LOCAL_REQUIRED_MODULES := $(addsuffix .vndk-sp-gen,$(VNDK_SP_LIBRARIES))
+include $(BUILD_PHONY_PACKAGE)
+endif