Build cache.img on demand
Bug: 5153694 To build cache.img, set BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE (required, ext4 only for now), BOARD_CACHEIMAGE_PARTITION_SIZE (optional) in BoardConfig.mk. Change-Id: I1d8b91646aa1dba88285e008ad3335768bcbddd2
This commit is contained in:
@@ -613,6 +613,8 @@ define generate-userimage-prop-dictionary
|
||||
$(if $(INTERNAL_USERIMAGES_EXT_VARIANT),$(hide) echo "fs_type=$(INTERNAL_USERIMAGES_EXT_VARIANT)" >> $(1))
|
||||
$(if $(BOARD_SYSTEMIMAGE_PARTITION_SIZE),$(hide) echo "system_size=$(BOARD_SYSTEMIMAGE_PARTITION_SIZE)" >> $(1))
|
||||
$(if $(BOARD_USERDATAIMAGE_PARTITION_SIZE),$(hide) echo "userdata_size=$(BOARD_USERDATAIMAGE_PARTITION_SIZE)" >> $(1))
|
||||
$(if $(BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE),$(hide) echo "cache_fs_type=$(BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE)" >> $(1))
|
||||
$(if $(BOARD_CACHEIMAGE_PARTITION_SIZE),$(hide) echo "cache_size=$(BOARD_CACHEIMAGE_PARTITION_SIZE)" >> $(1))
|
||||
$(if $(INTERNAL_USERIMAGES_SPARSE_EXT_FLAG),$(hide) echo "extfs_sparse_flag=$(INTERNAL_USERIMAGES_SPARSE_EXT_FLAG)" >> $(1))
|
||||
$(if $(mkyaffs2_extra_flags),$(hide) echo "mkyaffs2_extra_flags=$(mkyaffs2_extra_flags)" >> $(1))
|
||||
endef
|
||||
@@ -767,7 +769,7 @@ $(call dist-for-goals, sdk_addon, $(INSTALLED_FILES_FILE))
|
||||
endif
|
||||
|
||||
systemimage_intermediates := \
|
||||
$(call intermediates-dir-for,PACKAGING,systemimage)
|
||||
$(call intermediates-dir-for,PACKAGING,systemimage)
|
||||
BUILT_SYSTEMIMAGE := $(systemimage_intermediates)/system.img
|
||||
|
||||
# $(1): output file
|
||||
@@ -877,10 +879,10 @@ boottarball-nodeps btnod: $(FS_GET_STATS) \
|
||||
# -----------------------------------------------------------------
|
||||
# data partition image
|
||||
INTERNAL_USERDATAIMAGE_FILES := \
|
||||
$(filter $(TARGET_OUT_DATA)/%,$(ALL_DEFAULT_INSTALLED_MODULES))
|
||||
$(filter $(TARGET_OUT_DATA)/%,$(ALL_DEFAULT_INSTALLED_MODULES))
|
||||
|
||||
userdataimage_intermediates := \
|
||||
$(call intermediates-dir-for,PACKAGING,userdata)
|
||||
$(call intermediates-dir-for,PACKAGING,userdata)
|
||||
BUILT_USERDATAIMAGE_TARGET := $(PRODUCT_OUT)/userdata.img
|
||||
|
||||
define build-userdataimage-target
|
||||
@@ -925,6 +927,38 @@ userdatatarball-nodeps: $(FS_GET_STATS)
|
||||
$(build-userdatatarball-target)
|
||||
|
||||
|
||||
# -----------------------------------------------------------------
|
||||
# cache partition image
|
||||
ifdef BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE
|
||||
INTERNAL_CACHEIMAGE_FILES := \
|
||||
$(filter $(TARGET_OUT_CACHE)/%,$(ALL_DEFAULT_INSTALLED_MODULES))
|
||||
|
||||
cacheimage_intermediates := \
|
||||
$(call intermediates-dir-for,PACKAGING,cache)
|
||||
BUILT_CACHEIMAGE_TARGET := $(PRODUCT_OUT)/cache.img
|
||||
|
||||
define build-cacheimage-target
|
||||
$(call pretty,"Target cache fs image: $(INSTALLED_CACHEIMAGE_TARGET)")
|
||||
@mkdir -p $(TARGET_OUT_CACHE)
|
||||
@mkdir -p $(cacheimage_intermediates) && rm -rf $(cacheimage_intermediates)/cache_image_info.txt
|
||||
$(call generate-userimage-prop-dictionary, $(cacheimage_intermediates)/cache_image_info.txt)
|
||||
$(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH \
|
||||
./build/tools/releasetools/build_image.py \
|
||||
$(TARGET_OUT_CACHE) $(cacheimage_intermediates)/cache_image_info.txt $(INSTALLED_CACHEIMAGE_TARGET)
|
||||
$(hide) $(call assert-max-image-size,$(INSTALLED_CACHEIMAGE_TARGET),$(BOARD_CACHEIMAGE_PARTITION_SIZE),yaffs)
|
||||
endef
|
||||
|
||||
# We just build this directly to the install location.
|
||||
INSTALLED_CACHEIMAGE_TARGET := $(BUILT_CACHEIMAGE_TARGET)
|
||||
$(INSTALLED_CACHEIMAGE_TARGET): $(INTERNAL_USERIMAGES_DEPS) $(INTERNAL_CACHEIMAGE_FILES)
|
||||
$(build-cacheimage-target)
|
||||
|
||||
.PHONY: cacheimage-nodeps
|
||||
cacheimage-nodeps: | $(INTERNAL_USERIMAGES_DEPS)
|
||||
$(build-cacheimage-target)
|
||||
|
||||
endif # BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE
|
||||
|
||||
# -----------------------------------------------------------------
|
||||
# bring in the installer image generation defines if necessary
|
||||
ifeq ($(TARGET_USE_DISKINSTALLER),true)
|
||||
@@ -1006,6 +1040,7 @@ $(BUILT_TARGET_FILES_PACKAGE): \
|
||||
$(INSTALLED_RECOVERYIMAGE_TARGET) \
|
||||
$(INSTALLED_SYSTEMIMAGE) \
|
||||
$(INSTALLED_USERDATAIMAGE_TARGET) \
|
||||
$(INSTALLED_CACHEIMAGE_TARGET) \
|
||||
$(INSTALLED_ANDROID_INFO_TXT_TARGET) \
|
||||
$(built_ota_tools) \
|
||||
$(APKCERTS_FILE) \
|
||||
|
@@ -214,6 +214,8 @@ TARGET_OUT_DATA_ETC := $(TARGET_OUT_ETC)
|
||||
TARGET_OUT_DATA_STATIC_LIBRARIES:= $(TARGET_OUT_STATIC_LIBRARIES)
|
||||
TARGET_OUT_DATA_NATIVE_TESTS := $(TARGET_OUT_DATA)/nativetest
|
||||
|
||||
TARGET_OUT_CACHE := $(PRODUCT_OUT)/cache
|
||||
|
||||
TARGET_OUT_VENDOR := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_VENDOR)
|
||||
TARGET_OUT_VENDOR_EXECUTABLES:= $(TARGET_OUT_VENDOR)/bin
|
||||
TARGET_OUT_VENDOR_OPTIONAL_EXECUTABLES:= $(TARGET_OUT_VENDOR)/xbin
|
||||
|
@@ -743,6 +743,9 @@ endif
|
||||
.PHONY: userdatatarball
|
||||
userdatatarball: $(INSTALLED_USERDATATARBALL_TARGET)
|
||||
|
||||
.PHONY: cacheimage
|
||||
cacheimage: $(INSTALLED_CACHEIMAGE_TARGET)
|
||||
|
||||
.PHONY: bootimage
|
||||
bootimage: $(INSTALLED_BOOTIMAGE_TARGET)
|
||||
|
||||
@@ -757,6 +760,7 @@ droidcore: files \
|
||||
$(INSTALLED_BOOTIMAGE_TARGET) \
|
||||
$(INSTALLED_RECOVERYIMAGE_TARGET) \
|
||||
$(INSTALLED_USERDATAIMAGE_TARGET) \
|
||||
$(INSTALLED_CACHEIMAGE_TARGET) \
|
||||
$(INSTALLED_FILES_FILE)
|
||||
|
||||
# dist_files only for putting your library into the dist directory with a full build.
|
||||
|
@@ -227,6 +227,8 @@ _product_stash_var_list += \
|
||||
BOARD_RECOVERYIMAGE_PARTITION_SIZE \
|
||||
BOARD_SYSTEMIMAGE_PARTITION_SIZE \
|
||||
BOARD_USERDATAIMAGE_PARTITION_SIZE \
|
||||
BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE \
|
||||
BOARD_CACHEIMAGE_PARTITION_SIZE \
|
||||
BOARD_FLASH_BLOCK_SIZE \
|
||||
BOARD_SYSTEMIMAGE_PARTITION_SIZE \
|
||||
BOARD_VENDOR_QCOM_GPS_LOC_API_HARDWARE \
|
||||
|
@@ -67,22 +67,28 @@ def ImagePropFromGlobalDict(glob_dict, mount_point):
|
||||
mount_point: such as "system", "data" etc.
|
||||
"""
|
||||
d = {}
|
||||
|
||||
def copy_prop(src_p, dest_p):
|
||||
if src_p in glob_dict:
|
||||
d[dest_p] = str(glob_dict[src_p])
|
||||
|
||||
common_props = (
|
||||
"fs_type",
|
||||
"extfs_sparse_flag",
|
||||
"mkyaffs2_extra_flags",
|
||||
)
|
||||
for p in common_props:
|
||||
if p in glob_dict:
|
||||
d[p] = glob_dict[p]
|
||||
copy_prop(p, p)
|
||||
|
||||
d["mount_point"] = mount_point
|
||||
if mount_point == "system":
|
||||
if "system_size" in glob_dict:
|
||||
d["partition_size"] = str(glob_dict["system_size"])
|
||||
copy_prop("fs_type", "fs_type")
|
||||
copy_prop("system_size", "partition_size")
|
||||
elif mount_point == "data":
|
||||
if "userdata_size" in glob_dict:
|
||||
d["partition_size"] = str(glob_dict["userdata_size"])
|
||||
copy_prop("fs_type", "fs_type")
|
||||
copy_prop("userdata_size", "partition_size")
|
||||
elif mount_point == "cache":
|
||||
copy_prop("cache_fs_type", "fs_type")
|
||||
copy_prop("cache_size", "partition_size")
|
||||
|
||||
return d
|
||||
|
||||
@@ -117,6 +123,11 @@ def main(argv):
|
||||
mount_point = "system"
|
||||
elif image_filename == "userdata.img":
|
||||
mount_point = "data"
|
||||
elif image_filename == "cache.img":
|
||||
mount_point = "cache"
|
||||
else:
|
||||
print >> sys.stderr, "error: unknown image file name ", image_filename
|
||||
exit(1)
|
||||
|
||||
image_properties = ImagePropFromGlobalDict(glob_dict, mount_point)
|
||||
if not BuildImage(in_dir, image_properties, out_file):
|
||||
|
@@ -138,6 +138,7 @@ def LoadInfoDict(zip):
|
||||
makeint("blocksize")
|
||||
makeint("system_size")
|
||||
makeint("userdata_size")
|
||||
makeint("cache_size")
|
||||
makeint("recovery_size")
|
||||
makeint("boot_size")
|
||||
|
||||
|
@@ -80,6 +80,38 @@ def AddUserdata(output_zip):
|
||||
os.rmdir(temp_dir)
|
||||
|
||||
|
||||
def AddCache(output_zip):
|
||||
"""Create an empty cache image and store it in output_zip."""
|
||||
|
||||
image_props = build_image.ImagePropFromGlobalDict(OPTIONS.info_dict,
|
||||
"cache")
|
||||
# The build system has to explicitly request for cache.img.
|
||||
if "fs_type" not in image_props:
|
||||
return
|
||||
|
||||
print "creating cache.img..."
|
||||
|
||||
# The name of the directory it is making an image out of matters to
|
||||
# mkyaffs2image. So we create a temp dir, and within it we create an
|
||||
# empty dir named "cache", and build the image from that.
|
||||
temp_dir = tempfile.mkdtemp()
|
||||
user_dir = os.path.join(temp_dir, "cache")
|
||||
os.mkdir(user_dir)
|
||||
img = tempfile.NamedTemporaryFile()
|
||||
|
||||
fstab = OPTIONS.info_dict["fstab"]
|
||||
if fstab:
|
||||
image_props["fs_type" ] = fstab["/cache"].fs_type
|
||||
succ = build_image.BuildImage(user_dir, image_props, img.name)
|
||||
assert succ, "build cache.img image failed"
|
||||
|
||||
common.CheckSize(img.name, "cache.img", OPTIONS.info_dict)
|
||||
output_zip.write(img.name, "cache.img")
|
||||
img.close()
|
||||
os.rmdir(user_dir)
|
||||
os.rmdir(temp_dir)
|
||||
|
||||
|
||||
def AddSystem(output_zip):
|
||||
"""Turn the contents of SYSTEM into a system image and store it in
|
||||
output_zip."""
|
||||
@@ -163,6 +195,7 @@ def main(argv):
|
||||
if not bootable_only:
|
||||
AddSystem(output_zip)
|
||||
AddUserdata(output_zip)
|
||||
AddCache(output_zip)
|
||||
CopyInfo(output_zip)
|
||||
|
||||
print "cleaning up..."
|
||||
|
Reference in New Issue
Block a user