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 293-include external/wpa_supplicant_8/board_config_wpa_supplicant.mk 294 295# Set up soong config for "soong_config_value_variable". 296-include hardware/interfaces/configstore/1.1/default/surfaceflinger.mk 297-include vendor/google/build/soong/soong_config_namespace/camera.mk 298 299# Default *_CPU_VARIANT_RUNTIME to CPU_VARIANT if unspecified. 300TARGET_CPU_VARIANT_RUNTIME := $(or $(TARGET_CPU_VARIANT_RUNTIME),$(TARGET_CPU_VARIANT)) 301TARGET_2ND_CPU_VARIANT_RUNTIME := $(or $(TARGET_2ND_CPU_VARIANT_RUNTIME),$(TARGET_2ND_CPU_VARIANT)) 302 303ifdef TARGET_ARCH 304 # The combo makefiles check and set defaults for various CPU configuration 305 combo_target := TARGET_ 306 combo_2nd_arch_prefix := 307 include $(BUILD_SYSTEM)/combo/select.mk 308endif 309 310ifdef TARGET_2ND_ARCH 311 combo_2nd_arch_prefix := $(TARGET_2ND_ARCH_VAR_PREFIX) 312 include $(BUILD_SYSTEM)/combo/select.mk 313endif 314 315.KATI_READONLY := $(_board_strip_readonly_list) 316 317INTERNAL_KERNEL_CMDLINE := $(BOARD_KERNEL_CMDLINE) 318ifneq (,$(BOARD_BOOTCONFIG)$(BOARD_BOOTCONFIG_FILE)) 319 INTERNAL_KERNEL_CMDLINE += bootconfig 320 INTERNAL_BOOTCONFIG := $(BOARD_BOOTCONFIG) 321 INTERNAL_BOOTCONFIG_FILE := $(BOARD_BOOTCONFIG_FILE) 322endif 323 324ifneq ($(filter %64,$(TARGET_ARCH)),) 325 TARGET_IS_64_BIT := true 326endif 327 328ifeq (,$(filter true,$(TARGET_SUPPORTS_32_BIT_APPS) $(TARGET_SUPPORTS_64_BIT_APPS))) 329 TARGET_SUPPORTS_32_BIT_APPS := true 330endif 331 332# Quick check to warn about likely cryptic errors later in the build. 333ifeq ($(TARGET_IS_64_BIT),true) 334 ifeq (,$(filter true false,$(TARGET_SUPPORTS_64_BIT_APPS))) 335 $(error Building a 32-bit-app-only product on a 64-bit device. \ 336 If this is intentional, set TARGET_SUPPORTS_64_BIT_APPS := false) 337 endif 338endif 339 340# "ro.product.cpu.abilist32" and "ro.product.cpu.abilist64" are 341# comma separated lists of the 32 and 64 bit ABIs (in order of 342# preference) that the target supports. If TARGET_CPU_ABI_LIST_{32,64}_BIT 343# are defined by the board config, we use them. Else, we construct 344# these lists based on whether TARGET_IS_64_BIT is set. 345# 346# Note that this assumes that the 2ND_CPU_ABI for a 64 bit target 347# is always 32 bits. If this isn't the case, these variables should 348# be overriden in the board configuration. 349# 350# Similarly, TARGET_NATIVE_BRIDGE_2ND_ABI for a 64 bit target is always 351# 32 bits. Note that all CPU_ABIs are preferred over all NATIVE_BRIDGE_ABIs. 352_target_native_bridge_abi_list_32_bit := 353_target_native_bridge_abi_list_64_bit := 354 355ifeq (,$(TARGET_CPU_ABI_LIST_64_BIT)) 356 ifeq (true|true,$(TARGET_IS_64_BIT)|$(TARGET_SUPPORTS_64_BIT_APPS)) 357 TARGET_CPU_ABI_LIST_64_BIT := $(TARGET_CPU_ABI) $(TARGET_CPU_ABI2) 358 _target_native_bridge_abi_list_64_bit := $(TARGET_NATIVE_BRIDGE_ABI) 359 endif 360endif 361 362# "arm64-v8a-hwasan", the ABI for libraries compiled with HWASAN, is supported 363# in all builds with SANITIZE_TARGET=hwaddress. 364ifneq ($(filter hwaddress,$(SANITIZE_TARGET)),) 365 ifneq ($(filter arm64-v8a,$(TARGET_CPU_ABI_LIST_64_BIT)),) 366 TARGET_CPU_ABI_LIST_64_BIT := arm64-v8a-hwasan $(TARGET_CPU_ABI_LIST_64_BIT) 367 endif 368endif 369 370ifeq (,$(TARGET_CPU_ABI_LIST_32_BIT)) 371 ifneq (true,$(TARGET_IS_64_BIT)) 372 TARGET_CPU_ABI_LIST_32_BIT := $(TARGET_CPU_ABI) $(TARGET_CPU_ABI2) 373 _target_native_bridge_abi_list_32_bit := $(TARGET_NATIVE_BRIDGE_ABI) 374 else 375 ifeq (true,$(TARGET_SUPPORTS_32_BIT_APPS)) 376 # For a 64 bit target, assume that the 2ND_CPU_ABI 377 # is a 32 bit ABI. 378 TARGET_CPU_ABI_LIST_32_BIT := $(TARGET_2ND_CPU_ABI) $(TARGET_2ND_CPU_ABI2) 379 _target_native_bridge_abi_list_32_bit := $(TARGET_NATIVE_BRIDGE_2ND_ABI) 380 endif 381 endif 382endif 383 384# "ro.product.cpu.abilist" is a comma separated list of ABIs (in order 385# of preference) that the target supports. If a TARGET_CPU_ABI_LIST 386# is specified by the board configuration, we use that. If not, we 387# build a list out of the TARGET_CPU_ABIs specified by the config. 388# Add NATIVE_BRIDGE_ABIs at the end to keep order of preference. 389ifeq (,$(TARGET_CPU_ABI_LIST)) 390 TARGET_CPU_ABI_LIST := $(TARGET_CPU_ABI_LIST_64_BIT) $(TARGET_CPU_ABI_LIST_32_BIT) \ 391 $(_target_native_bridge_abi_list_64_bit) $(_target_native_bridge_abi_list_32_bit) 392endif 393 394# Add NATIVE_BRIDGE_ABIs at the end of 32 and 64 bit CPU_ABIs to keep order of preference. 395TARGET_CPU_ABI_LIST_32_BIT += $(_target_native_bridge_abi_list_32_bit) 396TARGET_CPU_ABI_LIST_64_BIT += $(_target_native_bridge_abi_list_64_bit) 397 398# Strip whitespace from the ABI list string. 399TARGET_CPU_ABI_LIST := $(subst $(space),$(comma),$(strip $(TARGET_CPU_ABI_LIST))) 400TARGET_CPU_ABI_LIST_32_BIT := $(subst $(space),$(comma),$(strip $(TARGET_CPU_ABI_LIST_32_BIT))) 401TARGET_CPU_ABI_LIST_64_BIT := $(subst $(space),$(comma),$(strip $(TARGET_CPU_ABI_LIST_64_BIT))) 402 403# Check if config about image building is valid or not. 404define check_image_config 405 $(eval _uc_name := $(call to-upper,$(1))) \ 406 $(eval _lc_name := $(call to-lower,$(1))) \ 407 $(if $(filter $(_lc_name),$(TARGET_COPY_OUT_$(_uc_name))), \ 408 $(if $(BOARD_USES_$(_uc_name)IMAGE),, \ 409 $(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)), \ 410 $(if $(BOARD_USES_$(_uc_name)IMAGE), \ 411 $(error TARGET_COPY_OUT_$(_uc_name) must be set to '$(_lc_name)' to use a $(_lc_name) image))) \ 412 $(eval _uc_name :=) \ 413 $(eval _lc_name :=) 414endef 415 416########################################### 417# Configure whether we're building the system image 418BUILDING_SYSTEM_IMAGE := true 419ifeq ($(PRODUCT_BUILD_SYSTEM_IMAGE),) 420 ifndef PRODUCT_USE_DYNAMIC_PARTITION_SIZE 421 ifndef BOARD_SYSTEMIMAGE_PARTITION_SIZE 422 BUILDING_SYSTEM_IMAGE := 423 endif 424 endif 425else ifeq ($(PRODUCT_BUILD_SYSTEM_IMAGE),false) 426 BUILDING_SYSTEM_IMAGE := 427endif 428.KATI_READONLY := BUILDING_SYSTEM_IMAGE 429 430# Are we building a system_other image 431BUILDING_SYSTEM_OTHER_IMAGE := 432ifeq ($(PRODUCT_BUILD_SYSTEM_OTHER_IMAGE),) 433 ifdef BUILDING_SYSTEM_IMAGE 434 ifeq ($(BOARD_USES_SYSTEM_OTHER_ODEX),true) 435 BUILDING_SYSTEM_OTHER_IMAGE := true 436 endif 437 endif 438else ifeq ($(PRODUCT_BUILD_SYSTEM_OTHER_IMAGE),true) 439 BUILDING_SYSTEM_OTHER_IMAGE := true 440 ifndef BUILDING_SYSTEM_IMAGE 441 $(error PRODUCT_BUILD_SYSTEM_OTHER_IMAGE = true requires building the system image) 442 endif 443endif 444.KATI_READONLY := BUILDING_SYSTEM_OTHER_IMAGE 445 446# Are we building a cache image 447BUILDING_CACHE_IMAGE := 448ifeq ($(PRODUCT_BUILD_CACHE_IMAGE),) 449 ifdef BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE 450 BUILDING_CACHE_IMAGE := true 451 endif 452else ifeq ($(PRODUCT_BUILD_CACHE_IMAGE),true) 453 BUILDING_CACHE_IMAGE := true 454 ifndef BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE 455 $(error PRODUCT_BUILD_CACHE_IMAGE set to true, but BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE not defined) 456 endif 457endif 458.KATI_READONLY := BUILDING_CACHE_IMAGE 459 460# Are we building a boot image 461BUILDING_BOOT_IMAGE := 462ifeq ($(PRODUCT_BUILD_BOOT_IMAGE),) 463 ifeq ($(BOARD_USES_RECOVERY_AS_BOOT),true) 464 BUILDING_BOOT_IMAGE := 465 else ifdef BOARD_PREBUILT_BOOTIMAGE 466 BUILDING_BOOT_IMAGE := 467 else ifdef BOARD_BOOTIMAGE_PARTITION_SIZE 468 BUILDING_BOOT_IMAGE := true 469 else ifneq (,$(foreach kernel,$(BOARD_KERNEL_BINARIES),$(BOARD_$(call to-upper,$(kernel))_BOOTIMAGE_PARTITION_SIZE))) 470 BUILDING_BOOT_IMAGE := true 471 endif 472else ifeq ($(PRODUCT_BUILD_BOOT_IMAGE),true) 473 ifeq ($(BOARD_USES_RECOVERY_AS_BOOT),true) 474 $(warning *** PRODUCT_BUILD_BOOT_IMAGE is true, but so is BOARD_USES_RECOVERY_AS_BOOT.) 475 $(warning *** Skipping building boot image.) 476 BUILDING_BOOT_IMAGE := 477 else 478 BUILDING_BOOT_IMAGE := true 479 endif 480endif 481.KATI_READONLY := BUILDING_BOOT_IMAGE 482 483# Are we building an init boot image 484BUILDING_INIT_BOOT_IMAGE := 485ifeq ($(PRODUCT_BUILD_INIT_BOOT_IMAGE),) 486 ifeq ($(BOARD_USES_RECOVERY_AS_BOOT),true) 487 BUILDING_INIT_BOOT_IMAGE := 488 else ifdef BOARD_PREBUILT_INIT_BOOT_IMAGE 489 BUILDING_INIT_BOOT_IMAGE := 490 else ifdef BOARD_INIT_BOOT_IMAGE_PARTITION_SIZE 491 BUILDING_INIT_BOOT_IMAGE := true 492 endif 493else ifeq ($(PRODUCT_BUILD_INIT_BOOT_IMAGE),true) 494 ifeq ($(BOARD_USES_RECOVERY_AS_BOOT),true) 495 $(error PRODUCT_BUILD_INIT_BOOT_IMAGE is true, but so is BOARD_USES_RECOVERY_AS_BOOT. Use only one option.) 496 else 497 BUILDING_INIT_BOOT_IMAGE := true 498 endif 499endif 500.KATI_READONLY := BUILDING_INIT_BOOT_IMAGE 501 502# Are we building a recovery image 503BUILDING_RECOVERY_IMAGE := 504ifeq ($(PRODUCT_BUILD_RECOVERY_IMAGE),) 505 ifeq ($(BOARD_USES_RECOVERY_AS_BOOT),true) 506 BUILDING_RECOVERY_IMAGE := true 507 else ifeq ($(BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT),true) 508 # Set to true to build recovery resources for vendor_boot 509 BUILDING_RECOVERY_IMAGE := true 510 else ifdef BOARD_RECOVERYIMAGE_PARTITION_SIZE 511 ifeq (,$(filter true, $(TARGET_NO_KERNEL) $(TARGET_NO_RECOVERY))) 512 BUILDING_RECOVERY_IMAGE := true 513 endif 514 endif 515else ifeq ($(PRODUCT_BUILD_RECOVERY_IMAGE),true) 516 BUILDING_RECOVERY_IMAGE := true 517endif 518.KATI_READONLY := BUILDING_RECOVERY_IMAGE 519 520# Are we building a vendor boot image 521BUILDING_VENDOR_BOOT_IMAGE := 522ifdef BOARD_BOOT_HEADER_VERSION 523 ifneq ($(call math_gt_or_eq,$(BOARD_BOOT_HEADER_VERSION),3),) 524 ifeq ($(PRODUCT_BUILD_VENDOR_BOOT_IMAGE),) 525 BUILDING_VENDOR_BOOT_IMAGE := true 526 else ifeq ($(PRODUCT_BUILD_VENDOR_BOOT_IMAGE),true) 527 BUILDING_VENDOR_BOOT_IMAGE := true 528 endif 529 endif 530endif 531.KATI_READONLY := BUILDING_VENDOR_BOOT_IMAGE 532 533# Are we building a vendor kernel boot image 534BUILDING_VENDOR_KERNEL_BOOT_IMAGE := 535ifeq ($(PRODUCT_BUILD_VENDOR_KERNEL_BOOT_IMAGE),true) 536 ifneq ($(BUILDING_VENDOR_BOOT_IMAGE),true) 537 $(error BUILDING_VENDOR_BOOT_IMAGE is required, but BUILDING_VENDOR_BOOT_IMAGE is not true) 538 endif 539 ifndef BOARD_VENDOR_KERNEL_BOOTIMAGE_PARTITION_SIZE 540 $(error BOARD_VENDOR_KERNEL_BOOTIMAGE_PARTITION_SIZE is required when PRODUCT_BUILD_VENDOR_KERNEL_BOOT_IMAGE is true) 541 endif 542 BUILDING_VENDOR_KERNEL_BOOT_IMAGE := true 543else ifeq ($(PRODUCT_BUILD_VENDOR_KERNEL),) 544 ifdef BOARD_VENDOR_KERNEL_BOOTIMAGE_PARTITION_SIZE 545 ifeq ($(BUILDING_VENDOR_BOOT_IMAGE),true) 546 BUILDING_VENDOR_KERNEL_BOOT_IMAGE := true 547 endif 548 endif 549endif # end of PRODUCT_BUILD_VENDOR_KERNEL_BOOT_IMAGE 550.KATI_READONLY := BUILDING_VENDOR_KERNEL_BOOT_IMAGE 551 552# Are we building a ramdisk image 553BUILDING_RAMDISK_IMAGE := true 554ifeq ($(PRODUCT_BUILD_RAMDISK_IMAGE),) 555 # TODO: Be smarter about this. This probably only needs to happen when one of the follow is true: 556 # BUILDING_BOOT_IMAGE 557 # BUILDING_RECOVERY_IMAGE 558else ifeq ($(PRODUCT_BUILD_RAMDISK_IMAGE),false) 559 BUILDING_RAMDISK_IMAGE := 560endif 561.KATI_READONLY := BUILDING_RAMDISK_IMAGE 562 563# Are we building a debug vendor_boot image 564BUILDING_DEBUG_VENDOR_BOOT_IMAGE := 565# Can't build vendor_boot-debug.img if we're not building a ramdisk. 566ifndef BUILDING_RAMDISK_IMAGE 567 ifeq ($(PRODUCT_BUILD_DEBUG_VENDOR_BOOT_IMAGE),true) 568 $(warning PRODUCT_BUILD_DEBUG_VENDOR_BOOT_IMAGE is true, but we're not building a ramdisk image. \ 569 Skip building the debug vendor_boot image.) 570 endif 571# Can't build vendor_boot-debug.img if we're not building a vendor_boot.img. 572else ifndef BUILDING_VENDOR_BOOT_IMAGE 573 ifeq ($(PRODUCT_BUILD_DEBUG_VENDOR_BOOT_IMAGE),true) 574 $(warning PRODUCT_BUILD_DEBUG_VENDOR_BOOT_IMAGE is true, but we're not building a vendor_boot image. \ 575 Skip building the debug vendor_boot image.) 576 endif 577else 578 ifeq ($(PRODUCT_BUILD_DEBUG_VENDOR_BOOT_IMAGE),) 579 BUILDING_DEBUG_VENDOR_BOOT_IMAGE := true 580 else ifeq ($(PRODUCT_BUILD_DEBUG_VENDOR_BOOT_IMAGE),true) 581 BUILDING_DEBUG_VENDOR_BOOT_IMAGE := true 582 endif 583endif 584.KATI_READONLY := BUILDING_DEBUG_VENDOR_BOOT_IMAGE 585 586_has_boot_img_artifact := 587ifneq ($(strip $(TARGET_NO_KERNEL)),true) 588 ifdef BUILDING_BOOT_IMAGE 589 _has_boot_img_artifact := true 590 endif 591 # BUILDING_RECOVERY_IMAGE && BOARD_USES_RECOVERY_AS_BOOT implies that 592 # recovery is being built with the file name *boot.img*, which still counts 593 # as "building boot.img". 594 ifdef BUILDING_RECOVERY_IMAGE 595 ifeq ($(BOARD_USES_RECOVERY_AS_BOOT),true) 596 _has_boot_img_artifact := true 597 endif 598 endif 599endif 600 601# Are we building a debug boot image 602BUILDING_DEBUG_BOOT_IMAGE := 603# Can't build boot-debug.img if we're not building a ramdisk. 604ifndef BUILDING_RAMDISK_IMAGE 605 ifeq ($(PRODUCT_BUILD_DEBUG_BOOT_IMAGE),true) 606 $(warning PRODUCT_BUILD_DEBUG_BOOT_IMAGE is true, but we're not building a ramdisk image. \ 607 Skip building the debug boot image.) 608 endif 609# Can't build boot-debug.img if we're not building a boot.img. 610else ifndef _has_boot_img_artifact 611 ifeq ($(PRODUCT_BUILD_DEBUG_BOOT_IMAGE),true) 612 $(warning PRODUCT_BUILD_DEBUG_BOOT_IMAGE is true, but we're not building a boot image. \ 613 Skip building the debug boot image.) 614 endif 615else ifdef BUILDING_INIT_BOOT_IMAGE 616 ifeq ($(PRODUCT_BUILD_DEBUG_BOOT_IMAGE),true) 617 $(warning PRODUCT_BUILD_DEBUG_BOOT_IMAGE is true, but we don't have a ramdisk in the boot image. \ 618 Skip building the debug boot image.) 619 endif 620else 621 ifeq ($(PRODUCT_BUILD_DEBUG_BOOT_IMAGE),) 622 BUILDING_DEBUG_BOOT_IMAGE := true 623 # Don't build boot-debug.img if we're already building vendor_boot-debug.img. 624 ifdef BUILDING_DEBUG_VENDOR_BOOT_IMAGE 625 BUILDING_DEBUG_BOOT_IMAGE := 626 endif 627 else ifeq ($(PRODUCT_BUILD_DEBUG_BOOT_IMAGE),true) 628 BUILDING_DEBUG_BOOT_IMAGE := true 629 endif 630endif 631.KATI_READONLY := BUILDING_DEBUG_BOOT_IMAGE 632_has_boot_img_artifact := 633 634# Are we building a userdata image 635BUILDING_USERDATA_IMAGE := 636ifeq ($(PRODUCT_BUILD_USERDATA_IMAGE),) 637 ifdef BOARD_USERDATAIMAGE_PARTITION_SIZE 638 BUILDING_USERDATA_IMAGE := true 639 endif 640else ifeq ($(PRODUCT_BUILD_USERDATA_IMAGE),true) 641 BUILDING_USERDATA_IMAGE := true 642endif 643.KATI_READONLY := BUILDING_USERDATA_IMAGE 644 645# Are we building a vbmeta image 646BUILDING_VBMETA_IMAGE := true 647ifeq ($(PRODUCT_BUILD_VBMETA_IMAGE),false) 648 BUILDING_VBMETA_IMAGE := 649endif 650.KATI_READONLY := BUILDING_VBMETA_IMAGE 651 652# Are we building a super_empty image 653BUILDING_SUPER_EMPTY_IMAGE := 654ifeq ($(PRODUCT_BUILD_SUPER_EMPTY_IMAGE),) 655 ifeq (true,$(PRODUCT_USE_DYNAMIC_PARTITIONS)) 656 ifneq ($(BOARD_SUPER_PARTITION_SIZE),) 657 BUILDING_SUPER_EMPTY_IMAGE := true 658 endif 659 endif 660else ifeq ($(PRODUCT_BUILD_SUPER_EMPTY_IMAGE),true) 661 ifneq (true,$(PRODUCT_USE_DYNAMIC_PARTITIONS)) 662 $(error PRODUCT_BUILD_SUPER_EMPTY_IMAGE set to true, but PRODUCT_USE_DYNAMIC_PARTITIONS is not true) 663 endif 664 ifeq ($(BOARD_SUPER_PARTITION_SIZE),) 665 $(error PRODUCT_BUILD_SUPER_EMPTY_IMAGE set to true, but BOARD_SUPER_PARTITION_SIZE is not defined) 666 endif 667 BUILDING_SUPER_EMPTY_IMAGE := true 668endif 669.KATI_READONLY := BUILDING_SUPER_EMPTY_IMAGE 670 671########################################### 672# Now we can substitute with the real value of TARGET_COPY_OUT_VENDOR 673ifeq ($(TARGET_COPY_OUT_VENDOR),$(_vendor_path_placeholder)) 674 TARGET_COPY_OUT_VENDOR := system/vendor 675else ifeq ($(filter vendor system/vendor,$(TARGET_COPY_OUT_VENDOR)),) 676 $(error TARGET_COPY_OUT_VENDOR must be either 'vendor' or 'system/vendor', seeing '$(TARGET_COPY_OUT_VENDOR)'.) 677endif 678PRODUCT_COPY_FILES := $(subst $(_vendor_path_placeholder),$(TARGET_COPY_OUT_VENDOR),$(PRODUCT_COPY_FILES)) 679 680BOARD_USES_VENDORIMAGE := 681ifdef BOARD_PREBUILT_VENDORIMAGE 682 BOARD_USES_VENDORIMAGE := true 683endif 684ifdef BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE 685 BOARD_USES_VENDORIMAGE := true 686endif 687# TODO(b/137169253): For now, some AOSP targets build with prebuilt vendor image. 688# But target's BOARD_PREBUILT_VENDORIMAGE is not filled. 689ifeq ($(TARGET_COPY_OUT_VENDOR),vendor) 690 BOARD_USES_VENDORIMAGE := true 691else ifdef BOARD_USES_VENDORIMAGE 692 $(error TARGET_COPY_OUT_VENDOR must be set to 'vendor' to use a vendor image) 693endif 694.KATI_READONLY := BOARD_USES_VENDORIMAGE 695 696BUILDING_VENDOR_IMAGE := 697ifeq ($(PRODUCT_BUILD_VENDOR_IMAGE),) 698 ifdef BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE 699 BUILDING_VENDOR_IMAGE := true 700 endif 701else ifeq ($(PRODUCT_BUILD_VENDOR_IMAGE),true) 702 BUILDING_VENDOR_IMAGE := true 703 ifndef BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE 704 $(error PRODUCT_BUILD_VENDOR_IMAGE set to true, but BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE not defined) 705 endif 706endif 707ifdef BOARD_PREBUILT_VENDORIMAGE 708 BUILDING_VENDOR_IMAGE := 709endif 710.KATI_READONLY := BUILDING_VENDOR_IMAGE 711 712########################################### 713# Now we can substitute with the real value of TARGET_COPY_OUT_PRODUCT 714ifeq ($(TARGET_COPY_OUT_PRODUCT),$(_product_path_placeholder)) 715TARGET_COPY_OUT_PRODUCT := system/product 716else ifeq ($(filter product system/product,$(TARGET_COPY_OUT_PRODUCT)),) 717$(error TARGET_COPY_OUT_PRODUCT must be either 'product' or 'system/product', seeing '$(TARGET_COPY_OUT_PRODUCT)'.) 718endif 719PRODUCT_COPY_FILES := $(subst $(_product_path_placeholder),$(TARGET_COPY_OUT_PRODUCT),$(PRODUCT_COPY_FILES)) 720 721BOARD_USES_PRODUCTIMAGE := 722ifdef BOARD_PREBUILT_PRODUCTIMAGE 723 BOARD_USES_PRODUCTIMAGE := true 724endif 725ifdef BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE 726 BOARD_USES_PRODUCTIMAGE := true 727endif 728$(call check_image_config,product) 729.KATI_READONLY := BOARD_USES_PRODUCTIMAGE 730 731BUILDING_PRODUCT_IMAGE := 732ifeq ($(PRODUCT_BUILD_PRODUCT_IMAGE),) 733 ifdef BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE 734 BUILDING_PRODUCT_IMAGE := true 735 endif 736else ifeq ($(PRODUCT_BUILD_PRODUCT_IMAGE),true) 737 BUILDING_PRODUCT_IMAGE := true 738 ifndef BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE 739 $(error PRODUCT_BUILD_PRODUCT_IMAGE set to true, but BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE not defined) 740 endif 741endif 742ifdef BOARD_PREBUILT_PRODUCTIMAGE 743 BUILDING_PRODUCT_IMAGE := 744endif 745.KATI_READONLY := BUILDING_PRODUCT_IMAGE 746 747########################################### 748# TODO(b/135957588) TARGET_COPY_OUT_PRODUCT_SERVICES will be set to 749# TARGET_COPY_OUT_PRODUCT as a workaround. 750TARGET_COPY_OUT_PRODUCT_SERVICES := $(TARGET_COPY_OUT_PRODUCT) 751 752########################################### 753# Now we can substitute with the real value of TARGET_COPY_OUT_SYSTEM_EXT 754ifeq ($(TARGET_COPY_OUT_SYSTEM_EXT),$(_system_ext_path_placeholder)) 755TARGET_COPY_OUT_SYSTEM_EXT := system/system_ext 756else ifeq ($(filter system_ext system/system_ext,$(TARGET_COPY_OUT_SYSTEM_EXT)),) 757$(error TARGET_COPY_OUT_SYSTEM_EXT must be either 'system_ext' or 'system/system_ext', seeing '$(TARGET_COPY_OUT_SYSTEM_EXT)'.) 758endif 759PRODUCT_COPY_FILES := $(subst $(_system_ext_path_placeholder),$(TARGET_COPY_OUT_SYSTEM_EXT),$(PRODUCT_COPY_FILES)) 760 761BOARD_USES_SYSTEM_EXTIMAGE := 762ifdef BOARD_PREBUILT_SYSTEM_EXTIMAGE 763 BOARD_USES_SYSTEM_EXTIMAGE := true 764endif 765ifdef BOARD_SYSTEM_EXTIMAGE_FILE_SYSTEM_TYPE 766 BOARD_USES_SYSTEM_EXTIMAGE := true 767endif 768$(call check_image_config,system_ext) 769.KATI_READONLY := BOARD_USES_SYSTEM_EXTIMAGE 770 771BUILDING_SYSTEM_EXT_IMAGE := 772ifeq ($(PRODUCT_BUILD_SYSTEM_EXT_IMAGE),) 773 ifdef BOARD_SYSTEM_EXTIMAGE_FILE_SYSTEM_TYPE 774 BUILDING_SYSTEM_EXT_IMAGE := true 775 endif 776else ifeq ($(PRODUCT_BUILD_SYSTEM_EXT_IMAGE),true) 777 BUILDING_SYSTEM_EXT_IMAGE := true 778 ifndef BOARD_SYSTEM_EXTIMAGE_FILE_SYSTEM_TYPE 779 $(error PRODUCT_BUILD_SYSTEM_EXT_IMAGE set to true, but BOARD_SYSTEM_EXTIMAGE_FILE_SYSTEM_TYPE not defined) 780 endif 781endif 782ifdef BOARD_PREBUILT_SYSTEM_EXTIMAGE 783 BUILDING_SYSTEM_EXT_IMAGE := 784endif 785.KATI_READONLY := BUILDING_SYSTEM_EXT_IMAGE 786 787########################################### 788# Now we can substitute with the real value of TARGET_COPY_OUT_VENDOR_DLKM 789ifeq ($(TARGET_COPY_OUT_VENDOR_DLKM),$(_vendor_dlkm_path_placeholder)) 790 TARGET_COPY_OUT_VENDOR_DLKM := $(TARGET_COPY_OUT_VENDOR)/vendor_dlkm 791else ifeq ($(filter vendor_dlkm system/vendor/vendor_dlkm vendor/vendor_dlkm,$(TARGET_COPY_OUT_VENDOR_DLKM)),) 792 $(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)'.) 793endif 794PRODUCT_COPY_FILES := $(subst $(_vendor_dlkm_path_placeholder),$(TARGET_COPY_OUT_VENDOR_DLKM),$(PRODUCT_COPY_FILES)) 795 796BOARD_USES_VENDOR_DLKMIMAGE := 797ifdef BOARD_PREBUILT_VENDOR_DLKMIMAGE 798 BOARD_USES_VENDOR_DLKMIMAGE := true 799endif 800ifdef BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE 801 BOARD_USES_VENDOR_DLKMIMAGE := true 802endif 803$(call check_image_config,vendor_dlkm) 804 805BUILDING_VENDOR_DLKM_IMAGE := 806ifeq ($(PRODUCT_BUILD_VENDOR_DLKM_IMAGE),) 807 ifdef BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE 808 BUILDING_VENDOR_DLKM_IMAGE := true 809 endif 810else ifeq ($(PRODUCT_BUILD_VENDOR_DLKM_IMAGE),true) 811 BUILDING_VENDOR_DLKM_IMAGE := true 812 ifndef BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE 813 $(error PRODUCT_BUILD_VENDOR_DLKM_IMAGE set to true, but BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE not defined) 814 endif 815endif 816ifdef BOARD_PREBUILT_VENDOR_DLKMIMAGE 817 BUILDING_VENDOR_DLKM_IMAGE := 818endif 819.KATI_READONLY := BUILDING_VENDOR_DLKM_IMAGE 820 821########################################### 822# Now we can substitute with the real value of TARGET_COPY_OUT_ODM 823ifeq ($(TARGET_COPY_OUT_ODM),$(_odm_path_placeholder)) 824 TARGET_COPY_OUT_ODM := $(TARGET_COPY_OUT_VENDOR)/odm 825else ifeq ($(filter odm system/vendor/odm vendor/odm,$(TARGET_COPY_OUT_ODM)),) 826 $(error TARGET_COPY_OUT_ODM must be either 'odm', 'system/vendor/odm' or 'vendor/odm', seeing '$(TARGET_COPY_OUT_ODM)'.) 827endif 828PRODUCT_COPY_FILES := $(subst $(_odm_path_placeholder),$(TARGET_COPY_OUT_ODM),$(PRODUCT_COPY_FILES)) 829 830BOARD_USES_ODMIMAGE := 831ifdef BOARD_PREBUILT_ODMIMAGE 832 BOARD_USES_ODMIMAGE := true 833endif 834ifdef BOARD_ODMIMAGE_FILE_SYSTEM_TYPE 835 BOARD_USES_ODMIMAGE := true 836endif 837$(call check_image_config,odm) 838 839BUILDING_ODM_IMAGE := 840ifeq ($(PRODUCT_BUILD_ODM_IMAGE),) 841 ifdef BOARD_ODMIMAGE_FILE_SYSTEM_TYPE 842 BUILDING_ODM_IMAGE := true 843 endif 844else ifeq ($(PRODUCT_BUILD_ODM_IMAGE),true) 845 BUILDING_ODM_IMAGE := true 846 ifndef BOARD_ODMIMAGE_FILE_SYSTEM_TYPE 847 $(error PRODUCT_BUILD_ODM_IMAGE set to true, but BOARD_ODMIMAGE_FILE_SYSTEM_TYPE not defined) 848 endif 849endif 850ifdef BOARD_PREBUILT_ODMIMAGE 851 BUILDING_ODM_IMAGE := 852endif 853.KATI_READONLY := BUILDING_ODM_IMAGE 854 855 856########################################### 857# Now we can substitute with the real value of TARGET_COPY_OUT_ODM_DLKM 858ifeq ($(TARGET_COPY_OUT_ODM_DLKM),$(_odm_dlkm_path_placeholder)) 859 TARGET_COPY_OUT_ODM_DLKM := $(TARGET_COPY_OUT_VENDOR)/odm_dlkm 860else ifeq ($(filter odm_dlkm system/vendor/odm_dlkm vendor/odm_dlkm,$(TARGET_COPY_OUT_ODM_DLKM)),) 861 $(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)'.) 862endif 863PRODUCT_COPY_FILES := $(subst $(_odm_dlkm_path_placeholder),$(TARGET_COPY_OUT_ODM_DLKM),$(PRODUCT_COPY_FILES)) 864 865BOARD_USES_ODM_DLKMIMAGE := 866ifdef BOARD_PREBUILT_ODM_DLKMIMAGE 867 BOARD_USES_ODM_DLKMIMAGE := true 868endif 869ifdef BOARD_ODM_DLKMIMAGE_FILE_SYSTEM_TYPE 870 BOARD_USES_ODM_DLKMIMAGE := true 871endif 872$(call check_image_config,odm_dlkm) 873 874BUILDING_ODM_DLKM_IMAGE := 875ifeq ($(PRODUCT_BUILD_ODM_DLKM_IMAGE),) 876 ifdef BOARD_ODM_DLKMIMAGE_FILE_SYSTEM_TYPE 877 BUILDING_ODM_DLKM_IMAGE := true 878 endif 879else ifeq ($(PRODUCT_BUILD_ODM_DLKM_IMAGE),true) 880 BUILDING_ODM_DLKM_IMAGE := true 881 ifndef BOARD_ODM_DLKMIMAGE_FILE_SYSTEM_TYPE 882 $(error PRODUCT_BUILD_ODM_DLKM_IMAGE set to true, but BOARD_ODM_DLKMIMAGE_FILE_SYSTEM_TYPE not defined) 883 endif 884endif 885ifdef BOARD_PREBUILT_ODM_DLKMIMAGE 886 BUILDING_ODM_DLKM_IMAGE := 887endif 888.KATI_READONLY := BUILDING_ODM_DLKM_IMAGE 889 890########################################### 891# Now we can substitute with the real value of TARGET_COPY_OUT_SYSTEM_DLKM 892ifeq ($(TARGET_COPY_OUT_SYSTEM_DLKM),$(_system_dlkm_path_placeholder)) 893 TARGET_COPY_OUT_SYSTEM_DLKM := $(TARGET_COPY_OUT_SYSTEM)/system_dlkm 894else ifeq ($(filter system_dlkm system/system_dlkm,$(TARGET_COPY_OUT_SYSTEM_DLKM)),) 895 $(error TARGET_COPY_OUT_SYSTEM_DLKM must be either 'system_dlkm' or 'system/system_dlkm', seeing '$(TARGET_COPY_OUT_ODM_DLKM)'.) 896endif 897PRODUCT_COPY_FILES := $(subst $(_system_dlkm_path_placeholder),$(TARGET_COPY_OUT_SYSTEM_DLKM),$(PRODUCT_COPY_FILES)) 898 899BOARD_USES_SYSTEM_DLKMIMAGE := 900ifdef BOARD_PREBUILT_SYSTEM_DLKMIMAGE 901 BOARD_USES_SYSTEM_DLKMIMAGE := true 902endif 903ifdef BOARD_SYSTEM_DLKMIMAGE_FILE_SYSTEM_TYPE 904 BOARD_USES_SYSTEM_DLKMIMAGE := true 905endif 906$(call check_image_config,system_dlkm) 907 908BUILDING_SYSTEM_DLKM_IMAGE := 909ifeq ($(PRODUCT_BUILD_SYSTEM_DLKM_IMAGE),) 910 ifdef BOARD_SYSTEM_DLKMIMAGE_FILE_SYSTEM_TYPE 911 BUILDING_SYSTEM_DLKM_IMAGE := true 912 endif 913else ifeq ($(PRODUCT_BUILD_SYSTEM_DLKM_IMAGE),true) 914 BUILDING_SYSTEM_DLKM_IMAGE := true 915 ifndef BOARD_SYSTEM_DLKMIMAGE_FILE_SYSTEM_TYPE 916 $(error PRODUCT_BUILD_SYSTEM_DLKM_IMAGE set to true, but BOARD_SYSTEM_DLKMIMAGE_FILE_SYSTEM_TYPE not defined) 917 endif 918endif 919ifdef BOARD_PREBUILT_SYSTEM_DLKMIMAGE 920 BUILDING_SYSTEM_DLKM_IMAGE := 921endif 922.KATI_READONLY := BUILDING_SYSTEM_DLKM_IMAGE 923 924BOARD_USES_PVMFWIMAGE := 925ifeq ($(PRODUCT_BUILD_PVMFW_IMAGE),true) 926 BOARD_USES_PVMFWIMAGE := true 927endif 928.KATI_READONLY := BOARD_USES_PVMFWIMAGE 929 930BOARD_USES_DESKTOP_RECOVERY_IMAGE := 931ifeq ($(PRODUCT_BUILD_DESKTOP_RECOVERY_IMAGE),true) 932 BOARD_USES_DESKTOP_RECOVERY_IMAGE := true 933endif 934.KATI_READONLY := BOARD_USES_DESKTOP_RECOVERY_IMAGE 935 936BOARD_USES_DESKTOP_UPDATE_IMAGE := 937ifeq ($(PRODUCT_BUILD_DESKTOP_UPDATE_IMAGE),true) 938 BOARD_USES_DESKTOP_UPDATE_IMAGE := true 939endif 940.KATI_READONLY := BOARD_USES_DESKTOP_UPDATE_IMAGE 941 942########################################### 943# Ensure consistency among TARGET_RECOVERY_UPDATER_LIBS, AB_OTA_UPDATER, and PRODUCT_OTA_FORCE_NON_AB_PACKAGE. 944TARGET_RECOVERY_UPDATER_LIBS ?= 945ifeq ($(AB_OTA_UPDATER),) 946AB_OTA_UPDATER := true 947endif 948.KATI_READONLY := TARGET_RECOVERY_UPDATER_LIBS AB_OTA_UPDATER 949 950# Ensure that if PRODUCT_OTA_FORCE_NON_AB_PACKAGE == true, then AB_OTA_UPDATER must be true 951ifeq ($(PRODUCT_OTA_FORCE_NON_AB_PACKAGE),true) 952 ifneq ($(AB_OTA_UPDATER),true) 953 $(error AB_OTA_UPDATER must be set to true when PRODUCT_OTA_FORCE_NON_AB_PACKAGE is true) 954 endif 955endif 956 957# In some configurations, A/B and non-A/B may coexist. Check TARGET_OTA_ALLOW_NON_AB 958# to see if non-A/B is supported. 959TARGET_OTA_ALLOW_NON_AB := false 960ifneq ($(AB_OTA_UPDATER),true) 961 TARGET_OTA_ALLOW_NON_AB := true 962else ifeq ($(PRODUCT_OTA_FORCE_NON_AB_PACKAGE),true) 963 TARGET_OTA_ALLOW_NON_AB := true 964endif 965.KATI_READONLY := TARGET_OTA_ALLOW_NON_AB 966 967ifneq ($(TARGET_OTA_ALLOW_NON_AB),true) 968 ifneq ($(strip $(TARGET_RECOVERY_UPDATER_LIBS)),) 969 $(error Do not use TARGET_RECOVERY_UPDATER_LIBS when using TARGET_OTA_ALLOW_NON_AB) 970 endif 971endif 972 973# For Non A/B full OTA, disable brotli compression. 974ifeq ($(TARGET_OTA_ALLOW_NON_AB),true) 975 BOARD_NON_AB_OTA_DISABLE_COMPRESSION := true 976endif 977 978# Quick check for building generic OTA packages. Currently it only supports A/B OTAs. 979ifeq ($(PRODUCT_BUILD_GENERIC_OTA_PACKAGE),true) 980 ifneq ($(AB_OTA_UPDATER),true) 981 $(error PRODUCT_BUILD_GENERIC_OTA_PACKAGE with 'AB_OTA_UPDATER != true' is not supported) 982 endif 983endif 984 985ifdef BOARD_PREBUILT_DTBIMAGE_DIR 986 ifneq ($(BOARD_INCLUDE_DTB_IN_BOOTIMG),true) 987 $(error BOARD_PREBUILT_DTBIMAGE_DIR with 'BOARD_INCLUDE_DTB_IN_BOOTIMG != true' is not supported) 988 endif 989endif 990 991# Check BOARD_VNDK_VERSION 992define check_vndk_version 993 $(eval vndk_path := prebuilts/vndk/v$(1)) \ 994 $(if $(wildcard $(vndk_path)/*/Android.bp),,$(error VNDK version $(1) not found)) 995endef 996 997TARGET_VENDOR_TEST_SUFFIX := /vendor 998 999ifeq (,$(TARGET_BUILD_UNBUNDLED)) 1000ifdef PRODUCT_EXTRA_VNDK_VERSIONS 1001 $(foreach v,$(PRODUCT_EXTRA_VNDK_VERSIONS),$(call check_vndk_version,$(v))) 1002endif 1003endif 1004 1005# Ensure that BOARD_SYSTEMSDK_VERSIONS are all within PLATFORM_SYSTEMSDK_VERSIONS 1006_unsupported_systemsdk_versions := $(filter-out $(PLATFORM_SYSTEMSDK_VERSIONS),$(BOARD_SYSTEMSDK_VERSIONS)) 1007ifneq (,$(_unsupported_systemsdk_versions)) 1008 $(error System SDK versions '$(_unsupported_systemsdk_versions)' in BOARD_SYSTEMSDK_VERSIONS are not supported.\ 1009 Supported versions are $(PLATFORM_SYSTEMSDK_VERSIONS)) 1010endif 1011 1012########################################### 1013# BOARD_API_LEVEL for vendor API surface 1014ifdef RELEASE_BOARD_API_LEVEL 1015 ifdef BOARD_API_LEVEL 1016 $(error BOARD_API_LEVEL must not be set manually. The build system automatically sets this value.) 1017 endif 1018 BOARD_API_LEVEL := $(RELEASE_BOARD_API_LEVEL) 1019 .KATI_READONLY := BOARD_API_LEVEL 1020endif 1021 1022########################################### 1023# Handle BUILD_BROKEN_USES_BUILD_* 1024 1025$(foreach m,$(DEFAULT_WARNING_BUILD_MODULE_TYPES),\ 1026 $(if $(filter false,$(BUILD_BROKEN_USES_$(m))),\ 1027 $(KATI_obsolete_var $(m),Please convert to Soong),\ 1028 $(KATI_deprecated_var $(m),Please convert to Soong))) 1029 1030$(if $(filter true,$(BUILD_BROKEN_USES_BUILD_COPY_HEADERS)),\ 1031 $(KATI_deprecated_var BUILD_COPY_HEADERS,See $(CHANGES_URL)\#copy_headers),\ 1032 $(KATI_obsolete_var BUILD_COPY_HEADERS,See $(CHANGES_URL)\#copy_headers)) 1033 1034$(foreach m,$(filter-out BUILD_COPY_HEADERS,$(DEFAULT_ERROR_BUILD_MODULE_TYPES)),\ 1035 $(if $(filter true,$(BUILD_BROKEN_USES_$(m))),\ 1036 $(KATI_deprecated_var $(m),Please convert to Soong),\ 1037 $(KATI_obsolete_var $(m),Please convert to Soong))) 1038 1039ifndef BUILDING_RECOVERY_IMAGE 1040 ifeq (true,$(BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE)) 1041 $(error Should not set BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE if not building recovery image) 1042 endif 1043endif 1044 1045ifndef BUILDING_VENDOR_BOOT_IMAGE 1046 ifeq (true,$(BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT)) 1047 $(error Should not set BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT if not building vendor_boot image) 1048 endif 1049 ifdef BOARD_VENDOR_RAMDISK_FRAGMENTS 1050 $(error Should not set BOARD_VENDOR_RAMDISK_FRAGMENTS if not building vendor_boot image) 1051 endif 1052else # BUILDING_VENDOR_BOOT_IMAGE 1053 ifneq (,$(call math_lt,$(BOARD_BOOT_HEADER_VERSION),4)) 1054 ifdef BOARD_VENDOR_RAMDISK_FRAGMENTS 1055 $(error Should not set BOARD_VENDOR_RAMDISK_FRAGMENTS if \ 1056 BOARD_BOOT_HEADER_VERSION is less than 4) 1057 endif 1058 ifeq (true,$(BOARD_INCLUDE_RECOVERY_RAMDISK_IN_VENDOR_BOOT)) 1059 $(error Should not set BOARD_INCLUDE_RECOVERY_RAMDISK_IN_VENDOR_BOOT if \ 1060 BOARD_BOOT_HEADER_VERSION is less than 4) 1061 endif 1062 endif 1063endif # BUILDING_VENDOR_BOOT_IMAGE 1064 1065ifneq ($(words $(BOARD_VENDOR_RAMDISK_FRAGMENTS)),$(words $(sort $(BOARD_VENDOR_RAMDISK_FRAGMENTS)))) 1066 $(error BOARD_VENDOR_RAMDISK_FRAGMENTS has duplicate entries: $(BOARD_VENDOR_RAMDISK_FRAGMENTS)) 1067endif 1068 1069ifeq (true,$(BOARD_INCLUDE_RECOVERY_RAMDISK_IN_VENDOR_BOOT)) 1070 ifneq (true,$(BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT)) 1071 $(error Should not set BOARD_INCLUDE_RECOVERY_RAMDISK_IN_VENDOR_BOOT if \ 1072 BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT is not set) 1073 endif 1074endif 1075 1076# If BOARD_USES_GENERIC_KERNEL_IMAGE is set, BOARD_USES_RECOVERY_AS_BOOT must not be set. 1077# Devices without a dedicated recovery partition uses BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT to 1078# build recovery into vendor_boot. 1079ifeq (true,$(BOARD_USES_GENERIC_KERNEL_IMAGE)) 1080 ifeq (true,$(BOARD_USES_RECOVERY_AS_BOOT)) 1081 $(error BOARD_USES_RECOVERY_AS_BOOT cannot be true if BOARD_USES_GENERIC_KERNEL_IMAGE is true. \ 1082 Use BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT instead) 1083 endif 1084endif 1085 1086ifeq (true,$(BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT)) 1087 ifeq (true,$(BOARD_USES_RECOVERY_AS_BOOT)) 1088 $(error BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT and BOARD_USES_RECOVERY_AS_BOOT cannot be \ 1089 both true. Recovery resources should be installed to either boot or vendor_boot, but not both) 1090 endif 1091endif 1092