1# 2# Copyright (C) 2020 The Android Open Source Project 3# 4# Licensed under the Apache License, Version 2.0 (the "License"); 5# you may not use this file except in compliance with the License. 6# You may obtain a copy of the License at 7# 8# http://www.apache.org/licenses/LICENSE-2.0 9# 10# Unless required by applicable law or agreed to in writing, software 11# distributed under the License is distributed on an "AS IS" BASIS, 12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13# See the License for the specific language governing permissions and 14# limitations under the License. 15# 16 17# sysprop.mk defines rules for generating <partition>/[etc/]build.prop files 18 19# ----------------------------------------------------------------- 20# property_overrides_split_enabled 21property_overrides_split_enabled := 22ifeq ($(BOARD_PROPERTY_OVERRIDES_SPLIT_ENABLED), true) 23 property_overrides_split_enabled := true 24endif 25 26POST_PROCESS_PROPS := $(HOST_OUT_EXECUTABLES)/post_process_props$(HOST_EXECUTABLE_SUFFIX) 27 28# Emits a set of sysprops common to all partitions to a file. 29# $(1): Partition name 30# $(2): Output file name 31define generate-common-build-props 32 echo "####################################" >> $(2);\ 33 echo "# from generate-common-build-props" >> $(2);\ 34 echo "# These properties identify this partition image." >> $(2);\ 35 echo "####################################" >> $(2);\ 36 $(if $(filter system,$(1)),\ 37 echo "ro.product.$(1).brand=$(PRODUCT_SYSTEM_BRAND)" >> $(2);\ 38 echo "ro.product.$(1).device=$(PRODUCT_SYSTEM_DEVICE)" >> $(2);\ 39 echo "ro.product.$(1).manufacturer=$(PRODUCT_SYSTEM_MANUFACTURER)" >> $(2);\ 40 echo "ro.product.$(1).model=$(PRODUCT_SYSTEM_MODEL)" >> $(2);\ 41 echo "ro.product.$(1).name=$(PRODUCT_SYSTEM_NAME)" >> $(2);\ 42 ,\ 43 echo "ro.product.$(1).brand=$(PRODUCT_BRAND)" >> $(2);\ 44 echo "ro.product.$(1).device=$(TARGET_DEVICE)" >> $(2);\ 45 echo "ro.product.$(1).manufacturer=$(PRODUCT_MANUFACTURER)" >> $(2);\ 46 echo "ro.product.$(1).model=$(PRODUCT_MODEL)" >> $(2);\ 47 echo "ro.product.$(1).name=$(TARGET_PRODUCT)" >> $(2);\ 48 if [ -n "$(strip $(PRODUCT_MODEL_FOR_ATTESTATION))" ]; then \ 49 echo "ro.product.model_for_attestation=$(PRODUCT_MODEL_FOR_ATTESTATION)" >> $(2);\ 50 fi; \ 51 if [ -n "$(strip $(PRODUCT_BRAND_FOR_ATTESTATION))" ]; then \ 52 echo "ro.product.brand_for_attestation=$(PRODUCT_BRAND_FOR_ATTESTATION)" >> $(2);\ 53 fi; \ 54 if [ -n "$(strip $(PRODUCT_NAME_FOR_ATTESTATION))" ]; then \ 55 echo "ro.product.name_for_attestation=$(PRODUCT_NAME_FOR_ATTESTATION)" >> $(2);\ 56 fi; \ 57 if [ -n "$(strip $(PRODUCT_DEVICE_FOR_ATTESTATION))" ]; then \ 58 echo "ro.product.device_for_attestation=$(PRODUCT_DEVICE_FOR_ATTESTATION)" >> $(2);\ 59 fi; \ 60 if [ -n "$(strip $(PRODUCT_MANUFACTURER_FOR_ATTESTATION))" ]; then \ 61 echo "ro.product.manufacturer_for_attestation=$(PRODUCT_MANUFACTURER_FOR_ATTESTATION)" >> $(2);\ 62 fi; \ 63 )\ 64 $(if $(filter true,$(ZYGOTE_FORCE_64)),\ 65 $(if $(filter vendor,$(1)),\ 66 echo "ro.$(1).product.cpu.abilist=$(TARGET_CPU_ABI_LIST_64_BIT)" >> $(2);\ 67 echo "ro.$(1).product.cpu.abilist32=" >> $(2);\ 68 echo "ro.$(1).product.cpu.abilist64=$(TARGET_CPU_ABI_LIST_64_BIT)" >> $(2);\ 69 )\ 70 ,\ 71 $(if $(filter system vendor odm,$(1)),\ 72 echo "ro.$(1).product.cpu.abilist=$(TARGET_CPU_ABI_LIST)" >> $(2);\ 73 echo "ro.$(1).product.cpu.abilist32=$(TARGET_CPU_ABI_LIST_32_BIT)" >> $(2);\ 74 echo "ro.$(1).product.cpu.abilist64=$(TARGET_CPU_ABI_LIST_64_BIT)" >> $(2);\ 75 )\ 76 )\ 77 echo "ro.$(1).build.date=`$(DATE_FROM_FILE)`" >> $(2);\ 78 echo "ro.$(1).build.date.utc=`$(DATE_FROM_FILE) +%s`" >> $(2);\ 79 # Allow optional assignments for ARC forward-declarations (b/249168657) 80 # TODO: Remove any tag-related inconsistencies once the goals from 81 # go/arc-android-sigprop-changes have been achieved. 82 echo "ro.$(1).build.fingerprint?=$(BUILD_FINGERPRINT_FROM_FILE)" >> $(2);\ 83 echo "ro.$(1).build.id?=$(BUILD_ID)" >> $(2);\ 84 echo "ro.$(1).build.tags?=$(BUILD_VERSION_TAGS)" >> $(2);\ 85 echo "ro.$(1).build.type=$(TARGET_BUILD_VARIANT)" >> $(2);\ 86 echo "ro.$(1).build.version.incremental=$(BUILD_NUMBER_FROM_FILE)" >> $(2);\ 87 echo "ro.$(1).build.version.release=$(PLATFORM_VERSION_LAST_STABLE)" >> $(2);\ 88 echo "ro.$(1).build.version.release_or_codename=$(PLATFORM_VERSION)" >> $(2);\ 89 echo "ro.$(1).build.version.sdk=$(PLATFORM_SDK_VERSION)" >> $(2);\ 90 91endef 92 93# Rule for generating <partition>/[etc/]build.prop file 94# 95# $(1): partition name 96# $(2): path to the output 97# $(3): path to the input *.prop files. The contents of the files are directly 98# emitted to the output 99# $(4): list of variable names each of which contains name=value pairs 100# $(5): optional list of prop names to force remove from the output. Properties from both 101# $(3) and (4) are affected 102# $(6): optional list of files to append at the end. The content of each file is emitted 103# to the output 104# $(7): optional flag to skip common properties generation 105define build-properties 106ALL_DEFAULT_INSTALLED_MODULES += $(2) 107 108$(eval # Properties can be assigned using `prop ?= value` or `prop = value` syntax.) 109$(eval # Eliminate spaces around the ?= and = separators.) 110$(foreach name,$(strip $(4)),\ 111 $(eval _temp := $$(call collapse-pairs,$$($(name)),?=))\ 112 $(eval _resolved_$(name) := $$(call collapse-pairs,$$(_temp),=))\ 113) 114 115$(eval # Implement the legacy behavior when BUILD_BROKEN_DUP_SYSPROP is on.) 116$(eval # Optional assignments are all converted to normal assignments and) 117$(eval # when their duplicates the first one wins) 118$(if $(filter true,$(BUILD_BROKEN_DUP_SYSPROP)),\ 119 $(foreach name,$(strip $(4)),\ 120 $(eval _temp := $$(subst ?=,=,$$(_resolved_$(name))))\ 121 $(eval _resolved_$(name) := $$(call uniq-pairs-by-first-component,$$(_resolved_$(name)),=))\ 122 )\ 123 $(eval _option := --allow-dup)\ 124) 125 126$(2): $(POST_PROCESS_PROPS) $(INTERNAL_BUILD_ID_MAKEFILE) $(3) $(6) $(BUILT_KERNEL_VERSION_FILE_FOR_UFFD_GC) 127 $(hide) echo Building $$@ 128 $(hide) mkdir -p $$(dir $$@) 129 $(hide) rm -f $$@ && touch $$@ 130ifneq ($(strip $(7)), true) 131 $(hide) $$(call generate-common-build-props,$(call to-lower,$(strip $(1))),$$@) 132endif 133 $(hide) $(foreach file,$(strip $(3)),\ 134 if [ -f "$(file)" ]; then\ 135 echo "" >> $$@;\ 136 echo "####################################" >> $$@;\ 137 echo "# from $(file)" >> $$@;\ 138 echo "####################################" >> $$@;\ 139 cat $(file) >> $$@;\ 140 fi;) 141 $(hide) $(foreach name,$(strip $(4)),\ 142 echo "" >> $$@;\ 143 echo "####################################" >> $$@;\ 144 echo "# from variable $(name)" >> $$@;\ 145 echo "####################################" >> $$@;\ 146 $$(foreach line,$$(_resolved_$(name)),\ 147 echo "$$(line)" >> $$@;\ 148 )\ 149 ) 150 $(hide) $(POST_PROCESS_PROPS) $$(_option) \ 151 --sdk-version $(PLATFORM_SDK_VERSION) \ 152 --kernel-version-file-for-uffd-gc "$(BUILT_KERNEL_VERSION_FILE_FOR_UFFD_GC)" \ 153 $$@ $(5) 154 $(hide) $(foreach file,$(strip $(6)),\ 155 if [ -f "$(file)" ]; then\ 156 cat $(file) >> $$@;\ 157 fi;) 158 $(hide) echo "# end of file" >> $$@ 159 160$(call declare-1p-target,$(2)) 161endef 162 163# ----------------------------------------------------------------- 164# Define fingerprint, thumbprint, and version tags for the current build 165# 166# BUILD_VERSION_TAGS is a comma-separated list of tags chosen by the device 167# implementer that further distinguishes the build. It's basically defined 168# by the device implementer. Here, we are adding a mandatory tag that 169# identifies the signing config of the build. 170BUILD_VERSION_TAGS := $(BUILD_VERSION_TAGS) 171ifeq ($(TARGET_BUILD_TYPE),debug) 172 BUILD_VERSION_TAGS += debug 173endif 174# The "test-keys" tag marks builds signed with the old test keys, 175# which are available in the SDK. "dev-keys" marks builds signed with 176# non-default dev keys (usually private keys from a vendor directory). 177# Both of these tags will be removed and replaced with "release-keys" 178# when the target-files is signed in a post-build step. 179ifeq ($(DEFAULT_SYSTEM_DEV_CERTIFICATE),build/make/target/product/security/testkey) 180BUILD_KEYS := test-keys 181else 182BUILD_KEYS := dev-keys 183endif 184BUILD_VERSION_TAGS += $(BUILD_KEYS) 185BUILD_VERSION_TAGS := $(subst $(space),$(comma),$(sort $(BUILD_VERSION_TAGS))) 186 187# BUILD_FINGERPRINT is used used to uniquely identify the combined build and 188# product; used by the OTA server. 189ifeq (,$(strip $(BUILD_FINGERPRINT))) 190 BUILD_FINGERPRINT := $(PRODUCT_BRAND)/$(TARGET_PRODUCT)/$(TARGET_DEVICE):$(PLATFORM_VERSION)/$(BUILD_ID)/$(BUILD_NUMBER_FROM_FILE):$(TARGET_BUILD_VARIANT)/$(BUILD_VERSION_TAGS) 191endif 192 193BUILD_FINGERPRINT_FILE := $(PRODUCT_OUT)/build_fingerprint.txt 194ifneq (,$(shell mkdir -p $(PRODUCT_OUT) && echo $(BUILD_FINGERPRINT) >$(BUILD_FINGERPRINT_FILE) && grep " " $(BUILD_FINGERPRINT_FILE))) 195 $(error BUILD_FINGERPRINT cannot contain spaces: "$(file <$(BUILD_FINGERPRINT_FILE))") 196endif 197BUILD_FINGERPRINT_FROM_FILE := $$(cat $(BUILD_FINGERPRINT_FILE)) 198# unset it for safety. 199BUILD_FINGERPRINT := 200 201# BUILD_THUMBPRINT is used to uniquely identify the system build; used by the 202# OTA server. This purposefully excludes any product-specific variables. 203ifeq (,$(strip $(BUILD_THUMBPRINT))) 204 BUILD_THUMBPRINT := $(PLATFORM_VERSION)/$(BUILD_ID)/$(BUILD_NUMBER_FROM_FILE):$(TARGET_BUILD_VARIANT)/$(BUILD_VERSION_TAGS) 205endif 206 207BUILD_THUMBPRINT_FILE := $(PRODUCT_OUT)/build_thumbprint.txt 208ifeq ($(strip $(HAS_BUILD_NUMBER)),true) 209$(BUILD_THUMBPRINT_FILE): $(BUILD_NUMBER_FILE) 210endif 211ifneq (,$(shell mkdir -p $(PRODUCT_OUT) && echo $(BUILD_THUMBPRINT) >$(BUILD_THUMBPRINT_FILE) && grep " " $(BUILD_THUMBPRINT_FILE))) 212 $(error BUILD_THUMBPRINT cannot contain spaces: "$(file <$(BUILD_THUMBPRINT_FILE))") 213endif 214# unset it for safety. 215BUILD_THUMBPRINT_FILE := 216BUILD_THUMBPRINT := 217 218KNOWN_OEM_THUMBPRINT_PROPERTIES := \ 219 ro.product.brand \ 220 ro.product.name \ 221 ro.product.device 222OEM_THUMBPRINT_PROPERTIES := $(filter $(KNOWN_OEM_THUMBPRINT_PROPERTIES),\ 223 $(PRODUCT_OEM_PROPERTIES)) 224KNOWN_OEM_THUMBPRINT_PROPERTIES:= 225 226# ----------------------------------------------------------------- 227# system/build.prop 228# 229# Note: parts of this file that can't be generated by the build-properties 230# macro are manually created as separate files and then fed into the macro 231 232buildinfo_prop := $(call intermediates-dir-for,ETC,buildinfo.prop)/buildinfo.prop 233 234ifdef TARGET_SYSTEM_PROP 235system_prop_file := $(TARGET_SYSTEM_PROP) 236else 237system_prop_file := $(wildcard $(TARGET_DEVICE_DIR)/system.prop) 238endif 239 240_prop_files_ := \ 241 $(buildinfo_prop) \ 242 $(system_prop_file) 243 244# Order matters here. When there are duplicates, the last one wins. 245# TODO(b/117892318): don't allow duplicates so that the ordering doesn't matter 246_prop_vars_ := \ 247 ADDITIONAL_SYSTEM_PROPERTIES \ 248 PRODUCT_SYSTEM_PROPERTIES 249 250# TODO(b/117892318): deprecate this 251_prop_vars_ += \ 252 PRODUCT_SYSTEM_DEFAULT_PROPERTIES 253 254ifndef property_overrides_split_enabled 255_prop_vars_ += \ 256 ADDITIONAL_VENDOR_PROPERTIES \ 257 PRODUCT_VENDOR_PROPERTIES 258endif 259 260INSTALLED_BUILD_PROP_TARGET := $(TARGET_OUT)/build.prop 261 262$(eval $(call build-properties,\ 263 system,\ 264 $(INSTALLED_BUILD_PROP_TARGET),\ 265 $(_prop_files_),\ 266 $(_prop_vars_),\ 267 $(PRODUCT_SYSTEM_PROPERTY_BLACKLIST),\ 268 $(empty),\ 269 $(empty))) 270 271$(eval $(call declare-1p-target,$(INSTALLED_BUILD_PROP_TARGET))) 272 273# ----------------------------------------------------------------- 274# vendor/build.prop 275# 276_prop_files_ := $(if $(TARGET_VENDOR_PROP),\ 277 $(TARGET_VENDOR_PROP),\ 278 $(wildcard $(TARGET_DEVICE_DIR)/vendor.prop)) 279 280android_info_prop := $(call intermediates-dir-for,ETC,android_info_prop)/android_info.prop 281$(android_info_prop): $(INSTALLED_ANDROID_INFO_TXT_TARGET) 282 cat $< | grep 'require version-' | sed -e 's/require version-/ro.build.expect./g' > $@ 283 284_prop_files_ += $(android_info_prop) 285 286ifdef property_overrides_split_enabled 287# Order matters here. When there are duplicates, the last one wins. 288# TODO(b/117892318): don't allow duplicates so that the ordering doesn't matter 289_prop_vars_ := \ 290 ADDITIONAL_VENDOR_PROPERTIES \ 291 PRODUCT_VENDOR_PROPERTIES 292 293# TODO(b/117892318): deprecate this 294_prop_vars_ += \ 295 PRODUCT_DEFAULT_PROPERTY_OVERRIDES \ 296 PRODUCT_PROPERTY_OVERRIDES 297else 298_prop_vars_ := 299endif 300 301INSTALLED_VENDOR_BUILD_PROP_TARGET := $(TARGET_OUT_VENDOR)/build.prop 302$(eval $(call build-properties,\ 303 vendor,\ 304 $(INSTALLED_VENDOR_BUILD_PROP_TARGET),\ 305 $(_prop_files_),\ 306 $(_prop_vars_),\ 307 $(PRODUCT_VENDOR_PROPERTY_BLACKLIST),\ 308 $(empty),\ 309 $(empty))) 310 311$(eval $(call declare-1p-target,$(INSTALLED_VENDOR_BUILD_PROP_TARGET))) 312 313# ----------------------------------------------------------------- 314# product/etc/build.prop 315# 316 317_prop_files_ := $(if $(TARGET_PRODUCT_PROP),\ 318 $(TARGET_PRODUCT_PROP),\ 319 $(wildcard $(TARGET_DEVICE_DIR)/product.prop)) 320 321# Order matters here. When there are duplicates, the last one wins. 322# TODO(b/117892318): don't allow duplicates so that the ordering doesn't matter 323_prop_vars_ := \ 324 ADDITIONAL_PRODUCT_PROPERTIES \ 325 PRODUCT_PRODUCT_PROPERTIES 326 327INSTALLED_PRODUCT_BUILD_PROP_TARGET := $(TARGET_OUT_PRODUCT)/etc/build.prop 328 329ifdef PRODUCT_OEM_PROPERTIES 330import_oem_prop := $(call intermediates-dir-for,ETC,import_oem_prop)/oem.prop 331 332$(import_oem_prop): 333 $(hide) echo "####################################" >> $@; \ 334 echo "# PRODUCT_OEM_PROPERTIES" >> $@; \ 335 echo "####################################" >> $@; 336 $(hide) $(foreach prop,$(PRODUCT_OEM_PROPERTIES), \ 337 echo "import /oem/oem.prop $(prop)" >> $@;) 338 339_footers_ := $(import_oem_prop) 340else 341_footers_ := 342endif 343 344# Skip common /product properties generation if device released before R and 345# has no product partition. This is the first part of the check. 346ifeq ($(call math_lt,$(if $(PRODUCT_SHIPPING_API_LEVEL),$(PRODUCT_SHIPPING_API_LEVEL),30),30), true) 347 _skip_common_properties := true 348endif 349 350# The second part of the check - always generate common properties for the 351# devices with product partition regardless of shipping level. 352ifneq ($(BOARD_USES_PRODUCTIMAGE),) 353 _skip_common_properties := 354endif 355 356$(eval $(call build-properties,\ 357 product,\ 358 $(INSTALLED_PRODUCT_BUILD_PROP_TARGET),\ 359 $(_prop_files_),\ 360 $(_prop_vars_),\ 361 $(empty),\ 362 $(_footers_),\ 363 $(_skip_common_properties))) 364 365$(eval $(call declare-1p-target,$(INSTALLED_PRODUCT_BUILD_PROP_TARGET))) 366 367_skip_common_properties := 368 369# ---------------------------------------------------------------- 370# odm/etc/build.prop 371# 372_prop_files_ := $(if $(TARGET_ODM_PROP),\ 373 $(TARGET_ODM_PROP),\ 374 $(wildcard $(TARGET_DEVICE_DIR)/odm.prop)) 375 376# Order matters here. When there are duplicates, the last one wins. 377# TODO(b/117892318): don't allow duplicates so that the ordering doesn't matter 378_prop_vars_ := \ 379 ADDITIONAL_ODM_PROPERTIES \ 380 PRODUCT_ODM_PROPERTIES 381 382INSTALLED_ODM_BUILD_PROP_TARGET := $(TARGET_OUT_ODM)/etc/build.prop 383$(eval $(call build-properties,\ 384 odm,\ 385 $(INSTALLED_ODM_BUILD_PROP_TARGET),\ 386 $(_prop_files_),\ 387 $(_prop_vars_),\ 388 $(empty),\ 389 $(empty),\ 390 $(empty))) 391 392$(eval $(call declare-1p-target,$(INSTALLED_ODM_BUILD_PROP_TARGET))) 393 394# ---------------------------------------------------------------- 395# vendor_dlkm/etc/build.prop 396# 397 398INSTALLED_VENDOR_DLKM_BUILD_PROP_TARGET := $(TARGET_OUT_VENDOR_DLKM)/etc/build.prop 399$(eval $(call build-properties,\ 400 vendor_dlkm,\ 401 $(INSTALLED_VENDOR_DLKM_BUILD_PROP_TARGET),\ 402 $(empty),\ 403 $(empty),\ 404 $(empty),\ 405 $(empty),\ 406 $(empty))) 407 408$(eval $(call declare-1p-target,$(INSTALLED_VENDOR_DLKM_BUILD_PROP_TARGET))) 409 410# ---------------------------------------------------------------- 411# odm_dlkm/etc/build.prop 412# 413 414INSTALLED_ODM_DLKM_BUILD_PROP_TARGET := $(TARGET_OUT_ODM_DLKM)/etc/build.prop 415$(eval $(call build-properties,\ 416 odm_dlkm,\ 417 $(INSTALLED_ODM_DLKM_BUILD_PROP_TARGET),\ 418 $(empty),\ 419 $(empty),\ 420 $(empty),\ 421 $(empty),\ 422 $(empty))) 423 424$(eval $(call declare-1p-target,$(INSTALLED_ODM_DLKM_BUILD_PROP_TARGET))) 425 426# ---------------------------------------------------------------- 427# system_dlkm/build.prop 428# 429 430INSTALLED_SYSTEM_DLKM_BUILD_PROP_TARGET := $(TARGET_OUT_SYSTEM_DLKM)/etc/build.prop 431$(eval $(call build-properties,\ 432 system_dlkm,\ 433 $(INSTALLED_SYSTEM_DLKM_BUILD_PROP_TARGET),\ 434 $(empty),\ 435 $(empty),\ 436 $(empty),\ 437 $(empty),\ 438 $(empty))) 439 440$(eval $(call declare-1p-target,$(INSTALLED_SYSTEM_DLKM_BUILD_PROP_TARGET))) 441 442# ----------------------------------------------------------------- 443# system_ext/etc/build.prop 444# 445_prop_files_ := $(if $(TARGET_SYSTEM_EXT_PROP),\ 446 $(TARGET_SYSTEM_EXT_PROP),\ 447 $(wildcard $(TARGET_DEVICE_DIR)/system_ext.prop)) 448 449# Order matters here. When there are duplicates, the last one wins. 450# TODO(b/117892318): don't allow duplicates so that the ordering doesn't matter 451_prop_vars_ := PRODUCT_SYSTEM_EXT_PROPERTIES 452 453INSTALLED_SYSTEM_EXT_BUILD_PROP_TARGET := $(TARGET_OUT_SYSTEM_EXT)/etc/build.prop 454$(eval $(call build-properties,\ 455 system_ext,\ 456 $(INSTALLED_SYSTEM_EXT_BUILD_PROP_TARGET),\ 457 $(_prop_files_),\ 458 $(_prop_vars_),\ 459 $(empty),\ 460 $(empty),\ 461 $(empty))) 462 463$(eval $(call declare-1p-target,$(INSTALLED_SYSTEM_EXT_BUILD_PROP_TARGET))) 464 465# ---------------------------------------------------------------- 466# ramdisk/boot/etc/build.prop 467# 468 469RAMDISK_BUILD_PROP_REL_PATH := system/etc/ramdisk/build.prop 470INSTALLED_RAMDISK_BUILD_PROP_TARGET := $(TARGET_RAMDISK_OUT)/$(RAMDISK_BUILD_PROP_REL_PATH) 471$(eval $(call build-properties,\ 472 bootimage,\ 473 $(INSTALLED_RAMDISK_BUILD_PROP_TARGET),\ 474 $(empty),\ 475 $(empty),\ 476 $(empty),\ 477 $(empty),\ 478 $(empty))) 479 480$(eval $(call declare-1p-target,$(INSTALLED_RAMDISK_BUILD_PROP_TARGET))) 481 482ALL_INSTALLED_BUILD_PROP_FILES := \ 483 $(INSTALLED_BUILD_PROP_TARGET) \ 484 $(INSTALLED_VENDOR_BUILD_PROP_TARGET) \ 485 $(INSTALLED_PRODUCT_BUILD_PROP_TARGET) \ 486 $(INSTALLED_ODM_BUILD_PROP_TARGET) \ 487 $(INSTALLED_VENDOR_DLKM_BUILD_PROP_TARGET) \ 488 $(INSTALLED_ODM_DLKM_BUILD_PROP_TARGET) \ 489 $(INSTALLED_SYSTEM_DLKM_BUILD_PROP_TARGET) \ 490 $(INSTALLED_SYSTEM_EXT_BUILD_PROP_TARGET) \ 491 $(INSTALLED_RAMDISK_BUILD_PROP_TARGET) 492 493# $1 installed file path, e.g. out/target/product/vsoc_x86_64/system/build.prop 494define is-build-prop 495$(if $(findstring $1,$(ALL_INSTALLED_BUILD_PROP_FILES)),Y) 496endef 497