Merge "Support a first stage ramdisk via TARGET_RAMDISK_OUT"
diff --git a/core/Makefile b/core/Makefile
index 7d28c54..73e93fc 100644
--- a/core/Makefile
+++ b/core/Makefile
@@ -745,15 +745,15 @@
endif
# -----------------------------------------------------------------
-# the ramdisk
-INTERNAL_RAMDISK_FILES := $(filter $(TARGET_ROOT_OUT)/%, \
+# the root dir
+INTERNAL_ROOT_FILES := $(filter $(TARGET_ROOT_OUT)/%, \
$(ALL_GENERATED_SOURCES) \
$(ALL_DEFAULT_INSTALLED_MODULES))
INSTALLED_FILES_FILE_ROOT := $(PRODUCT_OUT)/installed-files-root.txt
INSTALLED_FILES_JSON_ROOT := $(INSTALLED_FILES_FILE_ROOT:.txt=.json)
$(INSTALLED_FILES_FILE_ROOT): .KATI_IMPLICIT_OUTPUTS := $(INSTALLED_FILES_JSON_ROOT)
-$(INSTALLED_FILES_FILE_ROOT) : $(INTERNAL_RAMDISK_FILES) $(FILESLIST)
+$(INSTALLED_FILES_FILE_ROOT) : $(INTERNAL_ROOT_FILES) $(FILESLIST)
@echo Installed file list: $@
@mkdir -p $(dir $@)
@rm -f $@
@@ -762,18 +762,35 @@
$(call dist-for-goals, sdk win_sdk sdk_addon, $(INSTALLED_FILES_FILE_ROOT))
+# -----------------------------------------------------------------
+# the ramdisk
+INTERNAL_RAMDISK_FILES := $(filter $(TARGET_RAMDISK_OUT)/%, \
+ $(ALL_GENERATED_SOURCES) \
+ $(ALL_DEFAULT_INSTALLED_MODULES))
+
+INSTALLED_FILES_FILE_RAMDISK := $(PRODUCT_OUT)/installed-files-ramdisk.txt
+INSTALLED_FILES_JSON_RAMDISK := $(INSTALLED_FILES_FILE_RAMDISK:.txt=.json)
+$(INSTALLED_FILES_FILE_RAMDISK): .KATI_IMPLICIT_OUTPUTS := $(INSTALLED_FILES_JSON_RAMDISK)
+$(INSTALLED_FILES_FILE_RAMDISK) : $(INTERNAL_RAMDISK_FILES) $(FILESLIST)
+ @echo Installed file list: $@
+ @mkdir -p $(dir $@)
+ @rm -f $@
+ $(hide) $(FILESLIST) $(TARGET_RAMDISK_OUT) > $(@:.txt=.json)
+ $(hide) build/make/tools/fileslist_util.py -c $(@:.txt=.json) > $@
+
+$(call dist-for-goals, sdk win_sdk sdk_addon, $(INSTALLED_FILES_FILE_RAMDISK))
BUILT_RAMDISK_TARGET := $(PRODUCT_OUT)/ramdisk.img
# We just build this directly to the install location.
INSTALLED_RAMDISK_TARGET := $(BUILT_RAMDISK_TARGET)
-$(INSTALLED_RAMDISK_TARGET): $(MKBOOTFS) $(INTERNAL_RAMDISK_FILES) $(INSTALLED_FILES_FILE_ROOT) | $(MINIGZIP)
+$(INSTALLED_RAMDISK_TARGET): $(MKBOOTFS) $(INTERNAL_RAMDISK_FILES) $(INSTALLED_FILES_FILE_RAMDISK) | $(MINIGZIP)
$(call pretty,"Target ram disk: $@")
- $(hide) $(MKBOOTFS) -d $(TARGET_OUT) $(TARGET_ROOT_OUT) | $(MINIGZIP) > $@
+ $(hide) $(MKBOOTFS) -d $(TARGET_OUT) $(TARGET_RAMDISK_OUT) | $(MINIGZIP) > $@
.PHONY: ramdisk-nodeps
ramdisk-nodeps: $(MKBOOTFS) | $(MINIGZIP)
@echo "make $@: ignoring dependencies"
- $(hide) $(MKBOOTFS) -d $(TARGET_OUT) $(TARGET_ROOT_OUT) | $(MINIGZIP) > $(INSTALLED_RAMDISK_TARGET)
+ $(hide) $(MKBOOTFS) -d $(TARGET_OUT) $(TARGET_RAMDISK_OUT) | $(MINIGZIP) > $(INSTALLED_RAMDISK_TARGET)
INSTALLED_BOOTIMAGE_TARGET := $(PRODUCT_OUT)/boot.img
@@ -1371,8 +1388,8 @@
$(if $(filter true,$(BOARD_USES_RECOVERY_AS_BOOT)),\
$(hide) echo "recovery_as_boot=true" >> $(1))
$(if $(filter true,$(BOARD_BUILD_SYSTEM_ROOT_IMAGE)),\
- $(hide) echo "system_root_image=true" >> $(1)
- $(hide) echo "root_dir=$(TARGET_ROOT_OUT)" >> $(1))
+ $(hide) echo "system_root_image=true" >> $(1))
+$(hide) echo "root_dir=$(TARGET_ROOT_OUT)" >> $(1)
$(if $(PRODUCT_USE_DYNAMIC_PARTITION_SIZE),$(hide) echo "use_dynamic_partition_size=true" >> $(1))
$(if $(3),$(hide) $(foreach kv,$(3),echo "$(kv)" >> $(1);))
endef
@@ -1627,6 +1644,8 @@
# Copying baseline ramdisk...
# Use rsync because "cp -Rf" fails to overwrite broken symlinks on Mac.
$(hide) rsync -a --exclude=sdcard $(IGNORE_RECOVERY_SEPOLICY) $(IGNORE_CACHE_LINK) $(TARGET_ROOT_OUT) $(TARGET_RECOVERY_OUT)
+ $(if $(filter true,$(BOARD_BUILD_SYSTEM_ROOT_IMAGE)),, \
+ $(hide) rsync -a $(TARGET_RAMDISK_OUT)/* $(TARGET_RECOVERY_ROOT_OUT)/)
# Modifying ramdisk contents...
$(if $(BOARD_RECOVERY_KERNEL_MODULES), \
$(call build-image-kernel-modules,$(BOARD_RECOVERY_KERNEL_MODULES),$(TARGET_RECOVERY_ROOT_OUT),,$(call intermediates-dir-for,PACKAGING,depmod_recovery)))
@@ -1683,6 +1702,7 @@
endif
$(INSTALLED_BOOTIMAGE_TARGET): $(MKBOOTFS) $(MKBOOTIMG) $(MINIGZIP) \
+ $(INTERNAL_ROOT_FILES) \
$(INSTALLED_RAMDISK_TARGET) \
$(INTERNAL_RECOVERYIMAGE_FILES) \
$(recovery_initrc) $(recovery_sepolicy) $(recovery_kernel) \
@@ -1702,6 +1722,7 @@
endif
$(INSTALLED_RECOVERYIMAGE_TARGET): $(MKBOOTFS) $(MKBOOTIMG) $(MINIGZIP) \
+ $(INTERNAL_ROOT_FILES) \
$(INSTALLED_RAMDISK_TARGET) \
$(INSTALLED_BOOTIMAGE_TARGET) \
$(INTERNAL_RECOVERYIMAGE_FILES) \
@@ -1767,11 +1788,7 @@
endif
endif
-# When building a system root image, also add the ramdisk image as a dependency
-# to ensure all files in it are built before it is created.
-ifeq ($(BOARD_BUILD_SYSTEM_ROOT_IMAGE),true)
- FULL_SYSTEMIMAGE_DEPS += $(INTERNAL_RAMDISK_FILES) $(INSTALLED_FILES_FILE_ROOT)
-endif
+FULL_SYSTEMIMAGE_DEPS += $(INTERNAL_ROOT_FILES) $(INSTALLED_FILES_FILE_ROOT)
# -----------------------------------------------------------------
# Final System VINTF manifest including fragments. This is not assembled
@@ -3190,13 +3207,12 @@
endif # INSTALLED_RECOVERYIMAGE_TARGET defined or BOARD_USES_RECOVERY_AS_BOOT is true
@# Components of the boot image
$(hide) mkdir -p $(zip_root)/BOOT
-ifeq ($(BOARD_BUILD_SYSTEM_ROOT_IMAGE),true)
$(hide) mkdir -p $(zip_root)/ROOT
$(hide) $(call package_files-copy-root, \
$(TARGET_ROOT_OUT),$(zip_root)/ROOT)
-else
+ifneq ($(BOARD_BUILD_SYSTEM_ROOT_IMAGE),true)
$(hide) $(call package_files-copy-root, \
- $(TARGET_ROOT_OUT),$(zip_root)/BOOT/RAMDISK)
+ $(TARGET_RAMDISK_OUT),$(zip_root)/BOOT/RAMDISK)
endif
@# If we are using recovery as boot, this is already done when processing recovery.
ifneq ($(BOARD_USES_RECOVERY_AS_BOOT),true)
@@ -3447,10 +3463,10 @@
ifdef BOARD_ODMIMAGE_FILE_SYSTEM_TYPE
$(hide) $(call fs_config,$(zip_root)/ODM,odm/) > $(zip_root)/META/odm_filesystem_config.txt
endif
-ifeq ($(BOARD_BUILD_SYSTEM_ROOT_IMAGE),true)
- @# When using BOARD_BUILD_SYSTEM_ROOT_IMAGE, ROOT always contains the files for the root under
- @# normal boot. BOOT/RAMDISK exists only if additionally using BOARD_USES_RECOVERY_AS_BOOT.
+ @# ROOT always contains the files for the root under normal boot.
$(hide) $(call fs_config,$(zip_root)/ROOT,) > $(zip_root)/META/root_filesystem_config.txt
+ifeq ($(BOARD_BUILD_SYSTEM_ROOT_IMAGE),true)
+ @# BOOT/RAMDISK exists only if additionally using BOARD_USES_RECOVERY_AS_BOOT.
ifeq ($(BOARD_USES_RECOVERY_AS_BOOT),true)
$(hide) $(call fs_config,$(zip_root)/BOOT/RAMDISK,) > $(zip_root)/META/boot_filesystem_config.txt
endif
diff --git a/core/config.mk b/core/config.mk
index bd2ec66..f3be496 100644
--- a/core/config.mk
+++ b/core/config.mk
@@ -855,11 +855,6 @@
$(error When PRODUCT_SHIPPING_API_LEVEL >= 28, TARGET_USES_64_BIT_BINDER must be true)
endif
endif
- ifeq ($(PRODUCT_FULL_TREBLE),true)
- ifneq ($(BOARD_BUILD_SYSTEM_ROOT_IMAGE), true)
- $(error When PRODUCT_SHIPPING_API_LEVEL >= 28, BOARD_BUILD_SYSTEM_ROOT_IMAGE must be true)
- endif
- endif
endif
ifneq ($(call math_gt_or_eq,$(PRODUCT_SHIPPING_API_LEVEL),29),)
ifneq ($(BOARD_OTA_FRAMEWORK_VBMETA_VERSION_OVERRIDE),)
diff --git a/core/envsetup.mk b/core/envsetup.mk
index 29f2f55..4396dd2 100644
--- a/core/envsetup.mk
+++ b/core/envsetup.mk
@@ -186,6 +186,7 @@
TARGET_COPY_OUT_ODM := odm
TARGET_COPY_OUT_PRODUCT := product
TARGET_COPY_OUT_PRODUCT_SERVICES := product_services
+TARGET_COPY_OUT_RAMDISK := ramdisk
TARGET_COPY_OUT_ROOT := root
TARGET_COPY_OUT_RECOVERY := recovery
@@ -325,6 +326,12 @@
CHANGES_URL :=
###########################################
+# Now we can substitute with the real value of TARGET_COPY_OUT_RAMDISK
+ifeq ($(BOARD_BUILD_SYSTEM_ROOT_IMAGE),true)
+TARGET_COPY_OUT_RAMDISK := $(TARGET_COPY_OUT_ROOT)
+endif
+
+###########################################
# Now we can substitute with the real value of TARGET_COPY_OUT_VENDOR
ifeq ($(TARGET_COPY_OUT_VENDOR),$(_vendor_path_placeholder))
TARGET_COPY_OUT_VENDOR := system/vendor
@@ -1031,6 +1038,9 @@
TARGET_ROOT_OUT_BIN_UNSTRIPPED \
TARGET_OUT_COVERAGE
+TARGET_RAMDISK_OUT := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_RAMDISK)
+TARGET_RAMDISK_OUT_UNSTRIPPED := $(TARGET_OUT_UNSTRIPPED)
+
TARGET_ROOT_OUT := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ROOT)
TARGET_ROOT_OUT_BIN := $(TARGET_ROOT_OUT)/bin
TARGET_ROOT_OUT_SBIN := $(TARGET_ROOT_OUT)/sbin
diff --git a/core/main.mk b/core/main.mk
index 2b30616..fd62a98 100644
--- a/core/main.mk
+++ b/core/main.mk
@@ -1253,6 +1253,10 @@
$(INSTALLED_FILES_JSON_PRODUCT_SERVICES) \
$(INSTALLED_FILES_FILE_SYSTEMOTHER) \
$(INSTALLED_FILES_JSON_SYSTEMOTHER) \
+ $(INSTALLED_FILES_FILE_RAMDISK) \
+ $(INSTALLED_FILES_JSON_RAMDISK) \
+ $(INSTALLED_FILES_FILE_ROOT) \
+ $(INSTALLED_FILES_JSON_ROOT) \
$(INSTALLED_FILES_FILE_RECOVERY) \
$(INSTALLED_FILES_JSON_RECOVERY) \
soong_docs
@@ -1352,10 +1356,15 @@
endif
endif
- ifeq ($(BOARD_BUILD_SYSTEM_ROOT_IMAGE),true)
+ $(call dist-for-goals, droidcore, \
+ $(INSTALLED_FILES_FILE_ROOT) \
+ $(INSTALLED_FILES_JSON_ROOT) \
+ )
+
+ ifneq ($(BOARD_BUILD_SYSTEM_ROOT_IMAGE),true)
$(call dist-for-goals, droidcore, \
- $(INSTALLED_FILES_FILE_ROOT) \
- $(INSTALLED_FILES_JSON_ROOT) \
+ $(INSTALLED_FILES_FILE_RAMDISK) \
+ $(INSTALLED_FILES_JSON_RAMDISK) \
)
endif
diff --git a/tools/releasetools/build_image.py b/tools/releasetools/build_image.py
index af64955..3e159a6 100755
--- a/tools/releasetools/build_image.py
+++ b/tools/releasetools/build_image.py
@@ -428,9 +428,8 @@
def SetUpInDirAndFsConfig(origin_in, prop_dict):
"""Returns the in_dir and fs_config that should be used for image building.
- If the target uses system_root_image and it's building system.img, it creates
- and returns a staged dir that combines the contents of /system (i.e. in the
- given in_dir) and root.
+ When building system.img for all targets, it creates and returns a staged dir
+ that combines the contents of /system (i.e. in the given in_dir) and root.
Args:
origin_in: Path to the input directory.
@@ -441,8 +440,12 @@
A tuple of in_dir and fs_config that should be used to build the image.
"""
fs_config = prop_dict.get("fs_config")
- if (prop_dict.get("system_root_image") != "true" or
- prop_dict["mount_point"] != "system"):
+
+ if prop_dict["mount_point"] == "system_other":
+ prop_dict["mount_point"] = "system"
+ return origin_in, fs_config
+
+ if prop_dict["mount_point"] != "system":
return origin_in, fs_config
# Construct a staging directory of the root file system.
@@ -516,9 +519,6 @@
def BuildImage(in_dir, prop_dict, out_file, target_out=None):
"""Builds an image for the files under in_dir and writes it to out_file.
- When using system_root_image, it will additionally look for the files under
- root (specified by 'root_dir') and builds an image that contains both sources.
-
Args:
in_dir: Path to input directory.
prop_dict: A property dict that contains info like partition size. Values
@@ -838,7 +838,6 @@
elif mount_point == "system_other":
# We inherit the selinux policies of /system since we contain some of its
# files.
- d["mount_point"] = "system"
copy_prop("avb_system_hashtree_enable", "avb_hashtree_enable")
copy_prop("avb_system_add_hashtree_footer_args",
"avb_add_hashtree_footer_args")
diff --git a/tools/releasetools/common.py b/tools/releasetools/common.py
index 08f1791..227d701 100644
--- a/tools/releasetools/common.py
+++ b/tools/releasetools/common.py
@@ -181,26 +181,18 @@
if input_dir is not None:
# We carry a copy of file_contexts.bin under META/. If not available,
# search BOOT/RAMDISK/. Note that sometimes we may need a different file
- # to build images than the one running on device, such as when enabling
- # system_root_image. In that case, we must have the one for image
- # generation copied to META/.
+ # to build images than the one running on device, in that case, we must
+ # have the one for image generation copied to META/.
fc_basename = os.path.basename(d.get("selinux_fc", "file_contexts"))
fc_config = os.path.join(input_dir, "META", fc_basename)
- if d.get("system_root_image") == "true":
- assert os.path.exists(fc_config)
- if not os.path.exists(fc_config):
- fc_config = os.path.join(input_dir, "BOOT", "RAMDISK", fc_basename)
- if not os.path.exists(fc_config):
- fc_config = None
+ assert os.path.exists(fc_config)
- if fc_config:
- d["selinux_fc"] = fc_config
+ d["selinux_fc"] = fc_config
- # Similarly we need to redirect "root_dir" and "root_fs_config".
- if d.get("system_root_image") == "true":
- d["root_dir"] = os.path.join(input_dir, "ROOT")
- d["root_fs_config"] = os.path.join(
- input_dir, "META", "root_filesystem_config.txt")
+ # Similarly we need to redirect "root_dir", and "root_fs_config".
+ d["root_dir"] = os.path.join(input_dir, "ROOT")
+ d["root_fs_config"] = os.path.join(
+ input_dir, "META", "root_filesystem_config.txt")
# Redirect {system,vendor}_base_fs_file.
if "system_base_fs_file" in d:
@@ -713,15 +705,14 @@
if not entry.startswith('/'):
continue
- # "/system/framework/am.jar" => "SYSTEM/framework/am.jar". Note that when
- # using system_root_image, the filename listed in system.map may contain an
- # additional leading slash (i.e. "//system/framework/am.jar"). Using lstrip
- # to get consistent results.
+ # "/system/framework/am.jar" => "SYSTEM/framework/am.jar". Note that the
+ # filename listed in system.map may contain an additional leading slash
+ # (i.e. "//system/framework/am.jar"). Using lstrip to get consistent
+ # results.
arcname = string.replace(entry, which, which.upper(), 1).lstrip('/')
- # Special handling another case with system_root_image, where files not
- # under /system (e.g. "/sbin/charger") are packed under ROOT/ in a
- # target_files.zip.
+ # Special handling another case, where files not under /system
+ # (e.g. "/sbin/charger") are packed under ROOT/ in a target_files.zip.
if which == 'system' and not arcname.startswith('SYSTEM'):
arcname = 'ROOT/' + arcname
diff --git a/tools/releasetools/test_build_image.py b/tools/releasetools/test_build_image.py
index 19b5e08..c91d00d 100644
--- a/tools/releasetools/test_build_image.py
+++ b/tools/releasetools/test_build_image.py
@@ -96,16 +96,6 @@
}
self.assertFalse(CheckHeadroom(ext4fs_output, prop_dict))
- def test_SetUpInDirAndFsConfig_SystemRootImageFalse(self):
- prop_dict = {
- 'fs_config': 'fs-config',
- 'mount_point': 'system',
- }
- in_dir, fs_config = SetUpInDirAndFsConfig('/path/to/in_dir', prop_dict)
- self.assertEqual('/path/to/in_dir', in_dir)
- self.assertEqual('fs-config', fs_config)
- self.assertEqual('system', prop_dict['mount_point'])
-
def test_SetUpInDirAndFsConfig_SystemRootImageTrue_NonSystem(self):
prop_dict = {
'fs_config': 'fs-config',
@@ -124,7 +114,7 @@
fs_config_fp.write('fs-config-{}\n'.format(partition))
return fs_config
- def test_SetUpInDirAndFsConfig_SystemRootImageTrue(self):
+ def test_SetUpInDirAndFsConfig(self):
root_dir = common.MakeTempDir()
with open(os.path.join(root_dir, 'init'), 'w') as init_fp:
init_fp.write('init')
@@ -140,7 +130,6 @@
'fs_config': fs_config_system,
'mount_point': 'system',
'root_dir': root_dir,
- 'system_root_image': 'true',
}
in_dir, fs_config = SetUpInDirAndFsConfig(origin_in, prop_dict)
@@ -154,7 +143,7 @@
self.assertTrue(filecmp.cmp(fs_config_system, fs_config))
self.assertEqual('/', prop_dict['mount_point'])
- def test_SetUpInDirAndFsConfig_SystemRootImageTrue_WithRootFsConfig(self):
+ def test_SetUpInDirAndFsConfig_WithRootFsConfig(self):
root_dir = common.MakeTempDir()
with open(os.path.join(root_dir, 'init'), 'w') as init_fp:
init_fp.write('init')
@@ -172,7 +161,6 @@
'mount_point': 'system',
'root_dir': root_dir,
'root_fs_config': fs_config_root,
- 'system_root_image': 'true',
}
in_dir, fs_config = SetUpInDirAndFsConfig(origin_in, prop_dict)