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