1# 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, 19# and checks the variable defined therein. 20# ############################################################### 21 22_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 28_board_strip_readonly_list += BOARD_BOOT_HEADER_VERSION 29_board_strip_readonly_list += BOARD_BOOTCONFIG 30_board_strip_readonly_list += BOARD_BOOTCONFIG_FILE 31_board_strip_readonly_list += BOARD_KERNEL_BASE 32_board_strip_readonly_list += BOARD_USES_GENERIC_AUDIO 33_board_strip_readonly_list += BOARD_USES_RECOVERY_AS_BOOT 34_board_strip_readonly_list += BOARD_VENDOR_USE_AKMD 35_board_strip_readonly_list += BOARD_WPA_SUPPLICANT_DRIVER 36_board_strip_readonly_list += BOARD_WLAN_DEVICE 37_board_strip_readonly_list += TARGET_BOARD_PLATFORM 38_board_strip_readonly_list += TARGET_BOARD_PLATFORM_GPU 39_board_strip_readonly_list += TARGET_BOOTLOADER_BOARD_NAME 40_board_strip_readonly_list += TARGET_FS_CONFIG_GEN 41_board_strip_readonly_list += TARGET_NO_BOOTLOADER 42_board_strip_readonly_list += TARGET_NO_KERNEL 43_board_strip_readonly_list += TARGET_NO_RECOVERY 44_board_strip_readonly_list += TARGET_NO_RADIOIMAGE 45_board_strip_readonly_list += TARGET_HARDWARE_3D 46_board_strip_readonly_list += WITH_DEXPREOPT 47 48# Arch variables 49_board_strip_readonly_list += TARGET_ARCH 50_board_strip_readonly_list += TARGET_ARCH_VARIANT 51_board_strip_readonly_list += TARGET_CPU_ABI 52_board_strip_readonly_list += TARGET_CPU_ABI2 53_board_strip_readonly_list += TARGET_CPU_VARIANT 54_board_strip_readonly_list += TARGET_CPU_VARIANT_RUNTIME 55_board_strip_readonly_list += TARGET_2ND_ARCH 56_board_strip_readonly_list += TARGET_2ND_ARCH_VARIANT 57_board_strip_readonly_list += TARGET_2ND_CPU_ABI 58_board_strip_readonly_list += TARGET_2ND_CPU_ABI2 59_board_strip_readonly_list += TARGET_2ND_CPU_VARIANT 60_board_strip_readonly_list += TARGET_2ND_CPU_VARIANT_RUNTIME 61# TARGET_ARCH_SUITE is an alternative arch configuration to TARGET_ARCH (and related variables), 62# that can be used for soong-only builds to build for several architectures at once. 63# Allowed values currently are "ndk" and "mainline_sdk". 64_board_strip_readonly_list += TARGET_ARCH_SUITE 65 66# File system variables 67_board_strip_readonly_list += BOARD_FLASH_BLOCK_SIZE 68_board_strip_readonly_list += BOARD_BOOTIMAGE_PARTITION_SIZE 69_board_strip_readonly_list += BOARD_INIT_BOOT_IMAGE_PARTITION_SIZE 70_board_strip_readonly_list += BOARD_RECOVERYIMAGE_PARTITION_SIZE 71_board_strip_readonly_list += BOARD_SYSTEMIMAGE_PARTITION_SIZE 72_board_strip_readonly_list += BOARD_SYSTEMIMAGE_FILE_SYSTEM_TYPE 73_board_strip_readonly_list += BOARD_USERDATAIMAGE_FILE_SYSTEM_TYPE 74_board_strip_readonly_list += BOARD_USERDATAIMAGE_PARTITION_SIZE 75_board_strip_readonly_list += BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE 76_board_strip_readonly_list += BOARD_CACHEIMAGE_PARTITION_SIZE 77_board_strip_readonly_list += BOARD_VENDORIMAGE_PARTITION_SIZE 78_board_strip_readonly_list += BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE 79_board_strip_readonly_list += BOARD_PRODUCTIMAGE_PARTITION_SIZE 80_board_strip_readonly_list += BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE 81_board_strip_readonly_list += BOARD_SYSTEM_EXTIMAGE_PARTITION_SIZE 82_board_strip_readonly_list += BOARD_SYSTEM_EXTIMAGE_FILE_SYSTEM_TYPE 83_board_strip_readonly_list += BOARD_ODMIMAGE_PARTITION_SIZE 84_board_strip_readonly_list += BOARD_ODMIMAGE_FILE_SYSTEM_TYPE 85_board_strip_readonly_list += BOARD_VENDOR_DLKMIMAGE_PARTITION_SIZE 86_board_strip_readonly_list += BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE 87_board_strip_readonly_list += BOARD_ODM_DLKMIMAGE_PARTITION_SIZE 88_board_strip_readonly_list += BOARD_ODM_DLKMIMAGE_FILE_SYSTEM_TYPE 89_board_strip_readonly_list += BOARD_SYSTEM_DLKMIMAGE_PARTITION_SIZE 90_board_strip_readonly_list += BOARD_SYSTEM_DLKMIMAGE_FILE_SYSTEM_TYPE 91_board_strip_readonly_list += BOARD_PVMFWIMAGE_PARTITION_SIZE 92 93# Logical partitions related variables. 94_board_strip_readonly_list += BOARD_SYSTEMIMAGE_PARTITION_RESERVED_SIZE 95_board_strip_readonly_list += BOARD_VENDORIMAGE_PARTITION_RESERVED_SIZE 96_board_strip_readonly_list += BOARD_ODMIMAGE_PARTITION_RESERVED_SIZE 97_board_strip_readonly_list += BOARD_VENDOR_DLKMIMAGE_PARTITION_RESERVED_SIZE 98_board_strip_readonly_list += BOARD_ODM_DLKMIMAGE_PARTITION_RESERVED_SIZE 99_board_strip_readonly_list += BOARD_SYSTEM_DLKMIMAGE_PARTITION_RESERVED_SIZE 100_board_strip_readonly_list += BOARD_PRODUCTIMAGE_PARTITION_RESERVED_SIZE 101_board_strip_readonly_list += BOARD_SYSTEM_EXTIMAGE_PARTITION_RESERVED_SIZE 102_board_strip_readonly_list += BOARD_SUPER_PARTITION_SIZE 103_board_strip_readonly_list += BOARD_SUPER_PARTITION_GROUPS 104 105# Kernel related variables 106_board_strip_readonly_list += BOARD_KERNEL_BINARIES 107_board_strip_readonly_list += BOARD_KERNEL_MODULE_INTERFACE_VERSIONS 108 109# Variables related to generic kernel image (GKI) and generic boot image 110# - BOARD_USES_GENERIC_KERNEL_IMAGE is the global variable that defines if the 111# board uses GKI and generic boot image. 112# Update mechanism of the boot image is not enforced by this variable. 113# - BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE controls whether the recovery image 114# contains a kernel or not. 115# - BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT controls whether ramdisk 116# recovery resources are built to vendor_boot. 117# - BOARD_INCLUDE_RECOVERY_RAMDISK_IN_VENDOR_BOOT controls whether recovery 118# resources are built as a standalone recovery ramdisk in vendor_boot. 119# - BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT controls whether GSI AVB keys are 120# built to vendor_boot. 121# - BOARD_COPY_BOOT_IMAGE_TO_TARGET_FILES controls whether boot images in $OUT are added 122# to target files package directly. 123_board_strip_readonly_list += BOARD_USES_GENERIC_KERNEL_IMAGE 124_board_strip_readonly_list += BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE 125_board_strip_readonly_list += BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT 126_board_strip_readonly_list += BOARD_INCLUDE_RECOVERY_RAMDISK_IN_VENDOR_BOOT 127_board_strip_readonly_list += BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT 128_board_strip_readonly_list += BOARD_COPY_BOOT_IMAGE_TO_TARGET_FILES 129 130# Prebuilt image variables 131_board_strip_readonly_list += BOARD_PREBUILT_INIT_BOOT_IMAGE 132 133# Defines the list of logical vendor ramdisk names to build or include in vendor_boot. 134_board_strip_readonly_list += BOARD_VENDOR_RAMDISK_FRAGMENTS 135 136# These are all variables used to build $(INSTALLED_MISC_INFO_TARGET) 137# in build/make/core/Makefile. Their values get used in command line 138# arguments, so they have to be stripped to make the ninja files stable. 139_board_strip_list := 140_board_strip_list += BOARD_DTBOIMG_PARTITION_SIZE 141_board_strip_list += BOARD_AVB_DTBO_KEY_PATH 142_board_strip_list += BOARD_AVB_DTBO_ALGORITHM 143_board_strip_list += BOARD_AVB_DTBO_ROLLBACK_INDEX_LOCATION 144_board_strip_list += BOARD_AVB_PVMFW_KEY_PATH 145_board_strip_list += BOARD_AVB_PVMFW_ALGORITHM 146_board_strip_list += BOARD_AVB_PVMFW_ROLLBACK_INDEX_LOCATION 147_board_strip_list += BOARD_PARTIAL_OTA_UPDATE_PARTITIONS_LIST 148_board_strip_list += BOARD_AVB_VBMETA_VENDOR_ROLLBACK_INDEX_LOCATION 149_board_strip_list += BOARD_AVB_VBMETA_VENDOR_ALGORITHM 150_board_strip_list += BOARD_AVB_VBMETA_VENDOR_KEY_PATH 151_board_strip_list += BOARD_AVB_VBMETA_VENDOR 152_board_strip_list += BOARD_AVB_VBMETA_SYSTEM_ROLLBACK_INDEX_LOCATION 153_board_strip_list += BOARD_AVB_VBMETA_SYSTEM_ALGORITHM 154_board_strip_list += BOARD_AVB_VBMETA_SYSTEM_KEY_PATH 155_board_strip_list += BOARD_AVB_VBMETA_SYSTEM 156_board_strip_list += BOARD_AVB_RECOVERY_KEY_PATH 157_board_strip_list += BOARD_AVB_RECOVERY_ALGORITHM 158_board_strip_list += BOARD_AVB_RECOVERY_ROLLBACK_INDEX_LOCATION 159_board_strip_list += BOARD_AVB_VENDOR_BOOT_KEY_PATH 160_board_strip_list += BOARD_AVB_VENDOR_BOOT_ALGORITHM 161_board_strip_list += BOARD_AVB_VENDOR_BOOT_ROLLBACK_INDEX_LOCATION 162_board_strip_list += BOARD_AVB_VENDOR_KERNEL_BOOT_KEY_PATH 163_board_strip_list += BOARD_AVB_VENDOR_KERNEL_BOOT_ALGORITHM 164_board_strip_list += BOARD_AVB_VENDOR_KERNEL_BOOT_ROLLBACK_INDEX_LOCATION 165_board_strip_list += BOARD_MKBOOTIMG_ARGS 166_board_strip_list += BOARD_VENDOR_BOOTIMAGE_PARTITION_SIZE 167_board_strip_list += BOARD_VENDOR_KERNEL_BOOTIMAGE_PARTITION_SIZE 168_board_strip_list += ODM_MANIFEST_SKUS 169 170 171_build_broken_var_list := \ 172 BUILD_BROKEN_CLANG_PROPERTY \ 173 BUILD_BROKEN_CLANG_ASFLAGS \ 174 BUILD_BROKEN_CLANG_CFLAGS \ 175 BUILD_BROKEN_DEPFILE \ 176 BUILD_BROKEN_DUP_RULES \ 177 BUILD_BROKEN_DUP_SYSPROP \ 178 BUILD_BROKEN_ELF_PREBUILT_PRODUCT_COPY_FILES \ 179 BUILD_BROKEN_ENFORCE_SYSPROP_OWNER \ 180 BUILD_BROKEN_INPUT_DIR_MODULES \ 181 BUILD_BROKEN_MISSING_REQUIRED_MODULES \ 182 BUILD_BROKEN_OUTSIDE_INCLUDE_DIRS \ 183 BUILD_BROKEN_PREBUILT_ELF_FILES \ 184 BUILD_BROKEN_TREBLE_SYSPROP_NEVERALLOW \ 185 BUILD_BROKEN_USES_NETWORK \ 186 BUILD_BROKEN_VENDOR_PROPERTY_NAMESPACE \ 187 BUILD_BROKEN_VINTF_PRODUCT_COPY_FILES \ 188 BUILD_BROKEN_INCORRECT_PARTITION_IMAGES \ 189 BUILD_BROKEN_GENRULE_SANDBOXING \ 190 BUILD_BROKEN_DONT_CHECK_SYSTEMSDK \ 191 192_build_broken_var_list += \ 193 $(foreach m,$(AVAILABLE_BUILD_MODULE_TYPES) \ 194 $(DEFAULT_WARNING_BUILD_MODULE_TYPES) \ 195 $(DEFAULT_ERROR_BUILD_MODULE_TYPES), \ 196 BUILD_BROKEN_USES_$(m)) 197 198_board_true_false_vars := $(_build_broken_var_list) 199_board_strip_readonly_list += $(_build_broken_var_list) \ 200 BUILD_BROKEN_NINJA_USES_ENV_VARS 201 202# Conditional to building on linux, as dex2oat currently does not work on darwin. 203ifeq ($(HOST_OS),linux) 204 WITH_DEXPREOPT ?= true 205endif 206 207# ############################################################### 208# Broken build defaults 209# ############################################################### 210$(foreach v,$(_build_broken_var_list),$(eval $(v) :=)) 211BUILD_BROKEN_NINJA_USES_ENV_VARS := 212 213# Boards may be defined under $(SRC_TARGET_DIR)/board/$(TARGET_DEVICE) 214# or under vendor/*/$(TARGET_DEVICE). Search in both places, but 215# make sure only one exists. 216# Real boards should always be associated with an OEM vendor. 217ifdef TARGET_DEVICE_DIR 218 ifneq ($(origin TARGET_DEVICE_DIR),command line) 219 $(error TARGET_DEVICE_DIR may not be set manually) 220 endif 221 board_config_mk := $(TARGET_DEVICE_DIR)/BoardConfig.mk 222else 223 board_config_mk := \ 224 $(strip $(sort $(wildcard \ 225 $(SRC_TARGET_DIR)/board/$(TARGET_DEVICE)/BoardConfig.mk \ 226 device/generic/goldfish/board/$(TARGET_DEVICE)/BoardConfig.mk \ 227 device/google/cuttlefish/board/$(TARGET_DEVICE)/BoardConfig.mk \ 228 vendor/google/products/cuttlefish/pixel_watch/board/$(TARGET_DEVICE)/BoardConfig.mk \ 229 $(shell test -d device && find -L device -maxdepth 4 -path '*/$(TARGET_DEVICE)/BoardConfig.mk') \ 230 $(shell test -d vendor && find -L vendor -maxdepth 4 -path '*/$(TARGET_DEVICE)/BoardConfig.mk') \ 231 ))) 232 ifeq ($(board_config_mk),) 233 $(error No config file found for TARGET_DEVICE $(TARGET_DEVICE)) 234 endif 235 ifneq ($(words $(board_config_mk)),1) 236 $(error Multiple board config files for TARGET_DEVICE $(TARGET_DEVICE): $(board_config_mk)) 237 endif 238 TARGET_DEVICE_DIR := $(patsubst %/,%,$(dir $(board_config_mk))) 239 .KATI_READONLY := TARGET_DEVICE_DIR 240endif 241 242$(call dump-phase-start,BOARD,,,, build/make/core/board_config.mk) 243ifndef RBC_PRODUCT_CONFIG 244include $(board_config_mk) 245else 246 $(shell mkdir -p $(OUT_DIR)/rbc) 247 $(call dump-variables-rbc, $(OUT_DIR)/rbc/make_vars_pre_board_config.mk) 248 249 $(shell $(OUT_DIR)/mk2rbc \ 250 --mode=write -r --outdir $(OUT_DIR)/rbc \ 251 --boardlauncher=$(OUT_DIR)/rbc/boardlauncher.rbc \ 252 --input_variables=$(OUT_DIR)/rbc/make_vars_pre_board_config.mk \ 253 --makefile_list=$(OUT_DIR)/.module_paths/configuration.list \ 254 $(board_config_mk)) 255 ifneq ($(.SHELLSTATUS),0) 256 $(error board configuration converter failed: $(.SHELLSTATUS)) 257 endif 258 259 $(shell build/soong/scripts/update_out $(OUT_DIR)/rbc/rbc_board_config_results.mk \ 260 $(OUT_DIR)/rbcrun --mode=rbc $(OUT_DIR)/rbc/boardlauncher.rbc) 261 ifneq ($(.SHELLSTATUS),0) 262 $(error board configuration runner failed: $(.SHELLSTATUS)) 263 endif 264 265 include $(OUT_DIR)/rbc/rbc_board_config_results.mk 266endif 267$(call dump-phase-end, build/make/core/board_config.mk) 268 269ifneq (,$(and $(TARGET_ARCH),$(TARGET_ARCH_SUITE))) 270 $(error $(board_config_mk) erroneously sets both TARGET_ARCH and TARGET_ARCH_SUITE) 271endif 272ifeq ($(TARGET_ARCH)$(TARGET_ARCH_SUITE),) 273 $(error Target architectures not defined by board config: $(board_config_mk)) 274endif 275ifeq ($(TARGET_CPU_ABI)$(TARGET_ARCH_SUITE),) 276 $(error TARGET_CPU_ABI not defined by board config: $(board_config_mk)) 277endif 278 279ifneq ($(MALLOC_IMPL),) 280 $(warning *** Unsupported option MALLOC_IMPL defined by board config: $(board_config_mk).) 281 $(error Use `MALLOC_LOW_MEMORY := true` to use low-memory allocator config) 282endif 283board_config_mk := 284 285# Clean up and verify BoardConfig variables 286$(foreach var,$(_board_strip_readonly_list),$(eval $(var) := $$(strip $$($(var))))) 287$(foreach var,$(_board_strip_list),$(eval $(var) := $$(strip $$($(var))))) 288$(foreach var,$(_board_true_false_vars), \ 289 $(if $(filter-out true false,$($(var))), \ 290 $(error Valid values of $(var) are "true", "false", and "". Not "$($(var))"))) 291 292include $(BUILD_SYSTEM)/board_config_wifi.mk 293include $(BUILD_SYSTEM)/board_config_wpa_supplicant.mk 294 295# Set up soong config for "soong_config_value_variable". 296-include vendor/google/build/soong/soong_config_namespace/camera.mk 297 298# Default *_CPU_VARIANT_RUNTIME to CPU_VARIANT if unspecified. 299TARGET_CPU_VARIANT_RUNTIME := $(or $(TARGET_CPU_VARIANT_RUNTIME),$(TARGET_CPU_VARIANT)) 300TARGET_2ND_CPU_VARIANT_RUNTIME := $(or $(TARGET_2ND_CPU_VARIANT_RUNTIME),$(TARGET_2ND_CPU_VARIANT)) 301 302ifdef TARGET_ARCH 303 # The combo makefiles check and set defaults for various CPU configuration 304 combo_target := TARGET_ 305 combo_2nd_arch_prefix := 306 include $(BUILD_SYSTEM)/combo/select.mk 307endif 308 309ifdef TARGET_2ND_ARCH 310 combo_2nd_arch_prefix := $(TARGET_2ND_ARCH_VAR_PREFIX) 311 include $(BUILD_SYSTEM)/combo/select.mk 312endif 313 314.KATI_READONLY := $(_board_strip_readonly_list) 315 316INTERNAL_KERNEL_CMDLINE := $(BOARD_KERNEL_CMDLINE) 317ifneq (,$(BOARD_BOOTCONFIG)$(BOARD_BOOTCONFIG_FILE)) 318 INTERNAL_KERNEL_CMDLINE += bootconfig 319 INTERNAL_BOOTCONFIG := $(BOARD_BOOTCONFIG) 320 INTERNAL_BOOTCONFIG_FILE := $(BOARD_BOOTCONFIG_FILE) 321endif 322 323ifneq ($(filter %64,$(TARGET_ARCH)),) 324 TARGET_IS_64_BIT := true 325endif 326 327ifeq (,$(filter true,$(TARGET_SUPPORTS_32_BIT_APPS) $(TARGET_SUPPORTS_64_BIT_APPS))) 328 TARGET_SUPPORTS_32_BIT_APPS := true 329endif 330 331# Quick check to warn about likely cryptic errors later in the build. 332ifeq ($(TARGET_IS_64_BIT),true) 333 ifeq (,$(filter true false,$(TARGET_SUPPORTS_64_BIT_APPS))) 334 $(error Building a 32-bit-app-only product on a 64-bit device. \ 335 If this is intentional, set TARGET_SUPPORTS_64_BIT_APPS := false) 336 endif 337endif 338 339# "ro.product.cpu.abilist32" and "ro.product.cpu.abilist64" are 340# comma separated lists of the 32 and 64 bit ABIs (in order of 341# preference) that the target supports. If TARGET_CPU_ABI_LIST_{32,64}_BIT 342# are defined by the board config, we use them. Else, we construct 343# these lists based on whether TARGET_IS_64_BIT is set. 344# 345# Note that this assumes that the 2ND_CPU_ABI for a 64 bit target 346# is always 32 bits. If this isn't the case, these variables should 347# be overriden in the board configuration. 348# 349# Similarly, TARGET_NATIVE_BRIDGE_2ND_ABI for a 64 bit target is always 350# 32 bits. Note that all CPU_ABIs are preferred over all NATIVE_BRIDGE_ABIs. 351_target_native_bridge_abi_list_32_bit := 352_target_native_bridge_abi_list_64_bit := 353 354ifeq (,$(TARGET_CPU_ABI_LIST_64_BIT)) 355 ifeq (true|true,$(TARGET_IS_64_BIT)|$(TARGET_SUPPORTS_64_BIT_APPS)) 356 TARGET_CPU_ABI_LIST_64_BIT := $(TARGET_CPU_ABI) $(TARGET_CPU_ABI2) 357 _target_native_bridge_abi_list_64_bit := $(TARGET_NATIVE_BRIDGE_ABI) 358 endif 359endif 360 361# "arm64-v8a-hwasan", the ABI for libraries compiled with HWASAN, is supported 362# in all builds with SANITIZE_TARGET=hwaddress. 363ifneq ($(filter hwaddress,$(SANITIZE_TARGET)),) 364 ifneq ($(filter arm64-v8a,$(TARGET_CPU_ABI_LIST_64_BIT)),) 365 TARGET_CPU_ABI_LIST_64_BIT := arm64-v8a-hwasan $(TARGET_CPU_ABI_LIST_64_BIT) 366 endif 367endif 368 369ifeq (,$(TARGET_CPU_ABI_LIST_32_BIT)) 370 ifneq (true,$(TARGET_IS_64_BIT)) 371 TARGET_CPU_ABI_LIST_32_BIT := $(TARGET_CPU_ABI) $(TARGET_CPU_ABI2) 372 _target_native_bridge_abi_list_32_bit := $(TARGET_NATIVE_BRIDGE_ABI) 373 else 374 ifeq (true,$(TARGET_SUPPORTS_32_BIT_APPS)) 375 # For a 64 bit target, assume that the 2ND_CPU_ABI 376 # is a 32 bit ABI. 377 TARGET_CPU_ABI_LIST_32_BIT := $(TARGET_2ND_CPU_ABI) $(TARGET_2ND_CPU_ABI2) 378 _target_native_bridge_abi_list_32_bit := $(TARGET_NATIVE_BRIDGE_2ND_ABI) 379 endif 380 endif 381endif 382 383# "ro.product.cpu.abilist" is a comma separated list of ABIs (in order 384# of preference) that the target supports. If a TARGET_CPU_ABI_LIST 385# is specified by the board configuration, we use that. If not, we 386# build a list out of the TARGET_CPU_ABIs specified by the config. 387# Add NATIVE_BRIDGE_ABIs at the end to keep order of preference. 388ifeq (,$(TARGET_CPU_ABI_LIST)) 389 TARGET_CPU_ABI_LIST := $(TARGET_CPU_ABI_LIST_64_BIT) $(TARGET_CPU_ABI_LIST_32_BIT) \ 390 $(_target_native_bridge_abi_list_64_bit) $(_target_native_bridge_abi_list_32_bit) 391endif 392 393# Add NATIVE_BRIDGE_ABIs at the end of 32 and 64 bit CPU_ABIs to keep order of preference. 394TARGET_CPU_ABI_LIST_32_BIT += $(_target_native_bridge_abi_list_32_bit) 395TARGET_CPU_ABI_LIST_64_BIT += $(_target_native_bridge_abi_list_64_bit) 396 397# Strip whitespace from the ABI list string. 398TARGET_CPU_ABI_LIST := $(subst $(space),$(comma),$(strip $(TARGET_CPU_ABI_LIST))) 399TARGET_CPU_ABI_LIST_32_BIT := $(subst $(space),$(comma),$(strip $(TARGET_CPU_ABI_LIST_32_BIT))) 400TARGET_CPU_ABI_LIST_64_BIT := $(subst $(space),$(comma),$(strip $(TARGET_CPU_ABI_LIST_64_BIT))) 401 402# Check if config about image building is valid or not. 403define check_image_config 404 $(eval _uc_name := $(call to-upper,$(1))) \ 405 $(eval _lc_name := $(call to-lower,$(1))) \ 406 $(if $(filter $(_lc_name),$(TARGET_COPY_OUT_$(_uc_name))), \ 407 $(if $(BOARD_USES_$(_uc_name)IMAGE),, \ 408 $(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)), \ 409 $(if $(BOARD_USES_$(_uc_name)IMAGE), \ 410 $(error TARGET_COPY_OUT_$(_uc_name) must be set to '$(_lc_name)' to use a $(_lc_name) image))) \ 411 $(eval _uc_name :=) \ 412 $(eval _lc_name :=) 413endef 414 415########################################### 416# Configure whether we're building the system image 417BUILDING_SYSTEM_IMAGE := true 418ifeq ($(PRODUCT_BUILD_SYSTEM_IMAGE),) 419 ifndef PRODUCT_USE_DYNAMIC_PARTITION_SIZE 420 ifndef BOARD_SYSTEMIMAGE_PARTITION_SIZE 421 BUILDING_SYSTEM_IMAGE := 422 endif 423 endif 424else ifeq ($(PRODUCT_BUILD_SYSTEM_IMAGE),false) 425 BUILDING_SYSTEM_IMAGE := 426endif 427.KATI_READONLY := BUILDING_SYSTEM_IMAGE 428 429# Are we building a system_other image 430BUILDING_SYSTEM_OTHER_IMAGE := 431ifeq ($(PRODUCT_BUILD_SYSTEM_OTHER_IMAGE),) 432 ifdef BUILDING_SYSTEM_IMAGE 433 ifeq ($(BOARD_USES_SYSTEM_OTHER_ODEX),true) 434 BUILDING_SYSTEM_OTHER_IMAGE := true 435 endif 436 endif 437else ifeq ($(PRODUCT_BUILD_SYSTEM_OTHER_IMAGE),true) 438 BUILDING_SYSTEM_OTHER_IMAGE := true 439 ifndef BUILDING_SYSTEM_IMAGE 440 $(error PRODUCT_BUILD_SYSTEM_OTHER_IMAGE = true requires building the system image) 441 endif 442endif 443.KATI_READONLY := BUILDING_SYSTEM_OTHER_IMAGE 444 445# Are we building a cache image 446BUILDING_CACHE_IMAGE := 447ifeq ($(PRODUCT_BUILD_CACHE_IMAGE),) 448 ifdef BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE 449 BUILDING_CACHE_IMAGE := true 450 endif 451else ifeq ($(PRODUCT_BUILD_CACHE_IMAGE),true) 452 BUILDING_CACHE_IMAGE := true 453 ifndef BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE 454 $(error PRODUCT_BUILD_CACHE_IMAGE set to true, but BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE not defined) 455 endif 456endif 457.KATI_READONLY := BUILDING_CACHE_IMAGE 458 459# Are we building a boot image 460BUILDING_BOOT_IMAGE := 461ifeq ($(PRODUCT_BUILD_BOOT_IMAGE),) 462 ifeq ($(BOARD_USES_RECOVERY_AS_BOOT),true) 463 BUILDING_BOOT_IMAGE := 464 else ifdef BOARD_PREBUILT_BOOTIMAGE 465 BUILDING_BOOT_IMAGE := 466 else ifdef BOARD_BOOTIMAGE_PARTITION_SIZE 467 BUILDING_BOOT_IMAGE := true 468 else ifneq (,$(foreach kernel,$(BOARD_KERNEL_BINARIES),$(BOARD_$(call to-upper,$(kernel))_BOOTIMAGE_PARTITION_SIZE))) 469 BUILDING_BOOT_IMAGE := true 470 endif 471else ifeq ($(PRODUCT_BUILD_BOOT_IMAGE),true) 472 ifeq ($(BOARD_USES_RECOVERY_AS_BOOT),true) 473 $(warning *** PRODUCT_BUILD_BOOT_IMAGE is true, but so is BOARD_USES_RECOVERY_AS_BOOT.) 474 $(warning *** Skipping building boot image.) 475 BUILDING_BOOT_IMAGE := 476 else 477 BUILDING_BOOT_IMAGE := true 478 endif 479endif 480.KATI_READONLY := BUILDING_BOOT_IMAGE 481 482# Are we building an init boot image 483BUILDING_INIT_BOOT_IMAGE := 484ifeq ($(PRODUCT_BUILD_INIT_BOOT_IMAGE),) 485 ifeq ($(BOARD_USES_RECOVERY_AS_BOOT),true) 486 BUILDING_INIT_BOOT_IMAGE := 487 else ifdef BOARD_PREBUILT_INIT_BOOT_IMAGE 488 BUILDING_INIT_BOOT_IMAGE := 489 else ifdef BOARD_INIT_BOOT_IMAGE_PARTITION_SIZE 490 BUILDING_INIT_BOOT_IMAGE := true 491 endif 492else ifeq ($(PRODUCT_BUILD_INIT_BOOT_IMAGE),true) 493 ifeq ($(BOARD_USES_RECOVERY_AS_BOOT),true) 494 $(error PRODUCT_BUILD_INIT_BOOT_IMAGE is true, but so is BOARD_USES_RECOVERY_AS_BOOT. Use only one option.) 495 else 496 BUILDING_INIT_BOOT_IMAGE := true 497 endif 498endif 499.KATI_READONLY := BUILDING_INIT_BOOT_IMAGE 500 501# Are we building a recovery image 502BUILDING_RECOVERY_IMAGE := 503ifeq ($(PRODUCT_BUILD_RECOVERY_IMAGE),) 504 ifeq ($(BOARD_USES_RECOVERY_AS_BOOT),true) 505 BUILDING_RECOVERY_IMAGE := true 506 else ifeq ($(BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT),true) 507 # Set to true to build recovery resources for vendor_boot 508 BUILDING_RECOVERY_IMAGE := true 509 else ifdef BOARD_RECOVERYIMAGE_PARTITION_SIZE 510 ifeq (,$(filter true, $(TARGET_NO_KERNEL) $(TARGET_NO_RECOVERY))) 511 BUILDING_RECOVERY_IMAGE := true 512 endif 513 endif 514else ifeq ($(PRODUCT_BUILD_RECOVERY_IMAGE),true) 515 BUILDING_RECOVERY_IMAGE := true 516endif 517.KATI_READONLY := BUILDING_RECOVERY_IMAGE 518 519# Are we building a vendor boot image 520BUILDING_VENDOR_BOOT_IMAGE := 521ifdef BOARD_BOOT_HEADER_VERSION 522 ifneq ($(call math_gt_or_eq,$(BOARD_BOOT_HEADER_VERSION),3),) 523 ifeq ($(PRODUCT_BUILD_VENDOR_BOOT_IMAGE),) 524 BUILDING_VENDOR_BOOT_IMAGE := true 525 else ifeq ($(PRODUCT_BUILD_VENDOR_BOOT_IMAGE),true) 526 BUILDING_VENDOR_BOOT_IMAGE := true 527 endif 528 endif 529endif 530.KATI_READONLY := BUILDING_VENDOR_BOOT_IMAGE 531 532# Are we building a vendor kernel boot image 533BUILDING_VENDOR_KERNEL_BOOT_IMAGE := 534ifeq ($(PRODUCT_BUILD_VENDOR_KERNEL_BOOT_IMAGE),true) 535 ifneq ($(BUILDING_VENDOR_BOOT_IMAGE),true) 536 $(error BUILDING_VENDOR_BOOT_IMAGE is required, but BUILDING_VENDOR_BOOT_IMAGE is not true) 537 endif 538 ifndef BOARD_VENDOR_KERNEL_BOOTIMAGE_PARTITION_SIZE 539 $(error BOARD_VENDOR_KERNEL_BOOTIMAGE_PARTITION_SIZE is required when PRODUCT_BUILD_VENDOR_KERNEL_BOOT_IMAGE is true) 540 endif 541 BUILDING_VENDOR_KERNEL_BOOT_IMAGE := true 542else ifeq ($(PRODUCT_BUILD_VENDOR_KERNEL),) 543 ifdef BOARD_VENDOR_KERNEL_BOOTIMAGE_PARTITION_SIZE 544 ifeq ($(BUILDING_VENDOR_BOOT_IMAGE),true) 545 BUILDING_VENDOR_KERNEL_BOOT_IMAGE := true 546 endif 547 endif 548endif # end of PRODUCT_BUILD_VENDOR_KERNEL_BOOT_IMAGE 549.KATI_READONLY := BUILDING_VENDOR_KERNEL_BOOT_IMAGE 550 551# Are we building a ramdisk image 552BUILDING_RAMDISK_IMAGE := true 553ifeq ($(PRODUCT_BUILD_RAMDISK_IMAGE),) 554 # TODO: Be smarter about this. This probably only needs to happen when one of the follow is true: 555 # BUILDING_BOOT_IMAGE 556 # BUILDING_RECOVERY_IMAGE 557else ifeq ($(PRODUCT_BUILD_RAMDISK_IMAGE),false) 558 BUILDING_RAMDISK_IMAGE := 559endif 560.KATI_READONLY := BUILDING_RAMDISK_IMAGE 561 562# Are we building a debug vendor_boot image 563BUILDING_DEBUG_VENDOR_BOOT_IMAGE := 564# Can't build vendor_boot-debug.img if we're not building a ramdisk. 565ifndef BUILDING_RAMDISK_IMAGE 566 ifeq ($(PRODUCT_BUILD_DEBUG_VENDOR_BOOT_IMAGE),true) 567 $(warning PRODUCT_BUILD_DEBUG_VENDOR_BOOT_IMAGE is true, but we're not building a ramdisk image. \ 568 Skip building the debug vendor_boot image.) 569 endif 570# Can't build vendor_boot-debug.img if we're not building a vendor_boot.img. 571else ifndef BUILDING_VENDOR_BOOT_IMAGE 572 ifeq ($(PRODUCT_BUILD_DEBUG_VENDOR_BOOT_IMAGE),true) 573 $(warning PRODUCT_BUILD_DEBUG_VENDOR_BOOT_IMAGE is true, but we're not building a vendor_boot image. \ 574 Skip building the debug vendor_boot image.) 575 endif 576else 577 ifeq ($(PRODUCT_BUILD_DEBUG_VENDOR_BOOT_IMAGE),) 578 BUILDING_DEBUG_VENDOR_BOOT_IMAGE := true 579 else ifeq ($(PRODUCT_BUILD_DEBUG_VENDOR_BOOT_IMAGE),true) 580 BUILDING_DEBUG_VENDOR_BOOT_IMAGE := true 581 endif 582endif 583.KATI_READONLY := BUILDING_DEBUG_VENDOR_BOOT_IMAGE 584 585_has_boot_img_artifact := 586ifneq ($(strip $(TARGET_NO_KERNEL)),true) 587 ifdef BUILDING_BOOT_IMAGE 588 _has_boot_img_artifact := true 589 endif 590 # BUILDING_RECOVERY_IMAGE && BOARD_USES_RECOVERY_AS_BOOT implies that 591 # recovery is being built with the file name *boot.img*, which still counts 592 # as "building boot.img". 593 ifdef BUILDING_RECOVERY_IMAGE 594 ifeq ($(BOARD_USES_RECOVERY_AS_BOOT),true) 595 _has_boot_img_artifact := true 596 endif 597 endif 598endif 599 600# Are we building a debug boot image 601BUILDING_DEBUG_BOOT_IMAGE := 602# Can't build boot-debug.img if we're not building a ramdisk. 603ifndef BUILDING_RAMDISK_IMAGE 604 ifeq ($(PRODUCT_BUILD_DEBUG_BOOT_IMAGE),true) 605 $(warning PRODUCT_BUILD_DEBUG_BOOT_IMAGE is true, but we're not building a ramdisk image. \ 606 Skip building the debug boot image.) 607 endif 608# Can't build boot-debug.img if we're not building a boot.img. 609else ifndef _has_boot_img_artifact 610 ifeq ($(PRODUCT_BUILD_DEBUG_BOOT_IMAGE),true) 611 $(warning PRODUCT_BUILD_DEBUG_BOOT_IMAGE is true, but we're not building a boot image. \ 612 Skip building the debug boot image.) 613 endif 614else ifdef BUILDING_INIT_BOOT_IMAGE 615 ifeq ($(PRODUCT_BUILD_DEBUG_BOOT_IMAGE),true) 616 $(warning PRODUCT_BUILD_DEBUG_BOOT_IMAGE is true, but we don't have a ramdisk in the boot image. \ 617 Skip building the debug boot image.) 618 endif 619else 620 ifeq ($(PRODUCT_BUILD_DEBUG_BOOT_IMAGE),) 621 BUILDING_DEBUG_BOOT_IMAGE := true 622 # Don't build boot-debug.img if we're already building vendor_boot-debug.img. 623 ifdef BUILDING_DEBUG_VENDOR_BOOT_IMAGE 624 BUILDING_DEBUG_BOOT_IMAGE := 625 endif 626 else ifeq ($(PRODUCT_BUILD_DEBUG_BOOT_IMAGE),true) 627 BUILDING_DEBUG_BOOT_IMAGE := true 628 endif 629endif 630.KATI_READONLY := BUILDING_DEBUG_BOOT_IMAGE 631_has_boot_img_artifact := 632 633# Are we building a userdata image 634BUILDING_USERDATA_IMAGE := 635ifeq ($(PRODUCT_BUILD_USERDATA_IMAGE),) 636 ifdef BOARD_USERDATAIMAGE_PARTITION_SIZE 637 BUILDING_USERDATA_IMAGE := true 638 endif 639else ifeq ($(PRODUCT_BUILD_USERDATA_IMAGE),true) 640 BUILDING_USERDATA_IMAGE := true 641endif 642.KATI_READONLY := BUILDING_USERDATA_IMAGE 643 644# Are we building a vbmeta image 645BUILDING_VBMETA_IMAGE := true 646ifeq ($(PRODUCT_BUILD_VBMETA_IMAGE),false) 647 BUILDING_VBMETA_IMAGE := 648endif 649.KATI_READONLY := BUILDING_VBMETA_IMAGE 650 651# Are we building a super_empty image 652BUILDING_SUPER_EMPTY_IMAGE := 653ifeq ($(PRODUCT_BUILD_SUPER_EMPTY_IMAGE),) 654 ifeq (true,$(PRODUCT_USE_DYNAMIC_PARTITIONS)) 655 ifneq ($(BOARD_SUPER_PARTITION_SIZE),) 656 BUILDING_SUPER_EMPTY_IMAGE := true 657 endif 658 endif 659else ifeq ($(PRODUCT_BUILD_SUPER_EMPTY_IMAGE),true) 660 ifneq (true,$(PRODUCT_USE_DYNAMIC_PARTITIONS)) 661 $(error PRODUCT_BUILD_SUPER_EMPTY_IMAGE set to true, but PRODUCT_USE_DYNAMIC_PARTITIONS is not true) 662 endif 663 ifeq ($(BOARD_SUPER_PARTITION_SIZE),) 664 $(error PRODUCT_BUILD_SUPER_EMPTY_IMAGE set to true, but BOARD_SUPER_PARTITION_SIZE is not defined) 665 endif 666 BUILDING_SUPER_EMPTY_IMAGE := true 667endif 668.KATI_READONLY := BUILDING_SUPER_EMPTY_IMAGE 669 670########################################### 671# Now we can substitute with the real value of TARGET_COPY_OUT_VENDOR 672ifeq ($(TARGET_COPY_OUT_VENDOR),$(_vendor_path_placeholder)) 673 TARGET_COPY_OUT_VENDOR := system/vendor 674else ifeq ($(filter vendor system/vendor,$(TARGET_COPY_OUT_VENDOR)),) 675 $(error TARGET_COPY_OUT_VENDOR must be either 'vendor' or 'system/vendor', seeing '$(TARGET_COPY_OUT_VENDOR)'.) 676endif 677PRODUCT_COPY_FILES := $(subst $(_vendor_path_placeholder),$(TARGET_COPY_OUT_VENDOR),$(PRODUCT_COPY_FILES)) 678 679BOARD_USES_VENDORIMAGE := 680ifdef BOARD_PREBUILT_VENDORIMAGE 681 BOARD_USES_VENDORIMAGE := true 682endif 683ifdef BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE 684 BOARD_USES_VENDORIMAGE := true 685endif 686# TODO(b/137169253): For now, some AOSP targets build with prebuilt vendor image. 687# But target's BOARD_PREBUILT_VENDORIMAGE is not filled. 688ifeq ($(TARGET_COPY_OUT_VENDOR),vendor) 689 BOARD_USES_VENDORIMAGE := true 690else ifdef BOARD_USES_VENDORIMAGE 691 $(error TARGET_COPY_OUT_VENDOR must be set to 'vendor' to use a vendor image) 692endif 693.KATI_READONLY := BOARD_USES_VENDORIMAGE 694 695BUILDING_VENDOR_IMAGE := 696ifeq ($(PRODUCT_BUILD_VENDOR_IMAGE),) 697 ifdef BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE 698 BUILDING_VENDOR_IMAGE := true 699 endif 700else ifeq ($(PRODUCT_BUILD_VENDOR_IMAGE),true) 701 BUILDING_VENDOR_IMAGE := true 702 ifndef BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE 703 $(error PRODUCT_BUILD_VENDOR_IMAGE set to true, but BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE not defined) 704 endif 705endif 706ifdef BOARD_PREBUILT_VENDORIMAGE 707 BUILDING_VENDOR_IMAGE := 708endif 709.KATI_READONLY := BUILDING_VENDOR_IMAGE 710 711########################################### 712# Now we can substitute with the real value of TARGET_COPY_OUT_PRODUCT 713ifeq ($(TARGET_COPY_OUT_PRODUCT),$(_product_path_placeholder)) 714TARGET_COPY_OUT_PRODUCT := system/product 715else ifeq ($(filter product system/product,$(TARGET_COPY_OUT_PRODUCT)),) 716$(error TARGET_COPY_OUT_PRODUCT must be either 'product' or 'system/product', seeing '$(TARGET_COPY_OUT_PRODUCT)'.) 717endif 718PRODUCT_COPY_FILES := $(subst $(_product_path_placeholder),$(TARGET_COPY_OUT_PRODUCT),$(PRODUCT_COPY_FILES)) 719 720BOARD_USES_PRODUCTIMAGE := 721ifdef BOARD_PREBUILT_PRODUCTIMAGE 722 BOARD_USES_PRODUCTIMAGE := true 723endif 724ifdef BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE 725 BOARD_USES_PRODUCTIMAGE := true 726endif 727$(call check_image_config,product) 728.KATI_READONLY := BOARD_USES_PRODUCTIMAGE 729 730BUILDING_PRODUCT_IMAGE := 731ifeq ($(PRODUCT_BUILD_PRODUCT_IMAGE),) 732 ifdef BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE 733 BUILDING_PRODUCT_IMAGE := true 734 endif 735else ifeq ($(PRODUCT_BUILD_PRODUCT_IMAGE),true) 736 BUILDING_PRODUCT_IMAGE := true 737 ifndef BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE 738 $(error PRODUCT_BUILD_PRODUCT_IMAGE set to true, but BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE not defined) 739 endif 740endif 741ifdef BOARD_PREBUILT_PRODUCTIMAGE 742 BUILDING_PRODUCT_IMAGE := 743endif 744.KATI_READONLY := BUILDING_PRODUCT_IMAGE 745 746########################################### 747# TODO(b/135957588) TARGET_COPY_OUT_PRODUCT_SERVICES will be set to 748# TARGET_COPY_OUT_PRODUCT as a workaround. 749TARGET_COPY_OUT_PRODUCT_SERVICES := $(TARGET_COPY_OUT_PRODUCT) 750 751########################################### 752# Now we can substitute with the real value of TARGET_COPY_OUT_SYSTEM_EXT 753ifeq ($(TARGET_COPY_OUT_SYSTEM_EXT),$(_system_ext_path_placeholder)) 754TARGET_COPY_OUT_SYSTEM_EXT := system/system_ext 755else ifeq ($(filter system_ext system/system_ext,$(TARGET_COPY_OUT_SYSTEM_EXT)),) 756$(error TARGET_COPY_OUT_SYSTEM_EXT must be either 'system_ext' or 'system/system_ext', seeing '$(TARGET_COPY_OUT_SYSTEM_EXT)'.) 757endif 758PRODUCT_COPY_FILES := $(subst $(_system_ext_path_placeholder),$(TARGET_COPY_OUT_SYSTEM_EXT),$(PRODUCT_COPY_FILES)) 759 760BOARD_USES_SYSTEM_EXTIMAGE := 761ifdef BOARD_PREBUILT_SYSTEM_EXTIMAGE 762 BOARD_USES_SYSTEM_EXTIMAGE := true 763endif 764ifdef BOARD_SYSTEM_EXTIMAGE_FILE_SYSTEM_TYPE 765 BOARD_USES_SYSTEM_EXTIMAGE := true 766endif 767$(call check_image_config,system_ext) 768.KATI_READONLY := BOARD_USES_SYSTEM_EXTIMAGE 769 770BUILDING_SYSTEM_EXT_IMAGE := 771ifeq ($(PRODUCT_BUILD_SYSTEM_EXT_IMAGE),) 772 ifdef BOARD_SYSTEM_EXTIMAGE_FILE_SYSTEM_TYPE 773 BUILDING_SYSTEM_EXT_IMAGE := true 774 endif 775else ifeq ($(PRODUCT_BUILD_SYSTEM_EXT_IMAGE),true) 776 BUILDING_SYSTEM_EXT_IMAGE := true 777 ifndef BOARD_SYSTEM_EXTIMAGE_FILE_SYSTEM_TYPE 778 $(error PRODUCT_BUILD_SYSTEM_EXT_IMAGE set to true, but BOARD_SYSTEM_EXTIMAGE_FILE_SYSTEM_TYPE not defined) 779 endif 780endif 781ifdef BOARD_PREBUILT_SYSTEM_EXTIMAGE 782 BUILDING_SYSTEM_EXT_IMAGE := 783endif 784.KATI_READONLY := BUILDING_SYSTEM_EXT_IMAGE 785 786########################################### 787# Now we can substitute with the real value of TARGET_COPY_OUT_VENDOR_DLKM 788ifeq ($(TARGET_COPY_OUT_VENDOR_DLKM),$(_vendor_dlkm_path_placeholder)) 789 TARGET_COPY_OUT_VENDOR_DLKM := $(TARGET_COPY_OUT_VENDOR)/vendor_dlkm 790else ifeq ($(filter vendor_dlkm system/vendor/vendor_dlkm vendor/vendor_dlkm,$(TARGET_COPY_OUT_VENDOR_DLKM)),) 791 $(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)'.) 792endif 793PRODUCT_COPY_FILES := $(subst $(_vendor_dlkm_path_placeholder),$(TARGET_COPY_OUT_VENDOR_DLKM),$(PRODUCT_COPY_FILES)) 794 795BOARD_USES_VENDOR_DLKMIMAGE := 796ifdef BOARD_PREBUILT_VENDOR_DLKMIMAGE 797 BOARD_USES_VENDOR_DLKMIMAGE := true 798endif 799ifdef BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE 800 BOARD_USES_VENDOR_DLKMIMAGE := true 801endif 802$(call check_image_config,vendor_dlkm) 803 804BUILDING_VENDOR_DLKM_IMAGE := 805ifeq ($(PRODUCT_BUILD_VENDOR_DLKM_IMAGE),) 806 ifdef BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE 807 BUILDING_VENDOR_DLKM_IMAGE := true 808 endif 809else ifeq ($(PRODUCT_BUILD_VENDOR_DLKM_IMAGE),true) 810 BUILDING_VENDOR_DLKM_IMAGE := true 811 ifndef BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE 812 $(error PRODUCT_BUILD_VENDOR_DLKM_IMAGE set to true, but BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE not defined) 813 endif 814endif 815ifdef BOARD_PREBUILT_VENDOR_DLKMIMAGE 816 BUILDING_VENDOR_DLKM_IMAGE := 817endif 818.KATI_READONLY := BUILDING_VENDOR_DLKM_IMAGE 819 820########################################### 821# Now we can substitute with the real value of TARGET_COPY_OUT_ODM 822ifeq ($(TARGET_COPY_OUT_ODM),$(_odm_path_placeholder)) 823 TARGET_COPY_OUT_ODM := $(TARGET_COPY_OUT_VENDOR)/odm 824else ifeq ($(filter odm system/vendor/odm vendor/odm,$(TARGET_COPY_OUT_ODM)),) 825 $(error TARGET_COPY_OUT_ODM must be either 'odm', 'system/vendor/odm' or 'vendor/odm', seeing '$(TARGET_COPY_OUT_ODM)'.) 826endif 827PRODUCT_COPY_FILES := $(subst $(_odm_path_placeholder),$(TARGET_COPY_OUT_ODM),$(PRODUCT_COPY_FILES)) 828 829BOARD_USES_ODMIMAGE := 830ifdef BOARD_PREBUILT_ODMIMAGE 831 BOARD_USES_ODMIMAGE := true 832endif 833ifdef BOARD_ODMIMAGE_FILE_SYSTEM_TYPE 834 BOARD_USES_ODMIMAGE := true 835endif 836$(call check_image_config,odm) 837 838BUILDING_ODM_IMAGE := 839ifeq ($(PRODUCT_BUILD_ODM_IMAGE),) 840 ifdef BOARD_ODMIMAGE_FILE_SYSTEM_TYPE 841 BUILDING_ODM_IMAGE := true 842 endif 843else ifeq ($(PRODUCT_BUILD_ODM_IMAGE),true) 844 BUILDING_ODM_IMAGE := true 845 ifndef BOARD_ODMIMAGE_FILE_SYSTEM_TYPE 846 $(error PRODUCT_BUILD_ODM_IMAGE set to true, but BOARD_ODMIMAGE_FILE_SYSTEM_TYPE not defined) 847 endif 848endif 849ifdef BOARD_PREBUILT_ODMIMAGE 850 BUILDING_ODM_IMAGE := 851endif 852.KATI_READONLY := BUILDING_ODM_IMAGE 853 854 855########################################### 856# Now we can substitute with the real value of TARGET_COPY_OUT_ODM_DLKM 857ifeq ($(TARGET_COPY_OUT_ODM_DLKM),$(_odm_dlkm_path_placeholder)) 858 TARGET_COPY_OUT_ODM_DLKM := $(TARGET_COPY_OUT_VENDOR)/odm_dlkm 859else ifeq ($(filter odm_dlkm system/vendor/odm_dlkm vendor/odm_dlkm,$(TARGET_COPY_OUT_ODM_DLKM)),) 860 $(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)'.) 861endif 862PRODUCT_COPY_FILES := $(subst $(_odm_dlkm_path_placeholder),$(TARGET_COPY_OUT_ODM_DLKM),$(PRODUCT_COPY_FILES)) 863 864BOARD_USES_ODM_DLKMIMAGE := 865ifdef BOARD_PREBUILT_ODM_DLKMIMAGE 866 BOARD_USES_ODM_DLKMIMAGE := true 867endif 868ifdef BOARD_ODM_DLKMIMAGE_FILE_SYSTEM_TYPE 869 BOARD_USES_ODM_DLKMIMAGE := true 870endif 871$(call check_image_config,odm_dlkm) 872 873BUILDING_ODM_DLKM_IMAGE := 874ifeq ($(PRODUCT_BUILD_ODM_DLKM_IMAGE),) 875 ifdef BOARD_ODM_DLKMIMAGE_FILE_SYSTEM_TYPE 876 BUILDING_ODM_DLKM_IMAGE := true 877 endif 878else ifeq ($(PRODUCT_BUILD_ODM_DLKM_IMAGE),true) 879 BUILDING_ODM_DLKM_IMAGE := true 880 ifndef BOARD_ODM_DLKMIMAGE_FILE_SYSTEM_TYPE 881 $(error PRODUCT_BUILD_ODM_DLKM_IMAGE set to true, but BOARD_ODM_DLKMIMAGE_FILE_SYSTEM_TYPE not defined) 882 endif 883endif 884ifdef BOARD_PREBUILT_ODM_DLKMIMAGE 885 BUILDING_ODM_DLKM_IMAGE := 886endif 887.KATI_READONLY := BUILDING_ODM_DLKM_IMAGE 888 889########################################### 890# Now we can substitute with the real value of TARGET_COPY_OUT_SYSTEM_DLKM 891ifeq ($(TARGET_COPY_OUT_SYSTEM_DLKM),$(_system_dlkm_path_placeholder)) 892 TARGET_COPY_OUT_SYSTEM_DLKM := $(TARGET_COPY_OUT_SYSTEM)/system_dlkm 893else ifeq ($(filter system_dlkm system/system_dlkm,$(TARGET_COPY_OUT_SYSTEM_DLKM)),) 894 $(error TARGET_COPY_OUT_SYSTEM_DLKM must be either 'system_dlkm' or 'system/system_dlkm', seeing '$(TARGET_COPY_OUT_ODM_DLKM)'.) 895endif 896PRODUCT_COPY_FILES := $(subst $(_system_dlkm_path_placeholder),$(TARGET_COPY_OUT_SYSTEM_DLKM),$(PRODUCT_COPY_FILES)) 897 898BOARD_USES_SYSTEM_DLKMIMAGE := 899ifdef BOARD_PREBUILT_SYSTEM_DLKMIMAGE 900 BOARD_USES_SYSTEM_DLKMIMAGE := true 901endif 902ifdef BOARD_SYSTEM_DLKMIMAGE_FILE_SYSTEM_TYPE 903 BOARD_USES_SYSTEM_DLKMIMAGE := true 904endif 905$(call check_image_config,system_dlkm) 906 907BUILDING_SYSTEM_DLKM_IMAGE := 908ifeq ($(PRODUCT_BUILD_SYSTEM_DLKM_IMAGE),) 909 ifdef BOARD_SYSTEM_DLKMIMAGE_FILE_SYSTEM_TYPE 910 BUILDING_SYSTEM_DLKM_IMAGE := true 911 endif 912else ifeq ($(PRODUCT_BUILD_SYSTEM_DLKM_IMAGE),true) 913 BUILDING_SYSTEM_DLKM_IMAGE := true 914 ifndef BOARD_SYSTEM_DLKMIMAGE_FILE_SYSTEM_TYPE 915 $(error PRODUCT_BUILD_SYSTEM_DLKM_IMAGE set to true, but BOARD_SYSTEM_DLKMIMAGE_FILE_SYSTEM_TYPE not defined) 916 endif 917endif 918ifdef BOARD_PREBUILT_SYSTEM_DLKMIMAGE 919 BUILDING_SYSTEM_DLKM_IMAGE := 920endif 921.KATI_READONLY := BUILDING_SYSTEM_DLKM_IMAGE 922 923BOARD_USES_PVMFWIMAGE := 924ifeq ($(PRODUCT_BUILD_PVMFW_IMAGE),true) 925 BOARD_USES_PVMFWIMAGE := true 926endif 927.KATI_READONLY := BOARD_USES_PVMFWIMAGE 928 929BOARD_USES_DESKTOP_RECOVERY_IMAGE := 930ifeq ($(PRODUCT_BUILD_DESKTOP_RECOVERY_IMAGE),true) 931 BOARD_USES_DESKTOP_RECOVERY_IMAGE := true 932endif 933.KATI_READONLY := BOARD_USES_DESKTOP_RECOVERY_IMAGE 934 935BOARD_USES_DESKTOP_UPDATE_IMAGE := 936ifeq ($(PRODUCT_BUILD_DESKTOP_UPDATE_IMAGE),true) 937 BOARD_USES_DESKTOP_UPDATE_IMAGE := true 938endif 939.KATI_READONLY := BOARD_USES_DESKTOP_UPDATE_IMAGE 940 941########################################### 942# Ensure consistency among TARGET_RECOVERY_UPDATER_LIBS, AB_OTA_UPDATER, and PRODUCT_OTA_FORCE_NON_AB_PACKAGE. 943TARGET_RECOVERY_UPDATER_LIBS ?= 944ifeq ($(AB_OTA_UPDATER),) 945AB_OTA_UPDATER := true 946endif 947.KATI_READONLY := TARGET_RECOVERY_UPDATER_LIBS AB_OTA_UPDATER 948 949# Ensure that if PRODUCT_OTA_FORCE_NON_AB_PACKAGE == true, then AB_OTA_UPDATER must be true 950ifeq ($(PRODUCT_OTA_FORCE_NON_AB_PACKAGE),true) 951 ifneq ($(AB_OTA_UPDATER),true) 952 $(error AB_OTA_UPDATER must be set to true when PRODUCT_OTA_FORCE_NON_AB_PACKAGE is true) 953 endif 954endif 955 956# In some configurations, A/B and non-A/B may coexist. Check TARGET_OTA_ALLOW_NON_AB 957# to see if non-A/B is supported. 958TARGET_OTA_ALLOW_NON_AB := false 959ifneq ($(AB_OTA_UPDATER),true) 960 TARGET_OTA_ALLOW_NON_AB := true 961else ifeq ($(PRODUCT_OTA_FORCE_NON_AB_PACKAGE),true) 962 TARGET_OTA_ALLOW_NON_AB := true 963endif 964.KATI_READONLY := TARGET_OTA_ALLOW_NON_AB 965 966ifneq ($(TARGET_OTA_ALLOW_NON_AB),true) 967 ifneq ($(strip $(TARGET_RECOVERY_UPDATER_LIBS)),) 968 $(error Do not use TARGET_RECOVERY_UPDATER_LIBS when using TARGET_OTA_ALLOW_NON_AB) 969 endif 970endif 971 972# For Non A/B full OTA, disable brotli compression. 973ifeq ($(TARGET_OTA_ALLOW_NON_AB),true) 974 BOARD_NON_AB_OTA_DISABLE_COMPRESSION := true 975endif 976 977# Quick check for building generic OTA packages. Currently it only supports A/B OTAs. 978ifeq ($(PRODUCT_BUILD_GENERIC_OTA_PACKAGE),true) 979 ifneq ($(AB_OTA_UPDATER),true) 980 $(error PRODUCT_BUILD_GENERIC_OTA_PACKAGE with 'AB_OTA_UPDATER != true' is not supported) 981 endif 982endif 983 984ifdef BOARD_PREBUILT_DTBIMAGE_DIR 985 ifneq ($(BOARD_INCLUDE_DTB_IN_BOOTIMG),true) 986 $(error BOARD_PREBUILT_DTBIMAGE_DIR with 'BOARD_INCLUDE_DTB_IN_BOOTIMG != true' is not supported) 987 endif 988endif 989 990# Check BOARD_VNDK_VERSION 991define check_vndk_version 992 $(eval vndk_path := prebuilts/vndk/v$(1)) \ 993 $(if $(wildcard $(vndk_path)/*/Android.bp),,$(error VNDK version $(1) not found)) 994endef 995 996TARGET_VENDOR_TEST_SUFFIX := /vendor 997 998ifeq (,$(TARGET_BUILD_UNBUNDLED)) 999ifdef PRODUCT_EXTRA_VNDK_VERSIONS 1000 $(foreach v,$(PRODUCT_EXTRA_VNDK_VERSIONS),$(call check_vndk_version,$(v))) 1001endif 1002endif 1003 1004# Ensure that BOARD_SYSTEMSDK_VERSIONS are all within PLATFORM_SYSTEMSDK_VERSIONS 1005_unsupported_systemsdk_versions := $(filter-out $(PLATFORM_SYSTEMSDK_VERSIONS),$(BOARD_SYSTEMSDK_VERSIONS)) 1006ifneq (,$(_unsupported_systemsdk_versions)) 1007 $(error System SDK versions '$(_unsupported_systemsdk_versions)' in BOARD_SYSTEMSDK_VERSIONS are not supported.\ 1008 Supported versions are $(PLATFORM_SYSTEMSDK_VERSIONS)) 1009endif 1010 1011########################################### 1012# BOARD_API_LEVEL for vendor API surface 1013ifdef RELEASE_BOARD_API_LEVEL 1014 ifdef BOARD_API_LEVEL 1015 $(error BOARD_API_LEVEL must not be set manually. The build system automatically sets this value.) 1016 endif 1017 BOARD_API_LEVEL := $(RELEASE_BOARD_API_LEVEL) 1018 .KATI_READONLY := BOARD_API_LEVEL 1019endif 1020 1021########################################### 1022# Handle BUILD_BROKEN_USES_BUILD_* 1023 1024$(foreach m,$(DEFAULT_WARNING_BUILD_MODULE_TYPES),\ 1025 $(if $(filter false,$(BUILD_BROKEN_USES_$(m))),\ 1026 $(KATI_obsolete_var $(m),Please convert to Soong),\ 1027 $(KATI_deprecated_var $(m),Please convert to Soong))) 1028 1029$(if $(filter true,$(BUILD_BROKEN_USES_BUILD_COPY_HEADERS)),\ 1030 $(KATI_deprecated_var BUILD_COPY_HEADERS,See $(CHANGES_URL)\#copy_headers),\ 1031 $(KATI_obsolete_var BUILD_COPY_HEADERS,See $(CHANGES_URL)\#copy_headers)) 1032 1033$(foreach m,$(filter-out BUILD_COPY_HEADERS,$(DEFAULT_ERROR_BUILD_MODULE_TYPES)),\ 1034 $(if $(filter true,$(BUILD_BROKEN_USES_$(m))),\ 1035 $(KATI_deprecated_var $(m),Please convert to Soong),\ 1036 $(KATI_obsolete_var $(m),Please convert to Soong))) 1037 1038ifndef BUILDING_RECOVERY_IMAGE 1039 ifeq (true,$(BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE)) 1040 $(error Should not set BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE if not building recovery image) 1041 endif 1042endif 1043 1044ifndef BUILDING_VENDOR_BOOT_IMAGE 1045 ifeq (true,$(BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT)) 1046 $(error Should not set BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT if not building vendor_boot image) 1047 endif 1048 ifdef BOARD_VENDOR_RAMDISK_FRAGMENTS 1049 $(error Should not set BOARD_VENDOR_RAMDISK_FRAGMENTS if not building vendor_boot image) 1050 endif 1051else # BUILDING_VENDOR_BOOT_IMAGE 1052 ifneq (,$(call math_lt,$(BOARD_BOOT_HEADER_VERSION),4)) 1053 ifdef BOARD_VENDOR_RAMDISK_FRAGMENTS 1054 $(error Should not set BOARD_VENDOR_RAMDISK_FRAGMENTS if \ 1055 BOARD_BOOT_HEADER_VERSION is less than 4) 1056 endif 1057 ifeq (true,$(BOARD_INCLUDE_RECOVERY_RAMDISK_IN_VENDOR_BOOT)) 1058 $(error Should not set BOARD_INCLUDE_RECOVERY_RAMDISK_IN_VENDOR_BOOT if \ 1059 BOARD_BOOT_HEADER_VERSION is less than 4) 1060 endif 1061 endif 1062endif # BUILDING_VENDOR_BOOT_IMAGE 1063 1064ifneq ($(words $(BOARD_VENDOR_RAMDISK_FRAGMENTS)),$(words $(sort $(BOARD_VENDOR_RAMDISK_FRAGMENTS)))) 1065 $(error BOARD_VENDOR_RAMDISK_FRAGMENTS has duplicate entries: $(BOARD_VENDOR_RAMDISK_FRAGMENTS)) 1066endif 1067 1068ifeq (true,$(BOARD_INCLUDE_RECOVERY_RAMDISK_IN_VENDOR_BOOT)) 1069 ifneq (true,$(BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT)) 1070 $(error Should not set BOARD_INCLUDE_RECOVERY_RAMDISK_IN_VENDOR_BOOT if \ 1071 BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT is not set) 1072 endif 1073endif 1074 1075# If BOARD_USES_GENERIC_KERNEL_IMAGE is set, BOARD_USES_RECOVERY_AS_BOOT must not be set. 1076# Devices without a dedicated recovery partition uses BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT to 1077# build recovery into vendor_boot. 1078ifeq (true,$(BOARD_USES_GENERIC_KERNEL_IMAGE)) 1079 ifeq (true,$(BOARD_USES_RECOVERY_AS_BOOT)) 1080 $(error BOARD_USES_RECOVERY_AS_BOOT cannot be true if BOARD_USES_GENERIC_KERNEL_IMAGE is true. \ 1081 Use BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT instead) 1082 endif 1083endif 1084 1085ifeq (true,$(BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT)) 1086 ifeq (true,$(BOARD_USES_RECOVERY_AS_BOOT)) 1087 $(error BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT and BOARD_USES_RECOVERY_AS_BOOT cannot be \ 1088 both true. Recovery resources should be installed to either boot or vendor_boot, but not both) 1089 endif 1090endif 1091