blob: 821607e95076df069db74eff14ff2b1d2e69eb8f [file] [log] [blame]
Anton Hanssonbb76ce82019-02-26 12:34:03 +00001#
2# Copyright (C) 2019 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# ###############################################################
18# This file includes BoardConfig.mk for the device being built,
Joel Galenson154ac1d2020-07-30 14:23:31 -070019# and checks the variable defined therein.
Anton Hanssonbb76ce82019-02-26 12:34:03 +000020# ###############################################################
21
Anton Hanssonb7b3d8e2020-12-14 15:17:13 +000022_board_strip_readonly_list :=
23_board_strip_readonly_list += BOARD_BOOTLOADER_IN_UPDATE_PACKAGE
24_board_strip_readonly_list += BOARD_EGL_CFG
25_board_strip_readonly_list += BOARD_HAVE_BLUETOOTH
26_board_strip_readonly_list += BOARD_INSTALLER_CMDLINE
27_board_strip_readonly_list += BOARD_KERNEL_CMDLINE
Yi-Yo Chiang1519d432021-04-04 16:03:10 +080028_board_strip_readonly_list += BOARD_BOOT_HEADER_VERSION
Devin Moore50509012021-01-13 10:45:04 -080029_board_strip_readonly_list += BOARD_BOOTCONFIG
Anton Hanssonb7b3d8e2020-12-14 15:17:13 +000030_board_strip_readonly_list += BOARD_KERNEL_BASE
31_board_strip_readonly_list += BOARD_USES_GENERIC_AUDIO
32_board_strip_readonly_list += BOARD_USES_RECOVERY_AS_BOOT
33_board_strip_readonly_list += BOARD_VENDOR_USE_AKMD
34_board_strip_readonly_list += BOARD_WPA_SUPPLICANT_DRIVER
35_board_strip_readonly_list += BOARD_WLAN_DEVICE
36_board_strip_readonly_list += TARGET_BOARD_PLATFORM
37_board_strip_readonly_list += TARGET_BOARD_PLATFORM_GPU
38_board_strip_readonly_list += TARGET_BOOTLOADER_BOARD_NAME
39_board_strip_readonly_list += TARGET_FS_CONFIG_GEN
40_board_strip_readonly_list += TARGET_NO_BOOTLOADER
41_board_strip_readonly_list += TARGET_NO_KERNEL
42_board_strip_readonly_list += TARGET_NO_RECOVERY
43_board_strip_readonly_list += TARGET_NO_RADIOIMAGE
44_board_strip_readonly_list += TARGET_HARDWARE_3D
45_board_strip_readonly_list += WITH_DEXPREOPT
46
47# Arch variables
48_board_strip_readonly_list += TARGET_ARCH
49_board_strip_readonly_list += TARGET_ARCH_VARIANT
50_board_strip_readonly_list += TARGET_CPU_ABI
51_board_strip_readonly_list += TARGET_CPU_ABI2
52_board_strip_readonly_list += TARGET_CPU_VARIANT
53_board_strip_readonly_list += TARGET_CPU_VARIANT_RUNTIME
54_board_strip_readonly_list += TARGET_2ND_ARCH
55_board_strip_readonly_list += TARGET_2ND_ARCH_VARIANT
56_board_strip_readonly_list += TARGET_2ND_CPU_ABI
57_board_strip_readonly_list += TARGET_2ND_CPU_ABI2
58_board_strip_readonly_list += TARGET_2ND_CPU_VARIANT
59_board_strip_readonly_list += TARGET_2ND_CPU_VARIANT_RUNTIME
Anton Hansson5e05b8e2020-11-27 10:35:17 +000060# TARGET_ARCH_SUITE is an alternative arch configuration to TARGET_ARCH (and related variables),
61# that can be used for soong-only builds to build for several architectures at once.
62# Allowed values currently are "ndk" and "mainline_sdk".
63_board_strip_readonly_list += TARGET_ARCH_SUITE
Anton Hanssond488d2d2019-02-26 15:49:25 +000064
65# File system variables
Anton Hanssonb7b3d8e2020-12-14 15:17:13 +000066_board_strip_readonly_list += BOARD_FLASH_BLOCK_SIZE
67_board_strip_readonly_list += BOARD_BOOTIMAGE_PARTITION_SIZE
68_board_strip_readonly_list += BOARD_RECOVERYIMAGE_PARTITION_SIZE
69_board_strip_readonly_list += BOARD_SYSTEMIMAGE_PARTITION_SIZE
70_board_strip_readonly_list += BOARD_SYSTEMIMAGE_FILE_SYSTEM_TYPE
71_board_strip_readonly_list += BOARD_USERDATAIMAGE_FILE_SYSTEM_TYPE
72_board_strip_readonly_list += BOARD_USERDATAIMAGE_PARTITION_SIZE
73_board_strip_readonly_list += BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE
74_board_strip_readonly_list += BOARD_CACHEIMAGE_PARTITION_SIZE
75_board_strip_readonly_list += BOARD_VENDORIMAGE_PARTITION_SIZE
76_board_strip_readonly_list += BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE
77_board_strip_readonly_list += BOARD_PRODUCTIMAGE_PARTITION_SIZE
78_board_strip_readonly_list += BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE
79_board_strip_readonly_list += BOARD_SYSTEM_EXTIMAGE_PARTITION_SIZE
80_board_strip_readonly_list += BOARD_SYSTEM_EXTIMAGE_FILE_SYSTEM_TYPE
81_board_strip_readonly_list += BOARD_ODMIMAGE_PARTITION_SIZE
82_board_strip_readonly_list += BOARD_ODMIMAGE_FILE_SYSTEM_TYPE
83_board_strip_readonly_list += BOARD_VENDOR_DLKMIMAGE_PARTITION_SIZE
84_board_strip_readonly_list += BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE
85_board_strip_readonly_list += BOARD_ODM_DLKMIMAGE_PARTITION_SIZE
86_board_strip_readonly_list += BOARD_ODM_DLKMIMAGE_FILE_SYSTEM_TYPE
Pierre-Clément Tosi592a3ca2021-10-04 11:34:11 +020087_board_strip_readonly_list += BOARD_PVMFWIMAGE_PARTITION_SIZE
Anton Hanssond488d2d2019-02-26 15:49:25 +000088
89# Logical partitions related variables.
Anton Hanssonb7b3d8e2020-12-14 15:17:13 +000090_board_strip_readonly_list += BOARD_SYSTEMIMAGE_PARTITION_RESERVED_SIZE
91_board_strip_readonly_list += BOARD_VENDORIMAGE_PARTITION_RESERVED_SIZE
92_board_strip_readonly_list += BOARD_ODMIMAGE_PARTITION_RESERVED_SIZE
93_board_strip_readonly_list += BOARD_VENDOR_DLKMIMAGE_PARTITION_RESERVED_SIZE
94_board_strip_readonly_list += BOARD_ODM_DLKMIMAGE_PARTITION_RESERVED_SIZE
95_board_strip_readonly_list += BOARD_PRODUCTIMAGE_PARTITION_RESERVED_SIZE
96_board_strip_readonly_list += BOARD_SYSTEM_EXTIMAGE_PARTITION_RESERVED_SIZE
97_board_strip_readonly_list += BOARD_SUPER_PARTITION_SIZE
98_board_strip_readonly_list += BOARD_SUPER_PARTITION_GROUPS
Anton Hanssond488d2d2019-02-26 15:49:25 +000099
Yifan Hong6040cad2020-08-05 14:30:32 -0700100# Kernel related variables
Anton Hanssonb7b3d8e2020-12-14 15:17:13 +0000101_board_strip_readonly_list += BOARD_KERNEL_BINARIES
102_board_strip_readonly_list += BOARD_KERNEL_MODULE_INTERFACE_VERSIONS
Yifan Hong6040cad2020-08-05 14:30:32 -0700103
Yifan Hongd381f732020-10-08 11:08:20 -0700104# Variables related to generic kernel image (GKI) and generic boot image
105# - BOARD_USES_GENERIC_KERNEL_IMAGE is the global variable that defines if the
106# board uses GKI and generic boot image.
107# Update mechanism of the boot image is not enforced by this variable.
Yifan Hong63c5ca12020-10-08 11:54:02 -0700108# - BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE controls whether the recovery image
109# contains a kernel or not.
Yifan Hong881df392020-10-09 14:29:39 -0700110# - BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT controls whether ramdisk
111# recovery resources are built to vendor_boot.
Yi-Yo Chiang12f92442021-04-04 16:12:25 +0800112# - BOARD_INCLUDE_RECOVERY_RAMDISK_IN_VENDOR_BOOT controls whether recovery
113# resources are built as a standalone recovery ramdisk in vendor_boot.
Yifan Hong82b113d2020-10-12 12:42:12 -0700114# - BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT controls whether GSI AVB keys are
115# built to vendor_boot.
Yifan Hong49968aa2020-11-09 11:52:52 -0800116# - BOARD_COPY_BOOT_IMAGE_TO_TARGET_FILES controls whether boot images in $OUT are added
117# to target files package directly.
Anton Hanssonb7b3d8e2020-12-14 15:17:13 +0000118_board_strip_readonly_list += BOARD_USES_GENERIC_KERNEL_IMAGE
119_board_strip_readonly_list += BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE
120_board_strip_readonly_list += BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT
Yi-Yo Chiang12f92442021-04-04 16:12:25 +0800121_board_strip_readonly_list += BOARD_INCLUDE_RECOVERY_RAMDISK_IN_VENDOR_BOOT
Anton Hanssonb7b3d8e2020-12-14 15:17:13 +0000122_board_strip_readonly_list += BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT
123_board_strip_readonly_list += BOARD_COPY_BOOT_IMAGE_TO_TARGET_FILES
Yifan Hongd381f732020-10-08 11:08:20 -0700124
Yo Chiangd21e7dc2020-12-10 18:42:47 +0800125# Defines the list of logical vendor ramdisk names to build or include in vendor_boot.
126_board_strip_readonly_list += BOARD_VENDOR_RAMDISK_FRAGMENTS
127
Cole Faust29bb6132021-11-29 17:26:03 -0800128# These are all variables used to build $(INSTALLED_MISC_INFO_TARGET)
129# in build/make/core/Makefile. Their values get used in command line
130# arguments, so they have to be stripped to make the ninja files stable.
131_board_strip_list :=
132_board_strip_list += BOARD_DTBOIMG_PARTITION_SIZE
133_board_strip_list += BOARD_AVB_DTBO_KEY_PATH
134_board_strip_list += BOARD_AVB_DTBO_ALGORITHM
135_board_strip_list += BOARD_AVB_DTBO_ROLLBACK_INDEX_LOCATION
136_board_strip_list += BOARD_AVB_PVMFW_KEY_PATH
137_board_strip_list += BOARD_AVB_PVMFW_ALGORITHM
138_board_strip_list += BOARD_AVB_PVMFW_ROLLBACK_INDEX_LOCATION
139_board_strip_list += BOARD_PARTIAL_OTA_UPDATE_PARTITIONS_LIST
140_board_strip_list += BOARD_BPT_DISK_SIZE
141_board_strip_list += BOARD_BPT_INPUT_FILES
142_board_strip_list += BOARD_BPT_MAKE_TABLE_ARGS
143_board_strip_list += BOARD_AVB_VBMETA_VENDOR_ROLLBACK_INDEX_LOCATION
144_board_strip_list += BOARD_AVB_VBMETA_VENDOR_ALGORITHM
145_board_strip_list += BOARD_AVB_VBMETA_VENDOR_KEY_PATH
146_board_strip_list += BOARD_AVB_VBMETA_VENDOR
147_board_strip_list += BOARD_AVB_VBMETA_SYSTEM_ROLLBACK_INDEX_LOCATION
148_board_strip_list += BOARD_AVB_VBMETA_SYSTEM_ALGORITHM
149_board_strip_list += BOARD_AVB_VBMETA_SYSTEM_KEY_PATH
150_board_strip_list += BOARD_AVB_VBMETA_SYSTEM
151_board_strip_list += BOARD_AVB_RECOVERY_KEY_PATH
152_board_strip_list += BOARD_AVB_RECOVERY_ALGORITHM
153_board_strip_list += BOARD_AVB_RECOVERY_ROLLBACK_INDEX_LOCATION
154_board_strip_list += BOARD_AVB_VENDOR_BOOT_KEY_PATH
155_board_strip_list += BOARD_AVB_VENDOR_BOOT_ALGORITHM
156_board_strip_list += BOARD_AVB_VENDOR_BOOT_ROLLBACK_INDEX_LOCATION
157_board_strip_list += BOARD_GKI_SIGNING_SIGNATURE_ARGS
158_board_strip_list += BOARD_GKI_SIGNING_ALGORITHM
159_board_strip_list += BOARD_GKI_SIGNING_KEY_PATH
160_board_strip_list += BOARD_MKBOOTIMG_ARGS
161_board_strip_list += BOARD_VENDOR_BOOTIMAGE_PARTITION_SIZE
162
163
Anton Hanssond488d2d2019-02-26 15:49:25 +0000164_build_broken_var_list := \
Anton Hanssond488d2d2019-02-26 15:49:25 +0000165 BUILD_BROKEN_DUP_RULES \
Yo Chiang64faf882020-07-15 18:35:12 +0800166 BUILD_BROKEN_DUP_SYSPROP \
Yo Chiang0b49c032020-03-17 17:49:49 +0800167 BUILD_BROKEN_ELF_PREBUILT_PRODUCT_COPY_FILES \
Inseob Kim9d281d92020-10-19 13:31:58 +0900168 BUILD_BROKEN_ENFORCE_SYSPROP_OWNER \
Yo Chiang64faf882020-07-15 18:35:12 +0800169 BUILD_BROKEN_MISSING_REQUIRED_MODULES \
Yifan Hong5e57a772020-01-09 16:15:11 -0800170 BUILD_BROKEN_OUTSIDE_INCLUDE_DIRS \
Logan Chien2a880752019-09-17 09:45:09 -0700171 BUILD_BROKEN_PREBUILT_ELF_FILES \
Inseob Kim5d60c8a2019-10-17 10:32:59 +0000172 BUILD_BROKEN_TREBLE_SYSPROP_NEVERALLOW \
Dan Willemsen0586c652019-04-09 09:56:48 -0700173 BUILD_BROKEN_USES_NETWORK \
Inseob Kim43f4ef02021-02-03 18:17:49 +0900174 BUILD_BROKEN_VENDOR_PROPERTY_NAMESPACE \
Yifan Hong5e57a772020-01-09 16:15:11 -0800175 BUILD_BROKEN_VINTF_PRODUCT_COPY_FILES \
Anton Hanssond488d2d2019-02-26 15:49:25 +0000176
Dan Willemsen695849e2019-04-17 12:25:09 -0700177_build_broken_var_list += \
178 $(foreach m,$(AVAILABLE_BUILD_MODULE_TYPES) \
179 $(DEFAULT_WARNING_BUILD_MODULE_TYPES) \
180 $(DEFAULT_ERROR_BUILD_MODULE_TYPES), \
181 BUILD_BROKEN_USES_$(m))
182
Anton Hanssond488d2d2019-02-26 15:49:25 +0000183_board_true_false_vars := $(_build_broken_var_list)
Dan Willemsen26076252020-01-02 20:08:10 -0800184_board_strip_readonly_list += $(_build_broken_var_list) \
185 BUILD_BROKEN_NINJA_USES_ENV_VARS
Anton Hanssond488d2d2019-02-26 15:49:25 +0000186
Anton Hansson74dc00b2019-02-27 14:38:27 +0000187# Conditional to building on linux, as dex2oat currently does not work on darwin.
188ifeq ($(HOST_OS),linux)
189 WITH_DEXPREOPT := true
190endif
191
Anton Hanssonb9544692019-02-26 13:37:28 +0000192# ###############################################################
193# Broken build defaults
194# ###############################################################
Dan Willemsen0586c652019-04-09 09:56:48 -0700195$(foreach v,$(_build_broken_var_list),$(eval $(v) :=))
Dan Willemsen26076252020-01-02 20:08:10 -0800196BUILD_BROKEN_NINJA_USES_ENV_VARS :=
Anton Hanssonb9544692019-02-26 13:37:28 +0000197
Anton Hanssonbb76ce82019-02-26 12:34:03 +0000198# Boards may be defined under $(SRC_TARGET_DIR)/board/$(TARGET_DEVICE)
199# or under vendor/*/$(TARGET_DEVICE). Search in both places, but
200# make sure only one exists.
201# Real boards should always be associated with an OEM vendor.
202ifdef TARGET_DEVICE_DIR
203 ifneq ($(origin TARGET_DEVICE_DIR),command line)
204 $(error TARGET_DEVICE_DIR may not be set manually)
205 endif
206 board_config_mk := $(TARGET_DEVICE_DIR)/BoardConfig.mk
207else
208 board_config_mk := \
209 $(strip $(sort $(wildcard \
210 $(SRC_TARGET_DIR)/board/$(TARGET_DEVICE)/BoardConfig.mk \
211 $(shell test -d device && find -L device -maxdepth 4 -path '*/$(TARGET_DEVICE)/BoardConfig.mk') \
212 $(shell test -d vendor && find -L vendor -maxdepth 4 -path '*/$(TARGET_DEVICE)/BoardConfig.mk') \
213 )))
214 ifeq ($(board_config_mk),)
215 $(error No config file found for TARGET_DEVICE $(TARGET_DEVICE))
216 endif
217 ifneq ($(words $(board_config_mk)),1)
218 $(error Multiple board config files for TARGET_DEVICE $(TARGET_DEVICE): $(board_config_mk))
219 endif
220 TARGET_DEVICE_DIR := $(patsubst %/,%,$(dir $(board_config_mk)))
221 .KATI_READONLY := TARGET_DEVICE_DIR
222endif
Anton Hansson41f9cc22020-11-27 11:00:38 +0000223
Cole Fauste5e7a2d2021-09-30 17:14:29 -0700224# TODO(colefaust) change this if to RBC_PRODUCT_CONFIG when
225# the board configuration is known to work on everything
226# the product config works on.
227ifndef RBC_BOARD_CONFIG
Anton Hanssonbb76ce82019-02-26 12:34:03 +0000228include $(board_config_mk)
Cole Fauste5e7a2d2021-09-30 17:14:29 -0700229else
Cole Faust985fa482021-10-07 17:14:23 -0700230 $(shell mkdir -p $(OUT_DIR)/rbc)
Cole Faustf1f49bb2021-12-01 13:49:12 -0800231 $(call dump-variables-rbc, $(OUT_DIR)/rbc/make_vars_pre_board_config.mk)
Cole Faust985fa482021-10-07 17:14:23 -0700232
233 $(shell $(OUT_DIR)/soong/mk2rbc \
234 --mode=write -r --outdir $(OUT_DIR)/rbc \
235 --boardlauncher=$(OUT_DIR)/rbc/boardlauncher.rbc \
236 --input_variables=$(OUT_DIR)/rbc/make_vars_pre_board_config.mk \
237 $(board_config_mk))
238 ifneq ($(.SHELLSTATUS),0)
239 $(error board configuration converter failed: $(.SHELLSTATUS))
Cole Fauste5e7a2d2021-09-30 17:14:29 -0700240 endif
241
Sasha Smundak7dc8f482021-11-17 17:19:12 -0800242 $(shell build/soong/scripts/update_out $(OUT_DIR)/rbc/rbc_board_config_results.mk \
243 $(OUT_DIR)/soong/rbcrun RBC_OUT="make,global" $(OUT_DIR)/rbc/boardlauncher.rbc)
Cole Faust985fa482021-10-07 17:14:23 -0700244 ifneq ($(.SHELLSTATUS),0)
245 $(error board configuration runner failed: $(.SHELLSTATUS))
246 endif
247
248 include $(OUT_DIR)/rbc/rbc_board_config_results.mk
Cole Fauste5e7a2d2021-09-30 17:14:29 -0700249endif
Anton Hansson41f9cc22020-11-27 11:00:38 +0000250
251ifneq (,$(and $(TARGET_ARCH),$(TARGET_ARCH_SUITE)))
252 $(error $(board_config_mk) erroneously sets both TARGET_ARCH and TARGET_ARCH_SUITE)
Anton Hanssonbb76ce82019-02-26 12:34:03 +0000253endif
Anton Hansson41f9cc22020-11-27 11:00:38 +0000254ifeq ($(TARGET_ARCH)$(TARGET_ARCH_SUITE),)
255 $(error Target architectures not defined by board config: $(board_config_mk))
256endif
257ifeq ($(TARGET_CPU_ABI)$(TARGET_ARCH_SUITE),)
258 $(error TARGET_CPU_ABI not defined by board config: $(board_config_mk))
259endif
260
Anton Hanssonbb76ce82019-02-26 12:34:03 +0000261ifneq ($(MALLOC_IMPL),)
262 $(warning *** Unsupported option MALLOC_IMPL defined by board config: $(board_config_mk).)
263 $(error Use `MALLOC_SVELTE := true` to configure jemalloc for low-memory)
264endif
265board_config_mk :=
266
Anton Hanssond488d2d2019-02-26 15:49:25 +0000267# Clean up and verify BoardConfig variables
268$(foreach var,$(_board_strip_readonly_list),$(eval $(var) := $$(strip $$($(var)))))
Cole Faust29bb6132021-11-29 17:26:03 -0800269$(foreach var,$(_board_strip_list),$(eval $(var) := $$(strip $$($(var)))))
Anton Hanssond488d2d2019-02-26 15:49:25 +0000270$(foreach var,$(_board_true_false_vars), \
271 $(if $(filter-out true false,$($(var))), \
272 $(error Valid values of $(var) are "true", "false", and "". Not "$($(var))")))
Anton Hanssonb9544692019-02-26 13:37:28 +0000273
274# Default *_CPU_VARIANT_RUNTIME to CPU_VARIANT if unspecified.
275TARGET_CPU_VARIANT_RUNTIME := $(or $(TARGET_CPU_VARIANT_RUNTIME),$(TARGET_CPU_VARIANT))
276TARGET_2ND_CPU_VARIANT_RUNTIME := $(or $(TARGET_2ND_CPU_VARIANT_RUNTIME),$(TARGET_2ND_CPU_VARIANT))
277
Anton Hansson41f9cc22020-11-27 11:00:38 +0000278ifdef TARGET_ARCH
279 # The combo makefiles check and set defaults for various CPU configuration
280 combo_target := TARGET_
281 combo_2nd_arch_prefix :=
282 include $(BUILD_SYSTEM)/combo/select.mk
283endif
Anton Hansson19279852019-02-28 17:15:57 +0000284
285ifdef TARGET_2ND_ARCH
286 combo_2nd_arch_prefix := $(TARGET_2ND_ARCH_VAR_PREFIX)
287 include $(BUILD_SYSTEM)/combo/select.mk
288endif
289
Anton Hanssond488d2d2019-02-26 15:49:25 +0000290.KATI_READONLY := $(_board_strip_readonly_list)
291
292INTERNAL_KERNEL_CMDLINE := $(BOARD_KERNEL_CMDLINE)
Devin Moored6eab6f2021-03-10 16:28:49 -0800293ifneq (,$(BOARD_BOOTCONFIG))
294 INTERNAL_KERNEL_CMDLINE += bootconfig
295 INTERNAL_BOOTCONFIG := $(BOARD_BOOTCONFIG)
296endif
Anton Hansson41f9cc22020-11-27 11:00:38 +0000297
Anton Hanssonb9544692019-02-26 13:37:28 +0000298ifneq ($(filter %64,$(TARGET_ARCH)),)
299 TARGET_IS_64_BIT := true
300endif
301
302ifeq (,$(filter true,$(TARGET_SUPPORTS_32_BIT_APPS) $(TARGET_SUPPORTS_64_BIT_APPS)))
303 TARGET_SUPPORTS_32_BIT_APPS := true
304endif
305
Joel Galenson154ac1d2020-07-30 14:23:31 -0700306# Quick check to warn about likely cryptic errors later in the build.
Anton Hanssonb9544692019-02-26 13:37:28 +0000307ifeq ($(TARGET_IS_64_BIT),true)
308 ifeq (,$(filter true false,$(TARGET_SUPPORTS_64_BIT_APPS)))
Anton Hansson6d25fc62019-05-10 15:29:28 +0100309 $(error Building a 32-bit-app-only product on a 64-bit device. \
Anton Hanssonb9544692019-02-26 13:37:28 +0000310 If this is intentional, set TARGET_SUPPORTS_64_BIT_APPS := false)
311 endif
312endif
313
314# "ro.product.cpu.abilist32" and "ro.product.cpu.abilist64" are
315# comma separated lists of the 32 and 64 bit ABIs (in order of
316# preference) that the target supports. If TARGET_CPU_ABI_LIST_{32,64}_BIT
317# are defined by the board config, we use them. Else, we construct
318# these lists based on whether TARGET_IS_64_BIT is set.
319#
320# Note that this assumes that the 2ND_CPU_ABI for a 64 bit target
321# is always 32 bits. If this isn't the case, these variables should
322# be overriden in the board configuration.
Evgeny Eltsin28fbe7f2019-07-29 16:23:19 +0200323#
324# Similarly, TARGET_NATIVE_BRIDGE_2ND_ABI for a 64 bit target is always
325# 32 bits. Note that all CPU_ABIs are preferred over all NATIVE_BRIDGE_ABIs.
326_target_native_bridge_abi_list_32_bit :=
327_target_native_bridge_abi_list_64_bit :=
328
Anton Hanssonb9544692019-02-26 13:37:28 +0000329ifeq (,$(TARGET_CPU_ABI_LIST_64_BIT))
330 ifeq (true|true,$(TARGET_IS_64_BIT)|$(TARGET_SUPPORTS_64_BIT_APPS))
331 TARGET_CPU_ABI_LIST_64_BIT := $(TARGET_CPU_ABI) $(TARGET_CPU_ABI2)
Evgeny Eltsin28fbe7f2019-07-29 16:23:19 +0200332 _target_native_bridge_abi_list_64_bit := $(TARGET_NATIVE_BRIDGE_ABI)
Anton Hanssonb9544692019-02-26 13:37:28 +0000333 endif
334endif
335
Peter Collingbourne6aea25d2019-05-16 14:09:35 -0700336# "arm64-v8a-hwasan", the ABI for libraries compiled with HWASAN, is supported
337# in all builds with SANITIZE_TARGET=hwaddress.
338ifneq ($(filter hwaddress,$(SANITIZE_TARGET)),)
339 ifneq ($(filter arm64-v8a,$(TARGET_CPU_ABI_LIST_64_BIT)),)
340 TARGET_CPU_ABI_LIST_64_BIT := arm64-v8a-hwasan $(TARGET_CPU_ABI_LIST_64_BIT)
341 endif
342endif
343
Anton Hanssonb9544692019-02-26 13:37:28 +0000344ifeq (,$(TARGET_CPU_ABI_LIST_32_BIT))
345 ifneq (true,$(TARGET_IS_64_BIT))
346 TARGET_CPU_ABI_LIST_32_BIT := $(TARGET_CPU_ABI) $(TARGET_CPU_ABI2)
Evgeny Eltsin28fbe7f2019-07-29 16:23:19 +0200347 _target_native_bridge_abi_list_32_bit := $(TARGET_NATIVE_BRIDGE_ABI)
Anton Hanssonb9544692019-02-26 13:37:28 +0000348 else
349 ifeq (true,$(TARGET_SUPPORTS_32_BIT_APPS))
350 # For a 64 bit target, assume that the 2ND_CPU_ABI
351 # is a 32 bit ABI.
352 TARGET_CPU_ABI_LIST_32_BIT := $(TARGET_2ND_CPU_ABI) $(TARGET_2ND_CPU_ABI2)
Evgeny Eltsin28fbe7f2019-07-29 16:23:19 +0200353 _target_native_bridge_abi_list_32_bit := $(TARGET_NATIVE_BRIDGE_2ND_ABI)
Anton Hanssonb9544692019-02-26 13:37:28 +0000354 endif
355 endif
356endif
357
358# "ro.product.cpu.abilist" is a comma separated list of ABIs (in order
359# of preference) that the target supports. If a TARGET_CPU_ABI_LIST
360# is specified by the board configuration, we use that. If not, we
361# build a list out of the TARGET_CPU_ABIs specified by the config.
Evgeny Eltsin28fbe7f2019-07-29 16:23:19 +0200362# Add NATIVE_BRIDGE_ABIs at the end to keep order of preference.
Anton Hanssonb9544692019-02-26 13:37:28 +0000363ifeq (,$(TARGET_CPU_ABI_LIST))
Elliott Hughes9b824d52020-04-17 15:46:55 -0700364 TARGET_CPU_ABI_LIST := $(TARGET_CPU_ABI_LIST_64_BIT) $(TARGET_CPU_ABI_LIST_32_BIT) \
365 $(_target_native_bridge_abi_list_64_bit) $(_target_native_bridge_abi_list_32_bit)
Anton Hanssonb9544692019-02-26 13:37:28 +0000366endif
367
Evgeny Eltsin28fbe7f2019-07-29 16:23:19 +0200368# Add NATIVE_BRIDGE_ABIs at the end of 32 and 64 bit CPU_ABIs to keep order of preference.
369TARGET_CPU_ABI_LIST_32_BIT += $(_target_native_bridge_abi_list_32_bit)
370TARGET_CPU_ABI_LIST_64_BIT += $(_target_native_bridge_abi_list_64_bit)
371
Anton Hanssonb9544692019-02-26 13:37:28 +0000372# Strip whitespace from the ABI list string.
373TARGET_CPU_ABI_LIST := $(subst $(space),$(comma),$(strip $(TARGET_CPU_ABI_LIST)))
374TARGET_CPU_ABI_LIST_32_BIT := $(subst $(space),$(comma),$(strip $(TARGET_CPU_ABI_LIST_32_BIT)))
375TARGET_CPU_ABI_LIST_64_BIT := $(subst $(space),$(comma),$(strip $(TARGET_CPU_ABI_LIST_64_BIT)))
376
Jeongik Chabb688a92019-07-12 12:51:37 +0900377# Check if config about image building is valid or not.
378define check_image_config
379 $(eval _uc_name := $(call to-upper,$(1))) \
380 $(eval _lc_name := $(call to-lower,$(1))) \
381 $(if $(filter $(_lc_name),$(TARGET_COPY_OUT_$(_uc_name))), \
382 $(if $(BOARD_USES_$(_uc_name)IMAGE),, \
383 $(error If TARGET_COPY_OUT_$(_uc_name) is '$(_lc_name)', either BOARD_PREBUILT_$(_uc_name)IMAGE or BOARD_$(_uc_name)IMAGE_FILE_SYSTEM_TYPE must be set)), \
384 $(if $(BOARD_USES_$(_uc_name)IMAGE), \
385 $(error TARGET_COPY_OUT_$(_uc_name) must be set to '$(_lc_name)' to use a $(_lc_name) image))) \
386 $(eval _uc_name :=) \
387 $(eval _lc_name :=)
388endef
389
Anton Hanssonbb76ce82019-02-26 12:34:03 +0000390###########################################
391# Now we can substitute with the real value of TARGET_COPY_OUT_RAMDISK
392ifeq ($(BOARD_BUILD_SYSTEM_ROOT_IMAGE),true)
393TARGET_COPY_OUT_RAMDISK := $(TARGET_COPY_OUT_ROOT)
394endif
395
396###########################################
397# Configure whether we're building the system image
398BUILDING_SYSTEM_IMAGE := true
399ifeq ($(PRODUCT_BUILD_SYSTEM_IMAGE),)
400 ifndef PRODUCT_USE_DYNAMIC_PARTITION_SIZE
401 ifndef BOARD_SYSTEMIMAGE_PARTITION_SIZE
402 BUILDING_SYSTEM_IMAGE :=
403 endif
404 endif
405else ifeq ($(PRODUCT_BUILD_SYSTEM_IMAGE),false)
406 BUILDING_SYSTEM_IMAGE :=
407endif
408.KATI_READONLY := BUILDING_SYSTEM_IMAGE
409
410# Are we building a system_other image
411BUILDING_SYSTEM_OTHER_IMAGE :=
412ifeq ($(PRODUCT_BUILD_SYSTEM_OTHER_IMAGE),)
413 ifdef BUILDING_SYSTEM_IMAGE
414 ifeq ($(BOARD_USES_SYSTEM_OTHER_ODEX),true)
415 BUILDING_SYSTEM_OTHER_IMAGE := true
416 endif
417 endif
418else ifeq ($(PRODUCT_BUILD_SYSTEM_OTHER_IMAGE),true)
419 BUILDING_SYSTEM_OTHER_IMAGE := true
420 ifndef BUILDING_SYSTEM_IMAGE
421 $(error PRODUCT_BUILD_SYSTEM_OTHER_IMAGE = true requires building the system image)
422 endif
423endif
424.KATI_READONLY := BUILDING_SYSTEM_OTHER_IMAGE
425
426# Are we building a cache image
427BUILDING_CACHE_IMAGE :=
428ifeq ($(PRODUCT_BUILD_CACHE_IMAGE),)
429 ifdef BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE
430 BUILDING_CACHE_IMAGE := true
431 endif
432else ifeq ($(PRODUCT_BUILD_CACHE_IMAGE),true)
433 BUILDING_CACHE_IMAGE := true
434 ifndef BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE
435 $(error PRODUCT_BUILD_CACHE_IMAGE set to true, but BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE not defined)
436 endif
437endif
438.KATI_READONLY := BUILDING_CACHE_IMAGE
439
Chris Grossa784ef12019-04-22 11:09:57 -0700440# Are we building a boot image
441BUILDING_BOOT_IMAGE :=
Daniel Norman42879ff2020-10-06 11:09:56 -0700442ifeq ($(PRODUCT_BUILD_BOOT_IMAGE),)
443 ifeq ($(BOARD_USES_RECOVERY_AS_BOOT),true)
444 BUILDING_BOOT_IMAGE :=
Bowgo Tsaicf9ead82021-05-20 00:14:42 +0800445 else ifdef BOARD_PREBUILT_BOOTIMAGE
446 BUILDING_BOOT_IMAGE :=
Daniel Norman42879ff2020-10-06 11:09:56 -0700447 else ifdef BOARD_BOOTIMAGE_PARTITION_SIZE
Chris Grossa784ef12019-04-22 11:09:57 -0700448 BUILDING_BOOT_IMAGE := true
Yifan Hongebe65f82020-10-15 14:48:07 -0700449 else ifneq (,$(foreach kernel,$(BOARD_KERNEL_BINARIES),$(BOARD_$(call to-upper,$(kernel))_BOOTIMAGE_PARTITION_SIZE)))
450 BUILDING_BOOT_IMAGE := true
Chris Grossa784ef12019-04-22 11:09:57 -0700451 endif
452else ifeq ($(PRODUCT_BUILD_BOOT_IMAGE),true)
Daniel Norman42879ff2020-10-06 11:09:56 -0700453 ifeq ($(BOARD_USES_RECOVERY_AS_BOOT),true)
454 $(warning *** PRODUCT_BUILD_BOOT_IMAGE is true, but so is BOARD_USES_RECOVERY_AS_BOOT.)
455 $(warning *** Skipping building boot image.)
456 BUILDING_BOOT_IMAGE :=
457 else
458 BUILDING_BOOT_IMAGE := true
459 endif
Chris Grossa784ef12019-04-22 11:09:57 -0700460endif
461.KATI_READONLY := BUILDING_BOOT_IMAGE
462
463# Are we building a recovery image
464BUILDING_RECOVERY_IMAGE :=
Daniel Norman42879ff2020-10-06 11:09:56 -0700465ifeq ($(PRODUCT_BUILD_RECOVERY_IMAGE),)
466 ifeq ($(BOARD_USES_RECOVERY_AS_BOOT),true)
467 BUILDING_RECOVERY_IMAGE := true
Yifan Hong881df392020-10-09 14:29:39 -0700468 else ifeq ($(BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT),true)
469 # Set to true to build recovery resources for vendor_boot
470 BUILDING_RECOVERY_IMAGE := true
Daniel Norman42879ff2020-10-06 11:09:56 -0700471 else ifdef BOARD_RECOVERYIMAGE_PARTITION_SIZE
Chris Grossa784ef12019-04-22 11:09:57 -0700472 ifeq (,$(filter true, $(TARGET_NO_KERNEL) $(TARGET_NO_RECOVERY)))
473 BUILDING_RECOVERY_IMAGE := true
474 endif
475 endif
476else ifeq ($(PRODUCT_BUILD_RECOVERY_IMAGE),true)
477 BUILDING_RECOVERY_IMAGE := true
478endif
479.KATI_READONLY := BUILDING_RECOVERY_IMAGE
Anton Hanssonbb76ce82019-02-26 12:34:03 +0000480
Steve Mucklee1b10862019-07-10 10:49:37 -0700481# Are we building a vendor boot image
482BUILDING_VENDOR_BOOT_IMAGE :=
483ifdef BOARD_BOOT_HEADER_VERSION
484 ifneq ($(call math_gt_or_eq,$(BOARD_BOOT_HEADER_VERSION),3),)
Daniel Normanad6293c2020-10-16 15:10:21 -0700485 ifeq ($(PRODUCT_BUILD_VENDOR_BOOT_IMAGE),)
Daniel Norman42879ff2020-10-06 11:09:56 -0700486 BUILDING_VENDOR_BOOT_IMAGE := true
487 else ifeq ($(PRODUCT_BUILD_VENDOR_BOOT_IMAGE),true)
Steve Muckle3363a0b2020-02-12 13:38:28 -0800488 BUILDING_VENDOR_BOOT_IMAGE := true
489 endif
Steve Mucklee1b10862019-07-10 10:49:37 -0700490 endif
491endif
492.KATI_READONLY := BUILDING_VENDOR_BOOT_IMAGE
493
Anton Hanssonbb76ce82019-02-26 12:34:03 +0000494# Are we building a ramdisk image
495BUILDING_RAMDISK_IMAGE := true
496ifeq ($(PRODUCT_BUILD_RAMDISK_IMAGE),)
497 # TODO: Be smarter about this. This probably only needs to happen when one of the follow is true:
498 # BUILDING_BOOT_IMAGE
499 # BUILDING_RECOVERY_IMAGE
500else ifeq ($(PRODUCT_BUILD_RAMDISK_IMAGE),false)
501 BUILDING_RAMDISK_IMAGE :=
502endif
503.KATI_READONLY := BUILDING_RAMDISK_IMAGE
504
Yi-Yo Chiang4d7c6132021-09-29 19:41:11 +0800505# Are we building a debug vendor_boot image
506BUILDING_DEBUG_VENDOR_BOOT_IMAGE :=
507# Can't build vendor_boot-debug.img if BOARD_BUILD_SYSTEM_ROOT_IMAGE is true,
508# because building debug vendor_boot image requires a ramdisk.
509ifeq ($(BOARD_BUILD_SYSTEM_ROOT_IMAGE),true)
510 ifeq ($(PRODUCT_BUILD_DEBUG_VENDOR_BOOT_IMAGE),true)
511 $(warning PRODUCT_BUILD_DEBUG_VENDOR_BOOT_IMAGE is true, but so is BOARD_BUILD_SYSTEM_ROOT_IMAGE. \
512 Skip building the debug vendor_boot image.)
513 endif
514# Can't build vendor_boot-debug.img if we're not building a ramdisk.
515else ifndef BUILDING_RAMDISK_IMAGE
516 ifeq ($(PRODUCT_BUILD_DEBUG_VENDOR_BOOT_IMAGE),true)
517 $(warning PRODUCT_BUILD_DEBUG_VENDOR_BOOT_IMAGE is true, but we're not building a ramdisk image. \
518 Skip building the debug vendor_boot image.)
519 endif
520# Can't build vendor_boot-debug.img if we're not building a vendor_boot.img.
521else ifndef BUILDING_VENDOR_BOOT_IMAGE
522 ifeq ($(PRODUCT_BUILD_DEBUG_VENDOR_BOOT_IMAGE),true)
523 $(warning PRODUCT_BUILD_DEBUG_VENDOR_BOOT_IMAGE is true, but we're not building a vendor_boot image. \
524 Skip building the debug vendor_boot image.)
525 endif
526else
527 ifeq ($(PRODUCT_BUILD_DEBUG_VENDOR_BOOT_IMAGE),)
528 BUILDING_DEBUG_VENDOR_BOOT_IMAGE := true
529 else ifeq ($(PRODUCT_BUILD_DEBUG_VENDOR_BOOT_IMAGE),true)
530 BUILDING_DEBUG_VENDOR_BOOT_IMAGE := true
531 endif
532endif
533.KATI_READONLY := BUILDING_DEBUG_VENDOR_BOOT_IMAGE
534
535_has_boot_img_artifact :=
536ifneq ($(strip $(TARGET_NO_KERNEL)),true)
537 ifdef BUILDING_BOOT_IMAGE
538 _has_boot_img_artifact := true
539 endif
540 # BUILDING_RECOVERY_IMAGE && BOARD_USES_RECOVERY_AS_BOOT implies that
541 # recovery is being built with the file name *boot.img*, which still counts
542 # as "building boot.img".
543 ifdef BUILDING_RECOVERY_IMAGE
544 ifeq ($(BOARD_USES_RECOVERY_AS_BOOT),true)
545 _has_boot_img_artifact := true
546 endif
547 endif
548endif
549
550# Are we building a debug boot image
551BUILDING_DEBUG_BOOT_IMAGE :=
552# Can't build boot-debug.img if BOARD_BUILD_SYSTEM_ROOT_IMAGE is true,
553# because building debug boot image requires a ramdisk.
554ifeq ($(BOARD_BUILD_SYSTEM_ROOT_IMAGE),true)
555 ifeq ($(PRODUCT_BUILD_DEBUG_BOOT_IMAGE),true)
556 $(warning PRODUCT_BUILD_DEBUG_BOOT_IMAGE is true, but so is BOARD_BUILD_SYSTEM_ROOT_IMAGE. \
557 Skip building the debug boot image.)
558 endif
559# Can't build boot-debug.img if we're not building a ramdisk.
560else ifndef BUILDING_RAMDISK_IMAGE
561 ifeq ($(PRODUCT_BUILD_DEBUG_BOOT_IMAGE),true)
562 $(warning PRODUCT_BUILD_DEBUG_BOOT_IMAGE is true, but we're not building a ramdisk image. \
563 Skip building the debug boot image.)
564 endif
565# Can't build boot-debug.img if we're not building a boot.img.
566else ifndef _has_boot_img_artifact
567 ifeq ($(PRODUCT_BUILD_DEBUG_BOOT_IMAGE),true)
568 $(warning PRODUCT_BUILD_DEBUG_BOOT_IMAGE is true, but we're not building a boot image. \
569 Skip building the debug boot image.)
570 endif
571else
572 ifeq ($(PRODUCT_BUILD_DEBUG_BOOT_IMAGE),)
573 BUILDING_DEBUG_BOOT_IMAGE := true
574 # Don't build boot-debug.img if we're already building vendor_boot-debug.img.
575 ifdef BUILDING_DEBUG_VENDOR_BOOT_IMAGE
576 BUILDING_DEBUG_BOOT_IMAGE :=
577 endif
578 else ifeq ($(PRODUCT_BUILD_DEBUG_BOOT_IMAGE),true)
579 BUILDING_DEBUG_BOOT_IMAGE := true
580 endif
581endif
582.KATI_READONLY := BUILDING_DEBUG_BOOT_IMAGE
583_has_boot_img_artifact :=
584
Anton Hanssonbb76ce82019-02-26 12:34:03 +0000585# Are we building a userdata image
586BUILDING_USERDATA_IMAGE :=
587ifeq ($(PRODUCT_BUILD_USERDATA_IMAGE),)
588 ifdef BOARD_USERDATAIMAGE_PARTITION_SIZE
589 BUILDING_USERDATA_IMAGE := true
590 endif
591else ifeq ($(PRODUCT_BUILD_USERDATA_IMAGE),true)
592 BUILDING_USERDATA_IMAGE := true
593endif
594.KATI_READONLY := BUILDING_USERDATA_IMAGE
595
Paul Trautrim4e143232019-08-13 16:30:57 +0900596# Are we building a vbmeta image
597BUILDING_VBMETA_IMAGE := true
598ifeq ($(PRODUCT_BUILD_VBMETA_IMAGE),false)
599 BUILDING_VBMETA_IMAGE :=
600endif
601.KATI_READONLY := BUILDING_VBMETA_IMAGE
602
Yo Chiange86bab42021-03-25 10:12:28 +0000603# Are we building a super_empty image
604BUILDING_SUPER_EMPTY_IMAGE :=
605ifeq ($(PRODUCT_BUILD_SUPER_EMPTY_IMAGE),)
606 ifeq (true,$(PRODUCT_USE_DYNAMIC_PARTITIONS))
607 ifneq ($(BOARD_SUPER_PARTITION_SIZE),)
608 BUILDING_SUPER_EMPTY_IMAGE := true
609 endif
610 endif
611else ifeq ($(PRODUCT_BUILD_SUPER_EMPTY_IMAGE),true)
612 ifneq (true,$(PRODUCT_USE_DYNAMIC_PARTITIONS))
613 $(error PRODUCT_BUILD_SUPER_EMPTY_IMAGE set to true, but PRODUCT_USE_DYNAMIC_PARTITIONS is not true)
614 endif
615 ifeq ($(BOARD_SUPER_PARTITION_SIZE),)
616 $(error PRODUCT_BUILD_SUPER_EMPTY_IMAGE set to true, but BOARD_SUPER_PARTITION_SIZE is not defined)
617 endif
618 BUILDING_SUPER_EMPTY_IMAGE := true
619endif
620.KATI_READONLY := BUILDING_SUPER_EMPTY_IMAGE
621
Anton Hanssonbb76ce82019-02-26 12:34:03 +0000622###########################################
623# Now we can substitute with the real value of TARGET_COPY_OUT_VENDOR
624ifeq ($(TARGET_COPY_OUT_VENDOR),$(_vendor_path_placeholder))
625 TARGET_COPY_OUT_VENDOR := system/vendor
626else ifeq ($(filter vendor system/vendor,$(TARGET_COPY_OUT_VENDOR)),)
627 $(error TARGET_COPY_OUT_VENDOR must be either 'vendor' or 'system/vendor', seeing '$(TARGET_COPY_OUT_VENDOR)'.)
628endif
629PRODUCT_COPY_FILES := $(subst $(_vendor_path_placeholder),$(TARGET_COPY_OUT_VENDOR),$(PRODUCT_COPY_FILES))
630
631BOARD_USES_VENDORIMAGE :=
632ifdef BOARD_PREBUILT_VENDORIMAGE
633 BOARD_USES_VENDORIMAGE := true
634endif
635ifdef BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE
636 BOARD_USES_VENDORIMAGE := true
637endif
Jeongik Chabb688a92019-07-12 12:51:37 +0900638# TODO(b/137169253): For now, some AOSP targets build with prebuilt vendor image.
639# But target's BOARD_PREBUILT_VENDORIMAGE is not filled.
Anton Hanssonbb76ce82019-02-26 12:34:03 +0000640ifeq ($(TARGET_COPY_OUT_VENDOR),vendor)
641 BOARD_USES_VENDORIMAGE := true
642else ifdef BOARD_USES_VENDORIMAGE
643 $(error TARGET_COPY_OUT_VENDOR must be set to 'vendor' to use a vendor image)
644endif
645.KATI_READONLY := BOARD_USES_VENDORIMAGE
646
647BUILDING_VENDOR_IMAGE :=
648ifeq ($(PRODUCT_BUILD_VENDOR_IMAGE),)
649 ifdef BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE
650 BUILDING_VENDOR_IMAGE := true
651 endif
652else ifeq ($(PRODUCT_BUILD_VENDOR_IMAGE),true)
653 BUILDING_VENDOR_IMAGE := true
654 ifndef BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE
655 $(error PRODUCT_BUILD_VENDOR_IMAGE set to true, but BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE not defined)
656 endif
657endif
658ifdef BOARD_PREBUILT_VENDORIMAGE
659 BUILDING_VENDOR_IMAGE :=
660endif
661.KATI_READONLY := BUILDING_VENDOR_IMAGE
662
663###########################################
664# Now we can substitute with the real value of TARGET_COPY_OUT_PRODUCT
665ifeq ($(TARGET_COPY_OUT_PRODUCT),$(_product_path_placeholder))
666TARGET_COPY_OUT_PRODUCT := system/product
667else ifeq ($(filter product system/product,$(TARGET_COPY_OUT_PRODUCT)),)
668$(error TARGET_COPY_OUT_PRODUCT must be either 'product' or 'system/product', seeing '$(TARGET_COPY_OUT_PRODUCT)'.)
669endif
670PRODUCT_COPY_FILES := $(subst $(_product_path_placeholder),$(TARGET_COPY_OUT_PRODUCT),$(PRODUCT_COPY_FILES))
671
672BOARD_USES_PRODUCTIMAGE :=
673ifdef BOARD_PREBUILT_PRODUCTIMAGE
674 BOARD_USES_PRODUCTIMAGE := true
675endif
676ifdef BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE
677 BOARD_USES_PRODUCTIMAGE := true
678endif
Jeongik Chabb688a92019-07-12 12:51:37 +0900679$(call check_image_config,product)
Anton Hanssonbb76ce82019-02-26 12:34:03 +0000680.KATI_READONLY := BOARD_USES_PRODUCTIMAGE
681
682BUILDING_PRODUCT_IMAGE :=
683ifeq ($(PRODUCT_BUILD_PRODUCT_IMAGE),)
684 ifdef BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE
685 BUILDING_PRODUCT_IMAGE := true
686 endif
687else ifeq ($(PRODUCT_BUILD_PRODUCT_IMAGE),true)
688 BUILDING_PRODUCT_IMAGE := true
689 ifndef BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE
690 $(error PRODUCT_BUILD_PRODUCT_IMAGE set to true, but BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE not defined)
691 endif
692endif
693ifdef BOARD_PREBUILT_PRODUCTIMAGE
694 BUILDING_PRODUCT_IMAGE :=
695endif
696.KATI_READONLY := BUILDING_PRODUCT_IMAGE
697
698###########################################
Justin Yun6151e3f2019-06-25 15:58:13 +0900699# TODO(b/135957588) TARGET_COPY_OUT_PRODUCT_SERVICES will be set to
700# TARGET_COPY_OUT_PRODUCT as a workaround.
701TARGET_COPY_OUT_PRODUCT_SERVICES := $(TARGET_COPY_OUT_PRODUCT)
Anton Hanssonbb76ce82019-02-26 12:34:03 +0000702
Justin Yun6151e3f2019-06-25 15:58:13 +0900703###########################################
704# Now we can substitute with the real value of TARGET_COPY_OUT_SYSTEM_EXT
705ifeq ($(TARGET_COPY_OUT_SYSTEM_EXT),$(_system_ext_path_placeholder))
706TARGET_COPY_OUT_SYSTEM_EXT := system/system_ext
707else ifeq ($(filter system_ext system/system_ext,$(TARGET_COPY_OUT_SYSTEM_EXT)),)
708$(error TARGET_COPY_OUT_SYSTEM_EXT must be either 'system_ext' or 'system/system_ext', seeing '$(TARGET_COPY_OUT_SYSTEM_EXT)'.)
Anton Hanssonbb76ce82019-02-26 12:34:03 +0000709endif
Justin Yun6151e3f2019-06-25 15:58:13 +0900710PRODUCT_COPY_FILES := $(subst $(_system_ext_path_placeholder),$(TARGET_COPY_OUT_SYSTEM_EXT),$(PRODUCT_COPY_FILES))
Anton Hanssonbb76ce82019-02-26 12:34:03 +0000711
Justin Yun6151e3f2019-06-25 15:58:13 +0900712BOARD_USES_SYSTEM_EXTIMAGE :=
713ifdef BOARD_PREBUILT_SYSTEM_EXTIMAGE
714 BOARD_USES_SYSTEM_EXTIMAGE := true
715endif
716ifdef BOARD_SYSTEM_EXTIMAGE_FILE_SYSTEM_TYPE
717 BOARD_USES_SYSTEM_EXTIMAGE := true
718endif
Jeongik Chabb688a92019-07-12 12:51:37 +0900719$(call check_image_config,system_ext)
Justin Yun6151e3f2019-06-25 15:58:13 +0900720.KATI_READONLY := BOARD_USES_SYSTEM_EXTIMAGE
721
722BUILDING_SYSTEM_EXT_IMAGE :=
723ifeq ($(PRODUCT_BUILD_SYSTEM_EXT_IMAGE),)
724 ifdef BOARD_SYSTEM_EXTIMAGE_FILE_SYSTEM_TYPE
725 BUILDING_SYSTEM_EXT_IMAGE := true
Anton Hanssonbb76ce82019-02-26 12:34:03 +0000726 endif
Justin Yun6151e3f2019-06-25 15:58:13 +0900727else ifeq ($(PRODUCT_BUILD_SYSTEM_EXT_IMAGE),true)
728 BUILDING_SYSTEM_EXT_IMAGE := true
729 ifndef BOARD_SYSTEM_EXTIMAGE_FILE_SYSTEM_TYPE
730 $(error PRODUCT_BUILD_SYSTEM_EXT_IMAGE set to true, but BOARD_SYSTEM_EXTIMAGE_FILE_SYSTEM_TYPE not defined)
Anton Hanssonbb76ce82019-02-26 12:34:03 +0000731 endif
732endif
Justin Yun6151e3f2019-06-25 15:58:13 +0900733ifdef BOARD_PREBUILT_SYSTEM_EXTIMAGE
734 BUILDING_SYSTEM_EXT_IMAGE :=
Anton Hanssonbb76ce82019-02-26 12:34:03 +0000735endif
Justin Yun6151e3f2019-06-25 15:58:13 +0900736.KATI_READONLY := BUILDING_SYSTEM_EXT_IMAGE
Anton Hanssonbb76ce82019-02-26 12:34:03 +0000737
738###########################################
Yifan Hongcfb917a2020-05-07 14:58:20 -0700739# Now we can substitute with the real value of TARGET_COPY_OUT_VENDOR_DLKM
740ifeq ($(TARGET_COPY_OUT_VENDOR_DLKM),$(_vendor_dlkm_path_placeholder))
741 TARGET_COPY_OUT_VENDOR_DLKM := $(TARGET_COPY_OUT_VENDOR)/vendor_dlkm
742else ifeq ($(filter vendor_dlkm system/vendor/vendor_dlkm vendor/vendor_dlkm,$(TARGET_COPY_OUT_VENDOR_DLKM)),)
743 $(error TARGET_COPY_OUT_VENDOR_DLKM must be either 'vendor_dlkm', 'system/vendor/vendor_dlkm' or 'vendor/vendor_dlkm', seeing '$(TARGET_COPY_OUT_VENDOR_DLKM)'.)
744endif
745PRODUCT_COPY_FILES := $(subst $(_vendor_dlkm_path_placeholder),$(TARGET_COPY_OUT_VENDOR_DLKM),$(PRODUCT_COPY_FILES))
746
747BOARD_USES_VENDOR_DLKMIMAGE :=
748ifdef BOARD_PREBUILT_VENDOR_DLKMIMAGE
749 BOARD_USES_VENDOR_DLKMIMAGE := true
750endif
751ifdef BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE
752 BOARD_USES_VENDOR_DLKMIMAGE := true
753endif
754$(call check_image_config,vendor_dlkm)
755
756BUILDING_VENDOR_DLKM_IMAGE :=
757ifeq ($(PRODUCT_BUILD_VENDOR_DLKM_IMAGE),)
758 ifdef BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE
759 BUILDING_VENDOR_DLKM_IMAGE := true
760 endif
761else ifeq ($(PRODUCT_BUILD_VENDOR_DLKM_IMAGE),true)
762 BUILDING_VENDOR_DLKM_IMAGE := true
763 ifndef BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE
764 $(error PRODUCT_BUILD_VENDOR_DLKM_IMAGE set to true, but BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE not defined)
765 endif
766endif
767ifdef BOARD_PREBUILT_VENDOR_DLKMIMAGE
768 BUILDING_VENDOR_DLKM_IMAGE :=
769endif
770.KATI_READONLY := BUILDING_VENDOR_DLKM_IMAGE
771
772###########################################
Anton Hanssonbb76ce82019-02-26 12:34:03 +0000773# Now we can substitute with the real value of TARGET_COPY_OUT_ODM
774ifeq ($(TARGET_COPY_OUT_ODM),$(_odm_path_placeholder))
dianlujitao339ef4c2019-10-10 09:26:00 +0800775 TARGET_COPY_OUT_ODM := $(TARGET_COPY_OUT_VENDOR)/odm
776else ifeq ($(filter odm system/vendor/odm vendor/odm,$(TARGET_COPY_OUT_ODM)),)
777 $(error TARGET_COPY_OUT_ODM must be either 'odm', 'system/vendor/odm' or 'vendor/odm', seeing '$(TARGET_COPY_OUT_ODM)'.)
Anton Hanssonbb76ce82019-02-26 12:34:03 +0000778endif
779PRODUCT_COPY_FILES := $(subst $(_odm_path_placeholder),$(TARGET_COPY_OUT_ODM),$(PRODUCT_COPY_FILES))
780
781BOARD_USES_ODMIMAGE :=
782ifdef BOARD_PREBUILT_ODMIMAGE
783 BOARD_USES_ODMIMAGE := true
784endif
785ifdef BOARD_ODMIMAGE_FILE_SYSTEM_TYPE
786 BOARD_USES_ODMIMAGE := true
787endif
Jeongik Chabb688a92019-07-12 12:51:37 +0900788$(call check_image_config,odm)
Anton Hanssonbb76ce82019-02-26 12:34:03 +0000789
790BUILDING_ODM_IMAGE :=
Dan Willemsen25a69372019-04-19 15:00:12 -0700791ifeq ($(PRODUCT_BUILD_ODM_IMAGE),)
Anton Hanssonbb76ce82019-02-26 12:34:03 +0000792 ifdef BOARD_ODMIMAGE_FILE_SYSTEM_TYPE
793 BUILDING_ODM_IMAGE := true
794 endif
795else ifeq ($(PRODUCT_BUILD_ODM_IMAGE),true)
796 BUILDING_ODM_IMAGE := true
797 ifndef BOARD_ODMIMAGE_FILE_SYSTEM_TYPE
798 $(error PRODUCT_BUILD_ODM_IMAGE set to true, but BOARD_ODMIMAGE_FILE_SYSTEM_TYPE not defined)
799 endif
800endif
801ifdef BOARD_PREBUILT_ODMIMAGE
802 BUILDING_ODM_IMAGE :=
803endif
804.KATI_READONLY := BUILDING_ODM_IMAGE
805
Yifan Hongf496f1b2020-07-15 16:52:59 -0700806
807###########################################
808# Now we can substitute with the real value of TARGET_COPY_OUT_ODM_DLKM
809ifeq ($(TARGET_COPY_OUT_ODM_DLKM),$(_odm_dlkm_path_placeholder))
810 TARGET_COPY_OUT_ODM_DLKM := $(TARGET_COPY_OUT_VENDOR)/odm_dlkm
811else ifeq ($(filter odm_dlkm system/vendor/odm_dlkm vendor/odm_dlkm,$(TARGET_COPY_OUT_ODM_DLKM)),)
812 $(error TARGET_COPY_OUT_ODM_DLKM must be either 'odm_dlkm', 'system/vendor/odm_dlkm' or 'vendor/odm_dlkm', seeing '$(TARGET_COPY_OUT_ODM_DLKM)'.)
813endif
814PRODUCT_COPY_FILES := $(subst $(_odm_dlkm_path_placeholder),$(TARGET_COPY_OUT_ODM_DLKM),$(PRODUCT_COPY_FILES))
815
816BOARD_USES_ODM_DLKMIMAGE :=
817ifdef BOARD_PREBUILT_ODM_DLKMIMAGE
818 BOARD_USES_ODM_DLKMIMAGE := true
819endif
820ifdef BOARD_ODM_DLKMIMAGE_FILE_SYSTEM_TYPE
821 BOARD_USES_ODM_DLKMIMAGE := true
822endif
823$(call check_image_config,odm_dlkm)
824
825BUILDING_ODM_DLKM_IMAGE :=
826ifeq ($(PRODUCT_BUILD_ODM_DLKM_IMAGE),)
827 ifdef BOARD_ODM_DLKMIMAGE_FILE_SYSTEM_TYPE
828 BUILDING_ODM_DLKM_IMAGE := true
829 endif
830else ifeq ($(PRODUCT_BUILD_ODM_DLKM_IMAGE),true)
831 BUILDING_ODM_DLKM_IMAGE := true
832 ifndef BOARD_ODM_DLKMIMAGE_FILE_SYSTEM_TYPE
833 $(error PRODUCT_BUILD_ODM_DLKM_IMAGE set to true, but BOARD_ODM_DLKMIMAGE_FILE_SYSTEM_TYPE not defined)
834 endif
835endif
836ifdef BOARD_PREBUILT_ODM_DLKMIMAGE
837 BUILDING_ODM_DLKM_IMAGE :=
838endif
839.KATI_READONLY := BUILDING_ODM_DLKM_IMAGE
840
Pierre-Clément Tosi88648d32021-09-24 15:41:13 +0200841BOARD_USES_PVMFWIMAGE :=
842ifdef BOARD_PREBUILT_PVMFWIMAGE
843 BOARD_USES_PVMFWIMAGE := true
844endif
Pierre-Clément Tosifa8193c2021-09-24 15:49:00 +0200845ifeq ($(PRODUCT_BUILD_PVMFW_IMAGE),true)
846 BOARD_USES_PVMFWIMAGE := true
847endif
Pierre-Clément Tosi88648d32021-09-24 15:41:13 +0200848.KATI_READONLY := BOARD_USES_PVMFWIMAGE
849
Pierre-Clément Tosifa8193c2021-09-24 15:49:00 +0200850BUILDING_PVMFW_IMAGE :=
851ifeq ($(PRODUCT_BUILD_PVMFW_IMAGE),true)
852 BUILDING_PVMFW_IMAGE := true
853endif
854ifdef BOARD_PREBUILT_PVMFWIMAGE
855 BUILDING_PVMFW_IMAGE :=
856endif
857.KATI_READONLY := BUILDING_PVMFW_IMAGE
858
Anton Hanssonbb76ce82019-02-26 12:34:03 +0000859###########################################
Yifan Hong65afc072020-04-17 10:08:10 -0700860# Ensure consistency among TARGET_RECOVERY_UPDATER_LIBS, AB_OTA_UPDATER, and PRODUCT_OTA_FORCE_NON_AB_PACKAGE.
Anton Hanssonbb76ce82019-02-26 12:34:03 +0000861TARGET_RECOVERY_UPDATER_LIBS ?=
862AB_OTA_UPDATER ?=
863.KATI_READONLY := TARGET_RECOVERY_UPDATER_LIBS AB_OTA_UPDATER
Yifan Hong65afc072020-04-17 10:08:10 -0700864
865# Ensure that if PRODUCT_OTA_FORCE_NON_AB_PACKAGE == true, then AB_OTA_UPDATER must be true
866ifeq ($(PRODUCT_OTA_FORCE_NON_AB_PACKAGE),true)
867 ifneq ($(AB_OTA_UPDATER),true)
868 $(error AB_OTA_UPDATER must be set to true when PRODUCT_OTA_FORCE_NON_AB_PACKAGE is true)
869 endif
870endif
871
872# In some configurations, A/B and non-A/B may coexist. Check TARGET_OTA_ALLOW_NON_AB
873# to see if non-A/B is supported.
874TARGET_OTA_ALLOW_NON_AB := false
875ifneq ($(AB_OTA_UPDATER),true)
876 TARGET_OTA_ALLOW_NON_AB := true
877else ifeq ($(PRODUCT_OTA_FORCE_NON_AB_PACKAGE),true)
878 TARGET_OTA_ALLOW_NON_AB := true
879endif
880.KATI_READONLY := TARGET_OTA_ALLOW_NON_AB
881
882ifneq ($(TARGET_OTA_ALLOW_NON_AB),true)
Anton Hanssonbb76ce82019-02-26 12:34:03 +0000883 ifneq ($(strip $(TARGET_RECOVERY_UPDATER_LIBS)),)
Yifan Hong65afc072020-04-17 10:08:10 -0700884 $(error Do not use TARGET_RECOVERY_UPDATER_LIBS when using TARGET_OTA_ALLOW_NON_AB)
Anton Hanssonbb76ce82019-02-26 12:34:03 +0000885 endif
886endif
887
Joel Galenson154ac1d2020-07-30 14:23:31 -0700888# Quick check for building generic OTA packages. Currently it only supports A/B OTAs.
Tao Bao9be20c72019-04-08 21:11:59 -0700889ifeq ($(PRODUCT_BUILD_GENERIC_OTA_PACKAGE),true)
890 ifneq ($(AB_OTA_UPDATER),true)
891 $(error PRODUCT_BUILD_GENERIC_OTA_PACKAGE with 'AB_OTA_UPDATER != true' is not supported)
892 endif
893endif
894
Hridya Valsaraju59eaef02019-05-20 11:10:24 -0700895ifdef BOARD_PREBUILT_DTBIMAGE_DIR
896 ifneq ($(BOARD_INCLUDE_DTB_IN_BOOTIMG),true)
897 $(error BOARD_PREBUILT_DTBIMAGE_DIR with 'BOARD_INCLUDE_DTB_IN_BOOTIMG != true' is not supported)
898 endif
899endif
900
Anton Hanssonbb76ce82019-02-26 12:34:03 +0000901# Check BOARD_VNDK_VERSION
902define check_vndk_version
903 $(eval vndk_path := prebuilts/vndk/v$(1)) \
904 $(if $(wildcard $(vndk_path)/*/Android.bp),,$(error VNDK version $(1) not found))
905endef
906
907ifdef BOARD_VNDK_VERSION
Inseob Kim2b0b3d12020-06-25 22:19:29 +0900908 ifeq ($(BOARD_VNDK_VERSION),$(PLATFORM_VNDK_VERSION))
Cole Fauste96edc32021-09-28 12:43:04 -0700909 $(error BOARD_VNDK_VERSION is equal to PLATFORM_VNDK_VERSION; use BOARD_VNDK_VERSION := current)
Inseob Kim2b0b3d12020-06-25 22:19:29 +0900910 endif
Anton Hanssonbb76ce82019-02-26 12:34:03 +0000911 ifneq ($(BOARD_VNDK_VERSION),current)
Inseob Kimf0cec692019-12-03 15:09:44 +0900912 $(call check_vndk_version,$(BOARD_VNDK_VERSION))
Anton Hanssonbb76ce82019-02-26 12:34:03 +0000913 endif
Anton Hanssonbb76ce82019-02-26 12:34:03 +0000914 TARGET_VENDOR_TEST_SUFFIX := /vendor
915else
916 TARGET_VENDOR_TEST_SUFFIX :=
917endif
918
JaeMan Parkaa7b03b2020-12-07 16:00:50 +0900919# If PRODUCT_ENFORCE_INTER_PARTITION_JAVA_SDK_LIBRARY is set,
920# BOARD_VNDK_VERSION must be set because PRODUCT_ENFORCE_INTER_PARTITION_JAVA_SDK_LIBRARY
921# is a enforcement of inter-partition dependency, and it doesn't have any meaning
922# when BOARD_VNDK_VERSION isn't set.
923ifeq ($(PRODUCT_ENFORCE_INTER_PARTITION_JAVA_SDK_LIBRARY),true)
924 ifeq ($(BOARD_VNDK_VERSION),)
925 $(error BOARD_VNDK_VERSION must be set when PRODUCT_ENFORCE_INTER_PARTITION_JAVA_SDK_LIBRARY is true)
926 endif
927endif
928
Jiyong Park02426e62019-05-08 20:23:42 +0900929###########################################
Martin Stjernholm421990d2021-05-25 00:24:51 +0100930# APEXes are by default flattened, i.e. non-updatable, if not building unbundled
931# apps. It can be unflattened (and updatable) by inheriting from
Jiyong Park02426e62019-05-08 20:23:42 +0900932# updatable_apex.mk
Roland Levillainb3a503d2019-10-04 14:06:26 +0100933#
934# APEX flattening can also be forcibly enabled (resp. disabled) by
935# setting OVERRIDE_TARGET_FLATTEN_APEX to true (resp. false), e.g. by
936# setting the OVERRIDE_TARGET_FLATTEN_APEX environment variable.
937ifdef OVERRIDE_TARGET_FLATTEN_APEX
938 TARGET_FLATTEN_APEX := $(OVERRIDE_TARGET_FLATTEN_APEX)
939else
Martin Stjernholm421990d2021-05-25 00:24:51 +0100940 ifeq (,$(TARGET_BUILD_APPS)$(TARGET_FLATTEN_APEX))
Roland Levillainb3a503d2019-10-04 14:06:26 +0100941 TARGET_FLATTEN_APEX := true
942 endif
Jiyong Park02426e62019-05-08 20:23:42 +0900943endif
944
Martin Stjernholm7a430fd2020-06-04 15:16:39 +0100945ifeq (,$(TARGET_BUILD_UNBUNDLED))
Anton Hanssonbb76ce82019-02-26 12:34:03 +0000946ifdef PRODUCT_EXTRA_VNDK_VERSIONS
947 $(foreach v,$(PRODUCT_EXTRA_VNDK_VERSIONS),$(call check_vndk_version,$(v)))
948endif
949endif
950
951# Ensure that BOARD_SYSTEMSDK_VERSIONS are all within PLATFORM_SYSTEMSDK_VERSIONS
952_unsupported_systemsdk_versions := $(filter-out $(PLATFORM_SYSTEMSDK_VERSIONS),$(BOARD_SYSTEMSDK_VERSIONS))
953ifneq (,$(_unsupported_systemsdk_versions))
954 $(error System SDK versions '$(_unsupported_systemsdk_versions)' in BOARD_SYSTEMSDK_VERSIONS are not supported.\
955 Supported versions are $(PLATFORM_SYSTEMSDK_VERSIONS))
956endif
Dan Willemsen695849e2019-04-17 12:25:09 -0700957
958###########################################
959# Handle BUILD_BROKEN_USES_BUILD_*
960
Dan Willemsen97ec8122020-02-19 18:06:54 -0800961$(foreach m,$(DEFAULT_WARNING_BUILD_MODULE_TYPES),\
Dan Willemsen695849e2019-04-17 12:25:09 -0700962 $(if $(filter false,$(BUILD_BROKEN_USES_$(m))),\
963 $(KATI_obsolete_var $(m),Please convert to Soong),\
964 $(KATI_deprecated_var $(m),Please convert to Soong)))
965
Dan Willemsen97ec8122020-02-19 18:06:54 -0800966$(if $(filter true,$(BUILD_BROKEN_USES_BUILD_COPY_HEADERS)),\
Cole Fauste96edc32021-09-28 12:43:04 -0700967 $(KATI_deprecated_var BUILD_COPY_HEADERS,See $(CHANGES_URL)\#copy_headers),\
968 $(KATI_obsolete_var BUILD_COPY_HEADERS,See $(CHANGES_URL)\#copy_headers))
Dan Willemsen66d21d42020-01-27 19:26:02 -0800969
Dan Willemsen97ec8122020-02-19 18:06:54 -0800970$(foreach m,$(filter-out BUILD_COPY_HEADERS,$(DEFAULT_ERROR_BUILD_MODULE_TYPES)),\
Dan Willemsen695849e2019-04-17 12:25:09 -0700971 $(if $(filter true,$(BUILD_BROKEN_USES_$(m))),\
972 $(KATI_deprecated_var $(m),Please convert to Soong),\
973 $(KATI_obsolete_var $(m),Please convert to Soong)))
Yifan Hong63c5ca12020-10-08 11:54:02 -0700974
975ifndef BUILDING_RECOVERY_IMAGE
976 ifeq (true,$(BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE))
977 $(error Should not set BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE if not building recovery image)
978 endif
979endif
Yifan Hong881df392020-10-09 14:29:39 -0700980
981ifndef BUILDING_VENDOR_BOOT_IMAGE
982 ifeq (true,$(BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT))
983 $(error Should not set BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT if not building vendor_boot image)
984 endif
Yo Chiangd21e7dc2020-12-10 18:42:47 +0800985 ifdef BOARD_VENDOR_RAMDISK_FRAGMENTS
986 $(error Should not set BOARD_VENDOR_RAMDISK_FRAGMENTS if not building vendor_boot image)
987 endif
Yi-Yo Chiang1519d432021-04-04 16:03:10 +0800988else # BUILDING_VENDOR_BOOT_IMAGE
989 ifneq (,$(call math_lt,$(BOARD_BOOT_HEADER_VERSION),4))
990 ifdef BOARD_VENDOR_RAMDISK_FRAGMENTS
991 $(error Should not set BOARD_VENDOR_RAMDISK_FRAGMENTS if \
992 BOARD_BOOT_HEADER_VERSION is less than 4)
993 endif
Yi-Yo Chiang12f92442021-04-04 16:12:25 +0800994 ifeq (true,$(BOARD_INCLUDE_RECOVERY_RAMDISK_IN_VENDOR_BOOT))
995 $(error Should not set BOARD_INCLUDE_RECOVERY_RAMDISK_IN_VENDOR_BOOT if \
996 BOARD_BOOT_HEADER_VERSION is less than 4)
997 endif
Yi-Yo Chiang1519d432021-04-04 16:03:10 +0800998 endif
999endif # BUILDING_VENDOR_BOOT_IMAGE
Yo Chiangd21e7dc2020-12-10 18:42:47 +08001000
1001ifneq ($(words $(BOARD_VENDOR_RAMDISK_FRAGMENTS)),$(words $(sort $(BOARD_VENDOR_RAMDISK_FRAGMENTS))))
1002 $(error BOARD_VENDOR_RAMDISK_FRAGMENTS has duplicate entries: $(BOARD_VENDOR_RAMDISK_FRAGMENTS))
Yifan Hong881df392020-10-09 14:29:39 -07001003endif
1004
Yi-Yo Chiang12f92442021-04-04 16:12:25 +08001005ifeq (true,$(BOARD_INCLUDE_RECOVERY_RAMDISK_IN_VENDOR_BOOT))
1006 ifneq (true,$(BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT))
1007 $(error Should not set BOARD_INCLUDE_RECOVERY_RAMDISK_IN_VENDOR_BOOT if \
1008 BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT is not set)
1009 endif
1010endif
1011
Yifan Hong881df392020-10-09 14:29:39 -07001012# If BOARD_USES_GENERIC_KERNEL_IMAGE is set, BOARD_USES_RECOVERY_AS_BOOT must not be set.
1013# Devices without a dedicated recovery partition uses BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT to
1014# build recovery into vendor_boot.
1015ifeq (true,$(BOARD_USES_GENERIC_KERNEL_IMAGE))
1016 ifeq (true,$(BOARD_USES_RECOVERY_AS_BOOT))
1017 $(error BOARD_USES_RECOVERY_AS_BOOT cannot be true if BOARD_USES_GENERIC_KERNEL_IMAGE is true. \
1018 Use BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT instead)
1019 endif
1020endif
Yifan Hongcc6c2022020-11-13 19:12:06 -08001021
1022ifeq (true,$(BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT))
1023 ifeq (true,$(BOARD_USES_RECOVERY_AS_BOOT))
1024 $(error BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT and BOARD_USES_RECOVERY_AS_BOOT cannot be \
1025 both true. Recovery resources should be installed to either boot or vendor_boot, but not both)
1026 endif
1027endif