Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3f0d1ad4 authored by Yifan Hong's avatar Yifan Hong Committed by Gerrit Code Review
Browse files

Merge "Support "updatable groups"."

parents d1428e27 b43012f0
Loading
Loading
Loading
Loading
+52 −23
Original line number Diff line number Diff line
@@ -2916,7 +2916,7 @@ endef
ifeq (true,$(PRODUCT_BUILD_SUPER_PARTITION))

# BOARD_SUPER_PARTITION_SIZE must be defined to build super image.
ifdef BOARD_SUPER_PARTITION_SIZE
ifneq ($(BOARD_SUPER_PARTITION_SIZE),)

INSTALLED_SUPERIMAGE_TARGET := $(PRODUCT_OUT)/super.img
INSTALLED_SUPERIMAGE_EMPTY_TARGET := $(PRODUCT_OUT)/super_empty.img
@@ -2977,32 +2977,61 @@ ifeq (,$(TARGET_BUILD_APPS))
# Do not check for apps-only build

ifeq (true,$(PRODUCT_BUILD_SUPER_PARTITION))
ifdef BOARD_SUPER_PARTITION_SIZE
ifdef BOARD_SUPER_PARTITION_PARTITION_LIST

droid_targets: check_android_partition_sizes
droid_targets: check-all-partition-sizes

.PHONY: check_android_partition_sizes
.PHONY: check-all-partition-sizes check-all-partition-sizes-nodeps

# Add image dependencies so that generated_*_image_info.txt are written before checking.
check_android_partition_sizes: $(call images-for-partitions,$(BOARD_SUPER_PARTITION_PARTITION_LIST))
check-all-partition-sizes: $(call images-for-partitions,$(BOARD_SUPER_PARTITION_PARTITION_LIST))

check_android_partition_sizes:
	partition_size_list="$(call read-size-of-partitions,$(BOARD_SUPER_PARTITION_PARTITION_LIST))"; \
# $(1): human-readable max size string
# $(2): max size expression
# $(3): list of partition names
define check-sum-of-partition-sizes
  partition_size_list="$(call read-size-of-partitions,$(3))"; \
  sum_sizes_expr=$$(sed -e 's/ /+/g' <<< "$${partition_size_list}"); \
  if [ $$(( $${sum_sizes_expr} )) -gt $$(( $(2) )) ]; then \
    echo "The sum of sizes of [$(strip $(3))] is larger than $(strip $(1)):"; \
    echo $${sum_sizes_expr} '==' $$(( $${sum_sizes_expr} )) '>' "$(2)" '==' $$(( $(2) )); \
    exit 1; \
  else \
    echo "The sum of sizes of [$(strip $(3))] is within $(strip $(1)):"; \
    echo $${sum_sizes_expr} '==' $$(( $${sum_sizes_expr} )) '<=' "$(2)" '==' $$(( $(2) )); \
  fi
endef

define check-all-partition-sizes-target
  # Check sum(all partitions) <= super partition (/ 2 for A/B)
  $(if $(BOARD_SUPER_PARTITION_SIZE),$(if $(BOARD_SUPER_PARTITION_PARTITION_LIST), \
    $(call check-sum-of-partition-sizes,BOARD_SUPER_PARTITION_SIZE$(if $(filter true,$(AB_OTA_UPDATER)), / 2), \
      $(BOARD_SUPER_PARTITION_SIZE)$(if $(filter true,$(AB_OTA_UPDATER)), / 2),$(BOARD_SUPER_PARTITION_PARTITION_LIST))))

  # For each group, check sum(partitions in group) <= group size
  $(foreach group,$(call to-upper,$(BOARD_SUPER_PARTITION_GROUPS)), \
    $(if $(BOARD_$(group)_SIZE),$(if $(BOARD_$(group)_PARTITION_LIST), \
      $(call check-sum-of-partition-sizes,BOARD_$(group)_SIZE,$(BOARD_$(group)_SIZE),$(BOARD_$(group)_PARTITION_LIST)))))

  # Check sum(all group sizes) <= super partition (/ 2 for A/B)
  if [[ ! -z $(BOARD_SUPER_PARTITION_SIZE) ]]; then \
    group_size_list="$(foreach group,$(call to-upper,$(BOARD_SUPER_PARTITION_GROUPS)),$(BOARD_$(group)_SIZE))"; \
    sum_sizes_expr=$$(sed -e 's/ /+/g' <<< "$${group_size_list}"); \
    max_size_tail=$(if $(filter true,$(AB_OTA_UPDATER))," / 2"); \
	max_size_expr=$(BOARD_SUPER_PARTITION_SIZE)$${max_size_tail}; \
    max_size_expr="$(BOARD_SUPER_PARTITION_SIZE)$${max_size_tail}"; \
    if [ $$(( $${sum_sizes_expr} )) -gt $$(( $${max_size_expr} )) ]; then \
		echo "The sum of sizes of all logical partitions is larger than BOARD_SUPER_PARTITION_SIZE$${max_size_tail}:"; \
      echo "The sum of sizes of [$(strip $(BOARD_SUPER_PARTITION_GROUPS))] is larger than BOARD_SUPER_PARTITION_SIZE$${max_size_tail}:"; \
      echo $${sum_sizes_expr} '==' $$(( $${sum_sizes_expr} )) '>' $${max_size_expr} '==' $$(( $${max_size_expr} )); \
      exit 1; \
    else \
		echo "The sum of sizes of all logical partitions is within BOARD_SUPER_PARTITION_SIZE$${max_size_tail}:"; \
      echo "The sum of sizes of [$(strip $(BOARD_SUPER_PARTITION_GROUPS))] is within BOARD_SUPER_PARTITION_SIZE$${max_size_tail}:"; \
      echo $${sum_sizes_expr} '==' $$(( $${sum_sizes_expr} )) '<=' $${max_size_expr} '==' $$(( $${max_size_expr} )); \
    fi \
  fi
endef

check-all-partition-sizes check-all-partition-sizes-nodeps:
	$(call check-all-partition-sizes-target)

endif # BOARD_SUPER_PARTITION_PARTITION_LIST
endif # BOARD_SUPER_PARTITION_SIZE
endif # PRODUCT_BUILD_SUPER_PARTITION

endif # TARGET_BUILD_APPS
@@ -3602,7 +3631,7 @@ endif
ifdef BUILT_VENDOR_MATRIX
	$(hide) cp $(BUILT_VENDOR_MATRIX) $(zip_root)/META/vendor_matrix.xml
endif
ifdef BOARD_SUPER_PARTITION_SIZE
ifneq ($(BOARD_SUPER_PARTITION_SIZE),)
	$(hide) echo "super_size=$(BOARD_SUPER_PARTITION_SIZE)" >> $(zip_root)/META/misc_info.txt
	$(hide) echo "lpmake=$(notdir $(LPMAKE))" >> $(zip_root)/META/misc_info.txt
	$(hide) echo -n "lpmake_args=" >> $(zip_root)/META/misc_info.txt
+34 −8
Original line number Diff line number Diff line
@@ -999,16 +999,42 @@ endif
endif # PRODUCT_USE_DYNAMIC_PARTITION_SIZE

ifeq ($(PRODUCT_BUILD_SUPER_PARTITION),true)
ifdef BOARD_SUPER_PARTITION_PARTITION_LIST
# BOARD_SUPER_PARTITION_PARTITION_LIST: a list of the following tokens

# BOARD_SUPER_PARTITION_GROUPS defines a list of "updatable groups". Each updatable group is a
# group of partitions that share the same pool of free spaces.
# For each group in BOARD_SUPER_PARTITION_GROUPS, a BOARD_{GROUP}_SIZE and
# BOARD_{GROUP}_PARTITION_PARTITION_LIST may be defined.
#     - BOARD_{GROUP}_SIZE: The maximum sum of sizes of all partitions in the group.
#       If empty, no limit is enforced on the sum of sizes for this group.
#     - BOARD_{GROUP}_PARTITION_PARTITION_LIST: the list of partitions that belongs to this group.
#       If empty, no partitions belong to this group, and the sum of sizes is effectively 0.
$(foreach group,$(call to-upper,$(BOARD_SUPER_PARTITION_GROUPS)), \
    $(eval BOARD_$(group)_SIZE ?=) \
    $(eval .KATI_READONLY := BOARD_$(group)_SIZE) \
    $(eval BOARD_$(group)_PARTITION_LIST ?=) \
    $(eval .KATI_READONLY := BOARD_$(group)_PARTITION_LIST) \
)

# BOARD_*_PARTITION_LIST: a list of the following tokens
valid_super_partition_list := system vendor product product_services
ifneq (,$(filter-out $(valid_super_partition_list),$(BOARD_SUPER_PARTITION_PARTITION_LIST)))
$(error BOARD_SUPER_PARTITION_PARTITION_LIST contains invalid partition name \
		($(filter-out $(valid_super_partition_list),$(BOARD_SUPER_PARTITION_PARTITION_LIST))). \
        Valid names are $(valid_super_partition_list))
endif
$(foreach group,$(call to-upper,$(BOARD_SUPER_PARTITION_GROUPS)), \
    $(if $(filter-out $(valid_super_partition_list),$(BOARD_$(group)_PARTITION_LIST)), \
        $(error BOARD_$(group)_PARTITION_LIST contains invalid partition name \
            $(filter-out $(valid_super_partition_list),$(BOARD_$(group)_PARTITION_LIST)). \
            Valid names are $(valid_super_partition_list))))
valid_super_partition_list :=
endif # BOARD_SUPER_PARTITION_PARTITION_LIST


# Define BOARD_SUPER_PARTITION_PARTITION_LIST, the sum of all BOARD_*_PARTITION_LIST
ifdef BOARD_SUPER_PARTITION_PARTITION_LIST
$(error BOARD_SUPER_PARTITION_PARTITION_LIST should not be defined, but computed from \
    BOARD_SUPER_PARTITION_GROUPS and BOARD_*_PARTITION_LIST)
endif
BOARD_SUPER_PARTITION_PARTITION_LIST := \
    $(foreach group,$(call to-upper,$(BOARD_SUPER_PARTITION_GROUPS)), \
        $(BOARD_$(group)_PARTITION_LIST))
.KATI_READONLY := BOARD_SUPER_PARTITION_PARTITION_LIST

endif # PRODUCT_BUILD_SUPER_PARTITION

# ###############################################################
+1 −1
Original line number Diff line number Diff line
@@ -408,7 +408,7 @@ _product_stash_var_list += \
	BOARD_PRODUCTIMAGE_PARTITION_RESERVED_SIZE \
	BOARD_PRODUCT_SERVICESIMAGE_PARTITION_RESERVED_SIZE \
	BOARD_SUPER_PARTITION_SIZE \
	BOARD_SUPER_PARTITION_PARTITION_LIST \
	BOARD_SUPER_PARTITION_GROUPS \

#
# Mark the variables in _product_stash_var_list as readonly