1# This is included by the top-level Makefile. 2# It sets up standard variables based on the 3# current configuration and platform, which 4# are not specific to what is being built. 5 6ifndef KATI 7$(warning Directly using config.mk from make is no longer supported.) 8$(warning ) 9$(warning If you are just attempting to build, you probably need to re-source envsetup.sh:) 10$(warning ) 11$(warning $$ source build/envsetup.sh) 12$(warning ) 13$(warning If you are attempting to emulate get_build_var, use one of the following:) 14$(warning $$ build/soong/soong_ui.bash --dumpvar-mode) 15$(warning $$ build/soong/soong_ui.bash --dumpvars-mode) 16$(warning ) 17$(error done) 18endif 19 20BUILD_SYSTEM :=$= build/make/core 21BUILD_SYSTEM_COMMON :=$= build/make/common 22 23include $(BUILD_SYSTEM_COMMON)/core.mk 24 25# ----------------------------------------------------------------- 26# Rules and functions to help copy important files to DIST_DIR 27# when requested. This must be included once only, and must be included before 28# soong_config (as soong_config calls make_vars-$(TARGET).mk, and soong may 29# propagate calls to dist-for-goals there). 30include $(BUILD_SYSTEM)/distdir.mk 31 32# Mark variables that should be coming as environment variables from soong_ui 33# as readonly 34.KATI_READONLY := OUT_DIR TMPDIR BUILD_DATETIME_FILE 35ifdef CALLED_FROM_SETUP 36 .KATI_READONLY := CALLED_FROM_SETUP 37endif 38ifdef KATI_PACKAGE_MK_DIR 39 .KATI_READONLY := KATI_PACKAGE_MK_DIR 40endif 41 42# Mark variables deprecated/obsolete 43CHANGES_URL := https://android.googlesource.com/platform/build/+/master/Changes.md 44.KATI_READONLY := CHANGES_URL 45$(KATI_deprecated_var TARGET_USES_64_BIT_BINDER,All devices use 64-bit binder by default now. Uses of TARGET_USES_64_BIT_BINDER should be removed.) 46$(KATI_deprecated_var PRODUCT_SEPOLICY_SPLIT,All devices are built with split sepolicy.) 47$(KATI_deprecated_var PRODUCT_SEPOLICY_SPLIT_OVERRIDE,All devices are built with split sepolicy.) 48$(KATI_obsolete_var PATH,Do not use PATH directly. See $(CHANGES_URL)#PATH) 49$(KATI_obsolete_var PYTHONPATH,Do not use PYTHONPATH directly. See $(CHANGES_URL)#PYTHONPATH) 50$(KATI_obsolete_var OUT,Use OUT_DIR instead. See $(CHANGES_URL)#OUT) 51$(KATI_obsolete_var ANDROID_HOST_OUT,Use HOST_OUT instead. See $(CHANGES_URL)#ANDROID_HOST_OUT) 52$(KATI_obsolete_var ANDROID_PRODUCT_OUT,Use PRODUCT_OUT instead. See $(CHANGES_URL)#ANDROID_PRODUCT_OUT) 53$(KATI_obsolete_var ANDROID_HOST_OUT_TESTCASES,Use HOST_OUT_TESTCASES instead. See $(CHANGES_URL)#ANDROID_HOST_OUT_TESTCASES) 54$(KATI_obsolete_var ANDROID_TARGET_OUT_TESTCASES,Use TARGET_OUT_TESTCASES instead. See $(CHANGES_URL)#ANDROID_TARGET_OUT_TESTCASES) 55$(KATI_obsolete_var ANDROID_BUILD_TOP,Use '.' instead. See $(CHANGES_URL)#ANDROID_BUILD_TOP) 56$(KATI_obsolete_var \ 57 ANDROID_TOOLCHAIN \ 58 ANDROID_TOOLCHAIN_2ND_ARCH \ 59 ANDROID_DEV_SCRIPTS \ 60 ANDROID_EMULATOR_PREBUILTS \ 61 ANDROID_PRE_BUILD_PATHS \ 62 ,See $(CHANGES_URL)#other_envsetup_variables) 63$(KATI_obsolete_var PRODUCT_COMPATIBILITY_MATRIX_LEVEL_OVERRIDE,Set FCM Version in device manifest instead. See $(CHANGES_URL)#PRODUCT_COMPATIBILITY_MATRIX_LEVEL_OVERRIDE) 64$(KATI_obsolete_var USE_CLANG_PLATFORM_BUILD,Clang is the only supported Android compiler. See $(CHANGES_URL)#USE_CLANG_PLATFORM_BUILD) 65$(KATI_obsolete_var BUILD_DROIDDOC,Droiddoc is only supported in Soong. See details on build/soong/java/droiddoc.go) 66$(KATI_obsolete_var BUILD_APIDIFF,Apidiff is only supported in Soong. See details on build/soong/java/droiddoc.go) 67$(KATI_obsolete_var \ 68 DEFAULT_GCC_CPP_STD_VERSION \ 69 HOST_GLOBAL_CFLAGS 2ND_HOST_GLOBAL_CFLAGS \ 70 HOST_GLOBAL_CONLYFLAGS 2ND_HOST_GLOBAL_CONLYFLAGS \ 71 HOST_GLOBAL_CPPFLAGS 2ND_HOST_GLOBAL_CPPFLAGS \ 72 HOST_GLOBAL_LDFLAGS 2ND_HOST_GLOBAL_LDFLAGS \ 73 HOST_GLOBAL_LLDFLAGS 2ND_HOST_GLOBAL_LLDFLAGS \ 74 HOST_CLANG_SUPPORTED 2ND_HOST_CLANG_SUPPORTED \ 75 HOST_CC 2ND_HOST_CC \ 76 HOST_CXX 2ND_HOST_CXX \ 77 HOST_CROSS_GLOBAL_CFLAGS 2ND_HOST_CROSS_GLOBAL_CFLAGS \ 78 HOST_CROSS_GLOBAL_CONLYFLAGS 2ND_HOST_CROSS_GLOBAL_CONLYFLAGS \ 79 HOST_CROSS_GLOBAL_CPPFLAGS 2ND_HOST_CROSS_GLOBAL_CPPFLAGS \ 80 HOST_CROSS_GLOBAL_LDFLAGS 2ND_HOST_CROSS_GLOBAL_LDFLAGS \ 81 HOST_CROSS_GLOBAL_LLDFLAGS 2ND_HOST_CROSS_GLOBAL_LLDFLAGS \ 82 HOST_CROSS_CLANG_SUPPORTED 2ND_HOST_CROSS_CLANG_SUPPORTED \ 83 HOST_CROSS_CC 2ND_HOST_CROSS_CC \ 84 HOST_CROSS_CXX 2ND_HOST_CROSS_CXX \ 85 TARGET_GLOBAL_CFLAGS 2ND_TARGET_GLOBAL_CFLAGS \ 86 TARGET_GLOBAL_CONLYFLAGS 2ND_TARGET_GLOBAL_CONLYFLAGS \ 87 TARGET_GLOBAL_CPPFLAGS 2ND_TARGET_GLOBAL_CPPFLAGS \ 88 TARGET_GLOBAL_LDFLAGS 2ND_TARGET_GLOBAL_LDFLAGS \ 89 TARGET_GLOBAL_LLDFLAGS 2ND_TARGET_GLOBAL_LLDFLAGS \ 90 TARGET_CLANG_SUPPORTED 2ND_TARGET_CLANG_SUPPORTED \ 91 TARGET_CC 2ND_TARGET_CC \ 92 TARGET_CXX 2ND_TARGET_CXX \ 93 TARGET_TOOLCHAIN_ROOT 2ND_TARGET_TOOLCHAIN_ROOT \ 94 HOST_TOOLCHAIN_ROOT 2ND_HOST_TOOLCHAIN_ROOT \ 95 HOST_CROSS_TOOLCHAIN_ROOT 2ND_HOST_CROSS_TOOLCHAIN_ROOT \ 96 HOST_TOOLS_PREFIX 2ND_HOST_TOOLS_PREFIX \ 97 HOST_CROSS_TOOLS_PREFIX 2ND_HOST_CROSS_TOOLS_PREFIX \ 98 HOST_GCC_VERSION 2ND_HOST_GCC_VERSION \ 99 HOST_CROSS_GCC_VERSION 2ND_HOST_CROSS_GCC_VERSION \ 100 TARGET_NDK_GCC_VERSION 2ND_TARGET_NDK_GCC_VERSION \ 101 GLOBAL_CFLAGS_NO_OVERRIDE GLOBAL_CPPFLAGS_NO_OVERRIDE \ 102 ,GCC support has been removed. Use Clang instead) 103$(KATI_obsolete_var DIST_DIR dist_goal,Use dist-for-goals instead. See $(CHANGES_URL)#dist) 104$(KATI_obsolete_var TARGET_ANDROID_FILESYSTEM_CONFIG_H,Use TARGET_FS_CONFIG_GEN instead) 105$(KATI_deprecated_var USER,Use BUILD_USERNAME instead. See $(CHANGES_URL)#USER) 106$(KATI_obsolete_var TARGET_ROOT_OUT_SBIN,/sbin has been removed, use /system/bin instead) 107$(KATI_obsolete_var TARGET_ROOT_OUT_SBIN_UNSTRIPPED,/sbin has been removed, use /system/bin instead) 108$(KATI_obsolete_var BUILD_BROKEN_PHONY_TARGETS) 109$(KATI_obsolete_var BUILD_BROKEN_DUP_COPY_HEADERS) 110$(KATI_obsolete_var BUILD_BROKEN_ENG_DEBUG_TAGS) 111$(KATI_obsolete_export It is a global setting. See $(CHANGES_URL)#export_keyword) 112$(KATI_obsolete_var BUILD_BROKEN_ANDROIDMK_EXPORTS) 113$(KATI_obsolete_var PRODUCT_NOTICE_SPLIT_OVERRIDE,Stop using this, keep calm, and carry on.) 114$(KATI_obsolete_var PRODUCT_STATIC_BOOT_CONTROL_HAL,Use shared library module instead. See $(CHANGES_URL)#PRODUCT_STATIC_BOOT_CONTROL_HAL) 115$(KATI_obsolete_var \ 116 ARCH_ARM_HAVE_ARMV7A \ 117 ARCH_DSP_REV \ 118 ARCH_HAVE_ALIGNED_DOUBLES \ 119 ARCH_MIPS_HAS_DSP \ 120 ARCH_MIPS_HAS_FPU \ 121 ARCH_MIPS_REV6 \ 122 ARCH_X86_HAVE_AES_NI \ 123 ARCH_X86_HAVE_AVX \ 124 ARCH_X86_HAVE_AVX2 \ 125 ARCH_X86_HAVE_AVX512 \ 126 ARCH_X86_HAVE_MOVBE \ 127 ARCH_X86_HAVE_POPCNT \ 128 ARCH_X86_HAVE_SSE4 \ 129 ARCH_X86_HAVE_SSE4_2 \ 130 ARCH_X86_HAVE_SSSE3 \ 131) 132$(KATI_obsolete_var PRODUCT_IOT) 133$(KATI_obsolete_var MD5SUM) 134$(KATI_obsolete_var BOARD_HAL_STATIC_LIBRARIES, See $(CHANGES_URL)#BOARD_HAL_STATIC_LIBRARIES) 135$(KATI_obsolete_var LOCAL_HAL_STATIC_LIBRARIES, See $(CHANGES_URL)#BOARD_HAL_STATIC_LIBRARIES) 136$(KATI_obsolete_var \ 137 TARGET_AUX_OS_VARIANT_LIST \ 138 LOCAL_AUX_ARCH \ 139 LOCAL_AUX_CPU \ 140 LOCAL_AUX_OS \ 141 LOCAL_AUX_OS_VARIANT \ 142 LOCAL_AUX_SUBARCH \ 143 LOCAL_AUX_TOOLCHAIN \ 144 LOCAL_CUSTOM_BUILD_STEP_INPUT \ 145 LOCAL_CUSTOM_BUILD_STEP_OUTPUT \ 146 LOCAL_IS_AUX_MODULE \ 147 ,AUX support has been removed) 148$(KATI_obsolete_var HOST_OUT_TEST_CONFIG TARGET_OUT_TEST_CONFIG LOCAL_TEST_CONFIG_OPTIONS) 149$(KATI_obsolete_var \ 150 TARGET_PROJECT_INCLUDES \ 151 2ND_TARGET_PROJECT_INCLUDES \ 152 TARGET_PROJECT_SYSTEM_INCLUDES \ 153 2ND_TARGET_PROJECT_SYSTEM_INCLUDES \ 154 ,Project include variables have been removed) 155$(KATI_obsolete_var TARGET_PREFER_32_BIT TARGET_PREFER_32_BIT_APPS TARGET_PREFER_32_BIT_EXECUTABLES) 156$(KATI_obsolete_var PRODUCT_ARTIFACT_SYSTEM_CERTIFICATE_REQUIREMENT_WHITELIST,Use PRODUCT_ARTIFACT_SYSTEM_CERTIFICATE_REQUIREMENT_ALLOW_LIST) 157$(KATI_obsolete_var PRODUCT_ARTIFACT_PATH_REQUIREMENT_WHITELIST,Use PRODUCT_ARTIFACT_PATH_REQUIREMENT_ALLOWED_LIST) 158$(KATI_obsolete_var COVERAGE_PATHS,Use NATIVE_COVERAGE_PATHS instead) 159$(KATI_obsolete_var COVERAGE_EXCLUDE_PATHS,Use NATIVE_COVERAGE_EXCLUDE_PATHS instead) 160$(KATI_obsolete_var BOARD_VNDK_RUNTIME_DISABLE,VNDK-Lite is no longer supported) 161$(KATI_obsolete_var LOCAL_SANITIZE_BLACKLIST,Use LOCAL_SANITIZE_BLOCKLIST instead) 162$(KATI_obsolete_var BOARD_PLAT_PUBLIC_SEPOLICY_DIR,Use SYSTEM_EXT_PUBLIC_SEPOLICY_DIRS instead) 163$(KATI_obsolete_var BOARD_PLAT_PRIVATE_SEPOLICY_DIR,Use SYSTEM_EXT_PRIVATE_SEPOLICY_DIRS instead) 164$(KATI_obsolete_var TARGET_NO_VENDOR_BOOT,Use PRODUCT_BUILD_VENDOR_BOOT_IMAGE instead) 165$(KATI_obsolete_var PRODUCT_CHECK_ELF_FILES,Use BUILD_BROKEN_PREBUILT_ELF_FILES instead) 166$(KATI_obsolete_var ALL_GENERATED_SOURCES,ALL_GENERATED_SOURCES is no longer used) 167$(KATI_obsolete_var ALL_ORIGINAL_DYNAMIC_BINARIES,ALL_ORIGINAL_DYNAMIC_BINARIES is no longer used) 168$(KATI_obsolete_var PRODUCT_SUPPORTS_VERITY,VB 1.0 and related variables are no longer supported) 169$(KATI_obsolete_var PRODUCT_SUPPORTS_VERITY_FEC,VB 1.0 and related variables are no longer supported) 170$(KATI_obsolete_var PRODUCT_SUPPORTS_BOOT_SIGNER,VB 1.0 and related variables are no longer supported) 171$(KATI_obsolete_var PRODUCT_VERITY_SIGNING_KEY,VB 1.0 and related variables are no longer supported) 172$(KATI_obsolete_var BOARD_PREBUILT_PVMFWIMAGE,pvmfw.bin is now built in AOSP and custom versions are no longer supported) 173$(KATI_obsolete_var BUILDING_PVMFW_IMAGE,BUILDING_PVMFW_IMAGE is no longer used) 174$(KATI_obsolete_var BOARD_BUILD_SYSTEM_ROOT_IMAGE) 175$(KATI_obsolete_var FS_GET_STATS) 176$(KATI_obsolete_var BUILD_BROKEN_USES_SOONG_PYTHON2_MODULES) 177 178# Used to force goals to build. Only use for conditionally defined goals. 179.PHONY: FORCE 180FORCE: 181 182ORIGINAL_MAKECMDGOALS := $(MAKECMDGOALS) 183 184UNAME := $(shell uname -sm) 185 186SRC_TARGET_DIR := $(TOPDIR)build/make/target 187 188# Some specific paths to tools 189SRC_DROIDDOC_DIR := $(TOPDIR)build/make/tools/droiddoc 190 191# Mark some inputs as readonly 192ifdef TARGET_DEVICE_DIR 193 .KATI_READONLY := TARGET_DEVICE_DIR 194endif 195 196ONE_SHOT_MAKEFILE := 197.KATI_READONLY := ONE_SHOT_MAKEFILE 198 199# Set up efficient math functions which are used in make. 200# Here since this file is included by envsetup as well as during build. 201include $(BUILD_SYSTEM_COMMON)/math.mk 202 203include $(BUILD_SYSTEM_COMMON)/strings.mk 204 205include $(BUILD_SYSTEM_COMMON)/json.mk 206 207# Various mappings to avoid hard-coding paths all over the place 208include $(BUILD_SYSTEM)/pathmap.mk 209 210# Allow projects to define their own globally-available variables 211include $(BUILD_SYSTEM)/project_definitions.mk 212 213# ############################################################### 214# Build system internal files 215# ############################################################### 216 217BUILD_COMBOS :=$= $(BUILD_SYSTEM)/combo 218 219CLEAR_VARS :=$= $(BUILD_SYSTEM)/clear_vars.mk 220 221BUILD_HOST_STATIC_LIBRARY :=$= $(BUILD_SYSTEM)/host_static_library.mk 222BUILD_HOST_SHARED_LIBRARY :=$= $(BUILD_SYSTEM)/host_shared_library.mk 223BUILD_STATIC_LIBRARY :=$= $(BUILD_SYSTEM)/static_library.mk 224BUILD_HEADER_LIBRARY :=$= $(BUILD_SYSTEM)/header_library.mk 225BUILD_SHARED_LIBRARY :=$= $(BUILD_SYSTEM)/shared_library.mk 226BUILD_EXECUTABLE :=$= $(BUILD_SYSTEM)/executable.mk 227BUILD_HOST_EXECUTABLE :=$= $(BUILD_SYSTEM)/host_executable.mk 228BUILD_PACKAGE :=$= $(BUILD_SYSTEM)/package.mk 229BUILD_PHONY_PACKAGE :=$= $(BUILD_SYSTEM)/phony_package.mk 230BUILD_RRO_PACKAGE :=$= $(BUILD_SYSTEM)/build_rro_package.mk 231BUILD_HOST_PREBUILT :=$= $(BUILD_SYSTEM)/host_prebuilt.mk 232BUILD_PREBUILT :=$= $(BUILD_SYSTEM)/prebuilt.mk 233BUILD_MULTI_PREBUILT :=$= $(BUILD_SYSTEM)/multi_prebuilt.mk 234BUILD_JAVA_LIBRARY :=$= $(BUILD_SYSTEM)/java_library.mk 235BUILD_STATIC_JAVA_LIBRARY :=$= $(BUILD_SYSTEM)/static_java_library.mk 236BUILD_HOST_JAVA_LIBRARY :=$= $(BUILD_SYSTEM)/host_java_library.mk 237BUILD_COPY_HEADERS :=$= $(BUILD_SYSTEM)/copy_headers.mk 238BUILD_NATIVE_TEST :=$= $(BUILD_SYSTEM)/native_test.mk 239BUILD_FUZZ_TEST :=$= $(BUILD_SYSTEM)/fuzz_test.mk 240 241BUILD_NOTICE_FILE :=$= $(BUILD_SYSTEM)/notice_files.mk 242BUILD_SBOM_GEN :=$= $(BUILD_SYSTEM)/sbom.mk 243 244include $(BUILD_SYSTEM)/deprecation.mk 245 246# ############################################################### 247# Parse out any modifier targets. 248# ############################################################### 249 250hide := @ 251 252################################################################ 253# Tools needed in product configuration makefiles. 254################################################################ 255NORMALIZE_PATH := build/make/tools/normalize_path.py 256 257# $(1): the paths to be normalized 258define normalize-paths 259$(if $(1),$(shell $(NORMALIZE_PATH) $(1))) 260endef 261 262# ############################################################### 263# Set common values 264# ############################################################### 265 266# Initialize SOONG_CONFIG_NAMESPACES so that it isn't recursive. 267SOONG_CONFIG_NAMESPACES := 268 269# TODO(asmundak): remove add_soong_config_namespace, add_soong_config_var, 270# and add_soong_config_var_value once all their usages are replaced with 271# soong_config_set/soong_config_append. 272 273# The add_soong_config_namespace function adds a namespace and initializes it 274# to be empty. 275# $1 is the namespace. 276# Ex: $(call add_soong_config_namespace,acme) 277 278define add_soong_config_namespace 279$(eval SOONG_CONFIG_NAMESPACES += $(strip $1)) \ 280$(eval SOONG_CONFIG_$(strip $1) :=) 281endef 282 283# The add_soong_config_var function adds a a list of soong config variables to 284# SOONG_CONFIG_*. The variables and their values are then available to a 285# soong_config_module_type in an Android.bp file. 286# $1 is the namespace. $2 is the list of variables. 287# Ex: $(call add_soong_config_var,acme,COOL_FEATURE_A COOL_FEATURE_B) 288define add_soong_config_var 289$(eval SOONG_CONFIG_$(strip $1) += $(strip $2)) \ 290$(foreach v,$(strip $2),$(eval SOONG_CONFIG_$(strip $1)_$v := $(strip $($v)))) 291endef 292 293# The add_soong_config_var_value function defines a make variable and also adds 294# the variable to SOONG_CONFIG_*. 295# $1 is the namespace. $2 is the variable name. $3 is the variable value. 296# Ex: $(call add_soong_config_var_value,acme,COOL_FEATURE,true) 297 298define add_soong_config_var_value 299$(eval $(strip $2) := $(strip $3)) \ 300$(call add_soong_config_var,$1,$2) 301endef 302 303# Soong config namespace variables manipulation. 304# 305# internal utility to define a namespace and a variable in it. 306define soong_config_define_internal 307$(if $(filter $1,$(SOONG_CONFIG_NAMESPACES)),,$(eval SOONG_CONFIG_NAMESPACES:=$(SOONG_CONFIG_NAMESPACES) $(strip $1))) \ 308$(if $(filter $2,$(SOONG_CONFIG_$(strip $1))),,$(eval SOONG_CONFIG_$(strip $1):=$(SOONG_CONFIG_$(strip $1)) $(strip $2))) 309endef 310 311# soong_config_set defines the variable in the given Soong config namespace 312# and sets its value. If the namespace does not exist, it will be defined. 313# $1 is the namespace. $2 is the variable name. $3 is the variable value. 314# Ex: $(call soong_config_set,acme,COOL_FEATURE,true) 315define soong_config_set 316$(call soong_config_define_internal,$1,$2) \ 317$(eval SOONG_CONFIG_$(strip $1)_$(strip $2):=$(strip $3)) 318endef 319 320# soong_config_set_bool is the same as soong_config_set, but it will 321# also type the variable as a bool, so that when using select() expressions 322# in blueprint files they can use boolean values instead of strings. 323# It will only accept "true" for its value, any other value will be 324# treated as false. 325# $1 is the namespace. $2 is the variable name. $3 is the variable value. 326# Ex: $(call soong_config_set_bool,acme,COOL_FEATURE,true) 327define soong_config_set_bool 328$(call soong_config_define_internal,$1,$2) \ 329$(eval SOONG_CONFIG_$(strip $1)_$(strip $2):=$(filter true,$3)) 330$(eval SOONG_CONFIG_TYPE_$(strip $1)_$(strip $2):=bool) 331endef 332 333# soong_config_set_int is the same as soong_config_set, but it will 334# also type the variable as an integer, so that when using select() expressions 335# in blueprint files they can use integer values instead of strings. 336# It will error out if a non-integer is supplied 337# $1 is the namespace. $2 is the variable name. $3 is the variable value. 338# Ex: $(call soong_config_set_bool,acme,COOL_FEATURE,34) 339define soong_config_set_int 340$(call soong_config_define_internal,$1,$2) \ 341$(if $(call math_is_int,$3),,$(error soong_config_set_int called with non-integer value $(3))) 342$(eval SOONG_CONFIG_$(strip $1)_$(strip $2):=$(strip $3)) 343$(eval SOONG_CONFIG_TYPE_$(strip $1)_$(strip $2):=int) 344endef 345 346# soong_config_set_string_list is the same as soong_config_set, but it will 347# also type the variable as a list of strings, so that when using select() expressions 348# in blueprint files they can use list values instead of strings. 349# The values of the list must be space-separated. 350# $1 is the namespace. $2 is the variable name. $3 is the variable value. 351# Ex: $(call soong_config_set_string_list,acme,COOL_LIBS,a b) 352define soong_config_set_string_list 353$(call soong_config_define_internal,$1,$2) \ 354$(eval SOONG_CONFIG_$(strip $1)_$(strip $2):=$(strip $3)) 355$(eval SOONG_CONFIG_TYPE_$(strip $1)_$(strip $2):=string_list) 356endef 357 358# soong_config_append appends to the value of the variable in the given Soong 359# config namespace. If the variable does not exist, it will be defined. If the 360# namespace does not exist, it will be defined. 361# $1 is the namespace, $2 is the variable name, $3 is the value 362define soong_config_append 363$(call soong_config_define_internal,$1,$2) \ 364$(eval SOONG_CONFIG_$(strip $1)_$(strip $2):=$(SOONG_CONFIG_$(strip $1)_$(strip $2)) $(strip $3)) 365endef 366 367# soong_config_append gets to the value of the variable in the given Soong 368# config namespace. If the namespace or variables does not exist, an 369# empty string will be returned. 370# $1 is the namespace, $2 is the variable name 371define soong_config_get 372$(SOONG_CONFIG_$(strip $1)_$(strip $2)) 373endef 374 375# Set the extensions used for various packages 376COMMON_PACKAGE_SUFFIX := .zip 377COMMON_JAVA_PACKAGE_SUFFIX := .jar 378COMMON_ANDROID_PACKAGE_SUFFIX := .apk 379 380ifdef TMPDIR 381JAVA_TMPDIR_ARG := -Djava.io.tmpdir=$(TMPDIR) 382else 383JAVA_TMPDIR_ARG := 384endif 385 386# These build broken variables are intended to be set in a buildspec file, 387# while other build broken flags are expected to be set in a board config. 388# These are build broken variables that are expected to apply across board 389# configs, generally for cross-cutting features. 390 391# Build broken variables that should be treated as booleans 392_build_broken_bool_vars := 393 394# Build broken variables that should be treated as lists 395_build_broken_list_vars := \ 396 BUILD_BROKEN_PLUGIN_VALIDATION \ 397 398_build_broken_var_names := $(_build_broken_bool_vars) 399_build_broken_var_names += $(_build_broken_list_vars) 400$(foreach v,$(_build_broken_var_names),$(eval $(v) :=)) 401 402# ############################################################### 403# Include sub-configuration files 404# ############################################################### 405 406# --------------------------------------------------------------- 407# Try to include buildspec.mk, which will try to set stuff up. 408# If this file doesn't exist, the environment variables will 409# be used, and if that doesn't work, then the default is an 410# arm build 411ifndef ANDROID_BUILDSPEC 412ANDROID_BUILDSPEC := $(TOPDIR)buildspec.mk 413endif 414-include $(ANDROID_BUILDSPEC) 415 416# --------------------------------------------------------------- 417# Define most of the global variables. These are the ones that 418# are specific to the user's build configuration. 419include $(BUILD_SYSTEM)/envsetup.mk 420 421 422$(foreach var,$(_build_broken_bool_vars), \ 423 $(if $(filter-out true false,$($(var))), \ 424 $(error Valid values of $(var) are "true", "false", and "". Not "$($(var))"))) 425 426.KATI_READONLY := $(_build_broken_var_names) 427 428# Returns true if it is a low memory device, otherwise it returns false. 429define is-low-mem-device 430$(if $(findstring ro.config.low_ram=true,$(PRODUCT_PROPERTY_OVERRIDES)),true,\ 431$(if $(findstring ro.config.low_ram=true,$(PRODUCT_DEFAULT_PROPERTY_OVERRIDES)),true,\ 432$(if $(findstring ro.config.low_ram=true,$(PRODUCT_COMPATIBLE_PROPERTY_OVERRIDE)),true,\ 433$(if $(findstring ro.config.low_ram=true,$(PRODUCT_COMPATIBLE_PROPERTY)),true,\ 434$(if $(findstring ro.config.low_ram=true,$(PRODUCT_SYSTEM_DEFAULT_PROPERTIES)),true,\ 435$(if $(findstring ro.config.low_ram=true,$(PRODUCT_SYSTEM_EXT_PROPERTIES)),true,\ 436$(if $(findstring ro.config.low_ram=true,$(PRODUCT_PRODUCT_PROPERTIES)),true,\ 437$(if $(findstring ro.config.low_ram=true,$(PRODUCT_VENDOR_PROPERTIES)),true,\ 438$(if $(findstring ro.config.low_ram=true,$(PRODUCT_ODM_PROPERTIES)),true,false))))))))) 439endef 440 441# Set TARGET_MAX_PAGE_SIZE_SUPPORTED. 442# TARGET_MAX_PAGE_SIZE_SUPPORTED indicates the alignment of the ELF segments. 443ifdef PRODUCT_MAX_PAGE_SIZE_SUPPORTED 444 TARGET_MAX_PAGE_SIZE_SUPPORTED := $(PRODUCT_MAX_PAGE_SIZE_SUPPORTED) 445else ifeq ($(strip $(call is-low-mem-device)),true) 446 # Low memory device will have 4096 binary alignment. 447 TARGET_MAX_PAGE_SIZE_SUPPORTED := 4096 448else ifeq ($(call math_lt,$(VSR_VENDOR_API_LEVEL),34),true) 449 TARGET_MAX_PAGE_SIZE_SUPPORTED := 4096 450else ifeq (,$(filter arm64 x86_64,$(TARGET_ARCH))) 451 # TARGET_MAX_PAGE_SIZE_SUPPORTED > 4096 is only supported in arm64 and 452 # x86_64 targets. 453 TARGET_MAX_PAGE_SIZE_SUPPORTED := 4096 454else 455 # The default binary alignment for userspace is 16384. 456 TARGET_MAX_PAGE_SIZE_SUPPORTED := 16384 457endif 458.KATI_READONLY := TARGET_MAX_PAGE_SIZE_SUPPORTED 459 460# Boolean variable determining if AOSP relies on bionic's PAGE_SIZE macro. 461ifdef PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO 462 TARGET_NO_BIONIC_PAGE_SIZE_MACRO := $(PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO) 463else ifeq ($(call math_lt,$(VSR_VENDOR_API_LEVEL),35),true) 464 TARGET_NO_BIONIC_PAGE_SIZE_MACRO := false 465else 466 TARGET_NO_BIONIC_PAGE_SIZE_MACRO := true 467endif 468.KATI_READONLY := TARGET_NO_BIONIC_PAGE_SIZE_MACRO 469 470# Pruned directory options used when using findleaves.py 471# See envsetup.mk for a description of SCAN_EXCLUDE_DIRS 472FIND_LEAVES_EXCLUDES := $(addprefix --prune=, $(SCAN_EXCLUDE_DIRS) .repo .git) 473 474# The build system exposes several variables for where to find the kernel 475# headers: 476# TARGET_DEVICE_KERNEL_HEADERS is automatically created for the current 477# device being built. It is set as $(TARGET_DEVICE_DIR)/kernel-headers, 478# e.g. device/samsung/tuna/kernel-headers. This directory is not 479# explicitly set by anyone, the build system always adds this subdir. 480# 481# TARGET_BOARD_KERNEL_HEADERS is specified by the BoardConfig.mk file 482# to allow other directories to be included. This is useful if there's 483# some common place where a few headers are being kept for a group 484# of devices. For example, device/<vendor>/common/kernel-headers could 485# contain some headers for several of <vendor>'s devices. 486# 487# TARGET_PRODUCT_KERNEL_HEADERS is generated by the product inheritance 488# graph. This allows architecture products to provide headers for the 489# devices using that architecture. For example, 490# hardware/ti/omap4xxx/omap4.mk will specify 491# PRODUCT_VENDOR_KERNEL_HEADERS variable that specify where the omap4 492# specific headers are, e.g. hardware/ti/omap4xxx/kernel-headers. 493# The build system then combines all the values specified by all the 494# PRODUCT_VENDOR_KERNEL_HEADERS directives in the product inheritance 495# tree and then exports a TARGET_PRODUCT_KERNEL_HEADERS variable. 496# 497# The layout of subdirs in any of the kernel-headers dir should mirror the 498# layout of the kernel include/ directory. For example, 499# device/samsung/tuna/kernel-headers/linux/, 500# hardware/ti/omap4xxx/kernel-headers/media/, 501# etc. 502# 503# NOTE: These directories MUST contain post-processed headers using the 504# bionic/libc/kernel/tools/clean_header.py tool. Additionally, the original 505# kernel headers must also be checked in, but in a different subdirectory. By 506# convention, the originals should be checked into original-kernel-headers 507# directory of the same parent dir. For example, 508# device/samsung/tuna/kernel-headers <----- post-processed 509# device/samsung/tuna/original-kernel-headers <----- originals 510# 511TARGET_DEVICE_KERNEL_HEADERS := $(strip $(wildcard $(TARGET_DEVICE_DIR)/kernel-headers)) 512 513define validate-kernel-headers 514$(if $(firstword $(foreach hdr_dir,$(1),\ 515 $(filter-out kernel-headers,$(notdir $(hdr_dir))))),\ 516 $(error Kernel header dirs must be end in kernel-headers: $(1))) 517endef 518# also allow the board config to provide additional directories since 519# there could be device/oem/base_hw and device/oem/derived_hw 520# that both are valid devices but derived_hw needs to use kernel headers 521# from base_hw. 522TARGET_BOARD_KERNEL_HEADERS := $(strip $(wildcard $(TARGET_BOARD_KERNEL_HEADERS))) 523TARGET_BOARD_KERNEL_HEADERS := $(patsubst %/,%,$(TARGET_BOARD_KERNEL_HEADERS)) 524$(call validate-kernel-headers,$(TARGET_BOARD_KERNEL_HEADERS)) 525 526# then add product-inherited includes, to allow for 527# hardware/sivendor/chip/chip.mk to include their own headers 528TARGET_PRODUCT_KERNEL_HEADERS := $(strip $(wildcard $(PRODUCT_VENDOR_KERNEL_HEADERS))) 529TARGET_PRODUCT_KERNEL_HEADERS := $(patsubst %/,%,$(TARGET_PRODUCT_KERNEL_HEADERS)) 530$(call validate-kernel-headers,$(TARGET_PRODUCT_KERNEL_HEADERS)) 531.KATI_READONLY := TARGET_DEVICE_KERNEL_HEADERS TARGET_BOARD_KERNEL_HEADERS TARGET_PRODUCT_KERNEL_HEADERS 532 533# Commands to generate .toc file common to ELF .so files. 534define _gen_toc_command_for_elf 535$(hide) ($($(PRIVATE_2ND_ARCH_VAR_PREFIX)$(PRIVATE_PREFIX)READELF) -d $(1) | grep SONAME || echo "No SONAME for $1") > $(2) 536$(hide) $($(PRIVATE_2ND_ARCH_VAR_PREFIX)$(PRIVATE_PREFIX)READELF) --dyn-syms $(1) | awk '{$$2=""; $$3=""; print}' >> $(2) 537endef 538 539# Commands to generate .toc file from Darwin dynamic library. 540define _gen_toc_command_for_macho 541$(hide) $(HOST_OTOOL) -l $(1) | grep LC_ID_DYLIB -A 5 > $(2) 542$(hide) $(HOST_NM) -gP $(1) | cut -f1-2 -d" " | (grep -v U$$ >> $(2) || true) 543endef 544 545# Pick a Java compiler. 546include $(BUILD_SYSTEM)/combo/javac.mk 547 548ifeq ($(CALLED_FROM_SETUP),true) 549include $(BUILD_SYSTEM)/ccache.mk 550include $(BUILD_SYSTEM)/rbe.mk 551endif 552 553# GCC version selection 554TARGET_GCC_VERSION := 4.9 555ifdef TARGET_2ND_ARCH 5562ND_TARGET_GCC_VERSION := 4.9 557endif 558 559# Normalize WITH_STATIC_ANALYZER 560ifeq ($(strip $(WITH_STATIC_ANALYZER)),0) 561 WITH_STATIC_ANALYZER := 562endif 563 564# Unset WITH_TIDY_ONLY if global WITH_TIDY_ONLY is not true nor 1. 565ifeq (,$(filter 1 true,$(WITH_TIDY_ONLY))) 566 WITH_TIDY_ONLY := 567endif 568 569# --------------------------------------------------------------- 570# Check that the configuration is current. We check that 571# BUILD_ENV_SEQUENCE_NUMBER is current against this value. 572# Don't fail if we're called from envsetup, so they have a 573# chance to update their environment. 574 575ifeq (,$(strip $(CALLED_FROM_SETUP))) 576ifneq (,$(strip $(BUILD_ENV_SEQUENCE_NUMBER))) 577ifneq ($(BUILD_ENV_SEQUENCE_NUMBER),$(CORRECT_BUILD_ENV_SEQUENCE_NUMBER)) 578$(warning BUILD_ENV_SEQUENCE_NUMBER is set incorrectly.) 579$(info *** If you use envsetup/lunch/choosecombo:) 580$(info *** - Re-execute envsetup (". envsetup.sh")) 581$(info *** - Re-run lunch or choosecombo) 582$(info *** If you use buildspec.mk:) 583$(info *** - Look at buildspec.mk.default to see what has changed) 584$(info *** - Update BUILD_ENV_SEQUENCE_NUMBER to "$(CORRECT_BUILD_ENV_SEQUENCE_NUMBER)") 585$(error bailing..) 586endif 587endif 588endif 589 590# --------------------------------------------------------------- 591# Whether we can expect a full build graph 592ALLOW_MISSING_DEPENDENCIES := $(filter true,$(ALLOW_MISSING_DEPENDENCIES)) 593ifneq ($(TARGET_BUILD_APPS),) 594ALLOW_MISSING_DEPENDENCIES := true 595endif 596ifeq ($(TARGET_BUILD_UNBUNDLED_IMAGE),true) 597ALLOW_MISSING_DEPENDENCIES := true 598endif 599ifneq ($(filter true,$(SOONG_ALLOW_MISSING_DEPENDENCIES)),) 600ALLOW_MISSING_DEPENDENCIES := true 601endif 602# Mac builds default to ALLOW_MISSING_DEPENDENCIES, at least until the host 603# tools aren't enabled by default for Mac. 604ifeq ($(HOST_OS),darwin) 605 ALLOW_MISSING_DEPENDENCIES := true 606endif 607.KATI_READONLY := ALLOW_MISSING_DEPENDENCIES 608 609TARGET_BUILD_USE_PREBUILT_SDKS := 610DISABLE_PREOPT := 611DISABLE_PREOPT_BOOT_IMAGES := 612ifneq (,$(TARGET_BUILD_APPS)$(TARGET_BUILD_UNBUNDLED_IMAGE)) 613 DISABLE_PREOPT := true 614 DISABLE_PREOPT_BOOT_IMAGES := true 615endif 616ifeq (true,$(TARGET_BUILD_UNBUNDLED)) 617 ifneq (true,$(UNBUNDLED_BUILD_SDKS_FROM_SOURCE)) 618 TARGET_BUILD_USE_PREBUILT_SDKS := true 619 endif 620endif 621 622.KATI_READONLY := \ 623 TARGET_BUILD_USE_PREBUILT_SDKS \ 624 DISABLE_PREOPT \ 625 DISABLE_PREOPT_BOOT_IMAGES \ 626 627prebuilt_sdk_tools := prebuilts/sdk/tools 628prebuilt_sdk_tools_bin := $(prebuilt_sdk_tools)/$(HOST_OS)/bin 629 630prebuilt_build_tools := prebuilts/build-tools 631prebuilt_build_tools_wrappers := prebuilts/build-tools/common/bin 632prebuilt_build_tools_jars := prebuilts/build-tools/common/framework 633prebuilt_build_tools_bin_noasan := $(prebuilt_build_tools)/$(HOST_PREBUILT_TAG)/bin 634ifeq ($(filter address,$(SANITIZE_HOST)),) 635prebuilt_build_tools_bin := $(prebuilt_build_tools_bin_noasan) 636else 637prebuilt_build_tools_bin := $(prebuilt_build_tools)/$(HOST_PREBUILT_TAG)/asan/bin 638endif 639 640# Work around for b/68406220 641# This should match the soong version. 642USE_D8 := true 643.KATI_READONLY := USE_D8 644 645# 646# Tools that are prebuilts for TARGET_BUILD_USE_PREBUILT_SDKS 647# 648ifeq (,$(TARGET_BUILD_USE_PREBUILT_SDKS)) 649 AAPT := $(HOST_OUT_EXECUTABLES)/aapt 650else # TARGET_BUILD_USE_PREBUILT_SDKS 651 AAPT := $(prebuilt_sdk_tools_bin)/aapt 652endif # TARGET_BUILD_USE_PREBUILT_SDKS 653 654ifeq (,$(TARGET_BUILD_USE_PREBUILT_SDKS)) 655 # Use RenderScript prebuilts for unbundled builds 656 LLVM_RS_CC := $(HOST_OUT_EXECUTABLES)/llvm-rs-cc 657 BCC_COMPAT := $(HOST_OUT_EXECUTABLES)/bcc_compat 658else 659 LLVM_RS_CC := $(prebuilt_sdk_tools_bin)/llvm-rs-cc 660 BCC_COMPAT := $(prebuilt_sdk_tools_bin)/bcc_compat 661endif 662 663prebuilt_sdk_tools := 664prebuilt_sdk_tools_bin := 665 666ACP := $(prebuilt_build_tools_bin)/acp 667CKATI := $(prebuilt_build_tools_bin)/ckati 668DEPMOD := $(HOST_OUT_EXECUTABLES)/depmod 669FILESLIST := $(HOST_OUT_EXECUTABLES)/fileslist 670FILESLIST_UTIL :=$= build/make/tools/fileslist_util.py 671HOST_INIT_VERIFIER := $(HOST_OUT_EXECUTABLES)/host_init_verifier 672XMLLINT := $(HOST_OUT_EXECUTABLES)/xmllint 673ACONFIG := $(HOST_OUT_EXECUTABLES)/aconfig 674 675# SOONG_ZIP is exported by Soong, but needs to be defined early for 676# $OUT/dexpreopt.global. It will be verified against the Soong version. 677SOONG_ZIP := $(HOST_OUT_EXECUTABLES)/soong_zip 678 679# --------------------------------------------------------------- 680# Generic tools. 681 682# These dependencies are now handled via dependencies on prebuilt_build_tool 683BISON_DATA :=$= 684 685YASM := prebuilts/misc/$(BUILD_OS)-$(HOST_PREBUILT_ARCH)/yasm/yasm 686 687DOXYGEN:= doxygen 688ifeq ($(HOST_OS),linux) 689BREAKPAD_DUMP_SYMS := $(HOST_OUT_EXECUTABLES)/dump_syms 690else 691# For non-supported hosts, do not generate breakpad symbols. 692BREAKPAD_GENERATE_SYMBOLS := false 693endif 694GZIP := prebuilts/build-tools/path/$(BUILD_OS)-$(HOST_PREBUILT_ARCH)/gzip 695PROTOC := $(HOST_OUT_EXECUTABLES)/aprotoc$(HOST_EXECUTABLE_SUFFIX) 696NANOPB_SRCS := $(HOST_OUT_EXECUTABLES)/protoc-gen-nanopb 697MKBOOTFS := $(HOST_OUT_EXECUTABLES)/mkbootfs$(HOST_EXECUTABLE_SUFFIX) 698MINIGZIP := $(GZIP) 699LZ4 := $(HOST_OUT_EXECUTABLES)/lz4$(HOST_EXECUTABLE_SUFFIX) 700ifeq (,$(strip $(BOARD_CUSTOM_MKBOOTIMG))) 701MKBOOTIMG := $(HOST_OUT_EXECUTABLES)/mkbootimg$(HOST_EXECUTABLE_SUFFIX) 702else 703MKBOOTIMG := $(BOARD_CUSTOM_MKBOOTIMG) 704endif 705ifeq (,$(strip $(BOARD_CUSTOM_AVBTOOL))) 706AVBTOOL := $(HOST_OUT_EXECUTABLES)/avbtool$(HOST_EXECUTABLE_SUFFIX) 707else 708AVBTOOL := $(BOARD_CUSTOM_AVBTOOL) 709endif 710APICHECK := $(HOST_OUT_JAVA_LIBRARIES)/metalava$(COMMON_JAVA_PACKAGE_SUFFIX) 711MKEXTUSERIMG := $(HOST_OUT_EXECUTABLES)/mkuserimg_mke2fs 712MKE2FS_CONF := system/extras/ext4_utils/mke2fs.conf 713MKEROFS := $(HOST_OUT_EXECUTABLES)/mkfs.erofs 714MKSQUASHFSUSERIMG := $(HOST_OUT_EXECUTABLES)/mksquashfsimage 715MKF2FSUSERIMG := $(HOST_OUT_EXECUTABLES)/mkf2fsuserimg 716SIMG2IMG := $(HOST_OUT_EXECUTABLES)/simg2img$(HOST_EXECUTABLE_SUFFIX) 717E2FSCK := $(HOST_OUT_EXECUTABLES)/e2fsck$(HOST_EXECUTABLE_SUFFIX) 718TUNE2FS := $(HOST_OUT_EXECUTABLES)/tune2fs$(HOST_EXECUTABLE_SUFFIX) 719JARJAR := $(HOST_OUT_JAVA_LIBRARIES)/jarjar.jar 720DATA_BINDING_COMPILER := $(HOST_OUT_JAVA_LIBRARIES)/databinding-compiler.jar 721FAT16COPY := build/make/tools/fat16copy.py 722CHECK_ELF_FILE := $(HOST_OUT_EXECUTABLES)/check_elf_file$(HOST_EXECUTABLE_SUFFIX) 723LPMAKE := $(HOST_OUT_EXECUTABLES)/lpmake$(HOST_EXECUTABLE_SUFFIX) 724ADD_IMG_TO_TARGET_FILES := $(HOST_OUT_EXECUTABLES)/add_img_to_target_files$(HOST_EXECUTABLE_SUFFIX) 725BUILD_IMAGE := $(HOST_OUT_EXECUTABLES)/build_image$(HOST_EXECUTABLE_SUFFIX) 726ifeq (,$(strip $(BOARD_CUSTOM_BUILD_SUPER_IMAGE))) 727BUILD_SUPER_IMAGE := $(HOST_OUT_EXECUTABLES)/build_super_image$(HOST_EXECUTABLE_SUFFIX) 728else 729BUILD_SUPER_IMAGE := $(BOARD_CUSTOM_BUILD_SUPER_IMAGE) 730endif 731IMG_FROM_TARGET_FILES := $(HOST_OUT_EXECUTABLES)/img_from_target_files$(HOST_EXECUTABLE_SUFFIX) 732UNPACK_BOOTIMG := $(HOST_OUT_EXECUTABLES)/unpack_bootimg 733MAKE_RECOVERY_PATCH := $(HOST_OUT_EXECUTABLES)/make_recovery_patch$(HOST_EXECUTABLE_SUFFIX) 734OTA_FROM_TARGET_FILES := $(HOST_OUT_EXECUTABLES)/ota_from_target_files$(HOST_EXECUTABLE_SUFFIX) 735OTA_FROM_RAW_IMG := $(HOST_OUT_EXECUTABLES)/ota_from_raw_img$(HOST_EXECUTABLE_SUFFIX) 736SPARSE_IMG := $(HOST_OUT_EXECUTABLES)/sparse_img$(HOST_EXECUTABLE_SUFFIX) 737CHECK_PARTITION_SIZES := $(HOST_OUT_EXECUTABLES)/check_partition_sizes$(HOST_EXECUTABLE_SUFFIX) 738SYMBOLS_MAP := $(HOST_OUT_EXECUTABLES)/symbols_map 739 740PROGUARD_HOME := external/proguard 741PROGUARD := $(PROGUARD_HOME)/bin/proguard.sh 742PROGUARD_DEPS := $(PROGUARD) $(PROGUARD_HOME)/lib/proguard.jar 743JAVATAGS := $(HOST_OUT_EXECUTABLES)/java-event-log-tags 744MERGETAGS := $(HOST_OUT_EXECUTABLES)/merge-event-log-tags 745APPEND2SIMG := $(HOST_OUT_EXECUTABLES)/append2simg 746VERITY_SIGNER := $(HOST_OUT_EXECUTABLES)/verity_signer 747BUILD_VERITY_METADATA := $(HOST_OUT_EXECUTABLES)/build_verity_metadata 748BUILD_VERITY_TREE := $(HOST_OUT_EXECUTABLES)/build_verity_tree 749 750DEXDUMP := $(HOST_OUT_EXECUTABLES)/dexdump$(BUILD_EXECUTABLE_SUFFIX) 751PROFMAN := $(HOST_OUT_EXECUTABLES)/profman 752 753GEN_SBOM := $(HOST_OUT_EXECUTABLES)/generate-sbom 754 755FINDBUGS_DIR := external/owasp/sanitizer/tools/findbugs/bin 756FINDBUGS := $(FINDBUGS_DIR)/findbugs 757 758JETIFIER := prebuilts/sdk/tools/jetifier/jetifier-standalone/bin/jetifier-standalone 759 760EXTRACT_KERNEL := build/make/tools/extract_kernel.py 761 762# Path to tools.jar 763HOST_JDK_TOOLS_JAR := $(ANDROID_JAVA8_HOME)/lib/tools.jar 764 765APICHECK_COMMAND := $(JAVA) -Xmx4g -jar $(APICHECK) 766 767# Boolean variable determining if the allow list for compatible properties is enabled 768PRODUCT_COMPATIBLE_PROPERTY := true 769ifeq ($(PRODUCT_COMPATIBLE_PROPERTY_OVERRIDE),false) 770 $(error PRODUCT_COMPATIBLE_PROPERTY_OVERRIDE is obsolete) 771endif 772 773.KATI_READONLY := \ 774 PRODUCT_COMPATIBLE_PROPERTY 775 776# TODO: remove all code referencing these, and remove override variables 777PRODUCT_FULL_TREBLE := true 778PRODUCT_TREBLE_LINKER_NAMESPACES := true 779PRODUCT_ENFORCE_VINTF_MANIFEST := true 780 781# TODO(b/114488870): disallow PRODUCT_FULL_TREBLE_OVERRIDE from being used. 782.KATI_READONLY := \ 783 PRODUCT_FULL_TREBLE \ 784 PRODUCT_TREBLE_LINKER_NAMESPACES \ 785 PRODUCT_ENFORCE_VINTF_MANIFEST \ 786 787# TODO(b/114488870): remove all sets of these everwhere, and disallow them to be used 788$(KATI_obsolete_var PRODUCT_TREBLE_LINKER_NAMESPACES_OVERRIDE,Deprecated.) 789$(KATI_obsolete_var PRODUCT_ENFORCE_VINTF_MANIFEST_OVERRIDE,Deprecated.) 790$(KATI_obsolete_var PRODUCT_FULL_TREBLE_OVERRIDE,Deprecated.) 791 792# BOARD_PROPERTY_OVERRIDES_SPLIT_ENABLED can be true only if early-mount of 793# partitions is supported. But the early-mount must be supported for full 794# treble products, and so BOARD_PROPERTY_OVERRIDES_SPLIT_ENABLED should be set 795# by default for full treble products. 796ifeq ($(PRODUCT_FULL_TREBLE),true) 797 BOARD_PROPERTY_OVERRIDES_SPLIT_ENABLED ?= true 798endif 799 800ifneq ($(call math_gt_or_eq,$(PRODUCT_SHIPPING_API_LEVEL),36),) 801 ifneq ($(NEED_AIDL_NDK_PLATFORM_BACKEND),) 802 $(error Must not set NEED_AIDL_NDK_PLATFORM_BACKEND, but it is set to: $(NEED_AIDL_NDK_PLATFORM_BACKEND). Support will be removed.) 803 endif 804endif 805 806ifdef PRODUCT_CHECK_PREBUILT_MAX_PAGE_SIZE 807 TARGET_CHECK_PREBUILT_MAX_PAGE_SIZE := $(PRODUCT_CHECK_PREBUILT_MAX_PAGE_SIZE) 808else ifeq (true,$(TARGET_BUILD_UNBUNDLED)) 809 # unbundled builds may not have updated build sources 810 TARGET_CHECK_PREBUILT_MAX_PAGE_SIZE := false 811else ifneq ($(call math_gt_or_eq,$(PRODUCT_SHIPPING_API_LEVEL),36),) 812 TARGET_CHECK_PREBUILT_MAX_PAGE_SIZE := true 813else 814 TARGET_CHECK_PREBUILT_MAX_PAGE_SIZE := false 815endif 816.KATI_READONLY := TARGET_CHECK_PREBUILT_MAX_PAGE_SIZE 817 818# Set BOARD_SYSTEMSDK_VERSIONS to the latest SystemSDK version starting from P-launching 819# devices if unset. 820ifndef BOARD_SYSTEMSDK_VERSIONS 821 ifeq (REL,$(PLATFORM_VERSION_CODENAME)) 822 BOARD_SYSTEMSDK_VERSIONS := $(PLATFORM_SDK_VERSION) 823 else 824 BOARD_SYSTEMSDK_VERSIONS := $(PLATFORM_VERSION_CODENAME) 825 endif 826endif 827 828ifndef BOARD_CURRENT_API_LEVEL_FOR_VENDOR_MODULES 829 BOARD_CURRENT_API_LEVEL_FOR_VENDOR_MODULES := current 830else 831 ifdef PRODUCT_SHIPPING_API_LEVEL 832 ifneq ($(call math_lt,$(BOARD_CURRENT_API_LEVEL_FOR_VENDOR_MODULES),$(PRODUCT_SHIPPING_API_LEVEL)),) 833 $(error BOARD_CURRENT_API_LEVEL_FOR_VENDOR_MODULES ($(BOARD_CURRENT_API_LEVEL_FOR_VENDOR_MODULES)) must be greater than or equal to PRODUCT_SHIPPING_API_LEVEL ($(PRODUCT_SHIPPING_API_LEVEL))) 834 endif 835 endif 836endif 837.KATI_READONLY := BOARD_CURRENT_API_LEVEL_FOR_VENDOR_MODULES 838 839ifdef PRODUCT_SHIPPING_API_LEVEL 840 ifneq ($(call math_gt_or_eq,$(PRODUCT_SHIPPING_API_LEVEL),29),) 841 ifneq ($(BOARD_OTA_FRAMEWORK_VBMETA_VERSION_OVERRIDE),) 842 $(error When PRODUCT_SHIPPING_API_LEVEL >= 29, BOARD_OTA_FRAMEWORK_VBMETA_VERSION_OVERRIDE cannot be set) 843 endif 844 endif 845endif 846 847# The default key if not set as LOCAL_CERTIFICATE 848ifdef PRODUCT_DEFAULT_DEV_CERTIFICATE 849 DEFAULT_SYSTEM_DEV_CERTIFICATE := $(PRODUCT_DEFAULT_DEV_CERTIFICATE) 850else 851 DEFAULT_SYSTEM_DEV_CERTIFICATE := build/make/target/product/security/testkey 852endif 853.KATI_READONLY := DEFAULT_SYSTEM_DEV_CERTIFICATE 854 855# Certificate for the NetworkStack sepolicy context 856ifdef PRODUCT_MAINLINE_SEPOLICY_DEV_CERTIFICATES 857 MAINLINE_SEPOLICY_DEV_CERTIFICATES := $(PRODUCT_MAINLINE_SEPOLICY_DEV_CERTIFICATES) 858else 859 MAINLINE_SEPOLICY_DEV_CERTIFICATES := $(dir $(DEFAULT_SYSTEM_DEV_CERTIFICATE)) 860endif 861.KATI_READONLY := MAINLINE_SEPOLICY_DEV_CERTIFICATES 862 863BUILD_NUMBER_FROM_FILE := $$(cat $(SOONG_OUT_DIR)/build_number.txt) 864BUILD_HOSTNAME_FROM_FILE := $$(cat $(SOONG_OUT_DIR)/build_hostname.txt) 865BUILD_DATETIME_FROM_FILE := $$(cat $(BUILD_DATETIME_FILE)) 866 867# SEPolicy versions 868 869# PLATFORM_SEPOLICY_VERSION is a number of the form "YYYYMM" with "YYYYMM" 870# mapping to vFRC version. 871PLATFORM_SEPOLICY_VERSION := $(BOARD_API_LEVEL) 872BOARD_SEPOLICY_VERS := $(PLATFORM_SEPOLICY_VERSION) 873.KATI_READONLY := PLATFORM_SEPOLICY_VERSION BOARD_SEPOLICY_VERS 874 875# A list of SEPolicy versions, besides PLATFORM_SEPOLICY_VERSION, that the framework supports. 876PLATFORM_SEPOLICY_COMPAT_VERSIONS := \ 877 29.0 \ 878 30.0 \ 879 31.0 \ 880 32.0 \ 881 33.0 \ 882 34.0 \ 883 884PLATFORM_SEPOLICY_COMPAT_VERSIONS += $(foreach ver,\ 885 202404 \ 886 202504 \ 887 ,$(if $(filter true,$(call math_gt,$(PLATFORM_SEPOLICY_VERSION),$(ver))),$(ver))) 888 889.KATI_READONLY := \ 890 PLATFORM_SEPOLICY_COMPAT_VERSIONS \ 891 PLATFORM_SEPOLICY_VERSION \ 892 893BOARD_GENFS_LABELS_VERSION ?= $(BOARD_API_LEVEL) 894ifeq ($(call math_gt,$(BOARD_API_LEVEL),$(BOARD_GENFS_LABELS_VERSION)),true) 895 $(error BOARD_GENFS_LABELS_VERSION ($(BOARD_GENFS_LABELS_VERSION)) must be greater than or equal to BOARD_API_LEVEL ($(BOARD_API_LEVEL))) 896endif 897 898ifeq ($(PRODUCT_RETROFIT_DYNAMIC_PARTITIONS),true) 899 ifneq ($(PRODUCT_USE_DYNAMIC_PARTITIONS),true) 900 $(error PRODUCT_USE_DYNAMIC_PARTITIONS must be true when PRODUCT_RETROFIT_DYNAMIC_PARTITIONS \ 901 is set) 902 endif 903 ifdef PRODUCT_SHIPPING_API_LEVEL 904 ifeq (true,$(call math_gt_or_eq,$(PRODUCT_SHIPPING_API_LEVEL),29)) 905 $(error Devices with shipping API level $(PRODUCT_SHIPPING_API_LEVEL) must not set \ 906 PRODUCT_RETROFIT_DYNAMIC_PARTITIONS) 907 endif 908 endif 909endif 910 911ifeq ($(PRODUCT_USE_DYNAMIC_PARTITIONS),true) 912 ifneq ($(PRODUCT_USE_DYNAMIC_PARTITION_SIZE),true) 913 $(error PRODUCT_USE_DYNAMIC_PARTITION_SIZE must be true for devices with dynamic partitions) 914 endif 915endif 916 917ifeq ($(PRODUCT_BUILD_SUPER_PARTITION),true) 918 ifneq ($(PRODUCT_USE_DYNAMIC_PARTITIONS),true) 919 $(error Can only build super partition for devices with dynamic partitions) 920 endif 921endif 922 923 924ifeq ($(PRODUCT_USE_DYNAMIC_PARTITION_SIZE),true) 925 926ifneq ($(BOARD_SYSTEMIMAGE_PARTITION_SIZE),) 927ifneq ($(BOARD_SYSTEMIMAGE_PARTITION_RESERVED_SIZE),) 928$(error Should not define BOARD_SYSTEMIMAGE_PARTITION_SIZE and \ 929 BOARD_SYSTEMIMAGE_PARTITION_RESERVED_SIZE together) 930endif 931endif 932 933ifneq ($(BOARD_VENDORIMAGE_PARTITION_SIZE),) 934ifneq ($(BOARD_VENDORIMAGE_PARTITION_RESERVED_SIZE),) 935$(error Should not define BOARD_VENDORIMAGE_PARTITION_SIZE and \ 936 BOARD_VENDORIMAGE_PARTITION_RESERVED_SIZE together) 937endif 938endif 939 940ifneq ($(BOARD_ODMIMAGE_PARTITION_SIZE),) 941ifneq ($(BOARD_ODMIMAGE_PARTITION_RESERVED_SIZE),) 942$(error Should not define BOARD_ODMIMAGE_PARTITION_SIZE and \ 943 BOARD_ODMIMAGE_PARTITION_RESERVED_SIZE together) 944endif 945endif 946 947ifneq ($(BOARD_VENDOR_DLKMIMAGE_PARTITION_SIZE),) 948ifneq ($(BOARD_VENDOR_DLKMIMAGE_PARTITION_RESERVED_SIZE),) 949$(error Should not define BOARD_VENDOR_DLKMIMAGE_PARTITION_SIZE and \ 950 BOARD_VENDOR_DLKMIMAGE_PARTITION_RESERVED_SIZE together) 951endif 952endif 953 954ifneq ($(BOARD_ODM_DLKMIMAGE_PARTITION_SIZE),) 955ifneq ($(BOARD_ODM_DLKMIMAGE_PARTITION_RESERVED_SIZE),) 956$(error Should not define BOARD_ODM_DLKMIMAGE_PARTITION_SIZE and \ 957 BOARD_ODM_DLKMIMAGE_PARTITION_RESERVED_SIZE together) 958endif 959endif 960 961ifneq ($(BOARD_SYSTEM_DLKMIMAGE_PARTITION_SIZE),) 962ifneq ($(BOARD_SYSTEM_DLKMIMAGE_PARTITION_RESERVED_SIZE),) 963$(error Should not define BOARD_SYSTEM_DLKMIMAGE_PARTITION_SIZE and \ 964 BOARD_SYSTEM_DLKMIMAGE_PARTITION_RESERVED_SIZE together) 965endif 966endif 967 968ifneq ($(BOARD_PRODUCTIMAGE_PARTITION_SIZE),) 969ifneq ($(BOARD_PRODUCTIMAGE_PARTITION_RESERVED_SIZE),) 970$(error Should not define BOARD_PRODUCTIMAGE_PARTITION_SIZE and \ 971 BOARD_PRODUCTIMAGE_PARTITION_RESERVED_SIZE together) 972endif 973endif 974 975ifneq ($(BOARD_SYSTEM_EXTIMAGE_PARTITION_SIZE),) 976ifneq ($(BOARD_SYSTEM_EXTIMAGE_PARTITION_RESERVED_SIZE),) 977$(error Should not define BOARD_SYSTEM_EXTIMAGE_PARTITION_SIZE and \ 978 BOARD_SYSTEM_EXTIMAGE_PARTITION_RESERVED_SIZE together) 979endif 980endif 981 982endif # PRODUCT_USE_DYNAMIC_PARTITION_SIZE 983 984ifeq ($(PRODUCT_USE_DYNAMIC_PARTITIONS),true) 985 986# BOARD_SUPER_PARTITION_GROUPS defines a list of "updatable groups". Each updatable group is a 987# group of partitions that share the same pool of free spaces. 988# For each group in BOARD_SUPER_PARTITION_GROUPS, a BOARD_{GROUP}_SIZE and 989# BOARD_{GROUP}_PARTITION_PARTITION_LIST may be defined. 990# - BOARD_{GROUP}_SIZE: The maximum sum of sizes of all partitions in the group. 991# Must not be empty. 992# - BOARD_{GROUP}_PARTITION_PARTITION_LIST: the list of partitions that belongs to this group. 993# If empty, no partitions belong to this group, and the sum of sizes is effectively 0. 994$(foreach group,$(call to-upper,$(BOARD_SUPER_PARTITION_GROUPS)), \ 995 $(eval BOARD_$(group)_SIZE := $(strip $(BOARD_$(group)_SIZE))) \ 996 $(if $(BOARD_$(group)_SIZE),,$(error BOARD_$(group)_SIZE must not be empty)) \ 997 $(eval .KATI_READONLY := BOARD_$(group)_SIZE) \ 998 $(eval BOARD_$(group)_PARTITION_LIST ?=) \ 999 $(eval .KATI_READONLY := BOARD_$(group)_PARTITION_LIST) \ 1000) 1001 1002# Define BOARD_SUPER_PARTITION_PARTITION_LIST, the sum of all BOARD_*_PARTITION_LIST 1003ifdef BOARD_SUPER_PARTITION_PARTITION_LIST 1004$(error BOARD_SUPER_PARTITION_PARTITION_LIST should not be defined, but computed from \ 1005 BOARD_SUPER_PARTITION_GROUPS and BOARD_*_PARTITION_LIST) 1006endif 1007BOARD_SUPER_PARTITION_PARTITION_LIST := \ 1008 $(foreach group,$(call to-upper,$(BOARD_SUPER_PARTITION_GROUPS)),$(BOARD_$(group)_PARTITION_LIST)) 1009.KATI_READONLY := BOARD_SUPER_PARTITION_PARTITION_LIST 1010 1011ifneq ($(BOARD_SUPER_PARTITION_SIZE),) 1012ifeq ($(PRODUCT_RETROFIT_DYNAMIC_PARTITIONS),true) 1013 1014# The metadata device must be specified manually for retrofitting. 1015ifeq ($(BOARD_SUPER_PARTITION_METADATA_DEVICE),) 1016$(error Must specify BOARD_SUPER_PARTITION_METADATA_DEVICE if PRODUCT_RETROFIT_DYNAMIC_PARTITIONS=true.) 1017endif 1018 1019# The super partition block device list must be specified manually for retrofitting. 1020ifeq ($(BOARD_SUPER_PARTITION_BLOCK_DEVICES),) 1021$(error Must specify BOARD_SUPER_PARTITION_BLOCK_DEVICES if PRODUCT_RETROFIT_DYNAMIC_PARTITIONS=true.) 1022endif 1023 1024# The metadata device must be included in the super partition block device list. 1025ifeq (,$(filter $(BOARD_SUPER_PARTITION_METADATA_DEVICE),$(BOARD_SUPER_PARTITION_BLOCK_DEVICES))) 1026$(error BOARD_SUPER_PARTITION_METADATA_DEVICE is not listed in BOARD_SUPER_PARTITION_BLOCK_DEVICES.) 1027endif 1028 1029# The metadata device must be supplied to init via the kernel command-line. 1030INTERNAL_KERNEL_CMDLINE += androidboot.super_partition=$(BOARD_SUPER_PARTITION_METADATA_DEVICE) 1031 1032BOARD_BUILD_RETROFIT_DYNAMIC_PARTITIONS_OTA_PACKAGE := true 1033 1034# If "vendor" is listed as one of the dynamic partitions but without its image available (e.g. an 1035# AOSP target built without vendor image), don't build the retrofit full OTA package. Because we 1036# won't be able to build meaningful super_* images for retrofitting purpose. 1037ifneq (,$(filter vendor,$(BOARD_SUPER_PARTITION_PARTITION_LIST))) 1038ifndef BUILDING_VENDOR_IMAGE 1039ifndef BOARD_PREBUILT_VENDORIMAGE 1040BOARD_BUILD_RETROFIT_DYNAMIC_PARTITIONS_OTA_PACKAGE := 1041endif # BOARD_PREBUILT_VENDORIMAGE 1042endif # BUILDING_VENDOR_IMAGE 1043endif # BOARD_SUPER_PARTITION_PARTITION_LIST 1044 1045else # PRODUCT_RETROFIT_DYNAMIC_PARTITIONS 1046 1047# For normal devices, we populate BOARD_SUPER_PARTITION_BLOCK_DEVICES so the 1048# build can handle both cases consistently. 1049ifeq ($(BOARD_SUPER_PARTITION_METADATA_DEVICE),) 1050BOARD_SUPER_PARTITION_METADATA_DEVICE := super 1051endif 1052 1053ifeq ($(BOARD_SUPER_PARTITION_BLOCK_DEVICES),) 1054BOARD_SUPER_PARTITION_BLOCK_DEVICES := $(BOARD_SUPER_PARTITION_METADATA_DEVICE) 1055endif 1056 1057# If only one super block device, default to super partition size. 1058ifeq ($(word 2,$(BOARD_SUPER_PARTITION_BLOCK_DEVICES)),) 1059BOARD_SUPER_PARTITION_$(call to-upper,$(strip $(BOARD_SUPER_PARTITION_BLOCK_DEVICES)))_DEVICE_SIZE ?= \ 1060 $(BOARD_SUPER_PARTITION_SIZE) 1061endif 1062 1063ifneq ($(BOARD_SUPER_PARTITION_METADATA_DEVICE),super) 1064INTERNAL_KERNEL_CMDLINE += androidboot.super_partition=$(BOARD_SUPER_PARTITION_METADATA_DEVICE) 1065endif 1066BOARD_BUILD_RETROFIT_DYNAMIC_PARTITIONS_OTA_PACKAGE := 1067 1068endif # PRODUCT_RETROFIT_DYNAMIC_PARTITIONS 1069endif # BOARD_SUPER_PARTITION_SIZE 1070BOARD_SUPER_PARTITION_BLOCK_DEVICES ?= 1071.KATI_READONLY := BOARD_SUPER_PARTITION_BLOCK_DEVICES 1072BOARD_SUPER_PARTITION_METADATA_DEVICE ?= 1073.KATI_READONLY := BOARD_SUPER_PARTITION_METADATA_DEVICE 1074BOARD_BUILD_RETROFIT_DYNAMIC_PARTITIONS_OTA_PACKAGE ?= 1075.KATI_READONLY := BOARD_BUILD_RETROFIT_DYNAMIC_PARTITIONS_OTA_PACKAGE 1076 1077$(foreach device,$(call to-upper,$(BOARD_SUPER_PARTITION_BLOCK_DEVICES)), \ 1078 $(eval BOARD_SUPER_PARTITION_$(device)_DEVICE_SIZE := $(strip $(BOARD_SUPER_PARTITION_$(device)_DEVICE_SIZE))) \ 1079 $(if $(BOARD_SUPER_PARTITION_$(device)_DEVICE_SIZE),, \ 1080 $(error BOARD_SUPER_PARTITION_$(device)_DEVICE_SIZE must not be empty)) \ 1081 $(eval .KATI_READONLY := BOARD_SUPER_PARTITION_$(device)_DEVICE_SIZE)) 1082 1083endif # PRODUCT_USE_DYNAMIC_PARTITIONS 1084 1085# By default, we build the hidden API csv files from source. You can use 1086# prebuilt hiddenapi files by setting BOARD_PREBUILT_HIDDENAPI_DIR to the name 1087# of a directory containing both prebuilt hiddenapi-flags.csv and 1088# hiddenapi-index.csv. 1089BOARD_PREBUILT_HIDDENAPI_DIR ?= 1090.KATI_READONLY := BOARD_PREBUILT_HIDDENAPI_DIR 1091 1092# ############################################################### 1093# Set up final options. 1094# ############################################################### 1095 1096# We run gcc/clang with PWD=/proc/self/cwd to remove the $TOP 1097# from the debug output. That way two builds in two different 1098# directories will create the same output. 1099# /proc doesn't exist on Darwin. 1100ifeq ($(HOST_OS),linux) 1101RELATIVE_PWD := PWD=/proc/self/cwd 1102else 1103RELATIVE_PWD := 1104endif 1105 1106# Flags for DEX2OAT 1107first_non_empty_of_three = $(if $(1),$(1),$(if $(2),$(2),$(3))) 1108DEX2OAT_TARGET_ARCH := $(TARGET_ARCH) 1109DEX2OAT_TARGET_CPU_VARIANT := $(call first_non_empty_of_three,$(TARGET_CPU_VARIANT),$(TARGET_ARCH_VARIANT),default) 1110DEX2OAT_TARGET_CPU_VARIANT_RUNTIME := $(call first_non_empty_of_three,$(TARGET_CPU_VARIANT_RUNTIME),$(TARGET_ARCH_VARIANT),default) 1111DEX2OAT_TARGET_INSTRUCTION_SET_FEATURES := default 1112 1113ifdef TARGET_2ND_ARCH 1114$(TARGET_2ND_ARCH_VAR_PREFIX)DEX2OAT_TARGET_ARCH := $(TARGET_2ND_ARCH) 1115$(TARGET_2ND_ARCH_VAR_PREFIX)DEX2OAT_TARGET_CPU_VARIANT := $(call first_non_empty_of_three,$(TARGET_2ND_CPU_VARIANT),$(TARGET_2ND_ARCH_VARIANT),default) 1116$(TARGET_2ND_ARCH_VAR_PREFIX)DEX2OAT_TARGET_CPU_VARIANT_RUNTIME := $(call first_non_empty_of_three,$(TARGET_2ND_CPU_VARIANT_RUNTIME),$(TARGET_2ND_ARCH_VARIANT),default) 1117$(TARGET_2ND_ARCH_VAR_PREFIX)DEX2OAT_TARGET_INSTRUCTION_SET_FEATURES := default 1118endif 1119 1120# ############################################################### 1121# Collect a list of the SDK versions that we could compile against 1122# For use with the LOCAL_SDK_VERSION variable for include $(BUILD_PACKAGE) 1123# ############################################################### 1124 1125HISTORICAL_SDK_VERSIONS_ROOT := $(TOPDIR)prebuilts/sdk 1126HISTORICAL_NDK_VERSIONS_ROOT := $(TOPDIR)prebuilts/ndk 1127 1128# The path where app can reference the support library resources. 1129ifdef TARGET_BUILD_USE_PREBUILT_SDKS 1130SUPPORT_LIBRARY_ROOT := $(HISTORICAL_SDK_VERSIONS_ROOT)/current/support 1131else 1132SUPPORT_LIBRARY_ROOT := frameworks/support 1133endif 1134 1135get-sdk-version = $(if $(findstring _,$(1)),$(subst core_,,$(subst system_,,$(subst test_,,$(1)))),$(1)) 1136get-sdk-api = $(if $(findstring _,$(1)),$(patsubst %_$(call get-sdk-version,$(1)),%,$(1)),public) 1137get-prebuilt-sdk-dir = $(HISTORICAL_SDK_VERSIONS_ROOT)/$(call get-sdk-version,$(1))/$(call get-sdk-api,$(1)) 1138 1139# Resolve LOCAL_SDK_VERSION to prebuilt module name, e.g.: 1140# 23 -> sdk_public_23_android 1141# system_current -> sdk_system_current_android 1142# $(1): An sdk version (LOCAL_SDK_VERSION) 1143# $(2): optional library name (default: android) 1144define resolve-prebuilt-sdk-module 1145$(if $(findstring _,$(1)),\ 1146 sdk_$(1)_$(or $(2),android),\ 1147 sdk_public_$(1)_$(or $(2),android)) 1148endef 1149 1150# Resolve LOCAL_SDK_VERSION to prebuilt android.jar 1151# $(1): LOCAL_SDK_VERSION 1152resolve-prebuilt-sdk-jar-path = $(call get-prebuilt-sdk-dir,$(1))/android.jar 1153 1154# Resolve LOCAL_SDK_VERSION to prebuilt framework.aidl 1155# $(1): An sdk version (LOCAL_SDK_VERSION) 1156resolve-prebuilt-sdk-aidl-path = $(call get-prebuilt-sdk-dir,$(call get-sdk-version,$(1)))/framework.aidl 1157 1158# Historical SDK version N is stored in $(HISTORICAL_SDK_VERSIONS_ROOT)/N. 1159# The 'current' version is whatever this source tree is. 1160# 1161# sgrax is the opposite of xargs. It takes the list of args and puts them 1162# on each line for sort to process. 1163# sort -g is a numeric sort, so 1 2 3 10 instead of 1 10 2 3. 1164 1165# Numerically sort a list of numbers 1166# $(1): the list of numbers to be sorted 1167define numerically_sort 1168$(shell function sgrax() { \ 1169 while [ -n "$$1" ] ; do echo $$1 ; shift ; done \ 1170 } ; \ 1171 ( sgrax $(1) | sort -g ) ) 1172endef 1173 1174# This produces a list like "current/core current/public current/system 4/public" 1175TARGET_AVAILABLE_SDK_VERSIONS := $(wildcard $(HISTORICAL_SDK_VERSIONS_ROOT)/*/*/android.jar) 1176TARGET_AVAILABLE_SDK_VERSIONS := $(patsubst $(HISTORICAL_SDK_VERSIONS_ROOT)/%/android.jar,%,$(TARGET_AVAILABLE_SDK_VERSIONS)) 1177# Strips and reorganizes the "public", "core", "system" and "test" subdirs. 1178TARGET_AVAILABLE_SDK_VERSIONS := $(subst /public,,$(TARGET_AVAILABLE_SDK_VERSIONS)) 1179TARGET_AVAILABLE_SDK_VERSIONS := $(patsubst %/core,core_%,$(TARGET_AVAILABLE_SDK_VERSIONS)) 1180TARGET_AVAILABLE_SDK_VERSIONS := $(patsubst %/system,system_%,$(TARGET_AVAILABLE_SDK_VERSIONS)) 1181TARGET_AVAILABLE_SDK_VERSIONS := $(patsubst %/test,test_%,$(TARGET_AVAILABLE_SDK_VERSIONS)) 1182# module-lib and system-server are not supported in Make. 1183TARGET_AVAILABLE_SDK_VERSIONS := $(filter-out %/module-lib %/system-server,$(TARGET_AVAILABLE_SDK_VERSIONS)) 1184TARGET_AVAIALBLE_SDK_VERSIONS := $(call numerically_sort,$(TARGET_AVAILABLE_SDK_VERSIONS)) 1185 1186TARGET_SDK_VERSIONS_WITHOUT_JAVA_1_9_SUPPORT := $(call numbers_less_than,30,$(TARGET_AVAILABLE_SDK_VERSIONS)) 1187TARGET_SDK_VERSIONS_WITHOUT_JAVA_11_SUPPORT := $(call numbers_less_than,32,$(TARGET_AVAILABLE_SDK_VERSIONS)) 1188TARGET_SDK_VERSIONS_WITHOUT_JAVA_17_SUPPORT := $(call numbers_less_than,34,$(TARGET_AVAILABLE_SDK_VERSIONS)) 1189 1190JAVA_LANGUAGE_VERSIONS_WITHOUT_SYSTEM_MODULES := 1.7 1.8 1191 1192# This is the standard way to name a directory containing prebuilt target 1193# objects. E.g., prebuilt/$(TARGET_PREBUILT_TAG)/libc.so 1194TARGET_PREBUILT_TAG := android-$(TARGET_ARCH) 1195ifdef TARGET_2ND_ARCH 1196TARGET_2ND_PREBUILT_TAG := android-$(TARGET_2ND_ARCH) 1197endif 1198 1199# Set up RS prebuilt variables for compatibility library 1200 1201RS_PREBUILT_CLCORE := prebuilts/sdk/renderscript/lib/$(TARGET_ARCH)/librsrt_$(TARGET_ARCH).bc 1202RS_PREBUILT_COMPILER_RT := prebuilts/sdk/renderscript/lib/$(TARGET_ARCH)/libcompiler_rt.a 1203 1204# API Level lists for Renderscript Compat lib. 1205RSCOMPAT_32BIT_ONLY_API_LEVELS := 8 9 10 11 12 13 14 15 16 17 18 19 20 1206RSCOMPAT_NO_USAGEIO_API_LEVELS := 8 9 10 11 12 13 1207 1208APPS_DEFAULT_VERSION_NAME := $(PLATFORM_VERSION) 1209 1210# Add BUILD_NUMBER to apps if PRODUCT_BUILD_APPS_WITH_BUILD_NUMBER is defined. 1211ifeq ($(PRODUCT_BUILD_APPS_WITH_BUILD_NUMBER),true) 1212 APPS_DEFAULT_VERSION_NAME := $(PLATFORM_VERSION)-$(BUILD_NUMBER_FROM_FILE) 1213endif 1214 1215# ANDROID_WARNING_ALLOWED_PROJECTS is generated by build/soong. 1216define find_warning_allowed_projects 1217 $(filter $(ANDROID_WARNING_ALLOWED_PROJECTS),$(1)/) 1218endef 1219 1220GOMA_POOL := 1221RBE_POOL := 1222GOMA_OR_RBE_POOL := 1223# When goma or RBE are enabled, kati will be passed --default_pool=local_pool to put 1224# most rules into the local pool. Explicitly set the pool to "none" for rules that 1225# should be run outside the local pool, i.e. with -j500. 1226ifneq (,$(filter-out false,$(USE_GOMA))) 1227 GOMA_POOL := none 1228 GOMA_OR_RBE_POOL := none 1229else ifneq (,$(filter-out false,$(USE_RBE))) 1230 RBE_POOL := none 1231 GOMA_OR_RBE_POOL := none 1232endif 1233.KATI_READONLY := GOMA_POOL RBE_POOL GOMA_OR_RBE_POOL 1234 1235JAVAC_NINJA_POOL := 1236R8_NINJA_POOL := 1237D8_NINJA_POOL := 1238 1239ifneq ($(filter-out false,$(USE_RBE)),) 1240 ifdef RBE_JAVAC 1241 JAVAC_NINJA_POOL := $(RBE_POOL) 1242 endif 1243 ifdef RBE_R8 1244 R8_NINJA_POOL := $(RBE_POOL) 1245 endif 1246 ifdef RBE_D8 1247 D8_NINJA_POOL := $(RBE_POOL) 1248 endif 1249endif 1250 1251.KATI_READONLY := JAVAC_NINJA_POOL R8_NINJA_POOL D8_NINJA_POOL 1252 1253# Soong modules that are known to have broken optional_uses_libs dependencies. 1254BUILD_WARNING_BAD_OPTIONAL_USES_LIBS_ALLOWLIST := LegacyCamera Gallery2 1255 1256# These goals don't need to collect and include Android.mks/CleanSpec.mks 1257# in the source tree. 1258dont_bother_goals := out product-graph 1259 1260ifeq ($(TARGET_SYSTEM_PROP),) 1261TARGET_SYSTEM_PROP := $(wildcard $(TARGET_DEVICE_DIR)/system.prop) 1262endif 1263 1264ifeq ($(TARGET_SYSTEM_EXT_PROP),) 1265TARGET_SYSTEM_EXT_PROP := $(wildcard $(TARGET_DEVICE_DIR)/system_ext.prop) 1266endif 1267 1268ifeq ($(TARGET_PRODUCT_PROP),) 1269TARGET_PRODUCT_PROP := $(wildcard $(TARGET_DEVICE_DIR)/product.prop) 1270endif 1271 1272ifeq ($(TARGET_ODM_PROP),) 1273TARGET_ODM_PROP := $(wildcard $(TARGET_DEVICE_DIR)/odm.prop) 1274endif 1275 1276.KATI_READONLY := \ 1277 TARGET_SYSTEM_PROP \ 1278 TARGET_SYSTEM_EXT_PROP \ 1279 TARGET_PRODUCT_PROP \ 1280 TARGET_ODM_PROP \ 1281 1282include $(BUILD_SYSTEM)/sysprop_config.mk 1283 1284# Make ANDROID Soong config variables visible to Android.mk files, for 1285# consistency with those defined in BoardConfig.mk files. 1286include $(BUILD_SYSTEM)/android_soong_config_vars.mk 1287 1288# EMMA_INSTRUMENT is set to true when coverage is enabled. Creates a suffix to 1289# differeciate the coverage version of ninja files. This will save 5 minutes of 1290# build time used to regenerate ninja. 1291ifeq (true,$(EMMA_INSTRUMENT)) 1292COVERAGE_SUFFIX := .coverage 1293endif 1294 1295SOONG_VARIABLES := $(SOONG_OUT_DIR)/soong.$(TARGET_PRODUCT)$(COVERAGE_SUFFIX).variables 1296SOONG_EXTRA_VARIABLES := $(SOONG_OUT_DIR)/soong.$(TARGET_PRODUCT)$(COVERAGE_SUFFIX).extra.variables 1297 1298ifeq ($(CALLED_FROM_SETUP),true) 1299include $(BUILD_SYSTEM)/ninja_config.mk 1300include $(BUILD_SYSTEM)/soong_config.mk 1301endif 1302 1303SOONG_VARIABLES := 1304SOONG_EXTRA_VARIABLES := 1305 1306include $(BUILD_SYSTEM)/dumpvar.mk 1307 1308ifdef BOARD_VNDK_VERSION 1309BOARD_VNDK_VERSION= 1310endif 1311ifdef PLATFORM_VNDK_VERSION 1312PLATFORM_VNDK_VERSION= 1313endif 1314 1315ifeq (true,$(FULL_SYSTEM_OPTIMIZE_JAVA)) 1316ifeq (false,$(SYSTEM_OPTIMIZE_JAVA)) 1317$(error SYSTEM_OPTIMIZE_JAVA must be enabled when FULL_SYSTEM_OPTIMIZE_JAVA is enabled) 1318endif 1319endif 1320 1321# ----------------------------------------------------------------- 1322# Define fingerprint, thumbprint, and version tags for the current build 1323# 1324# BUILD_VERSION_TAGS is a comma-separated list of tags chosen by the device 1325# implementer that further distinguishes the build. It's basically defined 1326# by the device implementer. Here, we are adding a mandatory tag that 1327# identifies the signing config of the build. 1328BUILD_VERSION_TAGS := $(BUILD_VERSION_TAGS) 1329ifeq ($(TARGET_BUILD_TYPE),debug) 1330 BUILD_VERSION_TAGS += debug 1331endif 1332# The "test-keys" tag marks builds signed with the old test keys, 1333# which are available in the SDK. "dev-keys" marks builds signed with 1334# non-default dev keys (usually private keys from a vendor directory). 1335# Both of these tags will be removed and replaced with "release-keys" 1336# when the target-files is signed in a post-build step. 1337ifeq ($(DEFAULT_SYSTEM_DEV_CERTIFICATE),build/make/target/product/security/testkey) 1338BUILD_KEYS := test-keys 1339else 1340BUILD_KEYS := dev-keys 1341endif 1342BUILD_VERSION_TAGS += $(BUILD_KEYS) 1343BUILD_VERSION_TAGS := $(subst $(space),$(comma),$(sort $(BUILD_VERSION_TAGS))) 1344 1345# BUILD_FINGERPRINT is used used to uniquely identify the combined build and 1346# product; used by the OTA server. 1347ifeq (,$(strip $(BUILD_FINGERPRINT))) 1348 BUILD_FINGERPRINT := $(PRODUCT_BRAND)/$(TARGET_PRODUCT)/$(TARGET_DEVICE):$(PLATFORM_VERSION)/$(BUILD_ID)/$(BUILD_NUMBER_FROM_FILE):$(TARGET_BUILD_VARIANT)/$(BUILD_VERSION_TAGS) 1349endif 1350 1351BUILD_FINGERPRINT_FILE := $(PRODUCT_OUT)/build_fingerprint.txt 1352ifneq (,$(shell mkdir -p $(PRODUCT_OUT) && echo $(BUILD_FINGERPRINT) >$(BUILD_FINGERPRINT_FILE).tmp && (if ! cmp -s $(BUILD_FINGERPRINT_FILE).tmp $(BUILD_FINGERPRINT_FILE); then mv $(BUILD_FINGERPRINT_FILE).tmp $(BUILD_FINGERPRINT_FILE); else rm $(BUILD_FINGERPRINT_FILE).tmp; fi) && grep " " $(BUILD_FINGERPRINT_FILE))) 1353 $(error BUILD_FINGERPRINT cannot contain spaces: "$(file <$(BUILD_FINGERPRINT_FILE))") 1354endif 1355BUILD_FINGERPRINT_FROM_FILE := $$(cat $(BUILD_FINGERPRINT_FILE)) 1356# unset it for safety. 1357BUILD_FINGERPRINT := 1358 1359# BUILD_THUMBPRINT is used to uniquely identify the system build; used by the 1360# OTA server. This purposefully excludes any product-specific variables. 1361ifeq (,$(strip $(BUILD_THUMBPRINT))) 1362 BUILD_THUMBPRINT := $(PLATFORM_VERSION)/$(BUILD_ID)/$(BUILD_NUMBER_FROM_FILE):$(TARGET_BUILD_VARIANT)/$(BUILD_VERSION_TAGS) 1363endif 1364 1365BUILD_THUMBPRINT_FILE := $(PRODUCT_OUT)/build_thumbprint.txt 1366ifeq ($(strip $(HAS_BUILD_NUMBER)),true) 1367$(BUILD_THUMBPRINT_FILE): $(BUILD_NUMBER_FILE) 1368endif 1369ifneq (,$(shell mkdir -p $(PRODUCT_OUT) && echo $(BUILD_THUMBPRINT) >$(BUILD_THUMBPRINT_FILE) && grep " " $(BUILD_THUMBPRINT_FILE))) 1370 $(error BUILD_THUMBPRINT cannot contain spaces: "$(file <$(BUILD_THUMBPRINT_FILE))") 1371endif 1372# unset it for safety. 1373BUILD_THUMBPRINT_FILE := 1374BUILD_THUMBPRINT := 1375