0e3b095886
The goal of this change is to cause ro.product.first_api_level to be set in /system/build.prop in targets with PRODUCT_FULL_TREBLE=false (which may be the case for targets without the usual set of hardware interfaces, such as the mini targets being added in https://r.android.com/1966051). Setting ro.product.first_api_level is necessary for devices with newer kernels to boot because it controls which metadata encryption format is used, and an old format that is incompatible with new kernels is used by default (see commit 4073c0b5241b635cb59e9e8a75ddcc783b5a99ce in system/vold). There also appear to be e.g. bionic tests that check this property. So it seems reasonable to set it even if PRODUCT_FULL_TREBLE is false. To begin with, stop adding it to ADDITIONAL_SYSTEM_PROPERTIES. There's basically no point in adding it there because it will be filtered out by the property blocklist for the system partition, whether PRODUCT_FULL_TREBLE is true or false. This lets us remove the blocklist entry, which causes ro.product.first_api_level to appear in /system/build.prop via ADDITIONAL_VENDOR_PROPERTIES on PRODUCT_FULL_TREBLE=false targets. Bug: 217455793 Change-Id: I8c07baf9d308ea734ffed5d9b1776b60cdbf3435
512 lines
19 KiB
Makefile
512 lines
19 KiB
Makefile
#
|
|
# Copyright (C) 2020 The Android Open Source Project
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
#
|
|
|
|
# sysprop.mk defines rules for generating <partition>/[etc/]build.prop files
|
|
|
|
# -----------------------------------------------------------------
|
|
# property_overrides_split_enabled
|
|
property_overrides_split_enabled :=
|
|
ifeq ($(BOARD_PROPERTY_OVERRIDES_SPLIT_ENABLED), true)
|
|
property_overrides_split_enabled := true
|
|
endif
|
|
|
|
BUILDINFO_SH := build/make/tools/buildinfo.sh
|
|
POST_PROCESS_PROPS := $(HOST_OUT_EXECUTABLES)/post_process_props$(HOST_EXECUTABLE_SUFFIX)
|
|
|
|
# Emits a set of sysprops common to all partitions to a file.
|
|
# $(1): Partition name
|
|
# $(2): Output file name
|
|
define generate-common-build-props
|
|
echo "####################################" >> $(2);\
|
|
echo "# from generate-common-build-props" >> $(2);\
|
|
echo "# These properties identify this partition image." >> $(2);\
|
|
echo "####################################" >> $(2);\
|
|
$(if $(filter system,$(1)),\
|
|
echo "ro.product.$(1).brand=$(PRODUCT_SYSTEM_BRAND)" >> $(2);\
|
|
echo "ro.product.$(1).device=$(PRODUCT_SYSTEM_DEVICE)" >> $(2);\
|
|
echo "ro.product.$(1).manufacturer=$(PRODUCT_SYSTEM_MANUFACTURER)" >> $(2);\
|
|
echo "ro.product.$(1).model=$(PRODUCT_SYSTEM_MODEL)" >> $(2);\
|
|
echo "ro.product.$(1).name=$(PRODUCT_SYSTEM_NAME)" >> $(2);\
|
|
,\
|
|
echo "ro.product.$(1).brand=$(PRODUCT_BRAND)" >> $(2);\
|
|
echo "ro.product.$(1).device=$(TARGET_DEVICE)" >> $(2);\
|
|
echo "ro.product.$(1).manufacturer=$(PRODUCT_MANUFACTURER)" >> $(2);\
|
|
echo "ro.product.$(1).model=$(PRODUCT_MODEL)" >> $(2);\
|
|
echo "ro.product.$(1).name=$(TARGET_PRODUCT)" >> $(2);\
|
|
)\
|
|
$(if $(filter system vendor odm,$(1)),\
|
|
echo "ro.$(1).product.cpu.abilist=$(TARGET_CPU_ABI_LIST) " >> $(2);\
|
|
echo "ro.$(1).product.cpu.abilist32=$(TARGET_CPU_ABI_LIST_32_BIT)" >> $(2);\
|
|
echo "ro.$(1).product.cpu.abilist64=$(TARGET_CPU_ABI_LIST_64_BIT)" >> $(2);\
|
|
)\
|
|
echo "ro.$(1).build.date=`$(DATE_FROM_FILE)`" >> $(2);\
|
|
echo "ro.$(1).build.date.utc=`$(DATE_FROM_FILE) +%s`" >> $(2);\
|
|
echo "ro.$(1).build.fingerprint=$(BUILD_FINGERPRINT_FROM_FILE)" >> $(2);\
|
|
echo "ro.$(1).build.id=$(BUILD_ID)" >> $(2);\
|
|
echo "ro.$(1).build.tags=$(BUILD_VERSION_TAGS)" >> $(2);\
|
|
echo "ro.$(1).build.type=$(TARGET_BUILD_VARIANT)" >> $(2);\
|
|
echo "ro.$(1).build.version.incremental=$(BUILD_NUMBER_FROM_FILE)" >> $(2);\
|
|
echo "ro.$(1).build.version.release=$(PLATFORM_VERSION_LAST_STABLE)" >> $(2);\
|
|
echo "ro.$(1).build.version.release_or_codename=$(PLATFORM_VERSION)" >> $(2);\
|
|
echo "ro.$(1).build.version.sdk=$(PLATFORM_SDK_VERSION)" >> $(2);\
|
|
|
|
endef
|
|
|
|
# Rule for generating <partition>/[etc/]build.prop file
|
|
#
|
|
# $(1): partition name
|
|
# $(2): path to the output
|
|
# $(3): path to the input *.prop files. The contents of the files are directly
|
|
# emitted to the output
|
|
# $(4): list of variable names each of which contains name=value pairs
|
|
# $(5): optional list of prop names to force remove from the output. Properties from both
|
|
# $(3) and (4) are affected
|
|
# $(6): optional list of files to append at the end. The content of each file is emitted
|
|
# to the output
|
|
# $(7): optional flag to skip common properties generation
|
|
define build-properties
|
|
ALL_DEFAULT_INSTALLED_MODULES += $(2)
|
|
|
|
$(eval # Properties can be assigned using `prop ?= value` or `prop = value` syntax.)
|
|
$(eval # Eliminate spaces around the ?= and = separators.)
|
|
$(foreach name,$(strip $(4)),\
|
|
$(eval _temp := $$(call collapse-pairs,$$($(name)),?=))\
|
|
$(eval _resolved_$(name) := $$(call collapse-pairs,$$(_temp),=))\
|
|
)
|
|
|
|
$(eval # Implement the legacy behavior when BUILD_BROKEN_DUP_SYSPROP is on.)
|
|
$(eval # Optional assignments are all converted to normal assignments and)
|
|
$(eval # when their duplicates the first one wins)
|
|
$(if $(filter true,$(BUILD_BROKEN_DUP_SYSPROP)),\
|
|
$(foreach name,$(strip $(4)),\
|
|
$(eval _temp := $$(subst ?=,=,$$(_resolved_$(name))))\
|
|
$(eval _resolved_$(name) := $$(call uniq-pairs-by-first-component,$$(_resolved_$(name)),=))\
|
|
)\
|
|
$(eval _option := --allow-dup)\
|
|
)
|
|
|
|
$(2): $(POST_PROCESS_PROPS) $(INTERNAL_BUILD_ID_MAKEFILE) $(3) $(6)
|
|
$(hide) echo Building $$@
|
|
$(hide) mkdir -p $$(dir $$@)
|
|
$(hide) rm -f $$@ && touch $$@
|
|
ifneq ($(strip $(7)), true)
|
|
$(hide) $$(call generate-common-build-props,$(call to-lower,$(strip $(1))),$$@)
|
|
endif
|
|
$(hide) $(foreach file,$(strip $(3)),\
|
|
if [ -f "$(file)" ]; then\
|
|
echo "" >> $$@;\
|
|
echo "####################################" >> $$@;\
|
|
echo "# from $(file)" >> $$@;\
|
|
echo "####################################" >> $$@;\
|
|
cat $(file) >> $$@;\
|
|
fi;)
|
|
$(hide) $(foreach name,$(strip $(4)),\
|
|
echo "" >> $$@;\
|
|
echo "####################################" >> $$@;\
|
|
echo "# from variable $(name)" >> $$@;\
|
|
echo "####################################" >> $$@;\
|
|
$$(foreach line,$$(_resolved_$(name)),\
|
|
echo "$$(line)" >> $$@;\
|
|
)\
|
|
)
|
|
$(hide) $(POST_PROCESS_PROPS) $$(_option) --sdk-version $(PLATFORM_SDK_VERSION) $$@ $(5)
|
|
$(hide) $(foreach file,$(strip $(6)),\
|
|
if [ -f "$(file)" ]; then\
|
|
cat $(file) >> $$@;\
|
|
fi;)
|
|
$(hide) echo "# end of file" >> $$@
|
|
endef
|
|
|
|
# -----------------------------------------------------------------
|
|
# Define fingerprint, thumbprint, and version tags for the current build
|
|
#
|
|
# BUILD_VERSION_TAGS is a comma-separated list of tags chosen by the device
|
|
# implementer that further distinguishes the build. It's basically defined
|
|
# by the device implementer. Here, we are adding a mandatory tag that
|
|
# identifies the signing config of the build.
|
|
BUILD_VERSION_TAGS := $(BUILD_VERSION_TAGS)
|
|
ifeq ($(TARGET_BUILD_TYPE),debug)
|
|
BUILD_VERSION_TAGS += debug
|
|
endif
|
|
# The "test-keys" tag marks builds signed with the old test keys,
|
|
# which are available in the SDK. "dev-keys" marks builds signed with
|
|
# non-default dev keys (usually private keys from a vendor directory).
|
|
# Both of these tags will be removed and replaced with "release-keys"
|
|
# when the target-files is signed in a post-build step.
|
|
ifeq ($(DEFAULT_SYSTEM_DEV_CERTIFICATE),build/make/target/product/security/testkey)
|
|
BUILD_KEYS := test-keys
|
|
else
|
|
BUILD_KEYS := dev-keys
|
|
endif
|
|
BUILD_VERSION_TAGS += $(BUILD_KEYS)
|
|
BUILD_VERSION_TAGS := $(subst $(space),$(comma),$(sort $(BUILD_VERSION_TAGS)))
|
|
|
|
# BUILD_FINGERPRINT is used used to uniquely identify the combined build and
|
|
# product; used by the OTA server.
|
|
ifeq (,$(strip $(BUILD_FINGERPRINT)))
|
|
ifeq ($(strip $(HAS_BUILD_NUMBER)),false)
|
|
BF_BUILD_NUMBER := $(BUILD_USERNAME)$$($(DATE_FROM_FILE) +%m%d%H%M)
|
|
else
|
|
BF_BUILD_NUMBER := $(file <$(BUILD_NUMBER_FILE))
|
|
endif
|
|
BUILD_FINGERPRINT := $(PRODUCT_BRAND)/$(TARGET_PRODUCT)/$(TARGET_DEVICE):$(PLATFORM_VERSION)/$(BUILD_ID)/$(BF_BUILD_NUMBER):$(TARGET_BUILD_VARIANT)/$(BUILD_VERSION_TAGS)
|
|
endif
|
|
# unset it for safety.
|
|
BF_BUILD_NUMBER :=
|
|
|
|
BUILD_FINGERPRINT_FILE := $(PRODUCT_OUT)/build_fingerprint.txt
|
|
ifneq (,$(shell mkdir -p $(PRODUCT_OUT) && echo $(BUILD_FINGERPRINT) >$(BUILD_FINGERPRINT_FILE) && grep " " $(BUILD_FINGERPRINT_FILE)))
|
|
$(error BUILD_FINGERPRINT cannot contain spaces: "$(file <$(BUILD_FINGERPRINT_FILE))")
|
|
endif
|
|
BUILD_FINGERPRINT_FROM_FILE := $$(cat $(BUILD_FINGERPRINT_FILE))
|
|
# unset it for safety.
|
|
BUILD_FINGERPRINT :=
|
|
|
|
# BUILD_THUMBPRINT is used to uniquely identify the system build; used by the
|
|
# OTA server. This purposefully excludes any product-specific variables.
|
|
ifeq (,$(strip $(BUILD_THUMBPRINT)))
|
|
BUILD_THUMBPRINT := $(PLATFORM_VERSION)/$(BUILD_ID)/$(BUILD_NUMBER_FROM_FILE):$(TARGET_BUILD_VARIANT)/$(BUILD_VERSION_TAGS)
|
|
endif
|
|
|
|
BUILD_THUMBPRINT_FILE := $(PRODUCT_OUT)/build_thumbprint.txt
|
|
ifneq (,$(shell mkdir -p $(PRODUCT_OUT) && echo $(BUILD_THUMBPRINT) >$(BUILD_THUMBPRINT_FILE) && grep " " $(BUILD_THUMBPRINT_FILE)))
|
|
$(error BUILD_THUMBPRINT cannot contain spaces: "$(file <$(BUILD_THUMBPRINT_FILE))")
|
|
endif
|
|
BUILD_THUMBPRINT_FROM_FILE := $$(cat $(BUILD_THUMBPRINT_FILE))
|
|
# unset it for safety.
|
|
BUILD_THUMBPRINT :=
|
|
|
|
# -----------------------------------------------------------------
|
|
# Define human readable strings that describe this build
|
|
#
|
|
|
|
# BUILD_ID: detail info; has the same info as the build fingerprint
|
|
BUILD_DESC := $(TARGET_PRODUCT)-$(TARGET_BUILD_VARIANT) $(PLATFORM_VERSION) $(BUILD_ID) $(BUILD_NUMBER_FROM_FILE) $(BUILD_VERSION_TAGS)
|
|
|
|
# BUILD_DISPLAY_ID is shown under Settings -> About Phone
|
|
ifeq ($(TARGET_BUILD_VARIANT),user)
|
|
# User builds should show:
|
|
# release build number or branch.buld_number non-release builds
|
|
|
|
# Dev. branches should have DISPLAY_BUILD_NUMBER set
|
|
ifeq (true,$(DISPLAY_BUILD_NUMBER))
|
|
BUILD_DISPLAY_ID := $(BUILD_ID).$(BUILD_NUMBER_FROM_FILE) $(BUILD_KEYS)
|
|
else
|
|
BUILD_DISPLAY_ID := $(BUILD_ID) $(BUILD_KEYS)
|
|
endif
|
|
else
|
|
# Non-user builds should show detailed build information
|
|
BUILD_DISPLAY_ID := $(BUILD_DESC)
|
|
endif
|
|
|
|
# TARGET_BUILD_FLAVOR and ro.build.flavor are used only by the test
|
|
# harness to distinguish builds. Only add _asan for a sanitized build
|
|
# if it isn't already a part of the flavor (via a dedicated lunch
|
|
# config for example).
|
|
TARGET_BUILD_FLAVOR := $(TARGET_PRODUCT)-$(TARGET_BUILD_VARIANT)
|
|
ifneq (, $(filter address, $(SANITIZE_TARGET)))
|
|
ifeq (,$(findstring _asan,$(TARGET_BUILD_FLAVOR)))
|
|
TARGET_BUILD_FLAVOR := $(TARGET_BUILD_FLAVOR)_asan
|
|
endif
|
|
endif
|
|
|
|
KNOWN_OEM_THUMBPRINT_PROPERTIES := \
|
|
ro.product.brand \
|
|
ro.product.name \
|
|
ro.product.device
|
|
OEM_THUMBPRINT_PROPERTIES := $(filter $(KNOWN_OEM_THUMBPRINT_PROPERTIES),\
|
|
$(PRODUCT_OEM_PROPERTIES))
|
|
KNOWN_OEM_THUMBPRINT_PROPERTIES:=
|
|
|
|
# -----------------------------------------------------------------
|
|
# system/build.prop
|
|
#
|
|
# Note: parts of this file that can't be generated by the build-properties
|
|
# macro are manually created as separate files and then fed into the macro
|
|
|
|
# Accepts a whitespace separated list of product locales such as
|
|
# (en_US en_AU en_GB...) and returns the first locale in the list with
|
|
# underscores replaced with hyphens. In the example above, this will
|
|
# return "en-US".
|
|
define get-default-product-locale
|
|
$(strip $(subst _,-, $(firstword $(1))))
|
|
endef
|
|
|
|
gen_from_buildinfo_sh := $(call intermediates-dir-for,PACKAGING,system_build_prop)/buildinfo.prop
|
|
$(gen_from_buildinfo_sh): $(INTERNAL_BUILD_ID_MAKEFILE) $(API_FINGERPRINT) | $(BUILD_DATETIME_FILE) $(BUILD_NUMBER_FILE)
|
|
$(hide) TARGET_BUILD_TYPE="$(TARGET_BUILD_VARIANT)" \
|
|
TARGET_BUILD_FLAVOR="$(TARGET_BUILD_FLAVOR)" \
|
|
TARGET_DEVICE="$(TARGET_DEVICE)" \
|
|
PRODUCT_DEFAULT_LOCALE="$(call get-default-product-locale,$(PRODUCT_LOCALES))" \
|
|
PRODUCT_DEFAULT_WIFI_CHANNELS="$(PRODUCT_DEFAULT_WIFI_CHANNELS)" \
|
|
PRIVATE_BUILD_DESC="$(BUILD_DESC)" \
|
|
BUILD_ID="$(BUILD_ID)" \
|
|
BUILD_DISPLAY_ID="$(BUILD_DISPLAY_ID)" \
|
|
DATE="$(DATE_FROM_FILE)" \
|
|
BUILD_USERNAME="$(BUILD_USERNAME)" \
|
|
BUILD_HOSTNAME="$(BUILD_HOSTNAME)" \
|
|
BUILD_NUMBER="$(BUILD_NUMBER_FROM_FILE)" \
|
|
BOARD_BUILD_SYSTEM_ROOT_IMAGE="$(BOARD_BUILD_SYSTEM_ROOT_IMAGE)" \
|
|
BOARD_USE_VBMETA_DIGTEST_IN_FINGERPRINT="$(BOARD_USE_VBMETA_DIGTEST_IN_FINGERPRINT)" \
|
|
PLATFORM_VERSION="$(PLATFORM_VERSION)" \
|
|
PLATFORM_VERSION_LAST_STABLE="$(PLATFORM_VERSION_LAST_STABLE)" \
|
|
PLATFORM_SECURITY_PATCH="$(PLATFORM_SECURITY_PATCH)" \
|
|
PLATFORM_BASE_OS="$(PLATFORM_BASE_OS)" \
|
|
PLATFORM_SDK_VERSION="$(PLATFORM_SDK_VERSION)" \
|
|
PLATFORM_PREVIEW_SDK_VERSION="$(PLATFORM_PREVIEW_SDK_VERSION)" \
|
|
PLATFORM_PREVIEW_SDK_FINGERPRINT="$$(cat $(API_FINGERPRINT))" \
|
|
PLATFORM_VERSION_CODENAME="$(PLATFORM_VERSION_CODENAME)" \
|
|
PLATFORM_VERSION_ALL_CODENAMES="$(PLATFORM_VERSION_ALL_CODENAMES)" \
|
|
PLATFORM_VERSION_KNOWN_CODENAMES="$(PLATFORM_VERSION_KNOWN_CODENAMES)" \
|
|
PLATFORM_MIN_SUPPORTED_TARGET_SDK_VERSION="$(PLATFORM_MIN_SUPPORTED_TARGET_SDK_VERSION)" \
|
|
BUILD_VERSION_TAGS="$(BUILD_VERSION_TAGS)" \
|
|
$(if $(OEM_THUMBPRINT_PROPERTIES),BUILD_THUMBPRINT="$(BUILD_THUMBPRINT_FROM_FILE)") \
|
|
TARGET_CPU_ABI_LIST="$(TARGET_CPU_ABI_LIST)" \
|
|
TARGET_CPU_ABI_LIST_32_BIT="$(TARGET_CPU_ABI_LIST_32_BIT)" \
|
|
TARGET_CPU_ABI_LIST_64_BIT="$(TARGET_CPU_ABI_LIST_64_BIT)" \
|
|
TARGET_CPU_ABI="$(TARGET_CPU_ABI)" \
|
|
TARGET_CPU_ABI2="$(TARGET_CPU_ABI2)" \
|
|
bash $(BUILDINFO_SH) > $@
|
|
|
|
ifdef TARGET_SYSTEM_PROP
|
|
system_prop_file := $(TARGET_SYSTEM_PROP)
|
|
else
|
|
system_prop_file := $(wildcard $(TARGET_DEVICE_DIR)/system.prop)
|
|
endif
|
|
|
|
_prop_files_ := \
|
|
$(gen_from_buildinfo_sh) \
|
|
$(system_prop_file)
|
|
|
|
# Order matters here. When there are duplicates, the last one wins.
|
|
# TODO(b/117892318): don't allow duplicates so that the ordering doesn't matter
|
|
_prop_vars_ := \
|
|
ADDITIONAL_SYSTEM_PROPERTIES \
|
|
PRODUCT_SYSTEM_PROPERTIES
|
|
|
|
# TODO(b/117892318): deprecate this
|
|
_prop_vars_ += \
|
|
PRODUCT_SYSTEM_DEFAULT_PROPERTIES
|
|
|
|
ifndef property_overrides_split_enabled
|
|
_prop_vars_ += \
|
|
ADDITIONAL_VENDOR_PROPERTIES \
|
|
PRODUCT_VENDOR_PROPERTIES
|
|
endif
|
|
|
|
INSTALLED_BUILD_PROP_TARGET := $(TARGET_OUT)/build.prop
|
|
|
|
$(eval $(call build-properties,\
|
|
system,\
|
|
$(INSTALLED_BUILD_PROP_TARGET),\
|
|
$(_prop_files_),\
|
|
$(_prop_vars_),\
|
|
$(PRODUCT_SYSTEM_PROPERTY_BLACKLIST),\
|
|
$(empty),\
|
|
$(empty)))
|
|
|
|
# -----------------------------------------------------------------
|
|
# vendor/build.prop
|
|
#
|
|
_prop_files_ := $(if $(TARGET_VENDOR_PROP),\
|
|
$(TARGET_VENDOR_PROP),\
|
|
$(wildcard $(TARGET_DEVICE_DIR)/vendor.prop))
|
|
|
|
android_info_prop := $(call intermediates-dir-for,ETC,android_info_prop)/android_info.prop
|
|
$(android_info_prop): $(INSTALLED_ANDROID_INFO_TXT_TARGET)
|
|
cat $< | grep 'require version-' | sed -e 's/require version-/ro.build.expect./g' > $@
|
|
|
|
_prop_files_ += $(android_info_prop)
|
|
|
|
ifdef property_overrides_split_enabled
|
|
# Order matters here. When there are duplicates, the last one wins.
|
|
# TODO(b/117892318): don't allow duplicates so that the ordering doesn't matter
|
|
_prop_vars_ := \
|
|
ADDITIONAL_VENDOR_PROPERTIES \
|
|
PRODUCT_VENDOR_PROPERTIES
|
|
|
|
# TODO(b/117892318): deprecate this
|
|
_prop_vars_ += \
|
|
PRODUCT_DEFAULT_PROPERTY_OVERRIDES \
|
|
PRODUCT_PROPERTY_OVERRIDES
|
|
else
|
|
_prop_vars_ :=
|
|
endif
|
|
|
|
INSTALLED_VENDOR_BUILD_PROP_TARGET := $(TARGET_OUT_VENDOR)/build.prop
|
|
$(eval $(call build-properties,\
|
|
vendor,\
|
|
$(INSTALLED_VENDOR_BUILD_PROP_TARGET),\
|
|
$(_prop_files_),\
|
|
$(_prop_vars_),\
|
|
$(PRODUCT_VENDOR_PROPERTY_BLACKLIST),\
|
|
$(empty),\
|
|
$(empty)))
|
|
|
|
# -----------------------------------------------------------------
|
|
# product/etc/build.prop
|
|
#
|
|
|
|
_prop_files_ := $(if $(TARGET_PRODUCT_PROP),\
|
|
$(TARGET_PRODUCT_PROP),\
|
|
$(wildcard $(TARGET_DEVICE_DIR)/product.prop))
|
|
|
|
# Order matters here. When there are duplicates, the last one wins.
|
|
# TODO(b/117892318): don't allow duplicates so that the ordering doesn't matter
|
|
_prop_vars_ := \
|
|
ADDITIONAL_PRODUCT_PROPERTIES \
|
|
PRODUCT_PRODUCT_PROPERTIES
|
|
|
|
INSTALLED_PRODUCT_BUILD_PROP_TARGET := $(TARGET_OUT_PRODUCT)/etc/build.prop
|
|
|
|
ifdef PRODUCT_OEM_PROPERTIES
|
|
import_oem_prop := $(call intermediates-dir-for,ETC,import_oem_prop)/oem.prop
|
|
|
|
$(import_oem_prop):
|
|
$(hide) echo "####################################" >> $@; \
|
|
echo "# PRODUCT_OEM_PROPERTIES" >> $@; \
|
|
echo "####################################" >> $@;
|
|
$(hide) $(foreach prop,$(PRODUCT_OEM_PROPERTIES), \
|
|
echo "import /oem/oem.prop $(prop)" >> $@;)
|
|
|
|
_footers_ := $(import_oem_prop)
|
|
else
|
|
_footers_ :=
|
|
endif
|
|
|
|
# Skip common /product properties generation if device released before R and
|
|
# has no product partition. This is the first part of the check.
|
|
ifeq ($(call math_lt,$(if $(PRODUCT_SHIPPING_API_LEVEL),$(PRODUCT_SHIPPING_API_LEVEL),30),30), true)
|
|
_skip_common_properties := true
|
|
endif
|
|
|
|
# The second part of the check - always generate common properties for the
|
|
# devices with product partition regardless of shipping level.
|
|
ifneq ($(BOARD_USES_PRODUCTIMAGE),)
|
|
_skip_common_properties :=
|
|
endif
|
|
|
|
$(eval $(call build-properties,\
|
|
product,\
|
|
$(INSTALLED_PRODUCT_BUILD_PROP_TARGET),\
|
|
$(_prop_files_),\
|
|
$(_prop_vars_),\
|
|
$(empty),\
|
|
$(_footers_),\
|
|
$(_skip_common_properties)))
|
|
|
|
_skip_common_properties :=
|
|
|
|
# ----------------------------------------------------------------
|
|
# odm/etc/build.prop
|
|
#
|
|
_prop_files_ := $(if $(TARGET_ODM_PROP),\
|
|
$(TARGET_ODM_PROP),\
|
|
$(wildcard $(TARGET_DEVICE_DIR)/odm.prop))
|
|
|
|
# Order matters here. When there are duplicates, the last one wins.
|
|
# TODO(b/117892318): don't allow duplicates so that the ordering doesn't matter
|
|
_prop_vars_ := \
|
|
ADDITIONAL_ODM_PROPERTIES \
|
|
PRODUCT_ODM_PROPERTIES
|
|
|
|
INSTALLED_ODM_BUILD_PROP_TARGET := $(TARGET_OUT_ODM)/etc/build.prop
|
|
$(eval $(call build-properties,\
|
|
odm,\
|
|
$(INSTALLED_ODM_BUILD_PROP_TARGET),\
|
|
$(_prop_files_),\
|
|
$(_prop_vars_),\
|
|
$(empty),\
|
|
$(empty),\
|
|
$(empty)))
|
|
|
|
# ----------------------------------------------------------------
|
|
# vendor_dlkm/etc/build.prop
|
|
#
|
|
|
|
INSTALLED_VENDOR_DLKM_BUILD_PROP_TARGET := $(TARGET_OUT_VENDOR_DLKM)/etc/build.prop
|
|
$(eval $(call build-properties,\
|
|
vendor_dlkm,\
|
|
$(INSTALLED_VENDOR_DLKM_BUILD_PROP_TARGET),\
|
|
$(empty),\
|
|
$(empty),\
|
|
$(empty),\
|
|
$(empty),\
|
|
$(empty)))
|
|
|
|
# ----------------------------------------------------------------
|
|
# odm_dlkm/etc/build.prop
|
|
#
|
|
|
|
INSTALLED_ODM_DLKM_BUILD_PROP_TARGET := $(TARGET_OUT_ODM_DLKM)/etc/build.prop
|
|
$(eval $(call build-properties,\
|
|
odm_dlkm,\
|
|
$(INSTALLED_ODM_DLKM_BUILD_PROP_TARGET),\
|
|
$(empty),\
|
|
$(empty),\
|
|
$(empty),\
|
|
$(empty),\
|
|
$(empty)))
|
|
|
|
# ----------------------------------------------------------------
|
|
# system_dlkm/build.prop
|
|
#
|
|
|
|
INSTALLED_SYSTEM_DLKM_BUILD_PROP_TARGET := $(TARGET_OUT_SYSTEM_DLKM)/etc/build.prop
|
|
$(eval $(call build-properties,\
|
|
system_dlkm,\
|
|
$(INSTALLED_SYSTEM_DLKM_BUILD_PROP_TARGET),\
|
|
$(empty),\
|
|
$(empty),\
|
|
$(empty),\
|
|
$(empty),\
|
|
$(empty)))
|
|
|
|
# -----------------------------------------------------------------
|
|
# system_ext/etc/build.prop
|
|
#
|
|
_prop_files_ := $(if $(TARGET_SYSTEM_EXT_PROP),\
|
|
$(TARGET_SYSTEM_EXT_PROP),\
|
|
$(wildcard $(TARGET_DEVICE_DIR)/system_ext.prop))
|
|
|
|
# Order matters here. When there are duplicates, the last one wins.
|
|
# TODO(b/117892318): don't allow duplicates so that the ordering doesn't matter
|
|
_prop_vars_ := PRODUCT_SYSTEM_EXT_PROPERTIES
|
|
|
|
INSTALLED_SYSTEM_EXT_BUILD_PROP_TARGET := $(TARGET_OUT_SYSTEM_EXT)/etc/build.prop
|
|
$(eval $(call build-properties,\
|
|
system_ext,\
|
|
$(INSTALLED_SYSTEM_EXT_BUILD_PROP_TARGET),\
|
|
$(_prop_files_),\
|
|
$(_prop_vars_),\
|
|
$(empty),\
|
|
$(empty),\
|
|
$(empty)))
|
|
|
|
# ----------------------------------------------------------------
|
|
# ramdisk/boot/etc/build.prop
|
|
#
|
|
|
|
RAMDISK_BUILD_PROP_REL_PATH := system/etc/ramdisk/build.prop
|
|
INSTALLED_RAMDISK_BUILD_PROP_TARGET := $(TARGET_RAMDISK_OUT)/$(RAMDISK_BUILD_PROP_REL_PATH)
|
|
$(eval $(call build-properties,\
|
|
bootimage,\
|
|
$(INSTALLED_RAMDISK_BUILD_PROP_TARGET),\
|
|
$(empty),\
|
|
$(empty),\
|
|
$(empty),\
|
|
$(empty),\
|
|
$(empty)))
|