From d26c647f74b25f5681ca65505b358fd114cda596 Mon Sep 17 00:00:00 2001 From: Anton Hansson Date: Mon, 6 May 2019 14:40:57 +0100 Subject: [PATCH] Add support for single-value product variables Prior to this change, all PRODUCT_* variables are inherited with list semantics, meaning the variable value in the current makefile as well as all the makefiles it inherits are concatenated together. Many of these variables are not lists, so this change adds the ability to classify a variable as a single-value variable, which will inherit at most one value (the first one), unless the variable is already defined in the current file. This change also marks all current variables as list variables. A future change will re-classify the single-value variables as such. Bug: 116769560 Test: presubmit Change-Id: I57719a5eefd0749e92c08b1773b6f929629267a3 --- core/node_fns.mk | 25 +++-- core/product.mk | 259 ++++++++++++++++++++++++----------------------- 2 files changed, 152 insertions(+), 132 deletions(-) diff --git a/core/node_fns.mk b/core/node_fns.mk index ccfcc25183..b81d60c0f5 100644 --- a/core/node_fns.mk +++ b/core/node_fns.mk @@ -142,7 +142,8 @@ endef # # $(1): context prefix # $(2): name of this node -# $(3): list of variable names +# $(3): list of node variable names +# $(4): list of single value variable names (subset of $(3)) # define _expand-inherited-values $(foreach v,$(3), \ @@ -154,15 +155,21 @@ define _expand-inherited-values $(patsubst $(INHERIT_TAG)%,%, \ $(filter $(INHERIT_TAG)%, $($(_eiv_tv)) \ )))) \ + $(eval ### "Whether this variable should only take a single value") \ + $(eval _eiv_sv := $(filter $(v),$(4))) \ $(foreach i,$(_eiv_i), \ $(eval ### "Make sure that this inherit appears only once") \ $(eval $(_eiv_tv) := \ $(call uniq-word,$($(_eiv_tv)),$(INHERIT_TAG)$(i))) \ + $(eval ### "The expanded value, empty if we want a single value and have one") \ + $(eval _eiv_ev := \ + $(if $(and $(_eiv_sv),$(filter-out $(INHERIT_TAG)%,$($(_eiv_tv)))),,\ + $($(1).$(i).$(v)) \ + ) \ + ) \ $(eval ### "Expand the inherit tag") \ $(eval $(_eiv_tv) := \ - $(strip \ - $(patsubst $(INHERIT_TAG)$(i),$($(1).$(i).$(v)), \ - $($(_eiv_tv))))) \ + $(strip $(patsubst $(INHERIT_TAG)$(i),$(_eiv_ev),$($(_eiv_tv))))) \ $(eval ### "Clear the child so DAGs don't create duplicate entries" ) \ $(eval $(1).$(i).$(v) :=) \ $(eval ### "If we just inherited ourselves, it's a cycle.") \ @@ -180,6 +187,7 @@ endef # $(1): context prefix # $(2): makefile representing this node # $(3): list of node variable names +# $(4): list of single value variable names (subset of $(3)) # # _include_stack contains the list of included files, with the most recent files first. define _import-node @@ -198,7 +206,7 @@ define _import-node $(call get-inherited-nodes,$(1).$(2),$(3))) $(call _import-nodes-inner,$(1),$($(1).$(2).inherited),$(3)) - $(call _expand-inherited-values,$(1),$(2),$(3)) + $(call _expand-inherited-values,$(1),$(2),$(3),$(4)) $(eval $(1).$(2).inherited :=) $(eval _include_stack := $(wordlist 2,9999,$$(_include_stack))) @@ -215,6 +223,7 @@ endef # $(1): context prefix # $(2): list of makefiles representing nodes to import # $(3): list of node variable names +# $(4): list of single value variable names (subset of $(3)) # #TODO: Make the "does not exist" message more helpful; # should print out the name of the file trying to include it. @@ -225,7 +234,7 @@ define _import-nodes-inner $(eval ### "skipping already-imported $(_in)") \ , \ $(eval $(1).$(_in).seen := true) \ - $(call _import-node,$(1),$(strip $(_in)),$(3)) \ + $(call _import-node,$(1),$(strip $(_in)),$(3),$(4)) \ ) \ , \ $(error $(1): "$(_in)" does not exist) \ @@ -237,6 +246,8 @@ endef # $(1): output list variable name, like "PRODUCTS" or "DEVICES" # $(2): list of makefiles representing nodes to import # $(3): list of node variable names +# $(4): list with subset of variable names that take only a single value, instead +# of the default list semantics # define import-nodes $(if \ @@ -245,7 +256,7 @@ $(if \ $(if $(_include_stack),$(eval $(error ASSERTION FAILED: _include_stack \ should be empty here: $(_include_stack))),) \ $(eval _include_stack := ) \ - $(call _import-nodes-inner,$(_node_import_context),$(_in),$(3)) \ + $(call _import-nodes-inner,$(_node_import_context),$(_in),$(3),$(4)) \ $(call move-var-list,$(_node_import_context).$(_in),$(1).$(_in),$(3)) \ $(eval _node_import_context :=) \ $(eval $(1) := $($(1)) $(_in)) \ diff --git a/core/product.mk b/core/product.mk index 66570e4673..10e99a2ba4 100644 --- a/core/product.mk +++ b/core/product.mk @@ -106,30 +106,37 @@ define get-all-product-makefiles $(call get-product-makefiles,$(_find-android-products-files)) endef -_product_var_list := -_product_var_list += PRODUCT_NAME -_product_var_list += PRODUCT_MODEL +# Variables that are meant to hold only a single value. +# - The value set in the current makefile takes precedence over inherited values +# - If multiple inherited makefiles set the var, the first-inherited value wins +_product_single_value_vars := + +# Variables that are lists of values. +_product_list_vars := + +_product_list_vars += PRODUCT_NAME +_product_list_vars += PRODUCT_MODEL # The resoure configuration options to use for this product. -_product_var_list += PRODUCT_LOCALES -_product_var_list += PRODUCT_AAPT_CONFIG -_product_var_list += PRODUCT_AAPT_PREF_CONFIG -_product_var_list += PRODUCT_AAPT_PREBUILT_DPI -_product_var_list += PRODUCT_HOST_PACKAGES -_product_var_list += PRODUCT_PACKAGES -_product_var_list += PRODUCT_PACKAGES_DEBUG -_product_var_list += PRODUCT_PACKAGES_DEBUG_ASAN -_product_var_list += PRODUCT_PACKAGES_ENG -_product_var_list += PRODUCT_PACKAGES_TESTS +_product_list_vars += PRODUCT_LOCALES +_product_list_vars += PRODUCT_AAPT_CONFIG +_product_list_vars += PRODUCT_AAPT_PREF_CONFIG +_product_list_vars += PRODUCT_AAPT_PREBUILT_DPI +_product_list_vars += PRODUCT_HOST_PACKAGES +_product_list_vars += PRODUCT_PACKAGES +_product_list_vars += PRODUCT_PACKAGES_DEBUG +_product_list_vars += PRODUCT_PACKAGES_DEBUG_ASAN +_product_list_vars += PRODUCT_PACKAGES_ENG +_product_list_vars += PRODUCT_PACKAGES_TESTS # The device that this product maps to. -_product_var_list += PRODUCT_DEVICE -_product_var_list += PRODUCT_MANUFACTURER -_product_var_list += PRODUCT_BRAND +_product_list_vars += PRODUCT_DEVICE +_product_list_vars += PRODUCT_MANUFACTURER +_product_list_vars += PRODUCT_BRAND # These PRODUCT_SYSTEM_* flags, if defined, are used in place of the # corresponding PRODUCT_* flags for the sysprops on /system. -_product_var_list += \ +_product_list_vars += \ PRODUCT_SYSTEM_NAME \ PRODUCT_SYSTEM_MODEL \ PRODUCT_SYSTEM_DEVICE \ @@ -138,24 +145,24 @@ _product_var_list += \ # A list of property assignments, like "key = value", with zero or more # whitespace characters on either side of the '='. -_product_var_list += PRODUCT_PROPERTY_OVERRIDES +_product_list_vars += PRODUCT_PROPERTY_OVERRIDES # A list of property assignments, like "key = value", with zero or more # whitespace characters on either side of the '='. # used for adding properties to default.prop -_product_var_list += PRODUCT_DEFAULT_PROPERTY_OVERRIDES +_product_list_vars += PRODUCT_DEFAULT_PROPERTY_OVERRIDES # A list of property assignments, like "key = value", with zero or more # whitespace characters on either side of the '='. # used for adding properties to build.prop of product partition -_product_var_list += PRODUCT_PRODUCT_PROPERTIES +_product_list_vars += PRODUCT_PRODUCT_PROPERTIES # A list of property assignments, like "key = value", with zero or more # whitespace characters on either side of the '='. # used for adding properties to build.prop of product partition -_product_var_list += PRODUCT_PRODUCT_SERVICES_PROPERTIES -_product_var_list += PRODUCT_ODM_PROPERTIES -_product_var_list += PRODUCT_CHARACTERISTICS +_product_list_vars += PRODUCT_PRODUCT_SERVICES_PROPERTIES +_product_list_vars += PRODUCT_ODM_PROPERTIES +_product_list_vars += PRODUCT_CHARACTERISTICS # A list of words like :[:]. # The file at the source path should be copied to the destination path @@ -163,157 +170,157 @@ _product_var_list += PRODUCT_CHARACTERISTICS # $(PRODUCT_OUT), so it should look like, e.g., "system/etc/file.xml". # The rules for these copy steps are defined in build/make/core/Makefile. # The optional : is used to indicate the owner of a vendor file. -_product_var_list += PRODUCT_COPY_FILES +_product_list_vars += PRODUCT_COPY_FILES # The OTA key(s) specified by the product config, if any. The names # of these keys are stored in the target-files zip so that post-build # signing tools can substitute them for the test key embedded by # default. -_product_var_list += PRODUCT_OTA_PUBLIC_KEYS -_product_var_list += PRODUCT_EXTRA_RECOVERY_KEYS +_product_list_vars += PRODUCT_OTA_PUBLIC_KEYS +_product_list_vars += PRODUCT_EXTRA_RECOVERY_KEYS # Should we use the default resources or add any product specific overlays -_product_var_list += PRODUCT_PACKAGE_OVERLAYS -_product_var_list += DEVICE_PACKAGE_OVERLAYS +_product_list_vars += PRODUCT_PACKAGE_OVERLAYS +_product_list_vars += DEVICE_PACKAGE_OVERLAYS # Resource overlay list which must be excluded from enforcing RRO. -_product_var_list += PRODUCT_ENFORCE_RRO_EXCLUDED_OVERLAYS +_product_list_vars += PRODUCT_ENFORCE_RRO_EXCLUDED_OVERLAYS # Package list to apply enforcing RRO. -_product_var_list += PRODUCT_ENFORCE_RRO_TARGETS +_product_list_vars += PRODUCT_ENFORCE_RRO_TARGETS -_product_var_list += PRODUCT_SDK_ATREE_FILES -_product_var_list += PRODUCT_SDK_ADDON_NAME -_product_var_list += PRODUCT_SDK_ADDON_COPY_FILES -_product_var_list += PRODUCT_SDK_ADDON_COPY_MODULES -_product_var_list += PRODUCT_SDK_ADDON_DOC_MODULES -_product_var_list += PRODUCT_SDK_ADDON_SYS_IMG_SOURCE_PROP +_product_list_vars += PRODUCT_SDK_ATREE_FILES +_product_list_vars += PRODUCT_SDK_ADDON_NAME +_product_list_vars += PRODUCT_SDK_ADDON_COPY_FILES +_product_list_vars += PRODUCT_SDK_ADDON_COPY_MODULES +_product_list_vars += PRODUCT_SDK_ADDON_DOC_MODULES +_product_list_vars += PRODUCT_SDK_ADDON_SYS_IMG_SOURCE_PROP # which Soong namespaces to export to Make -_product_var_list += PRODUCT_SOONG_NAMESPACES +_product_list_vars += PRODUCT_SOONG_NAMESPACES -_product_var_list += PRODUCT_DEFAULT_WIFI_CHANNELS -_product_var_list += PRODUCT_DEFAULT_DEV_CERTIFICATE -_product_var_list += PRODUCT_RESTRICT_VENDOR_FILES +_product_list_vars += PRODUCT_DEFAULT_WIFI_CHANNELS +_product_list_vars += PRODUCT_DEFAULT_DEV_CERTIFICATE +_product_list_vars += PRODUCT_RESTRICT_VENDOR_FILES # The list of product-specific kernel header dirs -_product_var_list += PRODUCT_VENDOR_KERNEL_HEADERS +_product_list_vars += PRODUCT_VENDOR_KERNEL_HEADERS # A list of module names of BOOTCLASSPATH (jar files) -_product_var_list += PRODUCT_BOOT_JARS -_product_var_list += PRODUCT_SUPPORTS_BOOT_SIGNER -_product_var_list += PRODUCT_SUPPORTS_VBOOT -_product_var_list += PRODUCT_SUPPORTS_VERITY -_product_var_list += PRODUCT_SUPPORTS_VERITY_FEC -_product_var_list += PRODUCT_OEM_PROPERTIES +_product_list_vars += PRODUCT_BOOT_JARS +_product_list_vars += PRODUCT_SUPPORTS_BOOT_SIGNER +_product_list_vars += PRODUCT_SUPPORTS_VBOOT +_product_list_vars += PRODUCT_SUPPORTS_VERITY +_product_list_vars += PRODUCT_SUPPORTS_VERITY_FEC +_product_list_vars += PRODUCT_OEM_PROPERTIES # A list of property assignments, like "key = value", with zero or more # whitespace characters on either side of the '='. # used for adding properties to default.prop of system partition -_product_var_list += PRODUCT_SYSTEM_DEFAULT_PROPERTIES +_product_list_vars += PRODUCT_SYSTEM_DEFAULT_PROPERTIES -_product_var_list += PRODUCT_SYSTEM_PROPERTY_BLACKLIST -_product_var_list += PRODUCT_VENDOR_PROPERTY_BLACKLIST -_product_var_list += PRODUCT_SYSTEM_SERVER_APPS -_product_var_list += PRODUCT_SYSTEM_SERVER_JARS +_product_list_vars += PRODUCT_SYSTEM_PROPERTY_BLACKLIST +_product_list_vars += PRODUCT_VENDOR_PROPERTY_BLACKLIST +_product_list_vars += PRODUCT_SYSTEM_SERVER_APPS +_product_list_vars += PRODUCT_SYSTEM_SERVER_JARS # All of the apps that we force preopt, this overrides WITH_DEXPREOPT. -_product_var_list += PRODUCT_ALWAYS_PREOPT_EXTRACTED_APK -_product_var_list += PRODUCT_DEXPREOPT_SPEED_APPS -_product_var_list += PRODUCT_LOADED_BY_PRIVILEGED_MODULES -_product_var_list += PRODUCT_VBOOT_SIGNING_KEY -_product_var_list += PRODUCT_VBOOT_SIGNING_SUBKEY -_product_var_list += PRODUCT_VERITY_SIGNING_KEY -_product_var_list += PRODUCT_SYSTEM_VERITY_PARTITION -_product_var_list += PRODUCT_VENDOR_VERITY_PARTITION -_product_var_list += PRODUCT_PRODUCT_VERITY_PARTITION -_product_var_list += PRODUCT_PRODUCT_SERVICES_VERITY_PARTITION -_product_var_list += PRODUCT_ODM_VERITY_PARTITION -_product_var_list += PRODUCT_SYSTEM_SERVER_DEBUG_INFO -_product_var_list += PRODUCT_OTHER_JAVA_DEBUG_INFO +_product_list_vars += PRODUCT_ALWAYS_PREOPT_EXTRACTED_APK +_product_list_vars += PRODUCT_DEXPREOPT_SPEED_APPS +_product_list_vars += PRODUCT_LOADED_BY_PRIVILEGED_MODULES +_product_list_vars += PRODUCT_VBOOT_SIGNING_KEY +_product_list_vars += PRODUCT_VBOOT_SIGNING_SUBKEY +_product_list_vars += PRODUCT_VERITY_SIGNING_KEY +_product_list_vars += PRODUCT_SYSTEM_VERITY_PARTITION +_product_list_vars += PRODUCT_VENDOR_VERITY_PARTITION +_product_list_vars += PRODUCT_PRODUCT_VERITY_PARTITION +_product_list_vars += PRODUCT_PRODUCT_SERVICES_VERITY_PARTITION +_product_list_vars += PRODUCT_ODM_VERITY_PARTITION +_product_list_vars += PRODUCT_SYSTEM_SERVER_DEBUG_INFO +_product_list_vars += PRODUCT_OTHER_JAVA_DEBUG_INFO # Per-module dex-preopt configs. -_product_var_list += PRODUCT_DEX_PREOPT_MODULE_CONFIGS -_product_var_list += PRODUCT_DEX_PREOPT_DEFAULT_COMPILER_FILTER -_product_var_list += PRODUCT_DEX_PREOPT_DEFAULT_FLAGS -_product_var_list += PRODUCT_DEX_PREOPT_BOOT_FLAGS -_product_var_list += PRODUCT_DEX_PREOPT_PROFILE_DIR -_product_var_list += PRODUCT_DEX_PREOPT_GENERATE_DM_FILES -_product_var_list += PRODUCT_DEX_PREOPT_NEVER_ALLOW_STRIPPING -_product_var_list += PRODUCT_DEX_PREOPT_RESOLVE_STARTUP_STRINGS +_product_list_vars += PRODUCT_DEX_PREOPT_MODULE_CONFIGS +_product_list_vars += PRODUCT_DEX_PREOPT_DEFAULT_COMPILER_FILTER +_product_list_vars += PRODUCT_DEX_PREOPT_DEFAULT_FLAGS +_product_list_vars += PRODUCT_DEX_PREOPT_BOOT_FLAGS +_product_list_vars += PRODUCT_DEX_PREOPT_PROFILE_DIR +_product_list_vars += PRODUCT_DEX_PREOPT_GENERATE_DM_FILES +_product_list_vars += PRODUCT_DEX_PREOPT_NEVER_ALLOW_STRIPPING +_product_list_vars += PRODUCT_DEX_PREOPT_RESOLVE_STARTUP_STRINGS # Boot image options. -_product_var_list += \ +_product_list_vars += \ PRODUCT_USE_PROFILE_FOR_BOOT_IMAGE \ PRODUCT_DEX_PREOPT_BOOT_IMAGE_PROFILE_LOCATION \ PRODUCT_USES_DEFAULT_ART_CONFIG \ -_product_var_list += PRODUCT_SYSTEM_SERVER_COMPILER_FILTER +_product_list_vars += PRODUCT_SYSTEM_SERVER_COMPILER_FILTER # Per-module sanitizer configs -_product_var_list += PRODUCT_SANITIZER_MODULE_CONFIGS -_product_var_list += PRODUCT_SYSTEM_BASE_FS_PATH -_product_var_list += PRODUCT_VENDOR_BASE_FS_PATH -_product_var_list += PRODUCT_PRODUCT_BASE_FS_PATH -_product_var_list += PRODUCT_PRODUCT_SERVICES_BASE_FS_PATH -_product_var_list += PRODUCT_ODM_BASE_FS_PATH -_product_var_list += PRODUCT_SHIPPING_API_LEVEL -_product_var_list += VENDOR_PRODUCT_RESTRICT_VENDOR_FILES -_product_var_list += VENDOR_EXCEPTION_MODULES -_product_var_list += VENDOR_EXCEPTION_PATHS +_product_list_vars += PRODUCT_SANITIZER_MODULE_CONFIGS +_product_list_vars += PRODUCT_SYSTEM_BASE_FS_PATH +_product_list_vars += PRODUCT_VENDOR_BASE_FS_PATH +_product_list_vars += PRODUCT_PRODUCT_BASE_FS_PATH +_product_list_vars += PRODUCT_PRODUCT_SERVICES_BASE_FS_PATH +_product_list_vars += PRODUCT_ODM_BASE_FS_PATH +_product_list_vars += PRODUCT_SHIPPING_API_LEVEL +_product_list_vars += VENDOR_PRODUCT_RESTRICT_VENDOR_FILES +_product_list_vars += VENDOR_EXCEPTION_MODULES +_product_list_vars += VENDOR_EXCEPTION_PATHS # Whether the product wants to ship libartd. For rules and meaning, see art/Android.mk. -_product_var_list += PRODUCT_ART_TARGET_INCLUDE_DEBUG_BUILD +_product_list_vars += PRODUCT_ART_TARGET_INCLUDE_DEBUG_BUILD # Make this art variable visible to soong_config.mk. -_product_var_list += PRODUCT_ART_USE_READ_BARRIER +_product_list_vars += PRODUCT_ART_USE_READ_BARRIER # Whether the product is an Android Things variant. -_product_var_list += PRODUCT_IOT +_product_list_vars += PRODUCT_IOT # Add reserved headroom to a system image. -_product_var_list += PRODUCT_SYSTEM_HEADROOM +_product_list_vars += PRODUCT_SYSTEM_HEADROOM # Whether to save disk space by minimizing java debug info -_product_var_list += PRODUCT_MINIMIZE_JAVA_DEBUG_INFO +_product_list_vars += PRODUCT_MINIMIZE_JAVA_DEBUG_INFO # Whether any paths are excluded from sanitization when SANITIZE_TARGET=integer_overflow -_product_var_list += PRODUCT_INTEGER_OVERFLOW_EXCLUDE_PATHS +_product_list_vars += PRODUCT_INTEGER_OVERFLOW_EXCLUDE_PATHS -_product_var_list += PRODUCT_ADB_KEYS +_product_list_vars += PRODUCT_ADB_KEYS # Whether any paths should have CFI enabled for components -_product_var_list += PRODUCT_CFI_INCLUDE_PATHS +_product_list_vars += PRODUCT_CFI_INCLUDE_PATHS # Whether any paths are excluded from sanitization when SANITIZE_TARGET=cfi -_product_var_list += PRODUCT_CFI_EXCLUDE_PATHS +_product_list_vars += PRODUCT_CFI_EXCLUDE_PATHS # Whether the Scudo hardened allocator is disabled platform-wide -_product_var_list += PRODUCT_DISABLE_SCUDO +_product_list_vars += PRODUCT_DISABLE_SCUDO # A flag to override PRODUCT_COMPATIBLE_PROPERTY -_product_var_list += PRODUCT_COMPATIBLE_PROPERTY_OVERRIDE +_product_list_vars += PRODUCT_COMPATIBLE_PROPERTY_OVERRIDE # Whether the whitelist of actionable compatible properties should be disabled or not -_product_var_list += PRODUCT_ACTIONABLE_COMPATIBLE_PROPERTY_DISABLE -_product_var_list += PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS -_product_var_list += PRODUCT_ENFORCE_ARTIFACT_SYSTEM_CERTIFICATE_REQUIREMENT -_product_var_list += PRODUCT_ARTIFACT_SYSTEM_CERTIFICATE_REQUIREMENT_WHITELIST -_product_var_list += PRODUCT_ARTIFACT_PATH_REQUIREMENT_HINT -_product_var_list += PRODUCT_ARTIFACT_PATH_REQUIREMENT_WHITELIST +_product_list_vars += PRODUCT_ACTIONABLE_COMPATIBLE_PROPERTY_DISABLE +_product_list_vars += PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS +_product_list_vars += PRODUCT_ENFORCE_ARTIFACT_SYSTEM_CERTIFICATE_REQUIREMENT +_product_list_vars += PRODUCT_ARTIFACT_SYSTEM_CERTIFICATE_REQUIREMENT_WHITELIST +_product_list_vars += PRODUCT_ARTIFACT_PATH_REQUIREMENT_HINT +_product_list_vars += PRODUCT_ARTIFACT_PATH_REQUIREMENT_WHITELIST # List of modules that should be forcefully unmarked from being LOCAL_PRODUCT_MODULE, and hence # installed on /system directory by default. -_product_var_list += PRODUCT_FORCE_PRODUCT_MODULES_TO_SYSTEM_PARTITION +_product_list_vars += PRODUCT_FORCE_PRODUCT_MODULES_TO_SYSTEM_PARTITION # When this is true, dynamic partitions is retrofitted on a device that has # already been launched without dynamic partitions. Otherwise, the device # is launched with dynamic partitions. # This flag implies PRODUCT_USE_DYNAMIC_PARTITIONS. -_product_var_list += PRODUCT_RETROFIT_DYNAMIC_PARTITIONS +_product_list_vars += PRODUCT_RETROFIT_DYNAMIC_PARTITIONS # Other dynamic partition feature flags.PRODUCT_USE_DYNAMIC_PARTITION_SIZE and # PRODUCT_BUILD_SUPER_PARTITION default to the value of PRODUCT_USE_DYNAMIC_PARTITIONS. -_product_var_list += \ +_product_list_vars += \ PRODUCT_USE_DYNAMIC_PARTITIONS \ PRODUCT_USE_DYNAMIC_PARTITION_SIZE \ PRODUCT_BUILD_SUPER_PARTITION \ @@ -322,33 +329,35 @@ _product_var_list += \ # during OTA). Otherwise, kernel configuration requirements are enforced in VTS. # Devices that checks the running kernel (instead of the kernel in OTA package) should not # set this variable to prevent OTA failures. -_product_var_list += PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS +_product_list_vars += PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS # If set to true, this product builds a generic OTA package, which installs generic system images # onto matching devices. The product may only build a subset of system images (e.g. only # system.img), so devices need to install the package in a system-only OTA manner. -_product_var_list += PRODUCT_BUILD_GENERIC_OTA_PACKAGE +_product_list_vars += PRODUCT_BUILD_GENERIC_OTA_PACKAGE # Whether any paths are excluded from being set XOM when ENABLE_XOM=true -_product_var_list += PRODUCT_XOM_EXCLUDE_PATHS -_product_var_list += PRODUCT_MANIFEST_PACKAGE_NAME_OVERRIDES -_product_var_list += PRODUCT_PACKAGE_NAME_OVERRIDES -_product_var_list += PRODUCT_CERTIFICATE_OVERRIDES -_product_var_list += PRODUCT_BUILD_SYSTEM_IMAGE -_product_var_list += PRODUCT_BUILD_SYSTEM_OTHER_IMAGE -_product_var_list += PRODUCT_BUILD_VENDOR_IMAGE -_product_var_list += PRODUCT_BUILD_PRODUCT_IMAGE -_product_var_list += PRODUCT_BUILD_PRODUCT_SERVICES_IMAGE -_product_var_list += PRODUCT_BUILD_ODM_IMAGE -_product_var_list += PRODUCT_BUILD_CACHE_IMAGE -_product_var_list += PRODUCT_BUILD_RAMDISK_IMAGE -_product_var_list += PRODUCT_BUILD_USERDATA_IMAGE -_product_var_list += PRODUCT_UPDATABLE_BOOT_MODULES -_product_var_list += PRODUCT_UPDATABLE_BOOT_LOCATIONS +_product_list_vars += PRODUCT_XOM_EXCLUDE_PATHS +_product_list_vars += PRODUCT_MANIFEST_PACKAGE_NAME_OVERRIDES +_product_list_vars += PRODUCT_PACKAGE_NAME_OVERRIDES +_product_list_vars += PRODUCT_CERTIFICATE_OVERRIDES +_product_list_vars += PRODUCT_BUILD_SYSTEM_IMAGE +_product_list_vars += PRODUCT_BUILD_SYSTEM_OTHER_IMAGE +_product_list_vars += PRODUCT_BUILD_VENDOR_IMAGE +_product_list_vars += PRODUCT_BUILD_PRODUCT_IMAGE +_product_list_vars += PRODUCT_BUILD_PRODUCT_SERVICES_IMAGE +_product_list_vars += PRODUCT_BUILD_ODM_IMAGE +_product_list_vars += PRODUCT_BUILD_CACHE_IMAGE +_product_list_vars += PRODUCT_BUILD_RAMDISK_IMAGE +_product_list_vars += PRODUCT_BUILD_USERDATA_IMAGE +_product_list_vars += PRODUCT_UPDATABLE_BOOT_MODULES +_product_list_vars += PRODUCT_UPDATABLE_BOOT_LOCATIONS # Whether the product would like to check prebuilt ELF files. -_product_var_list += PRODUCT_CHECK_ELF_FILES -.KATI_READONLY := _product_var_list +_product_list_vars += PRODUCT_CHECK_ELF_FILES + +.KATI_READONLY := _product_single_value_vars _product_list_vars +_product_var_list :=$= $(_product_single_value_vars) $(_product_list_vars) define dump-product $(warning ==== $(1) ====)\ @@ -422,7 +431,7 @@ endef # #TODO: check to make sure that products have all the necessary vars defined define import-products -$(call import-nodes,PRODUCTS,$(1),$(_product_var_list)) +$(call import-nodes,PRODUCTS,$(1),$(_product_var_list),$(_product_single_value_vars)) endef