Add support for prebuilt userdata image

When a device model ships with different internal storage sizes,
building a userdata.img through the Android build system doesn't make
sense. Instead, allow providing a prebuilt (empty) userdata image, which
triggeres the device to format userdata on boot, adjusting to the
correct storage size.

Issue: ALM:11105594
Issue: FP4-279
Issue: FP4-INT#13
Change-Id: Ica36fd96c8c1c7db0fcae5519af33223b28b67ee
(cherry picked from commit a6ae279d5f00f8b65e8201a04058e0077cecb9cb)
(cherry picked from commit f56568296640df4699121fbbab56a9f42e26b5cb)
diff --git a/core/Makefile b/core/Makefile
index 72aa890..8c1e1a1 100644
--- a/core/Makefile
+++ b/core/Makefile
@@ -3265,6 +3265,16 @@
     $(filter $(TARGET_OUT_DATA)/%,$(ALL_DEFAULT_INSTALLED_MODULES))
 
 ifdef BUILDING_USERDATA_IMAGE
+
+ifdef BOARD_PREBUILT_USERDATAIMAGE
+# By flashing an empty userdata image, device would format data partition
+# automatically if 'formattable' flag is set in fstab.
+# See function 'fs_mgr_mount_all' in fs_mgr.cpp for more details.
+INSTALLED_USERDATAIMAGE_TARGET := $(PRODUCT_OUT)/userdata.img
+$(eval $(call copy-one-file,$(BOARD_PREBUILT_USERDATAIMAGE),$(INSTALLED_USERDATAIMAGE_TARGET)))
+
+else
+
 userdataimage_intermediates := \
     $(call intermediates-dir-for,PACKAGING,userdata)
 BUILT_USERDATAIMAGE_TARGET := $(PRODUCT_OUT)/userdata.img
@@ -3298,6 +3308,7 @@
 userdataimage-nodeps: | $(INTERNAL_USERIMAGES_DEPS)
 	$(build-userdataimage-target)
 
+endif # else BOARD_PREBUILT_USERDATAIMAGE
 endif # BUILDING_USERDATA_IMAGE
 
 # ASAN libraries in the system image - build rule.