diff --git a/core/Makefile b/core/Makefile index b74f87870e..f1fb712b5d 100644 --- a/core/Makefile +++ b/core/Makefile @@ -300,7 +300,7 @@ $(strip $(subst _,-, $(firstword $(1)))) endef BUILDINFO_SH := build/make/tools/buildinfo.sh -VENDOR_BUILDINFO_SH := build/make/tools/vendor_buildinfo.sh +DEVICE_BUILDINFO_SH := build/make/tools/device_buildinfo.sh # TARGET_BUILD_FLAVOR and ro.build.flavor are used only by the test # harness to distinguish builds. Only add _asan for a sanitized build @@ -410,7 +410,7 @@ FINAL_VENDOR_BUILD_PROPERTIES := $(call uniq-pairs-by-first-component, \ $(FINAL_VENDOR_BUILD_PROPERTIES),=) endif # property_overrides_split_enabled -$(INSTALLED_VENDOR_BUILD_PROP_TARGET): $(VENDOR_BUILDINFO_SH) $(intermediate_system_build_prop) +$(INSTALLED_VENDOR_BUILD_PROP_TARGET): $(DEVICE_BUILDINFO_SH) $(intermediate_system_build_prop) @echo Target vendor buildinfo: $@ @mkdir -p $(dir $@) $(hide) echo > $@ @@ -435,7 +435,7 @@ $(INSTALLED_VENDOR_BUILD_PROP_TARGET): $(VENDOR_BUILDINFO_SH) $(intermediate_sys PRODUCT_MANUFACTURER="$(PRODUCT_MANUFACTURER)" \ TARGET_BOOTLOADER_BOARD_NAME="$(TARGET_BOOTLOADER_BOARD_NAME)" \ TARGET_BOARD_PLATFORM="$(TARGET_BOARD_PLATFORM)" \ - bash $(VENDOR_BUILDINFO_SH) >> $@ + bash $(DEVICE_BUILDINFO_SH) "vendor" >> $@ ifdef property_overrides_split_enabled $(hide) echo "#" >> $@; \ echo "# ADDITIONAL VENDOR BUILD PROPERTIES" >> $@; \ @@ -472,6 +472,39 @@ endif # BOARD_USES_PRODUCTIMAGE $(hide) build/make/tools/post_process_props.py $@ # ---------------------------------------------------------------- +# odm build.prop +INSTALLED_ODM_BUILD_PROP_TARGET := $(TARGET_OUT_ODM)/build.prop +ALL_DEFAULT_INSTALLED_MODULES += $(INSTALLED_ODM_BUILD_PROP_TARGET) + +FINAL_ODM_BUILD_PROPERTIES += \ + $(call collapse-pairs, $(PRODUCT_ODM_PROPERTIES)) +FINAL_ODM_BUILD_PROPERTIES := $(call uniq-pairs-by-first-component, \ + $(FINAL_ODM_BUILD_PROPERTIES),=) + +$(INSTALLED_ODM_BUILD_PROP_TARGET): $(DEVICE_BUILDINFO_SH) + @echo Target odm buildinfo: $@ + @mkdir -p $(dir $@) + $(hide) echo > $@ + $(hide) echo ro.odm.build.date=`$(DATE_FROM_FILE)`>>$@ + $(hide) echo ro.odm.build.date.utc=`$(DATE_FROM_FILE) +%s`>>$@ + $(hide) echo ro.odm.build.fingerprint="$(BUILD_FINGERPRINT_FROM_FILE)">>$@ + $(hide) echo ro.odm.product.cpu.abilist="$(TARGET_CPU_ABI_LIST)">>$@ + $(hide) echo ro.odm.product.cpu.abilist32="$(TARGET_CPU_ABI_LIST_32_BIT)">>$@ + $(hide) echo ro.odm.product.cpu.abilist64="$(TARGET_CPU_ABI_LIST_64_BIT)">>$@ + $(hide) TARGET_DEVICE="$(TARGET_DEVICE)" \ + PRODUCT_NAME="$(TARGET_PRODUCT)" \ + PRODUCT_BRAND="$(PRODUCT_BRAND)" \ + PRODUCT_MODEL="$(PRODUCT_MODEL)" \ + PRODUCT_MANUFACTURER="$(PRODUCT_MANUFACTURER)" \ + TARGET_BOOTLOADER_BOARD_NAME="$(TARGET_BOOTLOADER_BOARD_NAME)" \ + TARGET_BOARD_PLATFORM="$(TARGET_BOARD_PLATFORM)" \ + bash $(DEVICE_BUILDINFO_SH) "odm" >> $@ + $(hide) echo "#" >> $@; \ + echo "# ADDITIONAL ODM BUILD PROPERTIES" >> $@; \ + echo "#" >> $@; + $(hide) $(foreach line,$(FINAL_ODM_BUILD_PROPERTIES), \ + echo "$(line)" >> $@;) + $(hide) build/make/tools/post_process_props.py $@ # ----------------------------------------------------------------- # product-services build.prop @@ -1136,7 +1169,7 @@ endif ifneq (true,$(TARGET_USERIMAGES_SPARSE_SQUASHFS_DISABLED)) INTERNAL_USERIMAGES_SPARSE_SQUASHFS_FLAG := -s endif -ifneq ($(filter $(BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE) $(BOARD_PRODUCT_SERVICESIMAGE_FILE_SYSTEM_TYPE) $(BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE) $(BOARD_SYSTEMIMAGE_FILE_SYSTEM_TYPE),squashfs),) +ifneq ($(filter $(BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE) $(BOARD_PRODUCT_SERVICESIMAGE_FILE_SYSTEM_TYPE) $(BOARD_ODMIMAGE_FILE_SYSTEM_TYPE) $(BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE) $(BOARD_SYSTEMIMAGE_FILE_SYSTEM_TYPE),squashfs),) INTERNAL_USERIMAGES_DEPS += $(MAKE_SQUASHFS) $(MKSQUASHFSUSERIMG) $(IMG2SIMG) endif @@ -1170,7 +1203,7 @@ endif endif # PRODUCT_USE_LOGICAL_PARTITIONS # $(1): the path of the output dictionary file -# $(2): a subset of "system vendor cache userdata product product_services oem" +# $(2): a subset of "system vendor cache userdata product product_services oem odm" # $(3): additional "key=value" pairs to append to the dictionary file. define generate-image-prop-dictionary $(if $(filter $(2),system),\ @@ -1233,6 +1266,19 @@ $(if $(filter $(2),product_services),\ $(if $(BOARD_PRODUCT_SERVICESIMAGE_SQUASHFS_DISABLE_4K_ALIGN),$(hide) echo "product_services_squashfs_disable_4k_align=$(BOARD_PRODUCT_SERVICESIMAGE_SQUASHFS_DISABLE_4K_ALIGN)" >> $(1)) $(if $(BOARD_PRODUCT_SERVICESIMAGE_PARTITION_RESERVED_SIZE),$(hide) echo "product_services_reserved_size=$(BOARD_PRODUCT_SERVICESIMAGE_PARTITION_RESERVED_SIZE)" >> $(1)) ) +$(if $(filter $(2),odm),\ + $(if $(BOARD_ODMIMAGE_FILE_SYSTEM_TYPE),$(hide) echo "odm_fs_type=$(BOARD_ODMIMAGE_FILE_SYSTEM_TYPE)" >> $(1)) + $(if $(BOARD_ODMIMAGE_EXTFS_INODE_COUNT),$(hide) echo "odm_extfs_inode_count=$(BOARD_ODMIMAGE_EXTFS_INODE_COUNT)" >> $(1)) + $(if $(BOARD_ODMIMAGE_EXTFS_RSV_PCT),$(hide) echo "odm_extfs_rsv_pct=$(BOARD_ODMIMAGE_EXTFS_RSV_PCT)" >> $(1)) + $(if $(BOARD_ODMIMAGE_PARTITION_SIZE),$(hide) echo "odm_size=$(BOARD_ODMIMAGE_PARTITION_SIZE)" >> $(1)) + $(if $(BOARD_ODMIMAGE_JOURNAL_SIZE),$(hide) echo "odm_journal_size=$(BOARD_ODMIMAGE_JOURNAL_SIZE)" >> $(1)) + $(if $(BOARD_ODMIMAGE_SQUASHFS_COMPRESSOR),$(hide) echo "odm_squashfs_compressor=$(BOARD_ODMIMAGE_SQUASHFS_COMPRESSOR)" >> $(1)) + $(if $(BOARD_ODMIMAGE_SQUASHFS_COMPRESSOR_OPT),$(hide) echo "odm_squashfs_compressor_opt=$(BOARD_ODMIMAGE_SQUASHFS_COMPRESSOR_OPT)" >> $(1)) + $(if $(BOARD_ODMIMAGE_SQUASHFS_BLOCK_SIZE),$(hide) echo "odm_squashfs_block_size=$(BOARD_ODMIMAGE_SQUASHFS_BLOCK_SIZE)" >> $(1)) + $(if $(BOARD_ODMIMAGE_SQUASHFS_DISABLE_4K_ALIGN),$(hide) echo "odm_squashfs_disable_4k_align=$(BOARD_ODMIMAGE_SQUASHFS_DISABLE_4K_ALIGN)" >> $(1)) + $(if $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_ODM_BASE_FS_PATH),$(hide) echo "odm_base_fs_file=$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_ODM_BASE_FS_PATH)" >> $(1)) + $(if $(BOARD_ODMIMAGE_PARTITION_RESERVED_SIZE),$(hide) echo "odm_reserved_size=$(BOARD_ODMIMAGE_PARTITION_RESERVED_SIZE)" >> $(1)) +) $(if $(filter $(2),oem),\ $(if $(BOARD_OEMIMAGE_PARTITION_SIZE),$(hide) echo "oem_size=$(BOARD_OEMIMAGE_PARTITION_SIZE)" >> $(1)) $(if $(BOARD_OEMIMAGE_JOURNAL_SIZE),$(hide) echo "oem_journal_size=$(BOARD_OEMIMAGE_JOURNAL_SIZE)" >> $(1)) @@ -1240,6 +1286,7 @@ $(if $(filter $(2),oem),\ $(if $(BOARD_OEMIMAGE_EXTFS_RSV_PCT),$(hide) echo "oem_extfs_rsv_pct=$(BOARD_OEMIMAGE_EXTFS_RSV_PCT)" >> $(1)) ) $(hide) echo "ext_mkuserimg=$(notdir $(MKEXTUSERIMG))" >> $(1) + $(if $(INTERNAL_USERIMAGES_EXT_VARIANT),$(hide) echo "fs_type=$(INTERNAL_USERIMAGES_EXT_VARIANT)" >> $(1)) $(if $(INTERNAL_USERIMAGES_SPARSE_EXT_FLAG),$(hide) echo "extfs_sparse_flag=$(INTERNAL_USERIMAGES_SPARSE_EXT_FLAG)" >> $(1)) $(if $(INTERNAL_USERIMAGES_SPARSE_SQUASHFS_FLAG),$(hide) echo "squashfs_sparse_flag=$(INTERNAL_USERIMAGES_SPARSE_SQUASHFS_FLAG)" >> $(1)) @@ -1292,6 +1339,13 @@ $(if $(BOARD_AVB_ENABLE),\ $(hide) echo "avb_product_services_key_path=$(BOARD_AVB_PRODUCT_SERVICES_KEY_PATH)" >> $(1) $(hide) echo "avb_product_services_algorithm=$(BOARD_AVB_PRODUCT_SERVICES_ALGORITHM)" >> $(1) $(hide) echo "avb_product_services_rollback_index_location=$(BOARD_AVB_PRODUCT_SERVICES_ROLLBACK_INDEX_LOCATION)" >> $(1))) +$(if $(BOARD_AVB_ENABLE),$(hide) echo "avb_odm_hashtree_enable=$(BOARD_AVB_ENABLE)" >> $(1)) +$(if $(BOARD_AVB_ENABLE),$(hide) echo "avb_odm_add_hashtree_footer_args=$(BOARD_AVB_ODM_ADD_HASHTREE_FOOTER_ARGS)" >> $(1)) +$(if $(BOARD_AVB_ENABLE),\ + $(if $(BOARD_AVB_ODM_KEY_PATH),\ + $(hide) echo "avb_odm_key_path=$(BOARD_AVB_ODM_KEY_PATH)" >> $(1) + $(hide) echo "avb_odm_algorithm=$(BOARD_AVB_ODM_ALGORITHM)" >> $(1) + $(hide) echo "avb_odm_rollback_index_location=$(BOARD_AVB_ODM_ROLLBACK_INDEX_LOCATION)" >> $(1))) $(if $(filter true,$(BOARD_USES_RECOVERY_AS_BOOT)),\ $(hide) echo "recovery_as_boot=true" >> $(1)) $(if $(filter true,$(BOARD_BUILD_SYSTEM_ROOT_IMAGE)),\ @@ -1304,7 +1358,7 @@ endef # $(1): the path of the output dictionary file # $(2): additional "key=value" pairs to append to the dictionary file. define generate-userimage-prop-dictionary -$(call generate-image-prop-dictionary,$(1),system vendor cache userdata product product_services oem,$(2)) +$(call generate-image-prop-dictionary,$(1),system vendor cache userdata product product_services oem odm,$(2)) endef # $(1): the path of the input dictionary file, where each line has the format key=value @@ -1468,6 +1522,7 @@ $(INSTALLED_RECOVERY_BUILD_PROP_TARGET): \ $(INSTALLED_VENDOR_DEFAULT_PROP_TARGET) \ $(intermediate_system_build_prop) \ $(INSTALLED_VENDOR_BUILD_PROP_TARGET) \ + $(INSTALLED_ODM_BUILD_PROP_TARGET) \ $(INSTALLED_PRODUCT_BUILD_PROP_TARGET) \ $(INSTALLED_PRODUCT_SERVICES_BUILD_PROP_TARGET) @echo "Target recovery buildinfo: $@ @@ -1477,6 +1532,7 @@ $(INSTALLED_RECOVERY_BUILD_PROP_TARGET): \ $(hide) cat $(INSTALLED_VENDOR_DEFAULT_PROP_TARGET) >> $@ $(hide) cat $(intermediate_system_build_prop) >> $@ $(hide) cat $(INSTALLED_VENDOR_BUILD_PROP_TARGET) >> $@ + $(hide) cat $(INSTALLED_ODM_BUILD_PROP_TARGET) >> $@ $(hide) cat $(INSTALLED_PRODUCT_BUILD_PROP_TARGET) >> $@ $(hide) cat $(INSTALLED_PRODUCT_SERVICES_BUILD_PROP_TARGET) >> $@ $(call append-recovery-ui-properties,$(PRIVATE_RECOVERY_UI_PROPERTIES),$@) @@ -1755,6 +1811,21 @@ define create-system-product-services-symlink endef endif +# Create symlink /vendor/odm to /odm if necessary. +ifdef BOARD_USES_ODMIMAGE +define create-vendor-odm-symlink +$(hide) if [ -d $(TARGET_OUT_VENDOR)/odm ] && [ ! -h $(TARGET_OUT_VENDOR)/odm ]; then \ + echo 'Non-symlink $(TARGET_OUT_VENDOR)/odm detected!' 1>&2; \ + echo 'You cannot install files to $(TARGET_OUT_VENDOR)/odm while building a separate odm.img!' 1>&2; \ + exit 1; \ +fi +$(hide) ln -sf /odm $(TARGET_OUT_VENDOR)/odm +endef +else +define create-vendor-odm-symlink +endef +endif + # $(1): output file define build-systemimage-target @echo "Target system fs image: $(1)" @@ -1929,6 +2000,10 @@ ifdef BOARD_PRODUCT_SERVICESIMAGE_FILE_SYSTEM_TYPE $(hide) cd $(dir $@) && zip -qryX $(notdir $@) \ $(TARGET_COPY_OUT_PRODUCT_SERVICES) endif +ifdef BOARD_ODMIMAGE_FILE_SYSTEM_TYPE + $(hide) cd $(dir $@) && zip -qryX $(notdir $@) \ + $(TARGET_COPY_OUT_ODM) +endif ifneq ($(PDK_PLATFORM_JAVA_ZIP_CONTENTS),) $(hide) cd $(OUT_DIR) && zip -qryX $(patsubst $(OUT_DIR)/%,%,$@) $(PDK_PLATFORM_JAVA_ZIP_CONTENTS) endif @@ -2246,6 +2321,7 @@ BUILT_VENDORIMAGE_TARGET := $(PRODUCT_OUT)/vendor.img define build-vendorimage-target $(call pretty,"Target vendor fs image: $(INSTALLED_VENDORIMAGE_TARGET)") @mkdir -p $(TARGET_OUT_VENDOR) + $(call create-vendor-odm-symlink) @mkdir -p $(vendorimage_intermediates) && rm -rf $(vendorimage_intermediates)/vendor_image_info.txt $(call generate-image-prop-dictionary, $(vendorimage_intermediates)/vendor_image_info.txt,vendor,skip_fsck=true) $(if $(BOARD_VENDOR_KERNEL_MODULES), \ @@ -2388,6 +2464,62 @@ INSTALLED_PRODUCT_SERVICESIMAGE_TARGET := $(PRODUCT_OUT)/product-services.img $(eval $(call copy-one-file,$(BOARD_PREBUILT_PRODUCT_SERVICESIMAGE),$(INSTALLED_PRODUCT_SERVICESIMAGE_TARGET))) endif +# ----------------------------------------------------------------- +# odm partition image +ifdef BOARD_ODMIMAGE_FILE_SYSTEM_TYPE +INTERNAL_ODMIMAGE_FILES := \ + $(filter $(TARGET_OUT_ODM)/%,\ + $(ALL_DEFAULT_INSTALLED_MODULES)\ + $(ALL_PDK_FUSION_FILES)) \ + $(PDK_FUSION_SYMLINK_STAMP) +# platform.zip depends on $(INTERNAL_ODMIMAGE_FILES). +$(INSTALLED_PLATFORM_ZIP) : $(INTERNAL_ODMIMAGE_FILES) + +INSTALLED_FILES_FILE_ODM := $(PRODUCT_OUT)/installed-files-odm.txt +INSTALLED_FILES_JSON_ODM := $(INSTALLED_FILES_FILE_ODM:.txt=.json) +$(INSTALLED_FILES_FILE_ODM): .KATI_IMPLICIT_OUTPUTS := $(INSTALLED_FILES_JSON_ODM) +$(INSTALLED_FILES_FILE_ODM) : $(INTERNAL_ODMIMAGE_FILES) $(FILESLIST) + @echo Installed file list: $@ + @mkdir -p $(dir $@) + @rm -f $@ + $(hide) $(FILESLIST) $(TARGET_OUT_ODM) > $(@:.txt=.json) + $(hide) build/tools/fileslist_util.py -c $(@:.txt=.json) > $@ + +odmimage_intermediates := \ + $(call intermediates-dir-for,PACKAGING,odm) +BUILT_ODMIMAGE_TARGET := $(PRODUCT_OUT)/odm.img +define build-odmimage-target + $(call pretty,"Target odm fs image: $(INSTALLED_ODMIMAGE_TARGET)") + @mkdir -p $(TARGET_OUT_ODM) + @mkdir -p $(odmimage_intermediates) && rm -rf $(odmimage_intermediates)/odm_image_info.txt + $(call generate-userimage-prop-dictionary, $(odmimage_intermediates)/odm_image_info.txt, skip_fsck=true) + $(if $(BOARD_ODM_KERNEL_MODULES), \ + $(call build-image-kernel-modules,$(BOARD_ODM_KERNEL_MODULES),$(TARGET_OUT_ODM),odm/,$(call intermediates-dir-for,PACKAGING,depmod_odm))) + $(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH \ + ./build/tools/releasetools/build_image.py \ + $(TARGET_OUT_ODM) $(odmimage_intermediates)/odm_image_info.txt $(INSTALLED_ODMIMAGE_TARGET) $(TARGET_OUT) \ + $(odmimage_intermediates)/generated_odm_image_info.txt + $(hide) $(call assert-max-image-size,$(INSTALLED_ODMIMAGE_TARGET),\ + $(call read-image-prop-dictionary,\ + $(odmimage_intermediates)/generated_odm_image_info.txt,odm_size)) +endef + +# We just build this directly to the install location. +INSTALLED_ODMIMAGE_TARGET := $(BUILT_ODMIMAGE_TARGET) +$(INSTALLED_ODMIMAGE_TARGET): $(INTERNAL_USERIMAGES_DEPS) $(INTERNAL_ODMIMAGE_FILES) $(INSTALLED_FILES_FILE_ODM) $(BUILD_IMAGE_SRCS) $(DEPMOD) $(BOARD_ODM_KERNEL_MODULES) + $(build-odmimage-target) + +.PHONY: odmimage-nodeps onod +odmimage-nodeps onod: | $(INTERNAL_USERIMAGES_DEPS) $(DEPMOD) + $(build-odmimage-target) + +sync: $(INTERNAL_ODMIMAGE_FILES) + +else ifdef BOARD_PREBUILT_ODMIMAGE +INSTALLED_ODMIMAGE_TARGET := $(PRODUCT_OUT)/odm.img +$(eval $(call copy-one-file,$(BOARD_PREBUILT_ODMIMAGE),$(INSTALLED_ODMIMAGE_TARGET))) +endif + # ----------------------------------------------------------------- # dtbo image ifdef BOARD_PREBUILT_DTBOIMAGE @@ -2433,6 +2565,7 @@ VENDOR_FOOTER_ARGS := BOARD_AVB_VENDOR_ADD_HASHTREE_FOOTER_ARGS RECOVERY_FOOTER_ARGS := BOARD_AVB_RECOVERY_ADD_HASH_FOOTER_ARGS PRODUCT_FOOTER_ARGS := BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS PRODUCT_SERVICES_FOOTER_ARGS := BOARD_AVB_PRODUCT_SERVICES_ADD_HASHTREE_FOOTER_ARGS +ODM_FOOTER_ARGS := BOARD_AVB_ODM_ADD_HASHTREE_FOOTER_ARGS # Check and set required build variables for a chain partition. # $(1): the partition to enable AVB chain, e.g., BOOT or SYSTEM. @@ -2494,6 +2627,15 @@ INTERNAL_AVB_MAKE_VBMETA_IMAGE_ARGS += \ endif endif +ifdef INSTALLED_ODMIMAGE_TARGET +ifdef BOARD_AVB_ODM_KEY_PATH +$(eval $(call check-and-set-avb-chain-args,ODM)) +else +INTERNAL_AVB_MAKE_VBMETA_IMAGE_ARGS += \ + --include_descriptors_from_image $(INSTALLED_ODMIMAGE_TARGET) +endif +endif + ifdef INSTALLED_DTBOIMAGE_TARGET ifdef BOARD_AVB_DTBO_KEY_PATH $(eval $(call check-and-set-avb-chain-args,DTBO)) @@ -2553,6 +2695,9 @@ define extract-avb-chain-public-keys $(if $(BOARD_AVB_PRODUCT_SERVICES_KEY_PATH),\ $(hide) $(AVBTOOL) extract_public_key --key $(BOARD_AVB_PRODUCT_SERVICES_KEY_PATH) \ --output $(1)/product-services.avbpubkey) + $(if $(BOARD_AVB_ODM_KEY_PATH),\ + $(hide) $(AVBTOOL) extract_public_key --key $(BOARD_AVB_ODM_KEY_PATH) \ + --output $(1)/odm.avbpubkey) $(if $(BOARD_AVB_DTBO_KEY_PATH),\ $(hide) $(AVBTOOL) extract_public_key --key $(BOARD_AVB_DTBO_KEY_PATH) \ --output $(1)/dtbo.avbpubkey) @@ -2581,6 +2726,7 @@ $(INSTALLED_VBMETAIMAGE_TARGET): \ $(INSTALLED_VENDORIMAGE_TARGET) \ $(INSTALLED_PRODUCTIMAGE_TARGET) \ $(INSTALLED_PRODUCT_SERVICESIMAGE_TARGET) \ + $(INSTALLED_ODMIMAGE_TARGET) \ $(INSTALLED_DTBOIMAGE_TARGET) \ $(INSTALLED_RECOVERYIMAGE_TARGET) \ $(BOARD_AVB_KEY_PATH) @@ -2935,6 +3081,7 @@ $(BUILT_TARGET_FILES_PACKAGE): \ $(INSTALLED_PRODUCTIMAGE_TARGET) \ $(INSTALLED_PRODUCT_SERVICESIMAGE_TARGET) \ $(INSTALLED_VBMETAIMAGE_TARGET) \ + $(INSTALLED_ODMIMAGE_TARGET) \ $(INSTALLED_DTBOIMAGE_TARGET) \ $(INTERNAL_SYSTEMOTHERIMAGE_FILES) \ $(INSTALLED_ANDROID_INFO_TXT_TARGET) \ @@ -2944,6 +3091,7 @@ $(BUILT_TARGET_FILES_PACKAGE): \ $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VENDOR_BASE_FS_PATH) \ $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PRODUCT_BASE_FS_PATH) \ $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PRODUCT_SERVICES_BASE_FS_PATH) \ + $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_ODM_BASE_FS_PATH) \ $(SELINUX_FC) \ $(APKCERTS_FILE) \ $(SOONG_ZIP) \ @@ -2960,6 +3108,7 @@ $(BUILT_TARGET_FILES_PACKAGE): \ $(call create-system-vendor-symlink) $(call create-system-product-symlink) $(call create-system-product-services-symlink) + $(call create-vendor-odm-symlink) $(hide) rm -rf $@ $@.list $(zip_root) $(hide) mkdir -p $(dir $@) $(zip_root) ifneq (,$(INSTALLED_RECOVERYIMAGE_TARGET)$(filter true,$(BOARD_USES_RECOVERY_AS_BOOT))) @@ -3038,6 +3187,11 @@ ifdef BOARD_PRODUCT_SERVICESIMAGE_FILE_SYSTEM_TYPE $(hide) $(call package_files-copy-root, \ $(TARGET_OUT_PRODUCT_SERVICES),$(zip_root)/PRODUCT-SERVICES) endif +ifdef BOARD_ODMIMAGE_FILE_SYSTEM_TYPE + @# Contents of the odm image + $(hide) $(call package_files-copy-root, \ + $(TARGET_OUT_ODM),$(zip_root)/ODM) +endif ifdef INSTALLED_SYSTEMOTHERIMAGE_TARGET @# Contents of the system_other image $(hide) $(call package_files-copy-root, \ @@ -3113,6 +3267,10 @@ ifneq ($(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PRODUCT_SERVICES_BASE_FS_PATH),) $(hide) cp $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PRODUCT_SERVICES_BASE_FS_PATH) \ $(zip_root)/META/$(notdir $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PRODUCT_SERVICES_BASE_FS_PATH)) endif +ifneq ($(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_ODM_BASE_FS_PATH),) + $(hide) cp $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_ODM_BASE_FS_PATH) \ + $(zip_root)/META/$(notdir $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_ODM_BASE_FS_PATH)) +endif ifneq ($(strip $(SANITIZE_TARGET)),) # We need to create userdata.img with real data because the instrumented libraries are in userdata.img. $(hide) echo "userdata_img_with_data=true" >> $(zip_root)/META/misc_info.txt @@ -3197,6 +3355,10 @@ ifdef BOARD_PREBUILT_BOOTIMAGE $(hide) mkdir -p $(zip_root)/IMAGES $(hide) cp $(INSTALLED_BOOTIMAGE_TARGET) $(zip_root)/IMAGES/ endif +ifdef BOARD_PREBUILT_ODMIMAGE + $(hide) mkdir -p $(zip_root)/IMAGES + $(hide) cp $(INSTALLED_ODMIMAGE_TARGET) $(zip_root)/IMAGES/ +endif ifdef BOARD_PREBUILT_DTBOIMAGE $(hide) mkdir -p $(zip_root)/PREBUILT_IMAGES $(hide) cp $(INSTALLED_DTBOIMAGE_TARGET) $(zip_root)/PREBUILT_IMAGES/ @@ -3229,6 +3391,9 @@ endif ifdef BOARD_PRODUCT_SERVICESIMAGE_FILE_SYSTEM_TYPE $(hide) $(call fs_config,$(zip_root)/PRODUCT_SERVICES,product-services/) > $(zip_root)/META/product_services_filesystem_config.txt 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. @@ -3375,6 +3540,7 @@ $(SYMBOLS_ZIP): $(INSTALLED_SYSTEMIMAGE) \ $(INSTALLED_VENDORIMAGE_TARGET) \ $(INSTALLED_PRODUCTIMAGE_TARGET) \ $(INSTALLED_PRODUCT_SERVICESIMAGE_TARGET) \ + $(INSTALLED_ODMIMAGE_TARGET) \ $(updater_dep) endif $(SYMBOLS_ZIP): PRIVATE_LIST_FILE := $(call intermediates-dir-for,PACKAGING,symbols)/filelist @@ -3399,7 +3565,8 @@ $(COVERAGE_ZIP): $(INSTALLED_SYSTEMIMAGE) \ $(INSTALLED_USERDATAIMAGE_TARGET) \ $(INSTALLED_VENDORIMAGE_TARGET) \ $(INSTALLED_PRODUCTIMAGE_TARGET) \ - $(INSTALLED_PRODUCT_SERVICESIMAGE_TARGET) + $(INSTALLED_PRODUCT_SERVICESIMAGE_TARGET) \ + $(INSTALLED_ODMIMAGE_TARGET) endif $(COVERAGE_ZIP): PRIVATE_LIST_FILE := $(call intermediates-dir-for,PACKAGING,coverage)/filelist $(COVERAGE_ZIP): $(SOONG_ZIP) @@ -3517,6 +3684,15 @@ $(INSTALLED_QEMU_PRODUCT_SERVICESIMAGE): $(INSTALLED_PRODUCT_SERVICESIMAGE_TARGE productservicesimage: $(INSTALLED_QEMU_PRODUCT_SERVICESIMAGE) droidcore: $(INSTALLED_QEMU_PRODUCT_SERVICESIMAGE) endif +ifeq ($(BOARD_USES_ODMIMAGE),true) +INSTALLED_QEMU_ODMIMAGE := $(PRODUCT_OUT)/odm-qemu.img +$(INSTALLED_QEMU_ODMIMAGE): $(INSTALLED_ODMIMAGE_TARGET) $(MK_QEMU_IMAGE_SH) $(SGDISK_HOST) + @echo Create odm-qemu.img + (export SGDISK=$(SGDISK_HOST); $(MK_QEMU_IMAGE_SH) ${PRODUCT_OUT}/odm.img) + +odmimage: $(INSTALLED_QEMU_ODMIMAGE) +droidcore: $(INSTALLED_QEMU_ODMIMAGE) +endif endif # ----------------------------------------------------------------- # The emulator package diff --git a/core/config.mk b/core/config.mk index 091b1d15b2..64d02fa52c 100644 --- a/core/config.mk +++ b/core/config.mk @@ -978,6 +978,13 @@ $(error Should not define BOARD_VENDORIMAGE_PARTITION_SIZE and \ endif endif +ifneq ($(BOARD_ODMIMAGE_PARTITION_SIZE),) +ifneq ($(BOARD_ODMIMAGE_PARTITION_RESERVED_SIZE),) +$(error Should not define BOARD_ODMIMAGE_PARTITION_SIZE and \ + BOARD_ODMIMAGE_PARTITION_RESERVED_SIZE together) +endif +endif + ifneq ($(BOARD_PRODUCTIMAGE_PARTITION_SIZE),) ifneq ($(BOARD_PRODUCTIMAGE_PARTITION_RESERVED_SIZE),) $(error Should not define BOARD_PRODUCTIMAGE_PARTITION_SIZE and \ @@ -1177,6 +1184,7 @@ dont_bother_goals := out \ vnod vendorimage-nodeps \ pnod productimage-nodeps \ psnod productservicesimage-nodeps \ + onod odmimage-nodeps \ systemotherimage-nodeps \ ramdisk-nodeps \ bootimage-nodeps \ diff --git a/core/envsetup.mk b/core/envsetup.mk index c7c3f92f43..2de170d71b 100644 --- a/core/envsetup.mk +++ b/core/envsetup.mk @@ -222,6 +222,17 @@ _product_services_path_placeholder := ||PRODUCT-SERVICES-PATH-PH|| TARGET_COPY_OUT_PRODUCT_SERVICES := $(_product_services_path_placeholder) ########################################### +########################################### +# Define TARGET_COPY_OUT_ODM to a placeholder, for at this point +# we don't know if the device wants to build a separate odm.img +# or just build odm stuff into vendor.img. +# A device can set up TARGET_COPY_OUT_ODM to "odm" in its +# BoardConfig.mk. +# We'll substitute with the real value after loading BoardConfig.mk. +_odm_path_placeholder := ||ODM-PATH-PH|| +TARGET_COPY_OUT_ODM := $(_odm_path_placeholder) +########################################### + ################################################################# # Set up minimal BOOTCLASSPATH list of jars to build/execute # java code with dalvikvm/art. @@ -375,6 +386,28 @@ else ifdef BOARD_USES_PRODUCT_SERVICESIMAGE $(error TARGET_COPY_OUT_PRODUCT_SERVICES must be set to 'product-services' to use a product-services image) endif +########################################### +# Now we can substitute with the real value of TARGET_COPY_OUT_ODM +ifeq ($(TARGET_COPY_OUT_ODM),$(_odm_path_placeholder)) +TARGET_COPY_OUT_ODM := vendor/odm +else ifeq ($(filter odm vendor/odm,$(TARGET_COPY_OUT_ODM)),) +$(error TARGET_COPY_OUT_ODM must be either 'odm' or 'vendor/odm', seeing '$(TARGET_COPY_OUT_ODM)'.) +endif +PRODUCT_COPY_FILES := $(subst $(_odm_path_placeholder),$(TARGET_COPY_OUT_ODM),$(PRODUCT_COPY_FILES)) + +BOARD_USES_ODMIMAGE := +ifdef BOARD_PREBUILT_ODMIMAGE +BOARD_USES_ODMIMAGE := true +endif +ifdef BOARD_ODMIMAGE_FILE_SYSTEM_TYPE +BOARD_USES_ODMIMAGE := true +endif +ifeq ($(TARGET_COPY_OUT_ODM),odm) +BOARD_USES_ODMIMAGE := true +else ifdef BOARD_USES_ODMIMAGE +$(error TARGET_COPY_OUT_ODM must be set to 'odm' to use an odm image) +endif + ########################################### # Ensure that only TARGET_RECOVERY_UPDATER_LIBS *or* AB_OTA_UPDATER is set. TARGET_RECOVERY_UPDATER_LIBS ?= @@ -839,32 +872,58 @@ $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_OEM_APPS := $(TARGET_OUT_OEM_APPS) $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_OEM_APPS \ TARGET_OUT_ODM := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ODM) -TARGET_OUT_ODM_EXECUTABLES := $(TARGET_OUT_ODM)/bin -ifeq ($(TARGET_IS_64_BIT),true) -TARGET_OUT_ODM_SHARED_LIBRARIES := $(TARGET_OUT_ODM)/lib64 +ifneq ($(filter address,$(SANITIZE_TARGET)),) +target_out_odm_shared_libraries_base := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ASAN)/odm +ifeq ($(SANITIZE_LITE),true) +# When using SANITIZE_LITE, APKs must not be packaged with sanitized libraries, as they will not +# work with unsanitized app_process. For simplicity, generate APKs into /data/asan/. +target_out_odm_app_base := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ASAN)/odm else -TARGET_OUT_ODM_SHARED_LIBRARIES := $(TARGET_OUT_ODM)/lib +target_out_odm_app_base := $(TARGET_OUT_ODM) endif -TARGET_OUT_ODM_APPS := $(TARGET_OUT_ODM)/app +else +target_out_odm_shared_libraries_base := $(TARGET_OUT_ODM) +target_out_odm_app_base := $(TARGET_OUT_ODM) +endif + +TARGET_OUT_ODM_EXECUTABLES := $(TARGET_OUT_ODM)/bin +TARGET_OUT_ODM_OPTIONAL_EXECUTABLES := $(TARGET_OUT_ODM)/xbin +ifeq ($(TARGET_IS_64_BIT),true) +TARGET_OUT_ODM_SHARED_LIBRARIES := $(target_out_odm_shared_libraries_base)/lib64 +else +TARGET_OUT_ODM_SHARED_LIBRARIES := $(target_out_odm_shared_libraries_base)/lib +endif +TARGET_OUT_ODM_RENDERSCRIPT_BITCODE := $(TARGET_OUT_ODM_SHARED_LIBRARIES) +TARGET_OUT_ODM_JAVA_LIBRARIES := $(TARGET_OUT_ODM)/framework +TARGET_OUT_ODM_APPS := $(target_out_odm_app_base)/app +TARGET_OUT_ODM_APPS_PRIVILEGED := $(target_out_odm_app_base)/priv-app TARGET_OUT_ODM_ETC := $(TARGET_OUT_ODM)/etc .KATI_READONLY := \ TARGET_OUT_ODM \ TARGET_OUT_ODM_EXECUTABLES \ + TARGET_OUT_ODM_OPTIONAL_EXECUTABLES \ TARGET_OUT_ODM_SHARED_LIBRARIES \ + TARGET_OUT_ODM_RENDERSCRIPT_BITCODE \ + TARGET_OUT_ODM_JAVA_LIBRARIES \ TARGET_OUT_ODM_APPS \ + TARGET_OUT_ODM_APPS_PRIVILEGED \ TARGET_OUT_ODM_ETC $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_EXECUTABLES := $(TARGET_OUT_ODM_EXECUTABLES) ifeq ($(TARGET_TRANSLATE_2ND_ARCH),true) -$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_SHARED_LIBRARIES := $(TARGET_OUT_ODM)/lib/$(TARGET_2ND_ARCH) +$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_SHARED_LIBRARIES := $(target_out_odm_shared_libraries_base)/lib/$(TARGET_2ND_ARCH) else -$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_SHARED_LIBRARIES := $(TARGET_OUT_ODM)/lib +$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_SHARED_LIBRARIES := $(target_out_odm_shared_libraries_base)/lib endif +$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_RENDERSCRIPT_BITCODE := $($(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_SHARED_LIBRARIES) $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_APPS := $(TARGET_OUT_ODM_APPS) +$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_APPS_PRIVILEGED := $(TARGET_OUT_ODM_APPS_PRIVILEGED) .KATI_READONLY := \ $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_EXECUTABLES \ $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_SHARED_LIBRARIES \ - $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_APPS + $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_RENDERSCRIPT_BITCODE \ + $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_APPS \ + $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_APPS_PRIVILEGED TARGET_OUT_PRODUCT := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_PRODUCT) TARGET_OUT_PRODUCT_EXECUTABLES := $(TARGET_OUT_PRODUCT)/bin diff --git a/core/local_vndk.mk b/core/local_vndk.mk index 3677d40a15..198e3615bd 100644 --- a/core/local_vndk.mk +++ b/core/local_vndk.mk @@ -1,5 +1,5 @@ -#Set LOCAL_USE_VNDK for modules going into vendor partition, except for host modules +#Set LOCAL_USE_VNDK for modules going into vendor or odm partition, except for host modules #If LOCAL_SDK_VERSION is set, thats a more restrictive set, so they dont need LOCAL_USE_VNDK ifndef LOCAL_IS_HOST_MODULE ifndef LOCAL_SDK_VERSION diff --git a/core/main.mk b/core/main.mk index 678bc981af..6920a7666e 100644 --- a/core/main.mk +++ b/core/main.mk @@ -1202,6 +1202,9 @@ productimage: $(INSTALLED_PRODUCTIMAGE_TARGET) .PHONY: productservicesimage productservicesimage: $(INSTALLED_PRODUCT_SERVICESIMAGE_TARGET) +.PHONY: odmimage +odmimage: $(INSTALLED_ODMIMAGE_TARGET) + .PHONY: systemotherimage systemotherimage: $(INSTALLED_SYSTEMOTHERIMAGE_TARGET) @@ -1228,12 +1231,15 @@ droidcore: files \ $(INSTALLED_CACHEIMAGE_TARGET) \ $(INSTALLED_BPTIMAGE_TARGET) \ $(INSTALLED_VENDORIMAGE_TARGET) \ + $(INSTALLED_ODMIMAGE_TARGET) \ $(INSTALLED_PRODUCTIMAGE_TARGET) \ $(INSTALLED_SYSTEMOTHERIMAGE_TARGET) \ $(INSTALLED_FILES_FILE) \ $(INSTALLED_FILES_JSON) \ $(INSTALLED_FILES_FILE_VENDOR) \ $(INSTALLED_FILES_JSON_VENDOR) \ + $(INSTALLED_FILES_FILE_ODM) \ + $(INSTALLED_FILES_JSON_ODM) \ $(INSTALLED_FILES_FILE_PRODUCT) \ $(INSTALLED_FILES_JSON_PRODUCT) \ $(INSTALLED_FILES_FILE_PRODUCT_SERVICES) \ @@ -1307,6 +1313,8 @@ else # TARGET_BUILD_APPS $(INSTALLED_FILES_JSON) \ $(INSTALLED_FILES_FILE_VENDOR) \ $(INSTALLED_FILES_JSON_VENDOR) \ + $(INSTALLED_FILES_FILE_ODM) \ + $(INSTALLED_FILES_JSON_ODM) \ $(INSTALLED_FILES_FILE_PRODUCT) \ $(INSTALLED_FILES_JSON_PRODUCT) \ $(INSTALLED_FILES_FILE_PRODUCT_SERVICES) \ diff --git a/core/product-graph.mk b/core/product-graph.mk index 696aabfdb9..1efc687e30 100644 --- a/core/product-graph.mk +++ b/core/product-graph.mk @@ -106,6 +106,7 @@ $(OUT_DIR)/products/$(strip $(1)).txt: $(this_makefile) $(hide) echo 'PRODUCT_SYSTEM_DEFAULT_PROPERTIES=$$(PRODUCTS.$(strip $(1)).PRODUCT_SYSTEM_DEFAULT_PROPERTIES)' >> $$@ $(hide) echo 'PRODUCT_PRODUCT_PROPERTIES=$$(PRODUCTS.$(strip $(1)).PRODUCT_PRODUCT_PROPERTIES)' >> $$@ $(hide) echo 'PRODUCT_PRODUCT_SERVICES_PROPERTIES=$$(PRODUCTS.$(strip $(1)).PRODUCT_PRODUCT_SERVICES_PROPERTIES)' >> $$@ + $(hide) echo 'PRODUCT_ODM_PROPERTIES=$$(PRODUCTS.$(strip $(1)).PRODUCT_ODM_PROPERTIES)' >> $$@ $(hide) echo 'PRODUCT_CHARACTERISTICS=$$(PRODUCTS.$(strip $(1)).PRODUCT_CHARACTERISTICS)' >> $$@ $(hide) echo 'PRODUCT_COPY_FILES=$$(PRODUCTS.$(strip $(1)).PRODUCT_COPY_FILES)' >> $$@ $(hide) echo 'PRODUCT_OTA_PUBLIC_KEYS=$$(PRODUCTS.$(strip $(1)).PRODUCT_OTA_PUBLIC_KEYS)' >> $$@ diff --git a/core/product.mk b/core/product.mk index ddf774f014..d446026deb 100644 --- a/core/product.mk +++ b/core/product.mk @@ -129,6 +129,7 @@ _product_var_list := \ PRODUCT_DEFAULT_PROPERTY_OVERRIDES \ PRODUCT_PRODUCT_PROPERTIES \ PRODUCT_PRODUCT_SERVICES_PROPERTIES \ + PRODUCT_ODM_PROPERTIES \ PRODUCT_CHARACTERISTICS \ PRODUCT_COPY_FILES \ PRODUCT_OTA_PUBLIC_KEYS \ @@ -169,6 +170,7 @@ _product_var_list := \ PRODUCT_VENDOR_VERITY_PARTITION \ PRODUCT_PRODUCT_VERITY_PARTITION \ PRODUCT_PRODUCT_SERVICES_VERITY_PARTITION \ + PRODUCT_ODM_VERITY_PARTITION \ PRODUCT_SYSTEM_SERVER_DEBUG_INFO \ PRODUCT_OTHER_JAVA_DEBUG_INFO \ PRODUCT_DEX_PREOPT_MODULE_CONFIGS \ @@ -185,6 +187,7 @@ _product_var_list := \ PRODUCT_VENDOR_BASE_FS_PATH \ PRODUCT_PRODUCT_BASE_FS_PATH \ PRODUCT_PRODUCT_SERVICES_BASE_FS_PATH \ + PRODUCT_ODM_BASE_FS_PATH \ PRODUCT_SHIPPING_API_LEVEL \ VENDOR_PRODUCT_RESTRICT_VENDOR_FILES \ VENDOR_EXCEPTION_MODULES \ @@ -386,6 +389,8 @@ _product_stash_var_list += \ BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE \ BOARD_PRODUCT_SERVICESIMAGE_PARTITION_SIZE \ BOARD_PRODUCT_SERVICESIMAGE_FILE_SYSTEM_TYPE \ + BOARD_ODMIMAGE_PARTITION_SIZE \ + BOARD_ODMIMAGE_FILE_SYSTEM_TYPE \ BOARD_INSTALLER_CMDLINE \ @@ -398,6 +403,7 @@ _product_stash_var_list += \ _product_stash_var_list += \ BOARD_SYSTEMIMAGE_PARTITION_RESERVED_SIZE \ BOARD_VENDORIMAGE_PARTITION_RESERVED_SIZE \ + BOARD_ODMIMAGE_PARTITION_RESERVED_SIZE \ BOARD_PRODUCTIMAGE_PARTITION_RESERVED_SIZE \ BOARD_PRODUCT_SERVICESIMAGE_PARTITION_RESERVED_SIZE \ BOARD_SUPER_PARTITION_SIZE \ diff --git a/help.sh b/help.sh index ad22253088..3ecdbc2ca8 100755 --- a/help.sh +++ b/help.sh @@ -42,6 +42,8 @@ Common goals are: Stands for "Product, NO Dependencies" psnod Quickly rebuild the product-services image from built packages Stands for "ProductServices, NO Dependencies" + onod Quickly rebuild the odm image from built packages + Stands for "ODM, NO Dependencies" So, for example, you could run: diff --git a/tools/device_buildinfo.sh b/tools/device_buildinfo.sh new file mode 100755 index 0000000000..078256519c --- /dev/null +++ b/tools/device_buildinfo.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +partition="$1" + +if [ "$#" -ne 1 ]; then + echo "Usage: $0 " 1>&2 + exit 1 +fi + +if [ "$partition" != "vendor" ] && [ "$partition" != "odm" ]; then + echo "Unknown partition name: $partition" 1>&2 + exit 1 +fi + +echo "# begin build properties" +echo "# autogenerated by device_buildinfo.sh" + +echo "ro.${partition}.build.id=$BUILD_ID" +echo "ro.${partition}.build.version.incremental=$BUILD_NUMBER" +echo "ro.${partition}.build.version.sdk=$PLATFORM_SDK_VERSION" +echo "ro.${partition}.build.version.release=$PLATFORM_VERSION" +echo "ro.${partition}.build.type=$TARGET_BUILD_TYPE" +echo "ro.${partition}.build.tags=$BUILD_VERSION_TAGS" + +echo "ro.product.board=$TARGET_BOOTLOADER_BOARD_NAME" +echo "ro.board.platform=$TARGET_BOARD_PLATFORM" + +echo "ro.product.${partition}.manufacturer=$PRODUCT_MANUFACTURER" +echo "ro.product.${partition}.model=$PRODUCT_MODEL" +echo "ro.product.${partition}.brand=$PRODUCT_BRAND" +echo "ro.product.${partition}.name=$PRODUCT_NAME" +echo "ro.product.${partition}.device=$TARGET_DEVICE" + +echo "# end build properties" diff --git a/tools/releasetools/add_img_to_target_files.py b/tools/releasetools/add_img_to_target_files.py index fb4b882785..932fab9fc1 100755 --- a/tools/releasetools/add_img_to_target_files.py +++ b/tools/releasetools/add_img_to_target_files.py @@ -73,12 +73,14 @@ OPTIONS.replace_verity_private_key = False OPTIONS.is_signing = False # Partitions that should have their care_map added to META/care_map.txt. -PARTITIONS_WITH_CARE_MAP = ('system', 'vendor', 'product', 'product-services') +PARTITIONS_WITH_CARE_MAP = ('system', 'vendor', 'product', 'product-services', + 'odm') # Use a fixed timestamp (01/01/2009 00:00:00 UTC) for files when packaging # images. (b/24377993, b/80600931) FIXED_FILE_TIMESTAMP = (datetime.datetime(2009, 1, 1, 0, 0, 0, 0, None) - datetime.datetime.utcfromtimestamp(0)).total_seconds() + class OutputFile(object): def __init__(self, output_zip, input_dir, prefix, name): self._output_zip = output_zip @@ -215,6 +217,22 @@ def AddProductServices(output_zip): return img.name +def AddOdm(output_zip): + """Turn the contents of ODM into an odm image and store it in output_zip.""" + + img = OutputFile(output_zip, OPTIONS.input_tmp, "IMAGES", "odm.img") + if os.path.exists(img.input_name): + print("odm.img already exists; no need to rebuild...") + return img.input_name + + block_list = OutputFile( + output_zip, OPTIONS.input_tmp, "IMAGES", "odm.map") + CreateImage( + OPTIONS.input_tmp, OPTIONS.info_dict, "odm", img, + block_list=block_list) + return img.name + + def AddDtbo(output_zip): """Adds the DTBO image. @@ -631,7 +649,7 @@ def AddImagesToTargetFiles(filename): has_recovery = OPTIONS.info_dict.get("no_recovery") != "true" - # {vendor,product,product-services}.img are unlike system.img or + # {vendor,odm,product,product-services}.img are unlike system.img or # system_other.img. Because it could be built from source, or dropped into # target_files.zip as a prebuilt blob. We consider either of them as # {vendor,product,product-services}.img being available, which could be @@ -639,6 +657,9 @@ def AddImagesToTargetFiles(filename): has_vendor = (os.path.isdir(os.path.join(OPTIONS.input_tmp, "VENDOR")) or os.path.exists(os.path.join(OPTIONS.input_tmp, "IMAGES", "vendor.img"))) + has_odm = (os.path.isdir(os.path.join(OPTIONS.input_tmp, "ODM")) or + os.path.exists(os.path.join(OPTIONS.input_tmp, "IMAGES", + "odm.img"))) has_product = (os.path.isdir(os.path.join(OPTIONS.input_tmp, "PRODUCT")) or os.path.exists(os.path.join(OPTIONS.input_tmp, "IMAGES", "product.img"))) @@ -727,6 +748,10 @@ def AddImagesToTargetFiles(filename): banner("product-services") partitions['product-services'] = AddProductServices(output_zip) + if has_odm: + banner("odm") + partitions['odm'] = AddOdm(output_zip) + if has_system_other: banner("system_other") AddSystemOther(output_zip) diff --git a/tools/releasetools/build_image.py b/tools/releasetools/build_image.py index 5b46ab0196..86ba1a624b 100755 --- a/tools/releasetools/build_image.py +++ b/tools/releasetools/build_image.py @@ -931,6 +931,26 @@ def ImagePropFromGlobalDict(glob_dict, mount_point): if not copy_prop("product_services_extfs_rsv_pct", "extfs_rsv_pct"): d["extfs_rsv_pct"] = "0" copy_prop("product_services_reserved_size", "partition_reserved_size") + elif mount_point == "odm": + copy_prop("avb_odm_hashtree_enable", "avb_hashtree_enable") + copy_prop("avb_odm_add_hashtree_footer_args", + "avb_add_hashtree_footer_args") + copy_prop("avb_odm_key_path", "avb_key_path") + copy_prop("avb_odm_algorithm", "avb_algorithm") + copy_prop("odm_fs_type", "fs_type") + copy_prop("odm_size", "partition_size") + if not copy_prop("odm_journal_size", "journal_size"): + d["journal_size"] = "0" + copy_prop("odm_verity_block_device", "verity_block_device") + copy_prop("odm_squashfs_compressor", "squashfs_compressor") + copy_prop("odm_squashfs_compressor_opt", "squashfs_compressor_opt") + copy_prop("odm_squashfs_block_size", "squashfs_block_size") + copy_prop("odm_squashfs_disable_4k_align", "squashfs_disable_4k_align") + copy_prop("odm_base_fs_file", "base_fs_file") + copy_prop("odm_extfs_inode_count", "extfs_inode_count") + if not copy_prop("odm_extfs_rsv_pct", "extfs_rsv_pct"): + d["extfs_rsv_pct"] = "0" + copy_prop("odm_reserved_size", "partition_reserved_size") elif mount_point == "oem": copy_prop("fs_type", "fs_type") copy_prop("oem_size", "partition_size") @@ -976,6 +996,8 @@ def GlobalDictFromImageProp(image_prop, mount_point): copy_prop(size_property, "system_size") elif mount_point == "vendor": copy_prop(size_property, "vendor_size") + elif mount_point == "odm": + copy_prop(size_property, "odm_size") elif mount_point == "product": copy_prop(size_property, "product_size") elif mount_point == "product-services": @@ -1017,6 +1039,8 @@ def main(argv): mount_point = "cache" elif image_filename == "vendor.img": mount_point = "vendor" + elif image_filename == "odm.img": + mount_point = "odm" elif image_filename == "oem.img": mount_point = "oem" elif image_filename == "product.img": diff --git a/tools/releasetools/common.py b/tools/releasetools/common.py index 89b4037b32..bf380bcf57 100644 --- a/tools/releasetools/common.py +++ b/tools/releasetools/common.py @@ -79,7 +79,7 @@ SPECIAL_CERT_STRINGS = ("PRESIGNED", "EXTERNAL") # The partitions allowed to be signed by AVB (Android verified boot 2.0). AVB_PARTITIONS = ('boot', 'recovery', 'system', 'vendor', 'product', - 'product-services', 'dtbo') + 'product-services', 'dtbo', 'odm') class ErrorCode(object): diff --git a/tools/vendor_buildinfo.sh b/tools/vendor_buildinfo.sh deleted file mode 100755 index 659004910c..0000000000 --- a/tools/vendor_buildinfo.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash - -echo "# begin build properties" -echo "# autogenerated by vendor_buildinfo.sh" - -echo "ro.vendor.build.id=$BUILD_ID" -echo "ro.vendor.build.version.incremental=$BUILD_NUMBER" -echo "ro.vendor.build.version.sdk=$PLATFORM_SDK_VERSION" -echo "ro.vendor.build.version.release=$PLATFORM_VERSION" -echo "ro.vendor.build.type=$TARGET_BUILD_TYPE" -echo "ro.vendor.build.tags=$BUILD_VERSION_TAGS" - -echo "ro.product.board=$TARGET_BOOTLOADER_BOARD_NAME" -echo "ro.board.platform=$TARGET_BOARD_PLATFORM" - -echo "ro.product.vendor.manufacturer=$PRODUCT_MANUFACTURER" -echo "ro.product.vendor.model=$PRODUCT_MODEL" -echo "ro.product.vendor.brand=$PRODUCT_BRAND" -echo "ro.product.vendor.name=$PRODUCT_NAME" -echo "ro.product.vendor.device=$TARGET_DEVICE" - -echo "# end build properties"