xref: /aosp_15_r20/build/make/core/sysprop.mk (revision 9e94795a3d4ef5c1d47486f9a02bb378756cea8a)
1*9e94795aSAndroid Build Coastguard Worker#
2*9e94795aSAndroid Build Coastguard Worker# Copyright (C) 2020 The Android Open Source Project
3*9e94795aSAndroid Build Coastguard Worker#
4*9e94795aSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
5*9e94795aSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
6*9e94795aSAndroid Build Coastguard Worker# You may obtain a copy of the License at
7*9e94795aSAndroid Build Coastguard Worker#
8*9e94795aSAndroid Build Coastguard Worker#      http://www.apache.org/licenses/LICENSE-2.0
9*9e94795aSAndroid Build Coastguard Worker#
10*9e94795aSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
11*9e94795aSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
12*9e94795aSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*9e94795aSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
14*9e94795aSAndroid Build Coastguard Worker# limitations under the License.
15*9e94795aSAndroid Build Coastguard Worker#
16*9e94795aSAndroid Build Coastguard Worker
17*9e94795aSAndroid Build Coastguard Worker# sysprop.mk defines rules for generating <partition>/[etc/]build.prop files
18*9e94795aSAndroid Build Coastguard Worker
19*9e94795aSAndroid Build Coastguard Worker# -----------------------------------------------------------------
20*9e94795aSAndroid Build Coastguard Worker# property_overrides_split_enabled
21*9e94795aSAndroid Build Coastguard Workerproperty_overrides_split_enabled :=
22*9e94795aSAndroid Build Coastguard Workerifeq ($(BOARD_PROPERTY_OVERRIDES_SPLIT_ENABLED), true)
23*9e94795aSAndroid Build Coastguard Worker  property_overrides_split_enabled := true
24*9e94795aSAndroid Build Coastguard Workerendif
25*9e94795aSAndroid Build Coastguard Worker
26*9e94795aSAndroid Build Coastguard WorkerPOST_PROCESS_PROPS := $(HOST_OUT_EXECUTABLES)/post_process_props$(HOST_EXECUTABLE_SUFFIX)
27*9e94795aSAndroid Build Coastguard Worker
28*9e94795aSAndroid Build Coastguard Worker# Emits a set of sysprops common to all partitions to a file.
29*9e94795aSAndroid Build Coastguard Worker# $(1): Partition name
30*9e94795aSAndroid Build Coastguard Worker# $(2): Output file name
31*9e94795aSAndroid Build Coastguard Workerdefine generate-common-build-props
32*9e94795aSAndroid Build Coastguard Worker    echo "####################################" >> $(2);\
33*9e94795aSAndroid Build Coastguard Worker    echo "# from generate-common-build-props" >> $(2);\
34*9e94795aSAndroid Build Coastguard Worker    echo "# These properties identify this partition image." >> $(2);\
35*9e94795aSAndroid Build Coastguard Worker    echo "####################################" >> $(2);\
36*9e94795aSAndroid Build Coastguard Worker    echo "ro.product.$(1).brand=$(PRODUCT_BRAND)" >> $(2);\
37*9e94795aSAndroid Build Coastguard Worker    echo "ro.product.$(1).device=$(TARGET_DEVICE)" >> $(2);\
38*9e94795aSAndroid Build Coastguard Worker    echo "ro.product.$(1).manufacturer=$(PRODUCT_MANUFACTURER)" >> $(2);\
39*9e94795aSAndroid Build Coastguard Worker    echo "ro.product.$(1).model=$(PRODUCT_MODEL)" >> $(2);\
40*9e94795aSAndroid Build Coastguard Worker    echo "ro.product.$(1).name=$(TARGET_PRODUCT)" >> $(2);\
41*9e94795aSAndroid Build Coastguard Worker    if [ -n "$(strip $(PRODUCT_MODEL_FOR_ATTESTATION))" ]; then \
42*9e94795aSAndroid Build Coastguard Worker        echo "ro.product.model_for_attestation=$(PRODUCT_MODEL_FOR_ATTESTATION)" >> $(2);\
43*9e94795aSAndroid Build Coastguard Worker    fi; \
44*9e94795aSAndroid Build Coastguard Worker    if [ -n "$(strip $(PRODUCT_BRAND_FOR_ATTESTATION))" ]; then \
45*9e94795aSAndroid Build Coastguard Worker        echo "ro.product.brand_for_attestation=$(PRODUCT_BRAND_FOR_ATTESTATION)" >> $(2);\
46*9e94795aSAndroid Build Coastguard Worker    fi; \
47*9e94795aSAndroid Build Coastguard Worker    if [ -n "$(strip $(PRODUCT_NAME_FOR_ATTESTATION))" ]; then \
48*9e94795aSAndroid Build Coastguard Worker        echo "ro.product.name_for_attestation=$(PRODUCT_NAME_FOR_ATTESTATION)" >> $(2);\
49*9e94795aSAndroid Build Coastguard Worker    fi; \
50*9e94795aSAndroid Build Coastguard Worker    if [ -n "$(strip $(PRODUCT_DEVICE_FOR_ATTESTATION))" ]; then \
51*9e94795aSAndroid Build Coastguard Worker        echo "ro.product.device_for_attestation=$(PRODUCT_DEVICE_FOR_ATTESTATION)" >> $(2);\
52*9e94795aSAndroid Build Coastguard Worker    fi; \
53*9e94795aSAndroid Build Coastguard Worker    if [ -n "$(strip $(PRODUCT_MANUFACTURER_FOR_ATTESTATION))" ]; then \
54*9e94795aSAndroid Build Coastguard Worker        echo "ro.product.manufacturer_for_attestation=$(PRODUCT_MANUFACTURER_FOR_ATTESTATION)" >> $(2);\
55*9e94795aSAndroid Build Coastguard Worker    fi; \
56*9e94795aSAndroid Build Coastguard Worker    $(if $(filter true,$(ZYGOTE_FORCE_64)),\
57*9e94795aSAndroid Build Coastguard Worker        $(if $(filter vendor,$(1)),\
58*9e94795aSAndroid Build Coastguard Worker            echo "ro.$(1).product.cpu.abilist=$(TARGET_CPU_ABI_LIST_64_BIT)" >> $(2);\
59*9e94795aSAndroid Build Coastguard Worker            echo "ro.$(1).product.cpu.abilist32=" >> $(2);\
60*9e94795aSAndroid Build Coastguard Worker            echo "ro.$(1).product.cpu.abilist64=$(TARGET_CPU_ABI_LIST_64_BIT)" >> $(2);\
61*9e94795aSAndroid Build Coastguard Worker        )\
62*9e94795aSAndroid Build Coastguard Worker    ,\
63*9e94795aSAndroid Build Coastguard Worker        $(if $(filter system vendor odm,$(1)),\
64*9e94795aSAndroid Build Coastguard Worker            echo "ro.$(1).product.cpu.abilist=$(TARGET_CPU_ABI_LIST)" >> $(2);\
65*9e94795aSAndroid Build Coastguard Worker            echo "ro.$(1).product.cpu.abilist32=$(TARGET_CPU_ABI_LIST_32_BIT)" >> $(2);\
66*9e94795aSAndroid Build Coastguard Worker            echo "ro.$(1).product.cpu.abilist64=$(TARGET_CPU_ABI_LIST_64_BIT)" >> $(2);\
67*9e94795aSAndroid Build Coastguard Worker        )\
68*9e94795aSAndroid Build Coastguard Worker    )\
69*9e94795aSAndroid Build Coastguard Worker    echo "ro.$(1).build.date=`$(DATE_FROM_FILE)`" >> $(2);\
70*9e94795aSAndroid Build Coastguard Worker    echo "ro.$(1).build.date.utc=`$(DATE_FROM_FILE) +%s`" >> $(2);\
71*9e94795aSAndroid Build Coastguard Worker    # Allow optional assignments for ARC forward-declarations (b/249168657)
72*9e94795aSAndroid Build Coastguard Worker    # TODO: Remove any tag-related inconsistencies once the goals from
73*9e94795aSAndroid Build Coastguard Worker    # go/arc-android-sigprop-changes have been achieved.
74*9e94795aSAndroid Build Coastguard Worker    echo "ro.$(1).build.fingerprint?=$(BUILD_FINGERPRINT_FROM_FILE)" >> $(2);\
75*9e94795aSAndroid Build Coastguard Worker    echo "ro.$(1).build.id?=$(BUILD_ID)" >> $(2);\
76*9e94795aSAndroid Build Coastguard Worker    echo "ro.$(1).build.tags?=$(BUILD_VERSION_TAGS)" >> $(2);\
77*9e94795aSAndroid Build Coastguard Worker    echo "ro.$(1).build.type=$(TARGET_BUILD_VARIANT)" >> $(2);\
78*9e94795aSAndroid Build Coastguard Worker    echo "ro.$(1).build.version.incremental=$(BUILD_NUMBER_FROM_FILE)" >> $(2);\
79*9e94795aSAndroid Build Coastguard Worker    echo "ro.$(1).build.version.release=$(PLATFORM_VERSION_LAST_STABLE)" >> $(2);\
80*9e94795aSAndroid Build Coastguard Worker    echo "ro.$(1).build.version.release_or_codename=$(PLATFORM_VERSION)" >> $(2);\
81*9e94795aSAndroid Build Coastguard Worker    echo "ro.$(1).build.version.sdk=$(PLATFORM_SDK_VERSION)" >> $(2);\
82*9e94795aSAndroid Build Coastguard Worker    echo "ro.$(1).build.version.sdk_minor=$(PLATFORM_SDK_MINOR_VERSION)" >> $(2);\
83*9e94795aSAndroid Build Coastguard Worker
84*9e94795aSAndroid Build Coastguard Workerendef
85*9e94795aSAndroid Build Coastguard Worker
86*9e94795aSAndroid Build Coastguard Worker# Rule for generating <partition>/[etc/]build.prop file
87*9e94795aSAndroid Build Coastguard Worker#
88*9e94795aSAndroid Build Coastguard Worker# $(1): partition name
89*9e94795aSAndroid Build Coastguard Worker# $(2): path to the output
90*9e94795aSAndroid Build Coastguard Worker# $(3): path to the input *.prop files. The contents of the files are directly
91*9e94795aSAndroid Build Coastguard Worker#       emitted to the output
92*9e94795aSAndroid Build Coastguard Worker# $(4): list of variable names each of which contains name=value pairs
93*9e94795aSAndroid Build Coastguard Worker# $(5): optional list of prop names to force remove from the output. Properties from both
94*9e94795aSAndroid Build Coastguard Worker#       $(3) and (4) are affected
95*9e94795aSAndroid Build Coastguard Worker# $(6): optional list of files to append at the end. The content of each file is emitted
96*9e94795aSAndroid Build Coastguard Worker#       to the output
97*9e94795aSAndroid Build Coastguard Worker# $(7): optional flag to skip common properties generation
98*9e94795aSAndroid Build Coastguard Workerdefine build-properties
99*9e94795aSAndroid Build Coastguard WorkerALL_DEFAULT_INSTALLED_MODULES += $(2)
100*9e94795aSAndroid Build Coastguard Worker
101*9e94795aSAndroid Build Coastguard Worker$(eval # Properties can be assigned using `prop ?= value` or `prop = value` syntax.)
102*9e94795aSAndroid Build Coastguard Worker$(eval # Eliminate spaces around the ?= and = separators.)
103*9e94795aSAndroid Build Coastguard Worker$(foreach name,$(strip $(4)),\
104*9e94795aSAndroid Build Coastguard Worker    $(eval _temp := $$(call collapse-pairs,$$($(name)),?=))\
105*9e94795aSAndroid Build Coastguard Worker    $(eval _resolved_$(name) := $$(call collapse-pairs,$$(_temp),=))\
106*9e94795aSAndroid Build Coastguard Worker)
107*9e94795aSAndroid Build Coastguard Worker
108*9e94795aSAndroid Build Coastguard Worker$(eval # Implement the legacy behavior when BUILD_BROKEN_DUP_SYSPROP is on.)
109*9e94795aSAndroid Build Coastguard Worker$(eval # Optional assignments are all converted to normal assignments and)
110*9e94795aSAndroid Build Coastguard Worker$(eval # when their duplicates the first one wins)
111*9e94795aSAndroid Build Coastguard Worker$(if $(filter true,$(BUILD_BROKEN_DUP_SYSPROP)),\
112*9e94795aSAndroid Build Coastguard Worker    $(foreach name,$(strip $(4)),\
113*9e94795aSAndroid Build Coastguard Worker        $(eval _temp := $$(subst ?=,=,$$(_resolved_$(name))))\
114*9e94795aSAndroid Build Coastguard Worker        $(eval _resolved_$(name) := $$(call uniq-pairs-by-first-component,$$(_resolved_$(name)),=))\
115*9e94795aSAndroid Build Coastguard Worker    )\
116*9e94795aSAndroid Build Coastguard Worker    $(eval _option := --allow-dup)\
117*9e94795aSAndroid Build Coastguard Worker)
118*9e94795aSAndroid Build Coastguard Worker
119*9e94795aSAndroid Build Coastguard Worker$(2): $(POST_PROCESS_PROPS) $(INTERNAL_BUILD_ID_MAKEFILE) $(3) $(6) $(BUILT_KERNEL_VERSION_FILE_FOR_UFFD_GC)
120*9e94795aSAndroid Build Coastguard Worker	$(hide) echo Building $$@
121*9e94795aSAndroid Build Coastguard Worker	$(hide) mkdir -p $$(dir $$@)
122*9e94795aSAndroid Build Coastguard Worker	$(hide) rm -f $$@ && touch $$@
123*9e94795aSAndroid Build Coastguard Workerifneq ($(strip $(7)), true)
124*9e94795aSAndroid Build Coastguard Worker	$(hide) $$(call generate-common-build-props,$(call to-lower,$(strip $(1))),$$@)
125*9e94795aSAndroid Build Coastguard Workerendif
126*9e94795aSAndroid Build Coastguard Worker	$(hide) $(foreach file,$(strip $(3)),\
127*9e94795aSAndroid Build Coastguard Worker	    if [ -f "$(file)" ]; then\
128*9e94795aSAndroid Build Coastguard Worker	        echo "" >> $$@;\
129*9e94795aSAndroid Build Coastguard Worker	        echo "####################################" >> $$@;\
130*9e94795aSAndroid Build Coastguard Worker	        echo "# from $(file)" >> $$@;\
131*9e94795aSAndroid Build Coastguard Worker	        echo "####################################" >> $$@;\
132*9e94795aSAndroid Build Coastguard Worker	        cat $(file) >> $$@;\
133*9e94795aSAndroid Build Coastguard Worker	    fi;)
134*9e94795aSAndroid Build Coastguard Worker	$(hide) $(foreach name,$(strip $(4)),\
135*9e94795aSAndroid Build Coastguard Worker	    echo "" >> $$@;\
136*9e94795aSAndroid Build Coastguard Worker	    echo "####################################" >> $$@;\
137*9e94795aSAndroid Build Coastguard Worker	    echo "# from variable $(name)" >> $$@;\
138*9e94795aSAndroid Build Coastguard Worker	    echo "####################################" >> $$@;\
139*9e94795aSAndroid Build Coastguard Worker	    $$(foreach line,$$(_resolved_$(name)),\
140*9e94795aSAndroid Build Coastguard Worker	        echo "$$(line)" >> $$@;\
141*9e94795aSAndroid Build Coastguard Worker	    )\
142*9e94795aSAndroid Build Coastguard Worker	)
143*9e94795aSAndroid Build Coastguard Worker	$(hide) $(POST_PROCESS_PROPS) $$(_option) \
144*9e94795aSAndroid Build Coastguard Worker	  --sdk-version $(PLATFORM_SDK_VERSION) \
145*9e94795aSAndroid Build Coastguard Worker	  --kernel-version-file-for-uffd-gc "$(BUILT_KERNEL_VERSION_FILE_FOR_UFFD_GC)" \
146*9e94795aSAndroid Build Coastguard Worker	  $$@ $(5)
147*9e94795aSAndroid Build Coastguard Worker	$(hide) $(foreach file,$(strip $(6)),\
148*9e94795aSAndroid Build Coastguard Worker	    if [ -f "$(file)" ]; then\
149*9e94795aSAndroid Build Coastguard Worker	        cat $(file) >> $$@;\
150*9e94795aSAndroid Build Coastguard Worker	    fi;)
151*9e94795aSAndroid Build Coastguard Worker	$(hide) echo "# end of file" >> $$@
152*9e94795aSAndroid Build Coastguard Worker
153*9e94795aSAndroid Build Coastguard Worker$(call declare-1p-target,$(2))
154*9e94795aSAndroid Build Coastguard Workerendef
155*9e94795aSAndroid Build Coastguard Worker
156*9e94795aSAndroid Build Coastguard Worker# -----------------------------------------------------------------
157*9e94795aSAndroid Build Coastguard Worker# Define fingerprint, thumbprint, and version tags for the current build
158*9e94795aSAndroid Build Coastguard Worker#
159*9e94795aSAndroid Build Coastguard Worker# BUILD_VERSION_TAGS is a comma-separated list of tags chosen by the device
160*9e94795aSAndroid Build Coastguard Worker# implementer that further distinguishes the build. It's basically defined
161*9e94795aSAndroid Build Coastguard Worker# by the device implementer. Here, we are adding a mandatory tag that
162*9e94795aSAndroid Build Coastguard Worker# identifies the signing config of the build.
163*9e94795aSAndroid Build Coastguard WorkerBUILD_VERSION_TAGS := $(BUILD_VERSION_TAGS)
164*9e94795aSAndroid Build Coastguard Workerifeq ($(TARGET_BUILD_TYPE),debug)
165*9e94795aSAndroid Build Coastguard Worker  BUILD_VERSION_TAGS += debug
166*9e94795aSAndroid Build Coastguard Workerendif
167*9e94795aSAndroid Build Coastguard Worker# The "test-keys" tag marks builds signed with the old test keys,
168*9e94795aSAndroid Build Coastguard Worker# which are available in the SDK.  "dev-keys" marks builds signed with
169*9e94795aSAndroid Build Coastguard Worker# non-default dev keys (usually private keys from a vendor directory).
170*9e94795aSAndroid Build Coastguard Worker# Both of these tags will be removed and replaced with "release-keys"
171*9e94795aSAndroid Build Coastguard Worker# when the target-files is signed in a post-build step.
172*9e94795aSAndroid Build Coastguard Workerifeq ($(DEFAULT_SYSTEM_DEV_CERTIFICATE),build/make/target/product/security/testkey)
173*9e94795aSAndroid Build Coastguard WorkerBUILD_KEYS := test-keys
174*9e94795aSAndroid Build Coastguard Workerelse
175*9e94795aSAndroid Build Coastguard WorkerBUILD_KEYS := dev-keys
176*9e94795aSAndroid Build Coastguard Workerendif
177*9e94795aSAndroid Build Coastguard WorkerBUILD_VERSION_TAGS += $(BUILD_KEYS)
178*9e94795aSAndroid Build Coastguard WorkerBUILD_VERSION_TAGS := $(subst $(space),$(comma),$(sort $(BUILD_VERSION_TAGS)))
179*9e94795aSAndroid Build Coastguard Worker
180*9e94795aSAndroid Build Coastguard Worker# BUILD_FINGERPRINT is used used to uniquely identify the combined build and
181*9e94795aSAndroid Build Coastguard Worker# product; used by the OTA server.
182*9e94795aSAndroid Build Coastguard Workerifeq (,$(strip $(BUILD_FINGERPRINT)))
183*9e94795aSAndroid Build Coastguard Worker  BUILD_FINGERPRINT := $(PRODUCT_BRAND)/$(TARGET_PRODUCT)/$(TARGET_DEVICE):$(PLATFORM_VERSION)/$(BUILD_ID)/$(BUILD_NUMBER_FROM_FILE):$(TARGET_BUILD_VARIANT)/$(BUILD_VERSION_TAGS)
184*9e94795aSAndroid Build Coastguard Workerendif
185*9e94795aSAndroid Build Coastguard Worker
186*9e94795aSAndroid Build Coastguard WorkerBUILD_FINGERPRINT_FILE := $(PRODUCT_OUT)/build_fingerprint.txt
187*9e94795aSAndroid Build Coastguard Workerifneq (,$(shell mkdir -p $(PRODUCT_OUT) && echo $(BUILD_FINGERPRINT) >$(BUILD_FINGERPRINT_FILE).tmp && (if ! cmp -s $(BUILD_FINGERPRINT_FILE).tmp $(BUILD_FINGERPRINT_FILE); then mv $(BUILD_FINGERPRINT_FILE).tmp $(BUILD_FINGERPRINT_FILE); else rm $(BUILD_FINGERPRINT_FILE).tmp; fi) && grep " " $(BUILD_FINGERPRINT_FILE)))
188*9e94795aSAndroid Build Coastguard Worker  $(error BUILD_FINGERPRINT cannot contain spaces: "$(file <$(BUILD_FINGERPRINT_FILE))")
189*9e94795aSAndroid Build Coastguard Workerendif
190*9e94795aSAndroid Build Coastguard WorkerBUILD_FINGERPRINT_FROM_FILE := $$(cat $(BUILD_FINGERPRINT_FILE))
191*9e94795aSAndroid Build Coastguard Worker# unset it for safety.
192*9e94795aSAndroid Build Coastguard WorkerBUILD_FINGERPRINT :=
193*9e94795aSAndroid Build Coastguard Worker
194*9e94795aSAndroid Build Coastguard Worker# BUILD_THUMBPRINT is used to uniquely identify the system build; used by the
195*9e94795aSAndroid Build Coastguard Worker# OTA server. This purposefully excludes any product-specific variables.
196*9e94795aSAndroid Build Coastguard Workerifeq (,$(strip $(BUILD_THUMBPRINT)))
197*9e94795aSAndroid Build Coastguard Worker  BUILD_THUMBPRINT := $(PLATFORM_VERSION)/$(BUILD_ID)/$(BUILD_NUMBER_FROM_FILE):$(TARGET_BUILD_VARIANT)/$(BUILD_VERSION_TAGS)
198*9e94795aSAndroid Build Coastguard Workerendif
199*9e94795aSAndroid Build Coastguard Worker
200*9e94795aSAndroid Build Coastguard WorkerBUILD_THUMBPRINT_FILE := $(PRODUCT_OUT)/build_thumbprint.txt
201*9e94795aSAndroid Build Coastguard Workerifeq ($(strip $(HAS_BUILD_NUMBER)),true)
202*9e94795aSAndroid Build Coastguard Worker$(BUILD_THUMBPRINT_FILE): $(BUILD_NUMBER_FILE)
203*9e94795aSAndroid Build Coastguard Workerendif
204*9e94795aSAndroid Build Coastguard Workerifneq (,$(shell mkdir -p $(PRODUCT_OUT) && echo $(BUILD_THUMBPRINT) >$(BUILD_THUMBPRINT_FILE) && grep " " $(BUILD_THUMBPRINT_FILE)))
205*9e94795aSAndroid Build Coastguard Worker  $(error BUILD_THUMBPRINT cannot contain spaces: "$(file <$(BUILD_THUMBPRINT_FILE))")
206*9e94795aSAndroid Build Coastguard Workerendif
207*9e94795aSAndroid Build Coastguard Worker# unset it for safety.
208*9e94795aSAndroid Build Coastguard WorkerBUILD_THUMBPRINT_FILE :=
209*9e94795aSAndroid Build Coastguard WorkerBUILD_THUMBPRINT :=
210*9e94795aSAndroid Build Coastguard Worker
211*9e94795aSAndroid Build Coastguard WorkerKNOWN_OEM_THUMBPRINT_PROPERTIES := \
212*9e94795aSAndroid Build Coastguard Worker    ro.product.brand \
213*9e94795aSAndroid Build Coastguard Worker    ro.product.name \
214*9e94795aSAndroid Build Coastguard Worker    ro.product.device
215*9e94795aSAndroid Build Coastguard WorkerOEM_THUMBPRINT_PROPERTIES := $(filter $(KNOWN_OEM_THUMBPRINT_PROPERTIES),\
216*9e94795aSAndroid Build Coastguard Worker    $(PRODUCT_OEM_PROPERTIES))
217*9e94795aSAndroid Build Coastguard WorkerKNOWN_OEM_THUMBPRINT_PROPERTIES:=
218*9e94795aSAndroid Build Coastguard Worker
219*9e94795aSAndroid Build Coastguard Worker# -----------------------------------------------------------------
220*9e94795aSAndroid Build Coastguard Worker# system/build.prop
221*9e94795aSAndroid Build Coastguard Worker#
222*9e94795aSAndroid Build Coastguard Worker# system/build.prop is built by Soong. See system-build.prop module in
223*9e94795aSAndroid Build Coastguard Worker# build/soong/Android.bp.
224*9e94795aSAndroid Build Coastguard Worker
225*9e94795aSAndroid Build Coastguard WorkerINSTALLED_BUILD_PROP_TARGET := $(TARGET_OUT)/build.prop
226*9e94795aSAndroid Build Coastguard Worker
227*9e94795aSAndroid Build Coastguard Worker# -----------------------------------------------------------------
228*9e94795aSAndroid Build Coastguard Worker# vendor/build.prop
229*9e94795aSAndroid Build Coastguard Worker#
230*9e94795aSAndroid Build Coastguard Worker_prop_files_ := $(if $(TARGET_VENDOR_PROP),\
231*9e94795aSAndroid Build Coastguard Worker    $(TARGET_VENDOR_PROP),\
232*9e94795aSAndroid Build Coastguard Worker    $(wildcard $(TARGET_DEVICE_DIR)/vendor.prop))
233*9e94795aSAndroid Build Coastguard Worker
234*9e94795aSAndroid Build Coastguard Workerandroid_info_prop := $(call intermediates-dir-for,ETC,android_info_prop)/android_info.prop
235*9e94795aSAndroid Build Coastguard Worker$(android_info_prop): $(INSTALLED_ANDROID_INFO_TXT_TARGET)
236*9e94795aSAndroid Build Coastguard Worker	cat $< | grep 'require version-' | sed -e 's/require version-/ro.build.expect./g' > $@
237*9e94795aSAndroid Build Coastguard Worker
238*9e94795aSAndroid Build Coastguard Worker_prop_files_ += $(android_info_prop)
239*9e94795aSAndroid Build Coastguard Worker
240*9e94795aSAndroid Build Coastguard Workerifdef property_overrides_split_enabled
241*9e94795aSAndroid Build Coastguard Worker# Order matters here. When there are duplicates, the last one wins.
242*9e94795aSAndroid Build Coastguard Worker# TODO(b/117892318): don't allow duplicates so that the ordering doesn't matter
243*9e94795aSAndroid Build Coastguard Worker_prop_vars_ := \
244*9e94795aSAndroid Build Coastguard Worker    ADDITIONAL_VENDOR_PROPERTIES \
245*9e94795aSAndroid Build Coastguard Worker    PRODUCT_VENDOR_PROPERTIES
246*9e94795aSAndroid Build Coastguard Worker
247*9e94795aSAndroid Build Coastguard Worker# TODO(b/117892318): deprecate this
248*9e94795aSAndroid Build Coastguard Worker_prop_vars_ += \
249*9e94795aSAndroid Build Coastguard Worker    PRODUCT_DEFAULT_PROPERTY_OVERRIDES \
250*9e94795aSAndroid Build Coastguard Worker    PRODUCT_PROPERTY_OVERRIDES
251*9e94795aSAndroid Build Coastguard Workerelse
252*9e94795aSAndroid Build Coastguard Worker_prop_vars_ :=
253*9e94795aSAndroid Build Coastguard Workerendif
254*9e94795aSAndroid Build Coastguard Worker
255*9e94795aSAndroid Build Coastguard WorkerINSTALLED_VENDOR_BUILD_PROP_TARGET := $(TARGET_OUT_VENDOR)/build.prop
256*9e94795aSAndroid Build Coastguard Worker$(eval $(call build-properties,\
257*9e94795aSAndroid Build Coastguard Worker    vendor,\
258*9e94795aSAndroid Build Coastguard Worker    $(INSTALLED_VENDOR_BUILD_PROP_TARGET),\
259*9e94795aSAndroid Build Coastguard Worker    $(_prop_files_),\
260*9e94795aSAndroid Build Coastguard Worker    $(_prop_vars_),\
261*9e94795aSAndroid Build Coastguard Worker    $(PRODUCT_VENDOR_PROPERTY_BLACKLIST),\
262*9e94795aSAndroid Build Coastguard Worker    $(empty),\
263*9e94795aSAndroid Build Coastguard Worker    $(empty)))
264*9e94795aSAndroid Build Coastguard Worker
265*9e94795aSAndroid Build Coastguard Worker$(eval $(call declare-1p-target,$(INSTALLED_VENDOR_BUILD_PROP_TARGET)))
266*9e94795aSAndroid Build Coastguard Worker
267*9e94795aSAndroid Build Coastguard Worker# -----------------------------------------------------------------
268*9e94795aSAndroid Build Coastguard Worker# product/etc/build.prop
269*9e94795aSAndroid Build Coastguard Worker#
270*9e94795aSAndroid Build Coastguard Worker# product/etc/build.prop is built by Soong. See product-build.prop module in
271*9e94795aSAndroid Build Coastguard Worker# build/soong/Android.bp.
272*9e94795aSAndroid Build Coastguard Worker
273*9e94795aSAndroid Build Coastguard WorkerINSTALLED_PRODUCT_BUILD_PROP_TARGET := $(TARGET_OUT_PRODUCT)/etc/build.prop
274*9e94795aSAndroid Build Coastguard Worker
275*9e94795aSAndroid Build Coastguard Worker# ----------------------------------------------------------------
276*9e94795aSAndroid Build Coastguard Worker# odm/etc/build.prop
277*9e94795aSAndroid Build Coastguard Worker#
278*9e94795aSAndroid Build Coastguard Worker# odm/etc/build.prop is built by Soong. See odm-build.prop module in
279*9e94795aSAndroid Build Coastguard Worker# build/soong/Android.bp.
280*9e94795aSAndroid Build Coastguard Worker
281*9e94795aSAndroid Build Coastguard WorkerINSTALLED_ODM_BUILD_PROP_TARGET := $(TARGET_OUT_ODM)/etc/build.prop
282*9e94795aSAndroid Build Coastguard Worker
283*9e94795aSAndroid Build Coastguard Worker# ----------------------------------------------------------------
284*9e94795aSAndroid Build Coastguard Worker# vendor_dlkm/etc/build.prop
285*9e94795aSAndroid Build Coastguard Worker# odm_dlkm/etc/build.prop
286*9e94795aSAndroid Build Coastguard Worker# system_dlkm/build.prop
287*9e94795aSAndroid Build Coastguard Worker# These are built by Soong. See build/soong/Android.bp
288*9e94795aSAndroid Build Coastguard Worker
289*9e94795aSAndroid Build Coastguard WorkerINSTALLED_VENDOR_DLKM_BUILD_PROP_TARGET := $(TARGET_OUT_VENDOR_DLKM)/etc/build.prop
290*9e94795aSAndroid Build Coastguard WorkerINSTALLED_ODM_DLKM_BUILD_PROP_TARGET := $(TARGET_OUT_ODM_DLKM)/etc/build.prop
291*9e94795aSAndroid Build Coastguard WorkerINSTALLED_SYSTEM_DLKM_BUILD_PROP_TARGET := $(TARGET_OUT_SYSTEM_DLKM)/etc/build.prop
292*9e94795aSAndroid Build Coastguard WorkerALL_DEFAULT_INSTALLED_MODULES += \
293*9e94795aSAndroid Build Coastguard Worker  $(INSTALLED_VENDOR_DLKM_BUILD_PROP_TARGET) \
294*9e94795aSAndroid Build Coastguard Worker  $(INSTALLED_ODM_DLKM_BUILD_PROP_TARGET) \
295*9e94795aSAndroid Build Coastguard Worker  $(INSTALLED_SYSTEM_DLKM_BUILD_PROP_TARGET) \
296*9e94795aSAndroid Build Coastguard Worker
297*9e94795aSAndroid Build Coastguard Worker# -----------------------------------------------------------------
298*9e94795aSAndroid Build Coastguard Worker# system_ext/etc/build.prop
299*9e94795aSAndroid Build Coastguard Worker#
300*9e94795aSAndroid Build Coastguard Worker# system_ext/etc/build.prop is built by Soong. See system-build.prop module in
301*9e94795aSAndroid Build Coastguard Worker# build/soong/Android.bp.
302*9e94795aSAndroid Build Coastguard Worker
303*9e94795aSAndroid Build Coastguard WorkerINSTALLED_SYSTEM_EXT_BUILD_PROP_TARGET := $(TARGET_OUT_SYSTEM_EXT)/etc/build.prop
304*9e94795aSAndroid Build Coastguard Worker
305*9e94795aSAndroid Build Coastguard WorkerRAMDISK_BUILD_PROP_REL_PATH := system/etc/ramdisk/build.prop
306*9e94795aSAndroid Build Coastguard Workerifeq (true,$(BOARD_USES_RECOVERY_AS_BOOT))
307*9e94795aSAndroid Build Coastguard WorkerINSTALLED_RAMDISK_BUILD_PROP_TARGET := $(TARGET_RECOVERY_ROOT_OUT)/first_stage_ramdisk/$(RAMDISK_BUILD_PROP_REL_PATH)
308*9e94795aSAndroid Build Coastguard Workerelse
309*9e94795aSAndroid Build Coastguard WorkerINSTALLED_RAMDISK_BUILD_PROP_TARGET := $(TARGET_RAMDISK_OUT)/$(RAMDISK_BUILD_PROP_REL_PATH)
310*9e94795aSAndroid Build Coastguard Workerendif
311*9e94795aSAndroid Build Coastguard Worker
312*9e94795aSAndroid Build Coastguard WorkerALL_INSTALLED_BUILD_PROP_FILES := \
313*9e94795aSAndroid Build Coastguard Worker  $(INSTALLED_BUILD_PROP_TARGET) \
314*9e94795aSAndroid Build Coastguard Worker  $(INSTALLED_VENDOR_BUILD_PROP_TARGET) \
315*9e94795aSAndroid Build Coastguard Worker  $(INSTALLED_PRODUCT_BUILD_PROP_TARGET) \
316*9e94795aSAndroid Build Coastguard Worker  $(INSTALLED_ODM_BUILD_PROP_TARGET) \
317*9e94795aSAndroid Build Coastguard Worker  $(INSTALLED_VENDOR_DLKM_BUILD_PROP_TARGET) \
318*9e94795aSAndroid Build Coastguard Worker  $(INSTALLED_ODM_DLKM_BUILD_PROP_TARGET) \
319*9e94795aSAndroid Build Coastguard Worker  $(INSTALLED_SYSTEM_DLKM_BUILD_PROP_TARGET) \
320*9e94795aSAndroid Build Coastguard Worker  $(INSTALLED_SYSTEM_EXT_BUILD_PROP_TARGET) \
321*9e94795aSAndroid Build Coastguard Worker  $(INSTALLED_RAMDISK_BUILD_PROP_TARGET)
322*9e94795aSAndroid Build Coastguard Worker
323*9e94795aSAndroid Build Coastguard Worker# $1 installed file path, e.g. out/target/product/vsoc_x86_64/system/build.prop
324*9e94795aSAndroid Build Coastguard Workerdefine is-build-prop
325*9e94795aSAndroid Build Coastguard Worker$(if $(findstring $1,$(ALL_INSTALLED_BUILD_PROP_FILES)),Y)
326*9e94795aSAndroid Build Coastguard Workerendef
327