blob: 62ef3df7dbb7fc4feb0d8da6e1a34f87500c24bd [file] [log] [blame]
Joe Onorato63a84552023-06-29 14:34:18 -07001# Copyright (C) 2023 The Android Open Source Project
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14
15#
16# This file is included by build/make/core/Makefile, and contains the logic for
17# the combined flags files.
18#
19
20# TODO: Should we do all of the images in $(IMAGES_TO_BUILD)?
21_FLAG_PARTITIONS := product system system_ext vendor
22
23
24# -----------------------------------------------------------------
25# Release Config Flags
26
27# Create a summary file of build flags for each partition
28# $(1): built build flags json file
29# $(2): installed build flags json file
30# $(3): flag names
31define generate-partition-build-flag-file
32$(eval $(strip $(1)): PRIVATE_OUT := $(strip $(1)))
33$(eval $(strip $(1)): PRIVATE_FLAG_NAMES := $(strip $(3)))
34$(strip $(1)):
35 mkdir -p $$(dir $$(PRIVATE_OUT))
36 echo '{' > $$(PRIVATE_OUT)
37 echo '"flags": [' >> $$(PRIVATE_OUT)
38 $$(foreach flag, $$(PRIVATE_FLAG_NAMES), \
39 ( \
40 printf ' { "name": "%s", "value": "%s", ' \
41 '$$(flag)' \
42 '$$(_ALL_RELEASE_FLAGS.$$(flag).VALUE)' \
43 ; \
44 printf '"set": "%s", "default": "%s", "declared": "%s" }' \
45 '$$(_ALL_RELEASE_FLAGS.$$(flag).SET_IN)' \
46 '$$(_ALL_RELEASE_FLAGS.$$(flag).DEFAULT)' \
47 '$$(_ALL_RELEASE_FLAGS.$$(flag).DECLARED_IN)' \
48 ; \
49 printf '$$(if $$(filter $$(lastword $$(PRIVATE_FLAG_NAMES)),$$(flag)),,$$(comma))\n' ; \
50 ) >> $$(PRIVATE_OUT) ; \
51 )
52 echo "]" >> $$(PRIVATE_OUT)
53 echo "}" >> $$(PRIVATE_OUT)
54$(call copy-one-file, $(1), $(2))
55endef
56
57$(foreach partition, $(_FLAG_PARTITIONS), \
58 $(eval build_flag_summaries.$(partition) := $(PRODUCT_OUT)/$(partition)/etc/build_flags.json) \
59 $(eval $(call generate-partition-build-flag-file, \
60 $(TARGET_OUT_FLAGS)/$(partition)/build_flags.json, \
61 $(build_flag_summaries.$(partition)), \
62 $(_ALL_RELEASE_FLAGS.PARTITIONS.$(partition)) \
63 ) \
64 ) \
65)
66
67
68# -----------------------------------------------------------------
69# Aconfig Flags
70
71# Create a summary file of build flags for each partition
Ted Bauer98bedd82023-09-14 15:28:12 +000072# $(1): built aconfig flags file (out)
73# $(2): installed aconfig flags file (out)
Joe Onorato63a84552023-06-29 14:34:18 -070074# $(3): input aconfig files for the partition (in)
75define generate-partition-aconfig-flag-file
76$(eval $(strip $(1)): PRIVATE_OUT := $(strip $(1)))
77$(eval $(strip $(1)): PRIVATE_IN := $(strip $(3)))
Joe Onoratob2093492023-08-19 19:00:04 -070078$(strip $(1)): $(ACONFIG) $(strip $(3))
Joe Onorato63a84552023-06-29 14:34:18 -070079 mkdir -p $$(dir $$(PRIVATE_OUT))
80 $$(if $$(PRIVATE_IN), \
Colin Cross706b0c32023-12-05 16:39:20 -080081 $$(ACONFIG) dump --dedup --format protobuf --out $$(PRIVATE_OUT) \
Joe Onorato63a84552023-06-29 14:34:18 -070082 $$(addprefix --cache ,$$(PRIVATE_IN)), \
Ted Bauerc0d16592023-11-01 16:03:51 +000083 echo -n > $$(PRIVATE_OUT) \
Joe Onorato63a84552023-06-29 14:34:18 -070084 )
85$(call copy-one-file, $(1), $(2))
86endef
87
88
89$(foreach partition, $(_FLAG_PARTITIONS), \
Ted Bauer98bedd82023-09-14 15:28:12 +000090 $(eval aconfig_flag_summaries_protobuf.$(partition) := $(PRODUCT_OUT)/$(partition)/etc/aconfig_flags.pb) \
Joe Onorato63a84552023-06-29 14:34:18 -070091 $(eval $(call generate-partition-aconfig-flag-file, \
Ted Bauer98bedd82023-09-14 15:28:12 +000092 $(TARGET_OUT_FLAGS)/$(partition)/aconfig_flags.pb, \
93 $(aconfig_flag_summaries_protobuf.$(partition)), \
94 $(sort $(foreach m,$(call register-names-for-partition, $(partition)), \
95 $(ALL_MODULES.$(m).ACONFIG_FILES) \
96 )), \
Joe Onorato63a84552023-06-29 14:34:18 -070097 )) \
98)
99
LaMont Jones2e47c7b2024-01-26 18:23:47 +0000100# Collect the on-device flags into a single file, similar to all_aconfig_declarations.
101required_aconfig_flags_files := \
102 $(sort $(foreach partition, $(filter $(IMAGES_TO_BUILD), $(_FLAG_PARTITIONS)), \
103 $(aconfig_flag_summaries_protobuf.$(partition)) \
104 ))
105
106.PHONY: device_aconfig_declarations
107device_aconfig_declarations: $(PRODUCT_OUT)/device_aconfig_declarations.pb
108$(eval $(call generate-partition-aconfig-flag-file, \
109 $(TARGET_OUT_FLAGS)/device_aconfig_declarations.pb, \
110 $(PRODUCT_OUT)/device_aconfig_declarations.pb, \
111 $(sort $(required_aconfig_flags_files)) \
112)) \
113
Dennis Shenc39f3782024-01-12 16:38:04 +0000114# Create a set of storage file for each partition
Dennis Shenf2d4c8d2024-01-23 20:50:54 +0000115# $(1): built aconfig flags storage package map file (out)
116# $(2): built aconfig flags storage flag map file (out)
117# $(3): built aconfig flags storage flag val file (out)
118# $(4): installed aconfig flags storage package map file (out)
119# $(5): installed aconfig flags storage flag map file (out)
120# $(6): installed aconfig flags storage flag value file (out)
121# $(7): input aconfig files for the partition (in)
Dennis Shenc39f3782024-01-12 16:38:04 +0000122define generate-partition-aconfig-storage-file
Dennis Shenf2d4c8d2024-01-23 20:50:54 +0000123$(eval $(strip $(1)): PRIVATE_OUT := $(strip $(1)))
124$(eval $(strip $(1)): PRIVATE_IN := $(strip $(7)))
125$(strip $(1)): $(ACONFIG) $(strip $(7))
126 mkdir -p $$(dir $$(PRIVATE_OUT))
Dennis Shenc39f3782024-01-12 16:38:04 +0000127 $$(if $$(PRIVATE_IN), \
Dennis Shenf2d4c8d2024-01-23 20:50:54 +0000128 $$(ACONFIG) create-storage --container "" --file package_map --out $$(PRIVATE_OUT) \
Dennis Shenc39f3782024-01-12 16:38:04 +0000129 $$(addprefix --cache ,$$(PRIVATE_IN)), \
130 )
Dennis Shenf2d4c8d2024-01-23 20:50:54 +0000131 touch $$(PRIVATE_OUT)
132$(eval $(strip $(2)): PRIVATE_OUT := $(strip $(2)))
133$(eval $(strip $(2)): PRIVATE_IN := $(strip $(7)))
134$(strip $(2)): $(ACONFIG) $(strip $(7))
135 mkdir -p $$(dir $$(PRIVATE_OUT))
136 $$(if $$(PRIVATE_IN), \
137 $$(ACONFIG) create-storage --container "" --file flag_map --out $$(PRIVATE_OUT) \
138 $$(addprefix --cache ,$$(PRIVATE_IN)), \
139 )
140 touch $$(PRIVATE_OUT)
141$(eval $(strip $(3)): PRIVATE_OUT := $(strip $(3)))
142$(eval $(strip $(3)): PRIVATE_IN := $(strip $(7)))
143$(strip $(3)): $(ACONFIG) $(strip $(7))
144 mkdir -p $$(dir $$(PRIVATE_OUT))
145 $$(if $$(PRIVATE_IN), \
146 $$(ACONFIG) create-storage --container "" --file flag_val --out $$(PRIVATE_OUT) \
147 $$(addprefix --cache ,$$(PRIVATE_IN)), \
148 )
149 touch $$(PRIVATE_OUT)
150$(call copy-one-file, $(strip $(1)), $(4))
151$(call copy-one-file, $(strip $(2)), $(5))
152$(call copy-one-file, $(strip $(3)), $(6))
Dennis Shenc39f3782024-01-12 16:38:04 +0000153endef
154
155ifeq ($(RELEASE_CREATE_ACONFIG_STORAGE_FILE),true)
156$(foreach partition, $(_FLAG_PARTITIONS), \
157 $(eval aconfig_storage_package_map.$(partition) := $(PRODUCT_OUT)/$(partition)/etc/package.map) \
158 $(eval aconfig_storage_flag_map.$(partition) := $(PRODUCT_OUT)/$(partition)/etc/flag.map) \
Dennis Shenf2d4c8d2024-01-23 20:50:54 +0000159 $(eval aconfig_storage_flag_val.$(partition) := $(PRODUCT_OUT)/$(partition)/etc/flag.val) \
Dennis Shenc39f3782024-01-12 16:38:04 +0000160 $(eval $(call generate-partition-aconfig-storage-file, \
Dennis Shenf2d4c8d2024-01-23 20:50:54 +0000161 $(TARGET_OUT_FLAGS)/$(partition)/package.map, \
162 $(TARGET_OUT_FLAGS)/$(partition)/flag.map, \
163 $(TARGET_OUT_FLAGS)/$(partition)/flag.val, \
Dennis Shenc39f3782024-01-12 16:38:04 +0000164 $(aconfig_storage_package_map.$(partition)), \
165 $(aconfig_storage_flag_map.$(partition)), \
166 $(aconfig_storage_flag_val.$(partition)), \
167 $(sort $(foreach m,$(call register-names-for-partition, $(partition)), \
168 $(ALL_MODULES.$(m).ACONFIG_FILES) \
169 )), \
170 )) \
171)
172endif
Joe Onorato63a84552023-06-29 14:34:18 -0700173
174# -----------------------------------------------------------------
175# Install the ones we need for the configured product
176required_flags_files := \
177 $(sort $(foreach partition, $(filter $(IMAGES_TO_BUILD), $(_FLAG_PARTITIONS)), \
178 $(build_flag_summaries.$(partition)) \
Ted Bauer98bedd82023-09-14 15:28:12 +0000179 $(aconfig_flag_summaries_protobuf.$(partition)) \
Dennis Shenc39f3782024-01-12 16:38:04 +0000180 $(aconfig_storage_package_map.$(partition)) \
181 $(aconfig_storage_flag_map.$(partition)) \
182 $(aconfig_storage_flag_val.$(partition)) \
Joe Onorato63a84552023-06-29 14:34:18 -0700183 ))
184
185ALL_DEFAULT_INSTALLED_MODULES += $(required_flags_files)
Wei Li9b4cf432023-08-08 17:26:49 -0700186ALL_FLAGS_FILES := $(required_flags_files)
Joe Onorato63a84552023-06-29 14:34:18 -0700187
188# TODO: Remove
189.PHONY: flag-files
190flag-files: $(required_flags_files)
191
192
193# Clean up
194required_flags_files:=
LaMont Jones2e47c7b2024-01-26 18:23:47 +0000195required_aconfig_flags_files:=
Joe Onorato63a84552023-06-29 14:34:18 -0700196$(foreach partition, $(_FLAG_PARTITIONS), \
197 $(eval build_flag_summaries.$(partition):=) \
Ted Bauer98bedd82023-09-14 15:28:12 +0000198 $(eval aconfig_flag_summaries_protobuf.$(partition):=) \
Dennis Shenc39f3782024-01-12 16:38:04 +0000199 $(eval aconfig_storage_package_map.$(partition):=) \
200 $(eval aconfig_storage_flag_map.$(partition):=) \
201 $(eval aconfig_storage_flag_val.$(partition):=) \
Joe Onorato63a84552023-06-29 14:34:18 -0700202)
203