2019-02-26 20:34:03 +08:00
#
# Copyright (C) 2019 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# ###############################################################
# This file includes BoardConfig.mk for the device being built,
2020-07-31 05:23:31 +08:00
# and checks the variable defined therein.
2019-02-26 20:34:03 +08:00
# ###############################################################
2020-12-14 23:17:13 +08:00
_board_strip_readonly_list :=
_board_strip_readonly_list += BOARD_BOOTLOADER_IN_UPDATE_PACKAGE
_board_strip_readonly_list += BOARD_EGL_CFG
_board_strip_readonly_list += BOARD_HAVE_BLUETOOTH
_board_strip_readonly_list += BOARD_INSTALLER_CMDLINE
_board_strip_readonly_list += BOARD_KERNEL_CMDLINE
2021-01-14 02:45:04 +08:00
_board_strip_readonly_list += BOARD_BOOTCONFIG
2020-12-14 23:17:13 +08:00
_board_strip_readonly_list += BOARD_KERNEL_BASE
_board_strip_readonly_list += BOARD_USES_GENERIC_AUDIO
_board_strip_readonly_list += BOARD_USES_RECOVERY_AS_BOOT
_board_strip_readonly_list += BOARD_VENDOR_USE_AKMD
_board_strip_readonly_list += BOARD_WPA_SUPPLICANT_DRIVER
_board_strip_readonly_list += BOARD_WLAN_DEVICE
_board_strip_readonly_list += TARGET_BOARD_PLATFORM
_board_strip_readonly_list += TARGET_BOARD_PLATFORM_GPU
_board_strip_readonly_list += TARGET_BOOTLOADER_BOARD_NAME
_board_strip_readonly_list += TARGET_FS_CONFIG_GEN
_board_strip_readonly_list += TARGET_NO_BOOTLOADER
_board_strip_readonly_list += TARGET_NO_KERNEL
_board_strip_readonly_list += TARGET_NO_RECOVERY
_board_strip_readonly_list += TARGET_NO_RADIOIMAGE
_board_strip_readonly_list += TARGET_HARDWARE_3D
_board_strip_readonly_list += WITH_DEXPREOPT
# Arch variables
_board_strip_readonly_list += TARGET_ARCH
_board_strip_readonly_list += TARGET_ARCH_VARIANT
_board_strip_readonly_list += TARGET_CPU_ABI
_board_strip_readonly_list += TARGET_CPU_ABI2
_board_strip_readonly_list += TARGET_CPU_VARIANT
_board_strip_readonly_list += TARGET_CPU_VARIANT_RUNTIME
_board_strip_readonly_list += TARGET_2ND_ARCH
_board_strip_readonly_list += TARGET_2ND_ARCH_VARIANT
_board_strip_readonly_list += TARGET_2ND_CPU_ABI
_board_strip_readonly_list += TARGET_2ND_CPU_ABI2
_board_strip_readonly_list += TARGET_2ND_CPU_VARIANT
_board_strip_readonly_list += TARGET_2ND_CPU_VARIANT_RUNTIME
2020-11-27 18:35:17 +08:00
# TARGET_ARCH_SUITE is an alternative arch configuration to TARGET_ARCH (and related variables),
# that can be used for soong-only builds to build for several architectures at once.
# Allowed values currently are "ndk" and "mainline_sdk".
_board_strip_readonly_list += TARGET_ARCH_SUITE
2019-02-26 23:49:25 +08:00
# File system variables
2020-12-14 23:17:13 +08:00
_board_strip_readonly_list += BOARD_FLASH_BLOCK_SIZE
_board_strip_readonly_list += BOARD_BOOTIMAGE_PARTITION_SIZE
_board_strip_readonly_list += BOARD_RECOVERYIMAGE_PARTITION_SIZE
_board_strip_readonly_list += BOARD_SYSTEMIMAGE_PARTITION_SIZE
_board_strip_readonly_list += BOARD_SYSTEMIMAGE_FILE_SYSTEM_TYPE
_board_strip_readonly_list += BOARD_USERDATAIMAGE_FILE_SYSTEM_TYPE
_board_strip_readonly_list += BOARD_USERDATAIMAGE_PARTITION_SIZE
_board_strip_readonly_list += BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE
_board_strip_readonly_list += BOARD_CACHEIMAGE_PARTITION_SIZE
_board_strip_readonly_list += BOARD_VENDORIMAGE_PARTITION_SIZE
_board_strip_readonly_list += BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE
_board_strip_readonly_list += BOARD_PRODUCTIMAGE_PARTITION_SIZE
_board_strip_readonly_list += BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE
_board_strip_readonly_list += BOARD_SYSTEM_EXTIMAGE_PARTITION_SIZE
_board_strip_readonly_list += BOARD_SYSTEM_EXTIMAGE_FILE_SYSTEM_TYPE
_board_strip_readonly_list += BOARD_ODMIMAGE_PARTITION_SIZE
_board_strip_readonly_list += BOARD_ODMIMAGE_FILE_SYSTEM_TYPE
_board_strip_readonly_list += BOARD_VENDOR_DLKMIMAGE_PARTITION_SIZE
_board_strip_readonly_list += BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE
_board_strip_readonly_list += BOARD_ODM_DLKMIMAGE_PARTITION_SIZE
_board_strip_readonly_list += BOARD_ODM_DLKMIMAGE_FILE_SYSTEM_TYPE
2019-02-26 23:49:25 +08:00
# Logical partitions related variables.
2020-12-14 23:17:13 +08:00
_board_strip_readonly_list += BOARD_SYSTEMIMAGE_PARTITION_RESERVED_SIZE
_board_strip_readonly_list += BOARD_VENDORIMAGE_PARTITION_RESERVED_SIZE
_board_strip_readonly_list += BOARD_ODMIMAGE_PARTITION_RESERVED_SIZE
_board_strip_readonly_list += BOARD_VENDOR_DLKMIMAGE_PARTITION_RESERVED_SIZE
_board_strip_readonly_list += BOARD_ODM_DLKMIMAGE_PARTITION_RESERVED_SIZE
_board_strip_readonly_list += BOARD_PRODUCTIMAGE_PARTITION_RESERVED_SIZE
_board_strip_readonly_list += BOARD_SYSTEM_EXTIMAGE_PARTITION_RESERVED_SIZE
_board_strip_readonly_list += BOARD_SUPER_PARTITION_SIZE
_board_strip_readonly_list += BOARD_SUPER_PARTITION_GROUPS
2019-02-26 23:49:25 +08:00
2020-08-06 05:30:32 +08:00
# Kernel related variables
2020-12-14 23:17:13 +08:00
_board_strip_readonly_list += BOARD_KERNEL_BINARIES
_board_strip_readonly_list += BOARD_KERNEL_MODULE_INTERFACE_VERSIONS
2020-08-06 05:30:32 +08:00
2020-10-09 02:08:20 +08:00
# Variables related to generic kernel image (GKI) and generic boot image
# - BOARD_USES_GENERIC_KERNEL_IMAGE is the global variable that defines if the
# board uses GKI and generic boot image.
# Update mechanism of the boot image is not enforced by this variable.
2020-10-09 02:54:02 +08:00
# - BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE controls whether the recovery image
# contains a kernel or not.
2020-10-10 05:29:39 +08:00
# - BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT controls whether ramdisk
# recovery resources are built to vendor_boot.
2020-10-13 03:42:12 +08:00
# - BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT controls whether GSI AVB keys are
# built to vendor_boot.
2020-11-10 03:52:52 +08:00
# - BOARD_COPY_BOOT_IMAGE_TO_TARGET_FILES controls whether boot images in $OUT are added
# to target files package directly.
2020-12-14 23:17:13 +08:00
_board_strip_readonly_list += BOARD_USES_GENERIC_KERNEL_IMAGE
_board_strip_readonly_list += BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE
_board_strip_readonly_list += BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT
_board_strip_readonly_list += BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT
_board_strip_readonly_list += BOARD_COPY_BOOT_IMAGE_TO_TARGET_FILES
2020-10-09 02:08:20 +08:00
2020-12-10 18:42:47 +08:00
# Defines the list of logical vendor ramdisk names to build or include in vendor_boot.
_board_strip_readonly_list += BOARD_VENDOR_RAMDISK_FRAGMENTS
2019-02-26 23:49:25 +08:00
_build_broken_var_list := \
BUILD_BROKEN_DUP_RULES \
2020-07-15 18:35:12 +08:00
BUILD_BROKEN_DUP_SYSPROP \
2020-03-17 17:49:49 +08:00
BUILD_BROKEN_ELF_PREBUILT_PRODUCT_COPY_FILES \
2020-10-19 12:31:58 +08:00
BUILD_BROKEN_ENFORCE_SYSPROP_OWNER \
2020-07-15 18:35:12 +08:00
BUILD_BROKEN_MISSING_REQUIRED_MODULES \
2020-01-10 08:15:11 +08:00
BUILD_BROKEN_OUTSIDE_INCLUDE_DIRS \
2019-09-18 00:45:09 +08:00
BUILD_BROKEN_PREBUILT_ELF_FILES \
2019-10-17 18:32:59 +08:00
BUILD_BROKEN_TREBLE_SYSPROP_NEVERALLOW \
2019-04-10 00:56:48 +08:00
BUILD_BROKEN_USES_NETWORK \
2021-02-03 17:17:49 +08:00
BUILD_BROKEN_VENDOR_PROPERTY_NAMESPACE \
2020-01-10 08:15:11 +08:00
BUILD_BROKEN_VINTF_PRODUCT_COPY_FILES \
2019-02-26 23:49:25 +08:00
2019-04-18 03:25:09 +08:00
_build_broken_var_list += \
$( foreach m,$( AVAILABLE_BUILD_MODULE_TYPES) \
$( DEFAULT_WARNING_BUILD_MODULE_TYPES) \
$( DEFAULT_ERROR_BUILD_MODULE_TYPES) , \
BUILD_BROKEN_USES_$( m) )
2019-02-26 23:49:25 +08:00
_board_true_false_vars := $( _build_broken_var_list)
2020-01-03 12:08:10 +08:00
_board_strip_readonly_list += $( _build_broken_var_list) \
BUILD_BROKEN_NINJA_USES_ENV_VARS
2019-02-26 23:49:25 +08:00
2019-02-27 22:38:27 +08:00
# Conditional to building on linux, as dex2oat currently does not work on darwin.
i f e q ( $( HOST_OS ) , l i n u x )
WITH_DEXPREOPT := true
e n d i f
2019-02-26 21:37:28 +08:00
# ###############################################################
# Broken build defaults
# ###############################################################
2019-04-10 00:56:48 +08:00
$(foreach v,$(_build_broken_var_list),$(eval $(v) : =))
2020-01-03 12:08:10 +08:00
BUILD_BROKEN_NINJA_USES_ENV_VARS :=
2019-02-26 21:37:28 +08:00
2019-02-26 20:34:03 +08:00
# Boards may be defined under $(SRC_TARGET_DIR)/board/$(TARGET_DEVICE)
# or under vendor/*/$(TARGET_DEVICE). Search in both places, but
# make sure only one exists.
# Real boards should always be associated with an OEM vendor.
i f d e f T A R G E T _ D E V I C E _ D I R
ifneq ( $( origin TARGET_DEVICE_DIR) ,command line)
$( error TARGET_DEVICE_DIR may not be set manually)
endif
board_config_mk := $( TARGET_DEVICE_DIR) /BoardConfig.mk
e l s e
board_config_mk := \
$( strip $( sort $( wildcard \
$( SRC_TARGET_DIR) /board/$( TARGET_DEVICE) /BoardConfig.mk \
$( shell test -d device && find -L device -maxdepth 4 -path '*/$(TARGET_DEVICE)/BoardConfig.mk' ) \
$( shell test -d vendor && find -L vendor -maxdepth 4 -path '*/$(TARGET_DEVICE)/BoardConfig.mk' ) \
) ) )
ifeq ( $( board_config_mk) ,)
$( error No config file found for TARGET_DEVICE $( TARGET_DEVICE) )
endif
ifneq ( $( words $( board_config_mk) ) ,1)
$( error Multiple board config files for TARGET_DEVICE $( TARGET_DEVICE) : $( board_config_mk) )
endif
TARGET_DEVICE_DIR := $( patsubst %/,%,$( dir $( board_config_mk) ) )
.KATI_READONLY := TARGET_DEVICE_DIR
e n d i f
2020-11-27 19:00:38 +08:00
2019-02-26 20:34:03 +08:00
i n c l u d e $( board_config_mk )
2020-11-27 19:00:38 +08:00
i f n e q ( , $( and $ ( TARGET_ARCH ) ,$ ( TARGET_ARCH_SUITE ) ) )
$( error $( board_config_mk) erroneously sets both TARGET_ARCH and TARGET_ARCH_SUITE)
e n d i f
i f e q ( $( TARGET_ARCH ) $( TARGET_ARCH_SUITE ) , )
$( error Target architectures not defined by board config: $( board_config_mk) )
2019-02-26 20:34:03 +08:00
e n d i f
2020-11-27 19:00:38 +08:00
i f e q ( $( TARGET_CPU_ABI ) $( TARGET_ARCH_SUITE ) , )
$( error TARGET_CPU_ABI not defined by board config: $( board_config_mk) )
e n d i f
2019-02-26 20:34:03 +08:00
i f n e q ( $( MALLOC_IMPL ) , )
$( warning *** Unsupported option MALLOC_IMPL defined by board config: $( board_config_mk) .)
$( error Use ` MALLOC_SVELTE := true ` to configure jemalloc for low-memory)
e n d i f
board_config_mk :=
2019-02-26 23:49:25 +08:00
# Clean up and verify BoardConfig variables
$(foreach var,$(_board_strip_readonly_list),$(eval $(var) : = $$( strip $ $ ( $ ( var ) ) ) ))
$( foreach var ,$ ( _board_true_false_vars ) , \
$( if $( filter-out true false,$( $( var) ) ) , \
$( error Valid values of $( var) are "true" , "false" , and "" . Not " $( $( var) ) " ) ) )
2019-02-26 21:37:28 +08:00
# Default *_CPU_VARIANT_RUNTIME to CPU_VARIANT if unspecified.
TARGET_CPU_VARIANT_RUNTIME := $( or $( TARGET_CPU_VARIANT_RUNTIME) ,$( TARGET_CPU_VARIANT) )
TARGET_2ND_CPU_VARIANT_RUNTIME := $( or $( TARGET_2ND_CPU_VARIANT_RUNTIME) ,$( TARGET_2ND_CPU_VARIANT) )
2020-11-27 19:00:38 +08:00
i f d e f T A R G E T _ A R C H
# The combo makefiles check and set defaults for various CPU configuration
combo_target := TARGET_
combo_2nd_arch_prefix :=
include $( BUILD_SYSTEM) /combo/select.mk
e n d i f
2019-03-01 01:15:57 +08:00
i f d e f T A R G E T _ 2 N D _ A R C H
combo_2nd_arch_prefix := $( TARGET_2ND_ARCH_VAR_PREFIX)
include $( BUILD_SYSTEM) /combo/select.mk
e n d i f
2019-02-26 23:49:25 +08:00
.KATI_READONLY := $( _board_strip_readonly_list)
INTERNAL_KERNEL_CMDLINE := $( BOARD_KERNEL_CMDLINE)
2021-03-11 08:28:49 +08:00
i f n e q ( , $( BOARD_BOOTCONFIG ) )
INTERNAL_KERNEL_CMDLINE += bootconfig
INTERNAL_BOOTCONFIG := $( BOARD_BOOTCONFIG)
e n d i f
2020-11-27 19:00:38 +08:00
2019-02-26 21:37:28 +08:00
i f n e q ( $( filter %64,$ ( TARGET_ARCH ) ) , )
TARGET_IS_64_BIT := true
e n d i f
i f e q ( , $( filter true ,$ ( TARGET_SUPPORTS_ 32_BIT_APPS ) $ ( TARGET_SUPPORTS_ 64_BIT_APPS ) ) )
TARGET_SUPPORTS_32_BIT_APPS := true
e n d i f
2020-07-31 05:23:31 +08:00
# Quick check to warn about likely cryptic errors later in the build.
2019-02-26 21:37:28 +08:00
i f e q ( $( TARGET_IS_ 64_BIT ) , t r u e )
ifeq ( ,$( filter true false,$( TARGET_SUPPORTS_64_BIT_APPS) ) )
2019-05-10 22:29:28 +08:00
$( error Building a 32-bit-app-only product on a 64-bit device. \
2019-02-26 21:37:28 +08:00
If this is intentional, set TARGET_SUPPORTS_64_BIT_APPS := false )
endif
e n d i f
# "ro.product.cpu.abilist32" and "ro.product.cpu.abilist64" are
# comma separated lists of the 32 and 64 bit ABIs (in order of
# preference) that the target supports. If TARGET_CPU_ABI_LIST_{32,64}_BIT
# are defined by the board config, we use them. Else, we construct
# these lists based on whether TARGET_IS_64_BIT is set.
#
# Note that this assumes that the 2ND_CPU_ABI for a 64 bit target
# is always 32 bits. If this isn't the case, these variables should
# be overriden in the board configuration.
Add native bridge abis to corresponding abilists
This uses TARGET_NATIVE_BRIDGE_*_ABI variable to automatically generate
abi lists.
Sample properties for x86+arm:
ro.product.cpu.abilist=x86,armeabi-v7a,armeabi
ro.product.cpu.abilist32=x86,armeabi-v7a,armeabi
ro.product.cpu.abilist64=
Sample properties for x86_64+arm64:
ro.product.cpu.abilist=x86_64,x86,arm64-v8a,armeabi-v7a,armeabi
ro.product.cpu.abilist32=x86,armeabi-v7a,armeabi
ro.product.cpu.abilist64=x86_64,arm64-v8a
Bug: http://b/77159578
Bug: http://b/28684022
Test: make cf_x86_64_phone, deploys, check adb shell getprop | grep abi
Change-Id: I42a73f5c627b9d9f44e31cc5ad84238e1050f52a
2019-07-29 22:23:19 +08:00
#
# Similarly, TARGET_NATIVE_BRIDGE_2ND_ABI for a 64 bit target is always
# 32 bits. Note that all CPU_ABIs are preferred over all NATIVE_BRIDGE_ABIs.
_target_native_bridge_abi_list_32_bit :=
_target_native_bridge_abi_list_64_bit :=
2019-02-26 21:37:28 +08:00
i f e q ( , $( TARGET_CPU_ABI_LIST_ 64_BIT ) )
ifeq ( true| true,$( TARGET_IS_64_BIT) | $( TARGET_SUPPORTS_64_BIT_APPS) )
TARGET_CPU_ABI_LIST_64_BIT := $( TARGET_CPU_ABI) $( TARGET_CPU_ABI2)
Add native bridge abis to corresponding abilists
This uses TARGET_NATIVE_BRIDGE_*_ABI variable to automatically generate
abi lists.
Sample properties for x86+arm:
ro.product.cpu.abilist=x86,armeabi-v7a,armeabi
ro.product.cpu.abilist32=x86,armeabi-v7a,armeabi
ro.product.cpu.abilist64=
Sample properties for x86_64+arm64:
ro.product.cpu.abilist=x86_64,x86,arm64-v8a,armeabi-v7a,armeabi
ro.product.cpu.abilist32=x86,armeabi-v7a,armeabi
ro.product.cpu.abilist64=x86_64,arm64-v8a
Bug: http://b/77159578
Bug: http://b/28684022
Test: make cf_x86_64_phone, deploys, check adb shell getprop | grep abi
Change-Id: I42a73f5c627b9d9f44e31cc5ad84238e1050f52a
2019-07-29 22:23:19 +08:00
_target_native_bridge_abi_list_64_bit := $( TARGET_NATIVE_BRIDGE_ABI)
2019-02-26 21:37:28 +08:00
endif
e n d i f
2019-05-17 05:09:35 +08:00
# "arm64-v8a-hwasan", the ABI for libraries compiled with HWASAN, is supported
# in all builds with SANITIZE_TARGET=hwaddress.
i f n e q ( $( filter hwaddress ,$ ( SANITIZE_TARGET ) ) , )
ifneq ( $( filter arm64-v8a,$( TARGET_CPU_ABI_LIST_64_BIT) ) ,)
TARGET_CPU_ABI_LIST_64_BIT := arm64-v8a-hwasan $( TARGET_CPU_ABI_LIST_64_BIT)
endif
e n d i f
2019-02-26 21:37:28 +08:00
i f e q ( , $( TARGET_CPU_ABI_LIST_ 32_BIT ) )
ifneq ( true,$( TARGET_IS_64_BIT) )
TARGET_CPU_ABI_LIST_32_BIT := $( TARGET_CPU_ABI) $( TARGET_CPU_ABI2)
Add native bridge abis to corresponding abilists
This uses TARGET_NATIVE_BRIDGE_*_ABI variable to automatically generate
abi lists.
Sample properties for x86+arm:
ro.product.cpu.abilist=x86,armeabi-v7a,armeabi
ro.product.cpu.abilist32=x86,armeabi-v7a,armeabi
ro.product.cpu.abilist64=
Sample properties for x86_64+arm64:
ro.product.cpu.abilist=x86_64,x86,arm64-v8a,armeabi-v7a,armeabi
ro.product.cpu.abilist32=x86,armeabi-v7a,armeabi
ro.product.cpu.abilist64=x86_64,arm64-v8a
Bug: http://b/77159578
Bug: http://b/28684022
Test: make cf_x86_64_phone, deploys, check adb shell getprop | grep abi
Change-Id: I42a73f5c627b9d9f44e31cc5ad84238e1050f52a
2019-07-29 22:23:19 +08:00
_target_native_bridge_abi_list_32_bit := $( TARGET_NATIVE_BRIDGE_ABI)
2019-02-26 21:37:28 +08:00
else
ifeq ( true,$( TARGET_SUPPORTS_32_BIT_APPS) )
# For a 64 bit target, assume that the 2ND_CPU_ABI
# is a 32 bit ABI.
TARGET_CPU_ABI_LIST_32_BIT := $( TARGET_2ND_CPU_ABI) $( TARGET_2ND_CPU_ABI2)
Add native bridge abis to corresponding abilists
This uses TARGET_NATIVE_BRIDGE_*_ABI variable to automatically generate
abi lists.
Sample properties for x86+arm:
ro.product.cpu.abilist=x86,armeabi-v7a,armeabi
ro.product.cpu.abilist32=x86,armeabi-v7a,armeabi
ro.product.cpu.abilist64=
Sample properties for x86_64+arm64:
ro.product.cpu.abilist=x86_64,x86,arm64-v8a,armeabi-v7a,armeabi
ro.product.cpu.abilist32=x86,armeabi-v7a,armeabi
ro.product.cpu.abilist64=x86_64,arm64-v8a
Bug: http://b/77159578
Bug: http://b/28684022
Test: make cf_x86_64_phone, deploys, check adb shell getprop | grep abi
Change-Id: I42a73f5c627b9d9f44e31cc5ad84238e1050f52a
2019-07-29 22:23:19 +08:00
_target_native_bridge_abi_list_32_bit := $( TARGET_NATIVE_BRIDGE_2ND_ABI)
2019-02-26 21:37:28 +08:00
endif
endif
e n d i f
# "ro.product.cpu.abilist" is a comma separated list of ABIs (in order
# of preference) that the target supports. If a TARGET_CPU_ABI_LIST
# is specified by the board configuration, we use that. If not, we
# build a list out of the TARGET_CPU_ABIs specified by the config.
Add native bridge abis to corresponding abilists
This uses TARGET_NATIVE_BRIDGE_*_ABI variable to automatically generate
abi lists.
Sample properties for x86+arm:
ro.product.cpu.abilist=x86,armeabi-v7a,armeabi
ro.product.cpu.abilist32=x86,armeabi-v7a,armeabi
ro.product.cpu.abilist64=
Sample properties for x86_64+arm64:
ro.product.cpu.abilist=x86_64,x86,arm64-v8a,armeabi-v7a,armeabi
ro.product.cpu.abilist32=x86,armeabi-v7a,armeabi
ro.product.cpu.abilist64=x86_64,arm64-v8a
Bug: http://b/77159578
Bug: http://b/28684022
Test: make cf_x86_64_phone, deploys, check adb shell getprop | grep abi
Change-Id: I42a73f5c627b9d9f44e31cc5ad84238e1050f52a
2019-07-29 22:23:19 +08:00
# Add NATIVE_BRIDGE_ABIs at the end to keep order of preference.
2019-02-26 21:37:28 +08:00
i f e q ( , $( TARGET_CPU_ABI_LIST ) )
2020-04-18 06:46:55 +08:00
TARGET_CPU_ABI_LIST := $( TARGET_CPU_ABI_LIST_64_BIT) $( TARGET_CPU_ABI_LIST_32_BIT) \
$( _target_native_bridge_abi_list_64_bit) $( _target_native_bridge_abi_list_32_bit)
2019-02-26 21:37:28 +08:00
e n d i f
Add native bridge abis to corresponding abilists
This uses TARGET_NATIVE_BRIDGE_*_ABI variable to automatically generate
abi lists.
Sample properties for x86+arm:
ro.product.cpu.abilist=x86,armeabi-v7a,armeabi
ro.product.cpu.abilist32=x86,armeabi-v7a,armeabi
ro.product.cpu.abilist64=
Sample properties for x86_64+arm64:
ro.product.cpu.abilist=x86_64,x86,arm64-v8a,armeabi-v7a,armeabi
ro.product.cpu.abilist32=x86,armeabi-v7a,armeabi
ro.product.cpu.abilist64=x86_64,arm64-v8a
Bug: http://b/77159578
Bug: http://b/28684022
Test: make cf_x86_64_phone, deploys, check adb shell getprop | grep abi
Change-Id: I42a73f5c627b9d9f44e31cc5ad84238e1050f52a
2019-07-29 22:23:19 +08:00
# Add NATIVE_BRIDGE_ABIs at the end of 32 and 64 bit CPU_ABIs to keep order of preference.
TARGET_CPU_ABI_LIST_32_BIT += $( _target_native_bridge_abi_list_32_bit)
TARGET_CPU_ABI_LIST_64_BIT += $( _target_native_bridge_abi_list_64_bit)
2019-02-26 21:37:28 +08:00
# Strip whitespace from the ABI list string.
TARGET_CPU_ABI_LIST := $( subst $( space) ,$( comma) ,$( strip $( TARGET_CPU_ABI_LIST) ) )
TARGET_CPU_ABI_LIST_32_BIT := $( subst $( space) ,$( comma) ,$( strip $( TARGET_CPU_ABI_LIST_32_BIT) ) )
TARGET_CPU_ABI_LIST_64_BIT := $( subst $( space) ,$( comma) ,$( strip $( TARGET_CPU_ABI_LIST_64_BIT) ) )
2019-07-12 11:51:37 +08:00
# Check if config about image building is valid or not.
d e f i n e c h e c k _ i m a g e _ c o n f i g
$( eval _uc_name := $( call to-upper,$( 1) ) ) \
$( eval _lc_name := $( call to-lower,$( 1) ) ) \
$( if $( filter $( _lc_name) ,$( TARGET_COPY_OUT_$( _uc_name) ) ) , \
$( if $( BOARD_USES_$( _uc_name) IMAGE) ,, \
$( 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 ) ) , \
$( if $( BOARD_USES_$( _uc_name) IMAGE) , \
$( error TARGET_COPY_OUT_$( _uc_name) must be set to '$(_lc_name)' to use a $( _lc_name) image) ) ) \
$( eval _uc_name := ) \
$( eval _lc_name := )
e n d e f
2019-02-26 20:34:03 +08:00
###########################################
# Now we can substitute with the real value of TARGET_COPY_OUT_RAMDISK
i f e q ( $( BOARD_BUILD_SYSTEM_ROOT_IMAGE ) , t r u e )
TARGET_COPY_OUT_RAMDISK := $( TARGET_COPY_OUT_ROOT)
e n d i f
Adding boot-debug.img and ramdisk-debug.img
The two new debugging images adds additional files based on
boot.img and ramdisk.img/ramdisk-recovery.img, respectively.
File /force_debuggable is to trigger special logic in /init to load an
userdebug version of sepolicy and an additional property file from this
ramdisk to allow adb root, if the device is unlocked.
It's intentional to skip signing for boot-debug.img, as it can
only be used if the device is unlocked, where verification error
is allowed.
Those debugging images allows adb root on user build
system.img, vendor.img, product.img, etc. This can facilitate more
automated testings on user builds and is helpful to narrow down the
delta between what's being tested v.s. what's being shipped.
Bug: 126493225
Test: `make dist`, checks both boot-debug.img and ramdisk-debug.img
are in $OUT/ and out/dist.
Test: `make dist`, checks installed-files-ramdisk-debug.{json,txt} are
in out/dist.
Test: `system/core/mkbootimg/unpack_bootimg.py --boot_img $OUT/boot-debug.img`,
checks the extracted out/ramdisk is as expected
Test: Run `gunzip -c ramdisk | cpio -idm` for the ramdisk extracted from
$OUT/boot-debug.img and $OUT/boot.img, respectively.
Then compare the root dirs of both, e.g.,
`diff -rq --no-dereference ./ramdisk ./ramdisk-debug`
Test: `make ramdisk_debug-nodeps` and `make bootimage_debug-nodeps`
Change-Id: I30137c3caef91805d9143d404e5e4d06c0fccc30
2019-03-20 17:59:52 +08:00
###########################################
# Now we can substitute with the real value of TARGET_COPY_OUT_DEBUG_RAMDISK
2020-12-05 03:05:00 +08:00
i f n e q ( , $( filter true ,$ ( BOARD_USES_RECOVERY_AS_BOOT ) \
2021-03-25 14:14:41 +08:00
$( BOARD_GKI_NONAB_COMPAT) $( BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT) \
$( BOARD_USES_GENERIC_KERNEL_IMAGE) ) )
Adding boot-debug.img and ramdisk-debug.img
The two new debugging images adds additional files based on
boot.img and ramdisk.img/ramdisk-recovery.img, respectively.
File /force_debuggable is to trigger special logic in /init to load an
userdebug version of sepolicy and an additional property file from this
ramdisk to allow adb root, if the device is unlocked.
It's intentional to skip signing for boot-debug.img, as it can
only be used if the device is unlocked, where verification error
is allowed.
Those debugging images allows adb root on user build
system.img, vendor.img, product.img, etc. This can facilitate more
automated testings on user builds and is helpful to narrow down the
delta between what's being tested v.s. what's being shipped.
Bug: 126493225
Test: `make dist`, checks both boot-debug.img and ramdisk-debug.img
are in $OUT/ and out/dist.
Test: `make dist`, checks installed-files-ramdisk-debug.{json,txt} are
in out/dist.
Test: `system/core/mkbootimg/unpack_bootimg.py --boot_img $OUT/boot-debug.img`,
checks the extracted out/ramdisk is as expected
Test: Run `gunzip -c ramdisk | cpio -idm` for the ramdisk extracted from
$OUT/boot-debug.img and $OUT/boot.img, respectively.
Then compare the root dirs of both, e.g.,
`diff -rq --no-dereference ./ramdisk ./ramdisk-debug`
Test: `make ramdisk_debug-nodeps` and `make bootimage_debug-nodeps`
Change-Id: I30137c3caef91805d9143d404e5e4d06c0fccc30
2019-03-20 17:59:52 +08:00
TARGET_COPY_OUT_DEBUG_RAMDISK := debug_ramdisk/first_stage_ramdisk
2020-02-14 19:00:15 +08:00
TARGET_COPY_OUT_VENDOR_DEBUG_RAMDISK := vendor_debug_ramdisk/first_stage_ramdisk
Adding boot-test-harness.img
In commit I30137c3caef91805d9143d404e5e4d06c0fccc30, we added
a boot-debug.img to allow adb root when using an user build GSI image.
However, to run automated tests, it requires additional properties,
which are not needed for GSI compliance:
ro.audio.silent=1
ro.test_harness=1
This CL adds an additional boot-test-harness.img for automated tests,
and keeps the original boot-debug.img for GSI compliance.
Note: boot-test-harness.img won't be built by default, it needs
explicit `make bootimage_test_harness`.
Bug: 140036184
Test: `m bootimage_test_harness`, flashes boot-test-harness.img and checks
adb root works and test harness props are set.
Test: `m bootimage_test_harness dist -j32`, checks both
boot-test-harness.img and ramdisk-test-harness.img are under ./out/dist/.
Test: `system/tools/mkbootimg/unpack_bootimg.py --boot_img $OUT/boot-test-harness.img --out ramdisk-test-harness`,
checks the extracted out/ramdisk is as expected
Test: Run `gunzip -c ramdisk | cpio -idm` for the ramdisk extracted from
$OUT/boot-test-harness.img and $OUT/boot-debug.img, respectively.
Then compare the root dirs of both, e.g.,
`diff -rq --no-dereference ./ramdisk-test-harness ./ramdisk-debug`
Test: `m ramdisk_test_harness-nodeps` and `m bootimage_test_harness-nodeps`
Change-Id: Iadea0b5c933c3b7fa10dcf3d9e85596916b3333d
2019-10-08 10:22:19 +08:00
TARGET_COPY_OUT_TEST_HARNESS_RAMDISK := test_harness_ramdisk/first_stage_ramdisk
Adding boot-debug.img and ramdisk-debug.img
The two new debugging images adds additional files based on
boot.img and ramdisk.img/ramdisk-recovery.img, respectively.
File /force_debuggable is to trigger special logic in /init to load an
userdebug version of sepolicy and an additional property file from this
ramdisk to allow adb root, if the device is unlocked.
It's intentional to skip signing for boot-debug.img, as it can
only be used if the device is unlocked, where verification error
is allowed.
Those debugging images allows adb root on user build
system.img, vendor.img, product.img, etc. This can facilitate more
automated testings on user builds and is helpful to narrow down the
delta between what's being tested v.s. what's being shipped.
Bug: 126493225
Test: `make dist`, checks both boot-debug.img and ramdisk-debug.img
are in $OUT/ and out/dist.
Test: `make dist`, checks installed-files-ramdisk-debug.{json,txt} are
in out/dist.
Test: `system/core/mkbootimg/unpack_bootimg.py --boot_img $OUT/boot-debug.img`,
checks the extracted out/ramdisk is as expected
Test: Run `gunzip -c ramdisk | cpio -idm` for the ramdisk extracted from
$OUT/boot-debug.img and $OUT/boot.img, respectively.
Then compare the root dirs of both, e.g.,
`diff -rq --no-dereference ./ramdisk ./ramdisk-debug`
Test: `make ramdisk_debug-nodeps` and `make bootimage_debug-nodeps`
Change-Id: I30137c3caef91805d9143d404e5e4d06c0fccc30
2019-03-20 17:59:52 +08:00
e n d i f
2019-02-26 20:34:03 +08:00
###########################################
# Configure whether we're building the system image
BUILDING_SYSTEM_IMAGE := true
i f e q ( $( PRODUCT_BUILD_SYSTEM_IMAGE ) , )
ifndef PRODUCT_USE_DYNAMIC_PARTITION_SIZE
ifndef BOARD_SYSTEMIMAGE_PARTITION_SIZE
BUILDING_SYSTEM_IMAGE :=
endif
endif
e l s e i f e q ( $( PRODUCT_BUILD_SYSTEM_IMAGE ) , f a l s e )
BUILDING_SYSTEM_IMAGE :=
e n d i f
.KATI_READONLY := BUILDING_SYSTEM_IMAGE
# Are we building a system_other image
BUILDING_SYSTEM_OTHER_IMAGE :=
i f e q ( $( PRODUCT_BUILD_SYSTEM_OTHER_IMAGE ) , )
ifdef BUILDING_SYSTEM_IMAGE
ifeq ( $( BOARD_USES_SYSTEM_OTHER_ODEX) ,true)
BUILDING_SYSTEM_OTHER_IMAGE := true
endif
endif
e l s e i f e q ( $( PRODUCT_BUILD_SYSTEM_OTHER_IMAGE ) , t r u e )
BUILDING_SYSTEM_OTHER_IMAGE := true
ifndef BUILDING_SYSTEM_IMAGE
$( error PRODUCT_BUILD_SYSTEM_OTHER_IMAGE = true requires building the system image)
endif
e n d i f
.KATI_READONLY := BUILDING_SYSTEM_OTHER_IMAGE
# Are we building a cache image
BUILDING_CACHE_IMAGE :=
i f e q ( $( PRODUCT_BUILD_CACHE_IMAGE ) , )
ifdef BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE
BUILDING_CACHE_IMAGE := true
endif
e l s e i f e q ( $( PRODUCT_BUILD_CACHE_IMAGE ) , t r u e )
BUILDING_CACHE_IMAGE := true
ifndef BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE
$( error PRODUCT_BUILD_CACHE_IMAGE set to true, but BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE not defined)
endif
e n d i f
.KATI_READONLY := BUILDING_CACHE_IMAGE
2019-04-23 02:09:57 +08:00
# Are we building a boot image
BUILDING_BOOT_IMAGE :=
2020-10-07 02:09:56 +08:00
i f e q ( $( PRODUCT_BUILD_BOOT_IMAGE ) , )
ifeq ( $( BOARD_USES_RECOVERY_AS_BOOT) ,true)
BUILDING_BOOT_IMAGE :=
else ifdef BOARD_BOOTIMAGE_PARTITION_SIZE
2019-04-23 02:09:57 +08:00
BUILDING_BOOT_IMAGE := true
2020-10-16 05:48:07 +08:00
else ifneq ( ,$( foreach kernel,$( BOARD_KERNEL_BINARIES) ,$( BOARD_$( call to-upper,$( kernel) ) _BOOTIMAGE_PARTITION_SIZE) ) )
BUILDING_BOOT_IMAGE := true
2019-04-23 02:09:57 +08:00
endif
e l s e i f e q ( $( PRODUCT_BUILD_BOOT_IMAGE ) , t r u e )
2020-10-07 02:09:56 +08:00
ifeq ( $( BOARD_USES_RECOVERY_AS_BOOT) ,true)
$( warning *** PRODUCT_BUILD_BOOT_IMAGE is true, but so is BOARD_USES_RECOVERY_AS_BOOT.)
$( warning *** Skipping building boot image.)
BUILDING_BOOT_IMAGE :=
else
BUILDING_BOOT_IMAGE := true
endif
2019-04-23 02:09:57 +08:00
e n d i f
.KATI_READONLY := BUILDING_BOOT_IMAGE
# Are we building a recovery image
BUILDING_RECOVERY_IMAGE :=
2020-10-07 02:09:56 +08:00
i f e q ( $( PRODUCT_BUILD_RECOVERY_IMAGE ) , )
ifeq ( $( BOARD_USES_RECOVERY_AS_BOOT) ,true)
BUILDING_RECOVERY_IMAGE := true
2020-10-10 05:29:39 +08:00
else ifeq ( $( BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT) ,true)
# Set to true to build recovery resources for vendor_boot
BUILDING_RECOVERY_IMAGE := true
2020-10-07 02:09:56 +08:00
else ifdef BOARD_RECOVERYIMAGE_PARTITION_SIZE
2019-04-23 02:09:57 +08:00
ifeq ( ,$( filter true, $( TARGET_NO_KERNEL) $( TARGET_NO_RECOVERY) ) )
BUILDING_RECOVERY_IMAGE := true
endif
endif
e l s e i f e q ( $( PRODUCT_BUILD_RECOVERY_IMAGE ) , t r u e )
BUILDING_RECOVERY_IMAGE := true
e n d i f
.KATI_READONLY := BUILDING_RECOVERY_IMAGE
2019-02-26 20:34:03 +08:00
2019-07-11 01:49:37 +08:00
# Are we building a vendor boot image
BUILDING_VENDOR_BOOT_IMAGE :=
i f d e f B O A R D _ B O O T _ H E A D E R _ V E R S I O N
ifneq ( $( call math_gt_or_eq,$( BOARD_BOOT_HEADER_VERSION) ,3) ,)
2020-10-17 06:10:21 +08:00
ifeq ( $( PRODUCT_BUILD_VENDOR_BOOT_IMAGE) ,)
2020-10-07 02:09:56 +08:00
BUILDING_VENDOR_BOOT_IMAGE := true
else ifeq ( $( PRODUCT_BUILD_VENDOR_BOOT_IMAGE) ,true)
2020-02-13 05:38:28 +08:00
BUILDING_VENDOR_BOOT_IMAGE := true
endif
2019-07-11 01:49:37 +08:00
endif
e n d i f
.KATI_READONLY := BUILDING_VENDOR_BOOT_IMAGE
2019-02-26 20:34:03 +08:00
# Are we building a ramdisk image
BUILDING_RAMDISK_IMAGE := true
i f e q ( $( PRODUCT_BUILD_RAMDISK_IMAGE ) , )
# TODO: Be smarter about this. This probably only needs to happen when one of the follow is true:
# BUILDING_BOOT_IMAGE
# BUILDING_RECOVERY_IMAGE
e l s e i f e q ( $( PRODUCT_BUILD_RAMDISK_IMAGE ) , f a l s e )
BUILDING_RAMDISK_IMAGE :=
e n d i f
.KATI_READONLY := BUILDING_RAMDISK_IMAGE
# Are we building a userdata image
BUILDING_USERDATA_IMAGE :=
i f e q ( $( PRODUCT_BUILD_USERDATA_IMAGE ) , )
ifdef BOARD_USERDATAIMAGE_PARTITION_SIZE
BUILDING_USERDATA_IMAGE := true
endif
e l s e i f e q ( $( PRODUCT_BUILD_USERDATA_IMAGE ) , t r u e )
BUILDING_USERDATA_IMAGE := true
e n d i f
.KATI_READONLY := BUILDING_USERDATA_IMAGE
2019-08-13 15:30:57 +08:00
# Are we building a vbmeta image
BUILDING_VBMETA_IMAGE := true
i f e q ( $( PRODUCT_BUILD_VBMETA_IMAGE ) , f a l s e )
BUILDING_VBMETA_IMAGE :=
e n d i f
.KATI_READONLY := BUILDING_VBMETA_IMAGE
2021-03-25 18:12:28 +08:00
# Are we building a super_empty image
BUILDING_SUPER_EMPTY_IMAGE :=
i f e q ( $( PRODUCT_BUILD_SUPER_EMPTY_IMAGE ) , )
ifeq ( true,$( PRODUCT_USE_DYNAMIC_PARTITIONS) )
ifneq ( $( BOARD_SUPER_PARTITION_SIZE) ,)
BUILDING_SUPER_EMPTY_IMAGE := true
endif
endif
e l s e i f e q ( $( PRODUCT_BUILD_SUPER_EMPTY_IMAGE ) , t r u e )
ifneq ( true,$( PRODUCT_USE_DYNAMIC_PARTITIONS) )
$( error PRODUCT_BUILD_SUPER_EMPTY_IMAGE set to true, but PRODUCT_USE_DYNAMIC_PARTITIONS is not true )
endif
ifeq ( $( BOARD_SUPER_PARTITION_SIZE) ,)
$( error PRODUCT_BUILD_SUPER_EMPTY_IMAGE set to true, but BOARD_SUPER_PARTITION_SIZE is not defined)
endif
BUILDING_SUPER_EMPTY_IMAGE := true
e n d i f
.KATI_READONLY := BUILDING_SUPER_EMPTY_IMAGE
2019-02-26 20:34:03 +08:00
###########################################
# Now we can substitute with the real value of TARGET_COPY_OUT_VENDOR
i f e q ( $( TARGET_COPY_OUT_VENDOR ) , $( _vendor_path_placeholder ) )
TARGET_COPY_OUT_VENDOR := system/vendor
e l s e i f e q ( $( filter vendor system /vendor ,$ ( TARGET_COPY_OUT_VENDOR ) ) , )
$( error TARGET_COPY_OUT_VENDOR must be either 'vendor' or 'system/vendor' , seeing '$(TARGET_COPY_OUT_VENDOR)' .)
e n d i f
PRODUCT_COPY_FILES := $( subst $( _vendor_path_placeholder) ,$( TARGET_COPY_OUT_VENDOR) ,$( PRODUCT_COPY_FILES) )
BOARD_USES_VENDORIMAGE :=
i f d e f B O A R D _ P R E B U I L T _ V E N D O R I M A G E
BOARD_USES_VENDORIMAGE := true
e n d i f
i f d e f B O A R D _ V E N D O R I M A G E _ F I L E _ S Y S T E M _ T Y P E
BOARD_USES_VENDORIMAGE := true
e n d i f
2019-07-12 11:51:37 +08:00
# TODO(b/137169253): For now, some AOSP targets build with prebuilt vendor image.
# But target's BOARD_PREBUILT_VENDORIMAGE is not filled.
2019-02-26 20:34:03 +08:00
i f e q ( $( TARGET_COPY_OUT_VENDOR ) , v e n d o r )
BOARD_USES_VENDORIMAGE := true
e l s e i f d e f B O A R D _ U S E S _ V E N D O R I M A G E
$( error TARGET_COPY_OUT_VENDOR must be set to 'vendor' to use a vendor image)
e n d i f
.KATI_READONLY := BOARD_USES_VENDORIMAGE
BUILDING_VENDOR_IMAGE :=
i f e q ( $( PRODUCT_BUILD_VENDOR_IMAGE ) , )
ifdef BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE
BUILDING_VENDOR_IMAGE := true
endif
e l s e i f e q ( $( PRODUCT_BUILD_VENDOR_IMAGE ) , t r u e )
BUILDING_VENDOR_IMAGE := true
ifndef BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE
$( error PRODUCT_BUILD_VENDOR_IMAGE set to true, but BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE not defined)
endif
e n d i f
i f d e f B O A R D _ P R E B U I L T _ V E N D O R I M A G E
BUILDING_VENDOR_IMAGE :=
e n d i f
.KATI_READONLY := BUILDING_VENDOR_IMAGE
###########################################
# Now we can substitute with the real value of TARGET_COPY_OUT_PRODUCT
i f e q ( $( TARGET_COPY_OUT_PRODUCT ) , $( _product_path_placeholder ) )
TARGET_COPY_OUT_PRODUCT := system/product
e l s e i f e q ( $( filter product system /product ,$ ( TARGET_COPY_OUT_PRODUCT ) ) , )
$( error TARGET_COPY_OUT_PRODUCT must be either 'product ' or 'system /product ', seeing '$ ( TARGET_COPY_OUT_PRODUCT ) '.)
e n d i f
PRODUCT_COPY_FILES := $( subst $( _product_path_placeholder) ,$( TARGET_COPY_OUT_PRODUCT) ,$( PRODUCT_COPY_FILES) )
BOARD_USES_PRODUCTIMAGE :=
i f d e f B O A R D _ P R E B U I L T _ P R O D U C T I M A G E
BOARD_USES_PRODUCTIMAGE := true
e n d i f
i f d e f B O A R D _ P R O D U C T I M A G E _ F I L E _ S Y S T E M _ T Y P E
BOARD_USES_PRODUCTIMAGE := true
e n d i f
2019-07-12 11:51:37 +08:00
$( call check_image_config ,product )
2019-02-26 20:34:03 +08:00
.KATI_READONLY := BOARD_USES_PRODUCTIMAGE
BUILDING_PRODUCT_IMAGE :=
i f e q ( $( PRODUCT_BUILD_PRODUCT_IMAGE ) , )
ifdef BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE
BUILDING_PRODUCT_IMAGE := true
endif
e l s e i f e q ( $( PRODUCT_BUILD_PRODUCT_IMAGE ) , t r u e )
BUILDING_PRODUCT_IMAGE := true
ifndef BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE
$( error PRODUCT_BUILD_PRODUCT_IMAGE set to true, but BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE not defined)
endif
e n d i f
i f d e f B O A R D _ P R E B U I L T _ P R O D U C T I M A G E
BUILDING_PRODUCT_IMAGE :=
e n d i f
.KATI_READONLY := BUILDING_PRODUCT_IMAGE
###########################################
2019-06-25 14:58:13 +08:00
# TODO(b/135957588) TARGET_COPY_OUT_PRODUCT_SERVICES will be set to
# TARGET_COPY_OUT_PRODUCT as a workaround.
TARGET_COPY_OUT_PRODUCT_SERVICES := $( TARGET_COPY_OUT_PRODUCT)
###########################################
# Now we can substitute with the real value of TARGET_COPY_OUT_SYSTEM_EXT
i f e q ( $( TARGET_COPY_OUT_SYSTEM_EXT ) , $( _system_ext_path_placeholder ) )
TARGET_COPY_OUT_SYSTEM_EXT := system/system_ext
e l s e i f e q ( $( filter system_ext system /system_ext ,$ ( TARGET_COPY_OUT_SYSTEM_EXT ) ) , )
$( error TARGET_COPY_OUT_SYSTEM_EXT must be either 'system_ext ' or 'system /system_ext ', seeing '$ ( TARGET_COPY_OUT_SYSTEM_EXT ) '.)
e n d i f
PRODUCT_COPY_FILES := $( subst $( _system_ext_path_placeholder) ,$( TARGET_COPY_OUT_SYSTEM_EXT) ,$( PRODUCT_COPY_FILES) )
BOARD_USES_SYSTEM_EXTIMAGE :=
i f d e f B O A R D _ P R E B U I L T _ S Y S T E M _ E X T I M A G E
BOARD_USES_SYSTEM_EXTIMAGE := true
e n d i f
i f d e f B O A R D _ S Y S T E M _ E X T I M A G E _ F I L E _ S Y S T E M _ T Y P E
BOARD_USES_SYSTEM_EXTIMAGE := true
e n d i f
2019-07-12 11:51:37 +08:00
$( call check_image_config ,system_ext )
2019-06-25 14:58:13 +08:00
.KATI_READONLY := BOARD_USES_SYSTEM_EXTIMAGE
BUILDING_SYSTEM_EXT_IMAGE :=
i f e q ( $( PRODUCT_BUILD_SYSTEM_EXT_IMAGE ) , )
ifdef BOARD_SYSTEM_EXTIMAGE_FILE_SYSTEM_TYPE
BUILDING_SYSTEM_EXT_IMAGE := true
2019-02-26 20:34:03 +08:00
endif
2019-06-25 14:58:13 +08:00
e l s e i f e q ( $( PRODUCT_BUILD_SYSTEM_EXT_IMAGE ) , t r u e )
BUILDING_SYSTEM_EXT_IMAGE := true
ifndef BOARD_SYSTEM_EXTIMAGE_FILE_SYSTEM_TYPE
$( error PRODUCT_BUILD_SYSTEM_EXT_IMAGE set to true, but BOARD_SYSTEM_EXTIMAGE_FILE_SYSTEM_TYPE not defined)
2019-02-26 20:34:03 +08:00
endif
e n d i f
2019-06-25 14:58:13 +08:00
i f d e f B O A R D _ P R E B U I L T _ S Y S T E M _ E X T I M A G E
BUILDING_SYSTEM_EXT_IMAGE :=
2019-02-26 20:34:03 +08:00
e n d i f
2019-06-25 14:58:13 +08:00
.KATI_READONLY := BUILDING_SYSTEM_EXT_IMAGE
2019-02-26 20:34:03 +08:00
2020-05-08 05:58:20 +08:00
###########################################
# Now we can substitute with the real value of TARGET_COPY_OUT_VENDOR_DLKM
i f e q ( $( TARGET_COPY_OUT_VENDOR_DLKM ) , $( _vendor_dlkm_path_placeholder ) )
TARGET_COPY_OUT_VENDOR_DLKM := $( TARGET_COPY_OUT_VENDOR) /vendor_dlkm
e l s e i f e q ( $( filter vendor_dlkm system /vendor /vendor_dlkm vendor /vendor_dlkm ,$ ( TARGET_COPY_OUT_VENDOR_DLKM ) ) , )
$( 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)' .)
e n d i f
PRODUCT_COPY_FILES := $( subst $( _vendor_dlkm_path_placeholder) ,$( TARGET_COPY_OUT_VENDOR_DLKM) ,$( PRODUCT_COPY_FILES) )
BOARD_USES_VENDOR_DLKMIMAGE :=
i f d e f B O A R D _ P R E B U I L T _ V E N D O R _ D L K M I M A G E
BOARD_USES_VENDOR_DLKMIMAGE := true
e n d i f
i f d e f B O A R D _ V E N D O R _ D L K M I M A G E _ F I L E _ S Y S T E M _ T Y P E
BOARD_USES_VENDOR_DLKMIMAGE := true
e n d i f
$( call check_image_config ,vendor_dlkm )
BUILDING_VENDOR_DLKM_IMAGE :=
i f e q ( $( PRODUCT_BUILD_VENDOR_DLKM_IMAGE ) , )
ifdef BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE
BUILDING_VENDOR_DLKM_IMAGE := true
endif
e l s e i f e q ( $( PRODUCT_BUILD_VENDOR_DLKM_IMAGE ) , t r u e )
BUILDING_VENDOR_DLKM_IMAGE := true
ifndef BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE
$( error PRODUCT_BUILD_VENDOR_DLKM_IMAGE set to true, but BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE not defined)
endif
e n d i f
i f d e f B O A R D _ P R E B U I L T _ V E N D O R _ D L K M I M A G E
BUILDING_VENDOR_DLKM_IMAGE :=
e n d i f
.KATI_READONLY := BUILDING_VENDOR_DLKM_IMAGE
2019-02-26 20:34:03 +08:00
###########################################
# Now we can substitute with the real value of TARGET_COPY_OUT_ODM
i f e q ( $( TARGET_COPY_OUT_ODM ) , $( _odm_path_placeholder ) )
2019-10-10 09:26:00 +08:00
TARGET_COPY_OUT_ODM := $( TARGET_COPY_OUT_VENDOR) /odm
e l s e i f e q ( $( filter odm system /vendor /odm vendor /odm ,$ ( TARGET_COPY_OUT_ODM ) ) , )
$( error TARGET_COPY_OUT_ODM must be either 'odm' , 'system/vendor/odm' or 'vendor/odm' , seeing '$(TARGET_COPY_OUT_ODM)' .)
2019-02-26 20:34:03 +08:00
e n d i f
PRODUCT_COPY_FILES := $( subst $( _odm_path_placeholder) ,$( TARGET_COPY_OUT_ODM) ,$( PRODUCT_COPY_FILES) )
BOARD_USES_ODMIMAGE :=
i f d e f B O A R D _ P R E B U I L T _ O D M I M A G E
BOARD_USES_ODMIMAGE := true
e n d i f
i f d e f B O A R D _ O D M I M A G E _ F I L E _ S Y S T E M _ T Y P E
BOARD_USES_ODMIMAGE := true
e n d i f
2019-07-12 11:51:37 +08:00
$( call check_image_config ,odm )
2019-02-26 20:34:03 +08:00
BUILDING_ODM_IMAGE :=
2019-04-20 06:00:12 +08:00
i f e q ( $( PRODUCT_BUILD_ODM_IMAGE ) , )
2019-02-26 20:34:03 +08:00
ifdef BOARD_ODMIMAGE_FILE_SYSTEM_TYPE
BUILDING_ODM_IMAGE := true
endif
e l s e i f e q ( $( PRODUCT_BUILD_ODM_IMAGE ) , t r u e )
BUILDING_ODM_IMAGE := true
ifndef BOARD_ODMIMAGE_FILE_SYSTEM_TYPE
$( error PRODUCT_BUILD_ODM_IMAGE set to true, but BOARD_ODMIMAGE_FILE_SYSTEM_TYPE not defined)
endif
e n d i f
i f d e f B O A R D _ P R E B U I L T _ O D M I M A G E
BUILDING_ODM_IMAGE :=
e n d i f
.KATI_READONLY := BUILDING_ODM_IMAGE
2020-07-16 07:52:59 +08:00
###########################################
# Now we can substitute with the real value of TARGET_COPY_OUT_ODM_DLKM
i f e q ( $( TARGET_COPY_OUT_ODM_DLKM ) , $( _odm_dlkm_path_placeholder ) )
TARGET_COPY_OUT_ODM_DLKM := $( TARGET_COPY_OUT_VENDOR) /odm_dlkm
e l s e i f e q ( $( filter odm_dlkm system /vendor /odm_dlkm vendor /odm_dlkm ,$ ( TARGET_COPY_OUT_ODM_DLKM ) ) , )
$( 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)' .)
e n d i f
PRODUCT_COPY_FILES := $( subst $( _odm_dlkm_path_placeholder) ,$( TARGET_COPY_OUT_ODM_DLKM) ,$( PRODUCT_COPY_FILES) )
BOARD_USES_ODM_DLKMIMAGE :=
i f d e f B O A R D _ P R E B U I L T _ O D M _ D L K M I M A G E
BOARD_USES_ODM_DLKMIMAGE := true
e n d i f
i f d e f B O A R D _ O D M _ D L K M I M A G E _ F I L E _ S Y S T E M _ T Y P E
BOARD_USES_ODM_DLKMIMAGE := true
e n d i f
$( call check_image_config ,odm_dlkm )
BUILDING_ODM_DLKM_IMAGE :=
i f e q ( $( PRODUCT_BUILD_ODM_DLKM_IMAGE ) , )
ifdef BOARD_ODM_DLKMIMAGE_FILE_SYSTEM_TYPE
BUILDING_ODM_DLKM_IMAGE := true
endif
e l s e i f e q ( $( PRODUCT_BUILD_ODM_DLKM_IMAGE ) , t r u e )
BUILDING_ODM_DLKM_IMAGE := true
ifndef BOARD_ODM_DLKMIMAGE_FILE_SYSTEM_TYPE
$( error PRODUCT_BUILD_ODM_DLKM_IMAGE set to true, but BOARD_ODM_DLKMIMAGE_FILE_SYSTEM_TYPE not defined)
endif
e n d i f
i f d e f B O A R D _ P R E B U I L T _ O D M _ D L K M I M A G E
BUILDING_ODM_DLKM_IMAGE :=
e n d i f
.KATI_READONLY := BUILDING_ODM_DLKM_IMAGE
2019-02-26 20:34:03 +08:00
###########################################
2020-04-18 01:08:10 +08:00
# Ensure consistency among TARGET_RECOVERY_UPDATER_LIBS, AB_OTA_UPDATER, and PRODUCT_OTA_FORCE_NON_AB_PACKAGE.
2019-02-26 20:34:03 +08:00
TARGET_RECOVERY_UPDATER_LIBS ?=
AB_OTA_UPDATER ?=
.KATI_READONLY := TARGET_RECOVERY_UPDATER_LIBS AB_OTA_UPDATER
2020-04-18 01:08:10 +08:00
# Ensure that if PRODUCT_OTA_FORCE_NON_AB_PACKAGE == true, then AB_OTA_UPDATER must be true
i f e q ( $( PRODUCT_OTA_FORCE_NON_AB_PACKAGE ) , t r u e )
ifneq ( $( AB_OTA_UPDATER) ,true)
$( error AB_OTA_UPDATER must be set to true when PRODUCT_OTA_FORCE_NON_AB_PACKAGE is true )
endif
e n d i f
# In some configurations, A/B and non-A/B may coexist. Check TARGET_OTA_ALLOW_NON_AB
# to see if non-A/B is supported.
TARGET_OTA_ALLOW_NON_AB := false
i f n e q ( $( AB_OTA_UPDATER ) , t r u e )
TARGET_OTA_ALLOW_NON_AB := true
e l s e i f e q ( $( PRODUCT_OTA_FORCE_NON_AB_PACKAGE ) , t r u e )
TARGET_OTA_ALLOW_NON_AB := true
e n d i f
.KATI_READONLY := TARGET_OTA_ALLOW_NON_AB
i f n e q ( $( TARGET_OTA_ALLOW_NON_AB ) , t r u e )
2019-02-26 20:34:03 +08:00
ifneq ( $( strip $( TARGET_RECOVERY_UPDATER_LIBS) ) ,)
2020-04-18 01:08:10 +08:00
$( error Do not use TARGET_RECOVERY_UPDATER_LIBS when using TARGET_OTA_ALLOW_NON_AB)
2019-02-26 20:34:03 +08:00
endif
e n d i f
2020-07-31 05:23:31 +08:00
# Quick check for building generic OTA packages. Currently it only supports A/B OTAs.
2019-04-09 12:11:59 +08:00
i f e q ( $( PRODUCT_BUILD_GENERIC_OTA_PACKAGE ) , t r u e )
ifneq ( $( AB_OTA_UPDATER) ,true)
$( error PRODUCT_BUILD_GENERIC_OTA_PACKAGE with 'AB_OTA_UPDATER != true' is not supported)
endif
e n d i f
2019-05-21 02:10:24 +08:00
i f d e f B O A R D _ P R E B U I L T _ D T B I M A G E _ D I R
ifneq ( $( BOARD_INCLUDE_DTB_IN_BOOTIMG) ,true)
$( error BOARD_PREBUILT_DTBIMAGE_DIR with 'BOARD_INCLUDE_DTB_IN_BOOTIMG != true' is not supported)
endif
e n d i f
2019-02-26 20:34:03 +08:00
# Check BOARD_VNDK_VERSION
d e f i n e c h e c k _ v n d k _ v e r s i o n
$( eval vndk_path := prebuilts/vndk/v$( 1) ) \
$( if $( wildcard $( vndk_path) /*/Android.bp) ,,$( error VNDK version $( 1) not found) )
e n d e f
i f d e f B O A R D _ V N D K _ V E R S I O N
2020-06-25 21:19:29 +08:00
ifeq ( $( BOARD_VNDK_VERSION) ,$( PLATFORM_VNDK_VERSION) )
$( error BOARD_VNDK_VERSION is equal to PLATFORM_VNDK_VERSION; use BOARD_VNDK_VERSION := current) )
endif
2019-02-26 20:34:03 +08:00
ifneq ( $( BOARD_VNDK_VERSION) ,current)
2019-12-03 14:09:44 +08:00
$( call check_vndk_version,$( BOARD_VNDK_VERSION) )
2019-02-26 20:34:03 +08:00
endif
TARGET_VENDOR_TEST_SUFFIX := /vendor
e l s e
TARGET_VENDOR_TEST_SUFFIX :=
e n d i f
2020-12-07 15:00:50 +08:00
# If PRODUCT_ENFORCE_INTER_PARTITION_JAVA_SDK_LIBRARY is set,
# BOARD_VNDK_VERSION must be set because PRODUCT_ENFORCE_INTER_PARTITION_JAVA_SDK_LIBRARY
# is a enforcement of inter-partition dependency, and it doesn't have any meaning
# when BOARD_VNDK_VERSION isn't set.
i f e q ( $( PRODUCT_ENFORCE_INTER_PARTITION_JAVA_SDK_LIBRARY ) , t r u e )
ifeq ( $( BOARD_VNDK_VERSION) ,)
$( error BOARD_VNDK_VERSION must be set when PRODUCT_ENFORCE_INTER_PARTITION_JAVA_SDK_LIBRARY is true )
endif
e n d i f
2019-05-08 19:23:42 +08:00
###########################################
# APEXes are by default flattened, i.e. non-updatable.
# It can be unflattened (and updatable) by inheriting from
# updatable_apex.mk
2019-10-04 21:06:26 +08:00
#
# APEX flattening can also be forcibly enabled (resp. disabled) by
# setting OVERRIDE_TARGET_FLATTEN_APEX to true (resp. false), e.g. by
# setting the OVERRIDE_TARGET_FLATTEN_APEX environment variable.
i f d e f O V E R R I D E _ T A R G E T _ F L A T T E N _ A P E X
TARGET_FLATTEN_APEX := $( OVERRIDE_TARGET_FLATTEN_APEX)
e l s e
ifeq ( ,$( TARGET_FLATTEN_APEX) )
TARGET_FLATTEN_APEX := true
endif
2019-05-08 19:23:42 +08:00
e n d i f
2020-06-04 22:16:39 +08:00
i f e q ( , $( TARGET_BUILD_UNBUNDLED ) )
2019-02-26 20:34:03 +08:00
i f d e f P R O D U C T _ E X T R A _ V N D K _ V E R S I O N S
$( foreach v,$( PRODUCT_EXTRA_VNDK_VERSIONS) ,$( call check_vndk_version,$( v) ) )
e n d i f
e n d i f
# Ensure that BOARD_SYSTEMSDK_VERSIONS are all within PLATFORM_SYSTEMSDK_VERSIONS
_unsupported_systemsdk_versions := $( filter-out $( PLATFORM_SYSTEMSDK_VERSIONS) ,$( BOARD_SYSTEMSDK_VERSIONS) )
i f n e q ( , $( _unsupported_systemsdk_versions ) )
$( error System SDK versions '$(_unsupported_systemsdk_versions)' in BOARD_SYSTEMSDK_VERSIONS are not supported.\
Supported versions are $( PLATFORM_SYSTEMSDK_VERSIONS) )
e n d i f
2019-04-18 03:25:09 +08:00
###########################################
# Handle BUILD_BROKEN_USES_BUILD_*
2020-02-20 10:06:54 +08:00
$( foreach m ,$ ( DEFAULT_WARNING_BUILD_MODULE_TYPES ) ,\
2019-04-18 03:25:09 +08:00
$( if $( filter false,$( BUILD_BROKEN_USES_$( m) ) ) ,\
$( KATI_obsolete_var $( m) ,Please convert to Soong) ,\
$( KATI_deprecated_var $( m) ,Please convert to Soong) ) )
2020-02-20 10:06:54 +08:00
$( if $ ( filter true ,$ ( BUILD_BROKEN_USES_BUILD_COPY_HEADERS ) ) ,\
$( KATI_deprecated_var BUILD_COPY_HEADERS,See $( CHANGES_URL) #copy_headers),\
$( KATI_obsolete_var BUILD_COPY_HEADERS,See $( CHANGES_URL) #copy_headers))
2020-01-28 11:26:02 +08:00
2020-02-20 10:06:54 +08:00
$( foreach m ,$ ( filter -out BUILD_COPY_HEADERS ,$ ( DEFAULT_ERROR_BUILD_MODULE_TYPES ) ) ,\
2019-04-18 03:25:09 +08:00
$( if $( filter true,$( BUILD_BROKEN_USES_$( m) ) ) ,\
$( KATI_deprecated_var $( m) ,Please convert to Soong) ,\
$( KATI_obsolete_var $( m) ,Please convert to Soong) ) )
2020-10-09 02:54:02 +08:00
i f n d e f B U I L D I N G _ R E C O V E R Y _ I M A G E
ifeq ( true,$( BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE) )
$( error Should not set BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE if not building recovery image)
endif
e n d i f
2020-10-10 05:29:39 +08:00
i f n d e f B U I L D I N G _ V E N D O R _ B O O T _ I M A G E
ifeq ( true,$( BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT) )
$( error Should not set BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT if not building vendor_boot image)
endif
2020-12-10 18:42:47 +08:00
ifdef BOARD_VENDOR_RAMDISK_FRAGMENTS
$( error Should not set BOARD_VENDOR_RAMDISK_FRAGMENTS if not building vendor_boot image)
endif
e n d i f
i f n e q ( $( words $ ( BOARD_VENDOR_RAMDISK_FRAGMENTS ) ) , $( words $ ( sort $ ( BOARD_VENDOR_RAMDISK_FRAGMENTS ) ) ) )
$( error BOARD_VENDOR_RAMDISK_FRAGMENTS has duplicate entries: $( BOARD_VENDOR_RAMDISK_FRAGMENTS) )
2020-10-10 05:29:39 +08:00
e n d i f
# If BOARD_USES_GENERIC_KERNEL_IMAGE is set, BOARD_USES_RECOVERY_AS_BOOT must not be set.
# Devices without a dedicated recovery partition uses BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT to
# build recovery into vendor_boot.
i f e q ( t r u e , $( BOARD_USES_GENERIC_KERNEL_IMAGE ) )
ifeq ( true,$( BOARD_USES_RECOVERY_AS_BOOT) )
$( error BOARD_USES_RECOVERY_AS_BOOT cannot be true if BOARD_USES_GENERIC_KERNEL_IMAGE is true. \
Use BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT instead)
endif
e n d i f
2020-11-14 11:12:06 +08:00
i f e q ( t r u e , $( BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT ) )
ifeq ( true,$( BOARD_USES_RECOVERY_AS_BOOT) )
$( error BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT and BOARD_USES_RECOVERY_AS_BOOT cannot be \
both true. Recovery resources should be installed to either boot or vendor_boot, but not both)
endif
e n d i f