• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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    echo "ro.product.$(1).brand=$(PRODUCT_BRAND)" >> $(2);\
37    echo "ro.product.$(1).device=$(TARGET_DEVICE)" >> $(2);\
38    echo "ro.product.$(1).manufacturer=$(PRODUCT_MANUFACTURER)" >> $(2);\
39    echo "ro.product.$(1).model=$(PRODUCT_MODEL)" >> $(2);\
40    echo "ro.product.$(1).name=$(TARGET_PRODUCT)" >> $(2);\
41    if [ -n "$(strip $(PRODUCT_MODEL_FOR_ATTESTATION))" ]; then \
42        echo "ro.product.model_for_attestation=$(PRODUCT_MODEL_FOR_ATTESTATION)" >> $(2);\
43    fi; \
44    if [ -n "$(strip $(PRODUCT_BRAND_FOR_ATTESTATION))" ]; then \
45        echo "ro.product.brand_for_attestation=$(PRODUCT_BRAND_FOR_ATTESTATION)" >> $(2);\
46    fi; \
47    if [ -n "$(strip $(PRODUCT_NAME_FOR_ATTESTATION))" ]; then \
48        echo "ro.product.name_for_attestation=$(PRODUCT_NAME_FOR_ATTESTATION)" >> $(2);\
49    fi; \
50    if [ -n "$(strip $(PRODUCT_DEVICE_FOR_ATTESTATION))" ]; then \
51        echo "ro.product.device_for_attestation=$(PRODUCT_DEVICE_FOR_ATTESTATION)" >> $(2);\
52    fi; \
53    if [ -n "$(strip $(PRODUCT_MANUFACTURER_FOR_ATTESTATION))" ]; then \
54        echo "ro.product.manufacturer_for_attestation=$(PRODUCT_MANUFACTURER_FOR_ATTESTATION)" >> $(2);\
55    fi; \
56    $(if $(filter true,$(ZYGOTE_FORCE_64)),\
57        $(if $(filter vendor,$(1)),\
58            echo "ro.$(1).product.cpu.abilist=$(TARGET_CPU_ABI_LIST_64_BIT)" >> $(2);\
59            echo "ro.$(1).product.cpu.abilist32=" >> $(2);\
60            echo "ro.$(1).product.cpu.abilist64=$(TARGET_CPU_ABI_LIST_64_BIT)" >> $(2);\
61        )\
62    ,\
63        $(if $(filter system vendor odm,$(1)),\
64            echo "ro.$(1).product.cpu.abilist=$(TARGET_CPU_ABI_LIST)" >> $(2);\
65            echo "ro.$(1).product.cpu.abilist32=$(TARGET_CPU_ABI_LIST_32_BIT)" >> $(2);\
66            echo "ro.$(1).product.cpu.abilist64=$(TARGET_CPU_ABI_LIST_64_BIT)" >> $(2);\
67        )\
68    )\
69    echo "ro.$(1).build.date=`$(DATE_FROM_FILE)`" >> $(2);\
70    echo "ro.$(1).build.date.utc=`$(DATE_FROM_FILE) +%s`" >> $(2);\
71    # Allow optional assignments for ARC forward-declarations (b/249168657)
72    # TODO: Remove any tag-related inconsistencies once the goals from
73    # go/arc-android-sigprop-changes have been achieved.
74    echo "ro.$(1).build.fingerprint?=$(BUILD_FINGERPRINT_FROM_FILE)" >> $(2);\
75    echo "ro.$(1).build.id?=$(BUILD_ID)" >> $(2);\
76    echo "ro.$(1).build.tags?=$(BUILD_VERSION_TAGS)" >> $(2);\
77    echo "ro.$(1).build.type=$(TARGET_BUILD_VARIANT)" >> $(2);\
78    echo "ro.$(1).build.version.incremental=$(BUILD_NUMBER_FROM_FILE)" >> $(2);\
79    echo "ro.$(1).build.version.release=$(PLATFORM_VERSION_LAST_STABLE)" >> $(2);\
80    echo "ro.$(1).build.version.release_or_codename=$(PLATFORM_VERSION)" >> $(2);\
81    echo "ro.$(1).build.version.sdk=$(PLATFORM_SDK_VERSION)" >> $(2);\
82    echo "ro.$(1).build.version.sdk_full=$(PLATFORM_SDK_VERSION_FULL)" >> $(2);\
83
84endef
85
86# Rule for generating <partition>/[etc/]build.prop file
87#
88# $(1): partition name
89# $(2): path to the output
90# $(3): path to the input *.prop files. The contents of the files are directly
91#       emitted to the output
92# $(4): list of variable names each of which contains name=value pairs
93# $(5): optional list of prop names to force remove from the output. Properties from both
94#       $(3) and (4) are affected
95# $(6): optional list of files to append at the end. The content of each file is emitted
96#       to the output
97# $(7): optional flag to skip common properties generation
98define build-properties
99ALL_DEFAULT_INSTALLED_MODULES += $(2)
100
101$(eval # Properties can be assigned using `prop ?= value` or `prop = value` syntax.)
102$(eval # Eliminate spaces around the ?= and = separators.)
103$(foreach name,$(strip $(4)),\
104    $(eval _temp := $$(call collapse-pairs,$$($(name)),?=))\
105    $(eval _resolved_$(name) := $$(call collapse-pairs,$$(_temp),=))\
106)
107
108$(eval # Implement the legacy behavior when BUILD_BROKEN_DUP_SYSPROP is on.)
109$(eval # Optional assignments are all converted to normal assignments and)
110$(eval # when their duplicates the first one wins)
111$(if $(filter true,$(BUILD_BROKEN_DUP_SYSPROP)),\
112    $(foreach name,$(strip $(4)),\
113        $(eval _temp := $$(subst ?=,=,$$(_resolved_$(name))))\
114        $(eval _resolved_$(name) := $$(call uniq-pairs-by-first-component,$$(_resolved_$(name)),=))\
115    )\
116    $(eval _option := --allow-dup)\
117)
118
119$(2): $(POST_PROCESS_PROPS) $(INTERNAL_BUILD_ID_MAKEFILE) $(3) $(6) $(BUILT_KERNEL_VERSION_FILE_FOR_UFFD_GC)
120	$(hide) echo Building $$@
121	$(hide) mkdir -p $$(dir $$@)
122	$(hide) rm -f $$@ && touch $$@
123ifneq ($(strip $(7)), true)
124	$(hide) $$(call generate-common-build-props,$(call to-lower,$(strip $(1))),$$@)
125endif
126        # Make and Soong use different intermediate files to build vendor/build.prop.
127        # Although the sysprop contents are same, the absolute paths of android-info.prop are different.
128        # Print the filename for the intermediate files (files in OUT_DIR).
129        # This helps with validating mk->soong migration of android partitions.
130	$(hide) $(foreach file,$(strip $(3)),\
131	    if [ -f "$(file)" ]; then\
132	        echo "" >> $$@;\
133	        echo "####################################" >> $$@;\
134	        $(if $(filter $(OUT_DIR)/%,$(file)), \
135		echo "# from $(notdir $(file))" >> $$@;\
136		,\
137		echo "# from $(file)" >> $$@;\
138		)\
139	        echo "####################################" >> $$@;\
140	        cat $(file) >> $$@;\
141	    fi;)
142	$(hide) $(foreach name,$(strip $(4)),\
143	    echo "" >> $$@;\
144	    echo "####################################" >> $$@;\
145	    echo "# from variable $(name)" >> $$@;\
146	    echo "####################################" >> $$@;\
147	    $$(foreach line,$$(_resolved_$(name)),\
148	        echo "$$(line)" >> $$@;\
149	    )\
150	)
151	$(hide) $(POST_PROCESS_PROPS) $$(_option) \
152	  --sdk-version $(PLATFORM_SDK_VERSION) \
153	  --kernel-version-file-for-uffd-gc "$(BUILT_KERNEL_VERSION_FILE_FOR_UFFD_GC)" \
154	  $$@ $(5)
155	$(hide) $(foreach file,$(strip $(6)),\
156	    if [ -f "$(file)" ]; then\
157	        cat $(file) >> $$@;\
158	    fi;)
159	$(hide) echo "# end of file" >> $$@
160
161$(call declare-1p-target,$(2))
162endef
163
164KNOWN_OEM_THUMBPRINT_PROPERTIES := \
165    ro.product.brand \
166    ro.product.name \
167    ro.product.device
168OEM_THUMBPRINT_PROPERTIES := $(filter $(KNOWN_OEM_THUMBPRINT_PROPERTIES),\
169    $(PRODUCT_OEM_PROPERTIES))
170KNOWN_OEM_THUMBPRINT_PROPERTIES:=
171
172# -----------------------------------------------------------------
173# system/build.prop
174#
175# system/build.prop is built by Soong. See system-build.prop module in
176# build/soong/Android.bp.
177
178INSTALLED_BUILD_PROP_TARGET := $(TARGET_OUT)/build.prop
179
180# -----------------------------------------------------------------
181# vendor/build.prop
182#
183_prop_files_ := $(if $(TARGET_VENDOR_PROP),\
184    $(TARGET_VENDOR_PROP),\
185    $(wildcard $(TARGET_DEVICE_DIR)/vendor.prop))
186
187android_info_prop := $(call intermediates-dir-for,ETC,android_info_prop)/android-info.prop
188$(android_info_prop): $(INSTALLED_ANDROID_INFO_TXT_TARGET)
189	cat $< | grep 'require version-' | sed -e 's/require version-/ro.build.expect./g' > $@
190
191_prop_files_ += $(android_info_prop)
192
193ifdef property_overrides_split_enabled
194# Order matters here. When there are duplicates, the last one wins.
195# TODO(b/117892318): don't allow duplicates so that the ordering doesn't matter
196_prop_vars_ := \
197    ADDITIONAL_VENDOR_PROPERTIES \
198    PRODUCT_VENDOR_PROPERTIES
199
200# TODO(b/117892318): deprecate this
201_prop_vars_ += \
202    PRODUCT_DEFAULT_PROPERTY_OVERRIDES \
203    PRODUCT_PROPERTY_OVERRIDES
204else
205_prop_vars_ :=
206endif
207
208INSTALLED_VENDOR_BUILD_PROP_TARGET := $(TARGET_OUT_VENDOR)/build.prop
209$(eval $(call build-properties,\
210    vendor,\
211    $(INSTALLED_VENDOR_BUILD_PROP_TARGET),\
212    $(_prop_files_),\
213    $(_prop_vars_),\
214    $(PRODUCT_VENDOR_PROPERTY_BLACKLIST),\
215    $(empty),\
216    $(empty)))
217
218$(eval $(call declare-1p-target,$(INSTALLED_VENDOR_BUILD_PROP_TARGET)))
219
220# -----------------------------------------------------------------
221# product/etc/build.prop
222#
223# product/etc/build.prop is built by Soong. See product-build.prop module in
224# build/soong/Android.bp.
225
226INSTALLED_PRODUCT_BUILD_PROP_TARGET := $(TARGET_OUT_PRODUCT)/etc/build.prop
227
228# ----------------------------------------------------------------
229# odm/etc/build.prop
230#
231# odm/etc/build.prop is built by Soong. See odm-build.prop module in
232# build/soong/Android.bp.
233
234INSTALLED_ODM_BUILD_PROP_TARGET := $(TARGET_OUT_ODM)/etc/build.prop
235
236# ----------------------------------------------------------------
237# vendor_dlkm/etc/build.prop
238# odm_dlkm/etc/build.prop
239# system_dlkm/build.prop
240# These are built by Soong. See build/soong/Android.bp
241
242INSTALLED_VENDOR_DLKM_BUILD_PROP_TARGET := $(TARGET_OUT_VENDOR_DLKM)/etc/build.prop
243INSTALLED_ODM_DLKM_BUILD_PROP_TARGET := $(TARGET_OUT_ODM_DLKM)/etc/build.prop
244INSTALLED_SYSTEM_DLKM_BUILD_PROP_TARGET := $(TARGET_OUT_SYSTEM_DLKM)/etc/build.prop
245ALL_DEFAULT_INSTALLED_MODULES += \
246  $(INSTALLED_VENDOR_DLKM_BUILD_PROP_TARGET) \
247  $(INSTALLED_ODM_DLKM_BUILD_PROP_TARGET) \
248  $(INSTALLED_SYSTEM_DLKM_BUILD_PROP_TARGET) \
249
250# -----------------------------------------------------------------
251# system_ext/etc/build.prop
252#
253# system_ext/etc/build.prop is built by Soong. See system-build.prop module in
254# build/soong/Android.bp.
255
256INSTALLED_SYSTEM_EXT_BUILD_PROP_TARGET := $(TARGET_OUT_SYSTEM_EXT)/etc/build.prop
257
258RAMDISK_BUILD_PROP_REL_PATH := system/etc/ramdisk/build.prop
259ifeq (true,$(BOARD_USES_RECOVERY_AS_BOOT))
260INSTALLED_RAMDISK_BUILD_PROP_TARGET := $(TARGET_RECOVERY_ROOT_OUT)/first_stage_ramdisk/$(RAMDISK_BUILD_PROP_REL_PATH)
261else
262INSTALLED_RAMDISK_BUILD_PROP_TARGET := $(TARGET_RAMDISK_OUT)/$(RAMDISK_BUILD_PROP_REL_PATH)
263endif
264
265ALL_INSTALLED_BUILD_PROP_FILES := \
266  $(INSTALLED_BUILD_PROP_TARGET) \
267  $(INSTALLED_VENDOR_BUILD_PROP_TARGET) \
268  $(INSTALLED_PRODUCT_BUILD_PROP_TARGET) \
269  $(INSTALLED_ODM_BUILD_PROP_TARGET) \
270  $(INSTALLED_VENDOR_DLKM_BUILD_PROP_TARGET) \
271  $(INSTALLED_ODM_DLKM_BUILD_PROP_TARGET) \
272  $(INSTALLED_SYSTEM_DLKM_BUILD_PROP_TARGET) \
273  $(INSTALLED_SYSTEM_EXT_BUILD_PROP_TARGET) \
274  $(INSTALLED_RAMDISK_BUILD_PROP_TARGET)
275
276# $1 installed file path, e.g. out/target/product/vsoc_x86_64/system/build.prop
277define is-build-prop
278$(if $(findstring $1,$(ALL_INSTALLED_BUILD_PROP_FILES)),Y)
279endef
280