diff --git a/core/Makefile b/core/Makefile index 3fd867faf0..fd409479e7 100644 --- a/core/Makefile +++ b/core/Makefile @@ -754,15 +754,15 @@ else 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 $@ @@ -771,18 +771,35 @@ $(INSTALLED_FILES_FILE_ROOT) : $(INTERNAL_RAMDISK_FILES) $(FILESLIST) $(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 @@ -1355,8 +1372,8 @@ $(if $(BOARD_AVB_ENABLE),\ $(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 @@ -1611,6 +1628,8 @@ define build-recoveryimage-target # 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))) @@ -1667,6 +1686,7 @@ $(INSTALLED_BOOTIMAGE_TARGET): $(BOARD_PREBUILT_DTBOIMAGE) endif $(INSTALLED_BOOTIMAGE_TARGET): $(MKBOOTFS) $(MKBOOTIMG) $(MINIGZIP) \ + $(INTERNAL_ROOT_FILES) \ $(INSTALLED_RAMDISK_TARGET) \ $(INTERNAL_RECOVERYIMAGE_FILES) \ $(recovery_initrc) $(recovery_sepolicy) $(recovery_kernel) \ @@ -1686,6 +1706,7 @@ $(INSTALLED_RECOVERYIMAGE_TARGET): $(BOARD_PREBUILT_DTBOIMAGE) endif $(INSTALLED_RECOVERYIMAGE_TARGET): $(MKBOOTFS) $(MKBOOTIMG) $(MINIGZIP) \ + $(INTERNAL_ROOT_FILES) \ $(INSTALLED_RAMDISK_TARGET) \ $(INSTALLED_BOOTIMAGE_TARGET) \ $(INTERNAL_RECOVERYIMAGE_FILES) \ @@ -1751,11 +1772,7 @@ ifneq (,$(filter address, $(SANITIZE_TARGET))) 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 @@ -3203,13 +3220,12 @@ endif 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) @@ -3460,10 +3476,10 @@ endif 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 4226f2f25d..5785a348ba 100644 --- a/core/config.mk +++ b/core/config.mk @@ -855,11 +855,6 @@ ifdef PRODUCT_SHIPPING_API_LEVEL $(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 39b9552a1b..0e1f671eab 100644 --- a/core/envsetup.mk +++ b/core/envsetup.mk @@ -181,6 +181,7 @@ TARGET_COPY_OUT_OEM := oem 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 @@ -319,6 +320,12 @@ endif 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)) @@ -1026,6 +1033,9 @@ TARGET_OUT_COVERAGE := $(PRODUCT_OUT)/coverage 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 25887d0e32..2d70ab714e 100644 --- a/core/main.mk +++ b/core/main.mk @@ -1251,6 +1251,10 @@ droidcore: files \ $(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 @@ -1350,10 +1354,15 @@ else # TARGET_BUILD_APPS 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 af64955d48..3e159a6c8f 100755 --- a/tools/releasetools/build_image.py +++ b/tools/releasetools/build_image.py @@ -428,9 +428,8 @@ def ConvertBlockMapToBaseFs(block_map_file): 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 @@ def SetUpInDirAndFsConfig(origin_in, prop_dict): 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 CheckHeadroom(ext4fs_output, prop_dict): 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 @@ def ImagePropFromGlobalDict(glob_dict, mount_point): 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 38c73fd6e7..caefb79168 100644 --- a/tools/releasetools/common.py +++ b/tools/releasetools/common.py @@ -181,26 +181,18 @@ def LoadInfoDict(input_file, input_dir=None): 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: @@ -709,15 +701,14 @@ def GetSparseImage(which, tmpdir, input_zip, allow_shared_blocks): 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 19b5e0828f..c91d00deab 100644 --- a/tools/releasetools/test_build_image.py +++ b/tools/releasetools/test_build_image.py @@ -96,16 +96,6 @@ class BuildImageTest(unittest.TestCase): } 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 @@ class BuildImageTest(unittest.TestCase): 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 @@ class BuildImageTest(unittest.TestCase): '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 @@ class BuildImageTest(unittest.TestCase): 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 @@ class BuildImageTest(unittest.TestCase): '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)