Merge "Include config files to VNDK snapshot"
am: 2e42c54028

Change-Id: I8bd9c608258475747ec173eb4a3c2d91d460591a
diff --git a/core/tasks/vndk.mk b/core/tasks/vndk.mk
index d824a41..a3ec16a 100644
--- a/core/tasks/vndk.mk
+++ b/core/tasks/vndk.mk
@@ -24,72 +24,135 @@
 # Args:
 #   $(1): if not empty, evaluates for TARGET_2ND_ARCH
 define clang-ubsan-vndk-core
-  $(eval prefix := $(if $(1),2ND_,))
-  $(addsuffix .vendor,$($(addprefix $(prefix),UBSAN_RUNTIME_LIBRARY)))
+$(strip \
+  $(eval prefix := $(if $(1),2ND_,)) \
+  $(addsuffix .vendor,$($(addprefix $(prefix),UBSAN_RUNTIME_LIBRARY))) \
+)
 endef
 
+# Returns list of file paths of the intermediate objs
+#
 # Args:
-#   $(1): list of lib names without '.so' suffix (e.g., libX.vendor)
-#   $(2): if not empty, evaluates for TARGET_2ND_ARCH
+#   $(1): list of obj names (e.g., libfoo.vendor, ld.config.txt, ...)
+#   $(2): target class (e.g., SHARED_LIBRARIES, STATIC_LIBRARIES, ETC)
+#   $(3): if not empty, evaluates for TARGET_2ND_ARCH
 define paths-of-intermediates
-  $(strip \
-    $(foreach lib,$(1), \
-      $(call append-path,$(call intermediates-dir-for,SHARED_LIBRARIES,$(lib),,,$(2)),$(lib).so)))
+$(strip \
+  $(foreach obj,$(1), \
+    $(eval file_name := $(if $(filter SHARED_LIBRARIES,$(2)),$(patsubst %.so,%,$(obj)).so,$(obj))) \
+    $(eval dir := $(call intermediates-dir-for,$(2),$(obj),,,$(3))) \
+    $(call append-path,$(dir),$(file_name)) \
+  ) \
+)
 endef
 
-vndk_core_libs := $(addsuffix .vendor,$(filter-out libclang_rt.ubsan%,$(VNDK_CORE_LIBRARIES)))
-vndk_sp_libs := $(addsuffix .vendor,$(VNDK_SAMEPROCESS_LIBRARIES))
-vndk_snapshot_dependencies := \
-  $(vndk_core_libs) \
-  $(vndk_sp_libs)
-
 # If in the future libclang_rt.ubsan* is removed from the VNDK-core list,
 # need to update the related logic in this file.
 ifeq (,$(filter libclang_rt.ubsan%,$(VNDK_CORE_LIBRARIES)))
-  $(error libclang_rt.ubsan* is no longer a VNDK-core library.)
+  $(warning libclang_rt.ubsan* is no longer a VNDK-core library. Please update this file.)
+  vndk_core_libs := $(addsuffix .vendor,$(VNDK_CORE_LIBRARIES))
+else
+  vndk_core_libs := $(addsuffix .vendor,$(filter-out libclang_rt.ubsan%,$(VNDK_CORE_LIBRARIES)))
+
+  # for TARGET_ARCH
+  vndk_core_libs += $(call clang-ubsan-vndk-core)
+
+  # TODO(b/69834489): Package additional arch variants
+  # ifdef TARGET_2ND_ARCH
+  #   vndk_core_libs += $(call clang-ubsan-vndk-core,true)
+  # endif
 endif
 
-# for TARGET_ARCH
-clang_ubsan_vndk_core_$(TARGET_ARCH) := $(call clang-ubsan-vndk-core)
-vndk_snapshot_dependencies += \
-  $(clang_ubsan_vndk_core_$(TARGET_ARCH))
+vndk_sp_libs := $(addsuffix .vendor,$(VNDK_SAMEPROCESS_LIBRARIES))
+vndk_private_libs := $(addsuffix .vendor,$(VNDK_PRIVATE_LIBRARIES))
 
-ifdef TARGET_2ND_ARCH
-clang_ubsan_vndk_core_$(TARGET_2ND_ARCH) := $(call clang-ubsan-vndk-core,true)
-vndk_snapshot_dependencies += \
-  $(clang_ubsan_vndk_core_$(TARGET_2ND_ARCH))
-endif
+vndk_snapshot_libs := \
+  $(vndk_core_libs) \
+  $(vndk_sp_libs)
 
+vndk_prebuilt_txts := \
+  ld.config.txt \
+  vndksp.libraries.txt \
+  llndk.libraries.txt
+
+vndk_snapshot_top := $(call intermediates-dir-for,PACKAGING,vndk-snapshot)
+vndk_snapshot_out := $(vndk_snapshot_top)/vndk-snapshot
+vndk_snapshot_configs_out := $(vndk_snapshot_top)/configs
+
+#######################################
+# vndkcore.libraries.txt
+vndkcore.libraries.txt := $(vndk_snapshot_configs_out)/vndkcore.libraries.txt
+$(vndkcore.libraries.txt): $(vndk_core_libs)
+	@echo 'Generating: $@'
+	@rm -f $@
+	@mkdir -p $(dir $@)
+	$(hide) echo -n > $@
+	$(hide) $(foreach lib,$^,echo $(patsubst %.vendor,%,$(lib)).so >> $@;)
+
+
+#######################################
+# vndkprivate.libraries.txt
+vndkprivate.libraries.txt := $(vndk_snapshot_configs_out)/vndkprivate.libraries.txt
+$(vndkprivate.libraries.txt): $(vndk_private_libs)
+	@echo 'Generating: $@'
+	@rm -f $@
+	@mkdir -p $(dir $@)
+	$(hide) echo -n > $@
+	$(hide) $(foreach lib,$^,echo $(patsubst %.vendor,%,$(lib)).so >> $@;)
+
+
+vndk_snapshot_configs := \
+  $(vndkcore.libraries.txt) \
+  $(vndkprivate.libraries.txt)
+
+#######################################
+# vndk_snapshot_zip
+vndk_snapshot_arch := $(vndk_snapshot_out)/arch-$(TARGET_ARCH)-$(TARGET_ARCH_VARIANT)
 vndk_snapshot_zip := $(PRODUCT_OUT)/android-vndk-$(TARGET_ARCH).zip
-vndk_snapshot_out := $(call intermediates-dir-for,PACKAGING,vndk-snapshot)
+
 $(vndk_snapshot_zip): PRIVATE_VNDK_SNAPSHOT_OUT := $(vndk_snapshot_out)
 
-$(vndk_snapshot_zip): PRIVATE_VNDK_CORE_OUT_$(TARGET_ARCH) := \
-  $(vndk_snapshot_out)/arch-$(TARGET_ARCH)/shared/vndk-core
-$(vndk_snapshot_zip): PRIVATE_VNDK_CORE_INTERMEDIATES_$(TARGET_ARCH) := \
-  $(call paths-of-intermediates,$(vndk_core_libs) $(clang_ubsan_vndk_core_$(TARGET_ARCH)))
-$(vndk_snapshot_zip): PRIVATE_VNDK_SP_OUT_$(TARGET_ARCH) := \
-  $(vndk_snapshot_out)/arch-$(TARGET_ARCH)/shared/vndk-sp
-$(vndk_snapshot_zip): PRIVATE_VNDK_SP_INTERMEDIATES_$(TARGET_ARCH) := \
-  $(call paths-of-intermediates,$(vndk_sp_libs))
+$(vndk_snapshot_zip): PRIVATE_VNDK_CORE_OUT := $(vndk_snapshot_arch)/shared/vndk-core
+$(vndk_snapshot_zip): PRIVATE_VNDK_CORE_INTERMEDIATES := \
+  $(call paths-of-intermediates,$(vndk_core_libs),SHARED_LIBRARIES)
 
-ifdef TARGET_2ND_ARCH
-$(vndk_snapshot_zip): PRIVATE_VNDK_CORE_OUT_$(TARGET_2ND_ARCH) := \
-  $(vndk_snapshot_out)/arch-$(TARGET_2ND_ARCH)/shared/vndk-core
-$(vndk_snapshot_zip): PRIVATE_VNDK_CORE_INTERMEDIATES_$(TARGET_2ND_ARCH) := \
-  $(call paths-of-intermediates,$(vndk_core_libs) $(clang_ubsan_vndk_core_$(TARGET_2ND_ARCH)),true)
-$(vndk_snapshot_zip): PRIVATE_VNDK_SP_OUT_$(TARGET_2ND_ARCH) := \
-  $(vndk_snapshot_out)/arch-$(TARGET_2ND_ARCH)/shared/vndk-sp
-$(vndk_snapshot_zip): PRIVATE_VNDK_SP_INTERMEDIATES_$(TARGET_2ND_ARCH) := \
-  $(call paths-of-intermediates,$(vndk_sp_libs),true)
-endif
+$(vndk_snapshot_zip): PRIVATE_VNDK_SP_OUT := $(vndk_snapshot_arch)/shared/vndk-sp
+$(vndk_snapshot_zip): PRIVATE_VNDK_SP_INTERMEDIATES := \
+  $(call paths-of-intermediates,$(vndk_sp_libs),SHARED_LIBRARIES)
+
+$(vndk_snapshot_zip): PRIVATE_CONFIGS_OUT := $(vndk_snapshot_arch)/configs
+$(vndk_snapshot_zip): PRIVATE_CONFIGS_INTERMEDIATES := \
+  $(call paths-of-intermediates,$(vndk_prebuilt_txts),ETC) \
+  $(vndk_snapshot_configs)
+
+# TODO(b/69834489): Package additional arch variants
+# ifdef TARGET_2ND_ARCH
+# vndk_snapshot_arch_2ND := $(vndk_snapshot_out)/arch-$(TARGET_2ND_ARCH)-$(TARGET_2ND_ARCH_VARIANT)
+# $(vndk_snapshot_zip): PRIVATE_VNDK_CORE_OUT_2ND := $(vndk_snapshot_arch_2ND)/shared/vndk-core
+# $(vndk_snapshot_zip): PRIVATE_VNDK_CORE_INTERMEDIATES_2ND := \
+#   $(call paths-of-intermediates,$(vndk_core_libs),SHARED_LIBRARIES,true)
+# $(vndk_snapshot_zip): PRIVATE_VNDK_SP_OUT_2ND := $(vndk_snapshot_arch_2ND)/shared/vndk-sp
+# $(vndk_snapshot_zip): PRIVATE_VNDK_SP_INTERMEDIATES_2ND := \
+#   $(call paths-of-intermediates,$(vndk_sp_libs),SHARED_LIBRARIES,true)
+# endif
 
 # Args
 #   $(1): destination directory
-#   $(2): list of libs to copy
+#   $(2): list of files to copy
 $(vndk_snapshot_zip): private-copy-vndk-intermediates = \
-	@mkdir -p $(1); \
-	$(foreach lib,$(2),cp -p $(lib) $(call append-path,$(1),$(subst .vendor,,$(notdir $(lib))));)
+  $(if $(2),$(strip \
+    @mkdir -p $(1); \
+    $(foreach file,$(2), \
+      if [ -e $(file) ]; then \
+        cp -p $(file) $(call append-path,$(1),$(subst .vendor,,$(notdir $(file)))); \
+      fi; \
+    ) \
+  ))
+
+vndk_snapshot_dependencies := \
+  $(vndk_snapshot_libs) \
+  $(vndk_prebuilt_txts) \
+  $(vndk_snapshot_configs)
 
 $(vndk_snapshot_zip): $(vndk_snapshot_dependencies) $(SOONG_ZIP)
 	@echo 'Generating VNDK snapshot: $@'
@@ -97,16 +160,19 @@
 	@rm -rf $(PRIVATE_VNDK_SNAPSHOT_OUT)
 	@mkdir -p $(PRIVATE_VNDK_SNAPSHOT_OUT)
 	$(call private-copy-vndk-intermediates, \
-		$(PRIVATE_VNDK_CORE_OUT_$(TARGET_ARCH)),$(PRIVATE_VNDK_CORE_INTERMEDIATES_$(TARGET_ARCH)))
+		$(PRIVATE_VNDK_CORE_OUT),$(PRIVATE_VNDK_CORE_INTERMEDIATES))
 	$(call private-copy-vndk-intermediates, \
-		$(PRIVATE_VNDK_SP_OUT_$(TARGET_ARCH)),$(PRIVATE_VNDK_SP_INTERMEDIATES_$(TARGET_ARCH)))
-ifdef TARGET_2ND_ARCH
+	 	$(PRIVATE_VNDK_SP_OUT),$(PRIVATE_VNDK_SP_INTERMEDIATES))
 	$(call private-copy-vndk-intermediates, \
-		$(PRIVATE_VNDK_CORE_OUT_$(TARGET_2ND_ARCH)),$(PRIVATE_VNDK_CORE_INTERMEDIATES_$(TARGET_2ND_ARCH)))
-	$(call private-copy-vndk-intermediates, \
-		$(PRIVATE_VNDK_SP_OUT_$(TARGET_2ND_ARCH)),$(PRIVATE_VNDK_SP_INTERMEDIATES_$(TARGET_2ND_ARCH)))
-endif
-	$(hide) $(SOONG_ZIP) -o $@ -P vndk-snapshot -C $(PRIVATE_VNDK_SNAPSHOT_OUT) \
+		$(PRIVATE_CONFIGS_OUT),$(PRIVATE_CONFIGS_INTERMEDIATES))
+# TODO(b/69834489): Package additional arch variants
+# ifdef TARGET_2ND_ARCH
+# 	$(call private-copy-vndk-intermediates, \
+# 		$(PRIVATE_VNDK_CORE_OUT_2ND),$(PRIVATE_VNDK_CORE_INTERMEDIATES_2ND))
+# 	$(call private-copy-vndk-intermediates, \
+# 		$(PRIVATE_VNDK_SP_OUT_2ND),$(PRIVATE_VNDK_SP_INTERMEDIATES_2ND))
+# endif
+	$(hide) $(SOONG_ZIP) -o $@ -P android-vndk-snapshot -C $(PRIVATE_VNDK_SNAPSHOT_OUT) \
 	-D $(PRIVATE_VNDK_SNAPSHOT_OUT)
 
 .PHONY: vndk
@@ -114,6 +180,24 @@
 
 $(call dist-for-goals, vndk, $(vndk_snapshot_zip))
 
+# clear global vars
+clang-ubsan-vndk-core :=
+paths-of-intermediates :=
+vndk_core_libs :=
+vndk_sp_libs :=
+vndk_snapshot_libs :=
+vndk_prebuilt_txts :=
+vndk_snapshot_configs :=
+vndk_snapshot_top :=
+vndk_snapshot_out :=
+vndk_snapshot_configs_out :=
+vndk_snapshot_arch :=
+vndk_snapshot_dependencies :=
+# TODO(b/69834489): Package additional arch variants
+# ifdef TARGET_2ND_ARCH
+# vndk_snapshot_arch_2ND :=
+# endif
+
 else # BOARD_VNDK_VERSION is NOT set to 'current'
 
 .PHONY: vndk